尚硅谷

谷粒学苑

教程:12

技术路线

1、java基础,mysql基础,jdbc

2、前端:html,css,js

web服务端:tomcat、xml配置文件、http协议

后台三大组件:servlet,filter过滤器,listener监听器

会话控制:cookies,session

ajax&jason

文件上传下载

thymeleaf

ES6语法,vue.js

3、经典框架:项目管理工具maven,spring,springmvc,mybatis,ssm整合,linux

4、分布式项目:美年旅游,尚筹网,遇尚

5、高级和前沿技术:版本控制git,负载均衡nginx,消息队列raabbitmq,虚拟化容器docker,内存级别数据库redis,springboot2.4,springcloud,mybatisplus,分布式事务

6、全栈项目:尚荣宝,尚课吧,尚医通

7、 就业加薪课:mysql高级,mycat,jvm,juc高并发双十一 ,zookepper,dubbo

8、微服务架构项目

9、底层os,计网组原,数据结构,算法

10、设计模式,架构模式


项目

前端 -尚品汇

尚亭公寓-后端

谷粒商城-全栈


建议自学java的同学,如果是真正初学的即没有接触过程序或计算机相关知识的,学习的时候不要太钻牛角尖,我看视频的时候经常会看到有弹幕在问什么我这里eclipse跟老师的不一样啊,为什么这里要这样写不能那样写啊,有些问题自己敲一遍代码看看效果就行,毕竟使用场景一时半会说也说不明白,所以宋老师有时会给出比喻,当然这些比喻都很恰当,听个乐就行。 然后就是建议学习顺序就是javase、mysql、jdbc、javaweb、mybatis、springmvc、spring,这几样基本上就是学习java的骨架了,你非要觉得hibernate好,struts好,多学几门也没问题,反正我这是第三次从头看了,也不打算看这两样了,以上说的尚硅谷都有教程,其余的学习路线图官方评论下有介绍,不过我是先系统在韩顺平老师那学习linux,学习linux对以后部署项目有好处,学习些基础命令,会查看日志,会给mysql调优(这涉及mysql高级教程,尚硅谷也有)就行,然后就是git、maven这些小知识点,花个一两天就能搞定,然后就是spring其他的框架了,springboot、cloud这些,再抽空看看redis、nginx,dubbo,这样后端方面横向纵向都有所涉及了,想必自己心里也有个谱了,这也是大部分招聘的需求了,如果想提升下自己,再看个vue,自己从前往后写个小项目,再部署到真正的网上,想必自己也是很有成就感的。


Java SE(Java Standard Edition)标准版

  • 支持面向桌面级应用(如Windows下的应用程序)的Java平台,即定位个人计算机的应用开发。
  • 包括用户界面接口AWT及Swing,网络功能与国际化、图像处理能力以及输入输出支持等。

Java EE(Java Enterprise Edition)企业版

  • 为开发企业环境下的应用程序提供的一套解决方案,即定位在服务器端的Web应用开发
  • JavaEE是JavaSE的扩展,增加了用于服务器开发的类库。如:Servlet能够延伸服务器的功能,通过请求-响应的模式来处理客户端的请求;JSP是一种可以将Java程序代码内嵌在网页内的技术。

java长期版本:8.0、11.0、17.0–8-17

Java开发环境搭建

  • JDK (Java Development Kit):是Java程序开发工具包,包含JRE 和开发人员使用的工具。

  • **JRE ** (Java Runtime Environment) :是Java程序的运行时环境,包含JVM 和运行时所需要的核心类库

  • JDK = JRE + 开发工具集(例如Javac编译工具等)

    JRE = JVM + Java SE标准类库

安装jdk17并自动配置了环境变量

编译运行

HelloWorld.java文件,使用javac 命令进行编译,将编写好的Java源文件 编译成JVM可以看懂的字节码文件 ,也就是类名.class文件。是Java的可运行文件,称为字节码文件,有了字节码文件,就可以运行程序了。

1
2
3
4
5
public class HelloChina {
  	public static void main(String[] args) {
    	System.out.println("HelloWorld!!");
  	}
}
1
2
3
javac HelloWorld.java

java HelloChina

输出

1
2
3
System.out.println(输出内容); // 输出内容,完毕后进行换行

System.out.print(输出内容); // 不换行
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
/*
注:Java语言是一门严格区分大小写的语言,但windows不区分文件名大小写

编译后会出现一个或多个字节码文件,每一个字节码文件对应一个java类,文件名与类名相同

源文件和类名
如果这个类不是public,那么源文件名可以和类名不一致。但是不便于代码维护。

如果这个类是public,那么要求源文件名必须与类名一致。否则编译报错。

我们建议大家,不管是否是public,都与源文件名保持一致,而且一个源文件尽量只写一个类,目的是为了好维护。
一个源文件中可以有多个类,编译后会生成多个.class字节码文件。

但是一个源文件只能有一个public的类。
*/

注释

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
//单行注释

/*
多行注释
多行
*/

//文档注释java特有的
/**
  @author  指定java程序的作者
  @version  指定源文件的版本
*/ 

对于单行和多行注释,被注释的文字,不参与编译。不会出现在字节码文件中,进而不会被JVM(java虚拟机)解释执行。

文档注释内容可以被JDK提供的工具 javadoc 所解析,生成一套以网页文件形式体现的该程序的说明文档。

前提类声明为public

1
javadoc -d mydoc -author -version HelloWorld.java
  • API (Application Programming Interface,应用程序编程接口)是 Java 提供的基本编程接口。
  • Java语言提供了大量的基础类,因此 Oracle 也为这些基础类提供了相应的说明文档,用于告诉开发者如何使用这些类,以及这些类里包含的方法。大多数Java书籍中的类的介绍都要参照它来完成,它是编程者经常查阅的资料。
  • Java API文档,即为JDK使用说明书、帮助文档。
  • 下载API文档:
    • 在线看:https://docs.oracle.com/en/java/javase/17/docs/api/index.html
    • 离线下载:https://www.oracle.com/java/technologies/javase-jdk17-doc-downloads.html

Java核心机制:JVM

java优点

  • **跨平台性:**这是Java的核心优势。Java在最初设计时就很注重移植和跨平台性。

    原理:只要在需要运行 java 应用程序的操作系统上,先安装一个Java虚拟机 (JVM ,Java Virtual Machine) 即可。由JVM来负责Java程序在该系统中的运行。

  • **面向对象性:**面向对象是一种程序设计技术,非常适合大型软件的设计和开发。面向对象编程支持封装、继承、多态等特性,让程序更好达到高内聚低耦合的标准。

  • **健壮性:**吸收了C/C++语言的优点,但去掉了其影响程序健壮性的部分(如指针、内存的申请与释放等),提供了一个相对安全的内存管理和访问机制。

  • **安全性高:**Java适合于网络/分布式环境,需要提供一个安全机制以防恶意代码的攻击。如:安全防范机制(ClassLoader类加载器),可以分配不同的命名空间以防替代本地的同名类、字节代码检查。

  • **简单性:**Java就是C++语法的简化版,我们也可以将Java称之为“C++--”。比如:头文件,指针运算,结构,联合,操作符重载,虚基类等。

  • 高性能

JVM

Java Virtual Machine ,Java虚拟机):是一个虚拟的计算机,是Java程序的运行环境。JVM具有指令集并使用不同的存储区域,负责执行指令,管理数据、内存、寄存器。

实现Java程序的跨平台性。我们编写的Java代码,都运行在JVM 之上。正是因为有了JVM,才使得Java程序具备了跨平台性。

自动内存管理(内存分配、内存回收)

  • Java程序在运行过程中,涉及到运算的数据的分配存储等都由JVM来完成
  • Java消除了程序员回收无用内存空间的职责。提供了一种系统级线程跟踪存储空间的分配情况,在内存空间达到相应阈值时,检查并释放可被释放的存储器空间。
  • GC的自动回收,提高了内存空间的利用效率,也提高了编程人员的效率,很大程度上减少了因为没有释放空间而导致的内存泄漏

Java程序还会出现内存溢出和内存泄漏问题吗? Yes!

内存溢出:数据超出了内存容量范围

内存泄漏:垃圾回收器会自动回收不再使用的对象,JVm是使用可达性分析算法来判断对象是否不再使用的对象,本质都是判断一个对象是否还被引用。那么对于这种情况下,由于代码的实现不同就会出现很多种内存泄漏问题(让JVM误以为此对象还在引用中,无法回收,造成内存泄漏)例子

\n(换行),\t(制表符)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
第1阶段:Java基本语法
> Java概述、关键字、标识符、变量、运算符、流程控制(条件判断、选择结构、循环结构)、IDEA、数组

第2阶段:Java面向对象编程
> 类及类的内部成员
> 面向对象的三大特征
> 其它关键字的使用

第3阶段:Java语言的高级应用
> 异常处理、多线程、IO流、集合框架、反射、网络编程、新特性、其它常用的API等

神书:《Java核心技术》、《Effective Java》、《Java编程思想》

企业真题

一个”.java”源文件中是否可以包括多个类?有什么限制

是!

一个源文件中可以声明多个类,但是最多只能有一个类使用public进行声明。 且要求声明为public的类的类名与源文件名相同。

如何看待Java是一门半编译半解释型的语言

java编译成字节码文件后运行方式包括两种,一种是逐行进行翻译,直接解释(解释型)另一种是针对热点代码提前翻译成相关的机器指令,后面再调用可以直接拿来(JIT即时编译)