??个人主页: Java李小立
后面会持续更新java面试专栏,请持续关注
如果文章对你有帮助、欢迎关注、点赞、收藏(一键三连)
面试宝典列表(持续更新):
序号
内容
链接地址
1
Java基础篇
2
Java集合框架篇
3
Java多线程篇
4
JVM篇
5
Spring篇
6
Mybatis篇
7
SpringcCloud篇
8
Redis篇
9
Mysql篇
10
dubbo篇
11
zookeeper篇
12
kafka篇
13
RocketMq篇
14
Nacos篇
(一)Java基础
1.1.Java历史简述
- 1991 年Sun公司的James Gosling(詹姆斯高斯林)等人开始开发名称为 Oak
的语言,希望专攻计算机在家电产品上的嵌入式应用(如电视机顶盒、面包烤箱、移动电话等)。 - 1995年将Oak语言更名为Java;
- 2009年,甲骨文公司宣布收购Sun公司。
1.2. Java语言的特点
- 面向对象(封装,继承,多态);
- 平台无关性( Java 虚拟机实现平台无关性,一次编译,到处运行);
- 简单易学(与C语言的面向过程相比,Java的面向对象更接近人的语言习惯);
- 安全性,可靠性(Java中没有指针,程序员无法直接操作内存,而是把操作权限交给Java虚拟机,使程序不容易出现不容易出现内存泄漏和内存溢出问题。);
- 支持多线程( C++ 语言没有内置的多线程机制,因此必须调用操作系统的多线程功能来进行多线程程序设计,而 java的lang包提供一个Thread类本身就支持多线程);
- 编译与解释并存(Java编译生成字节码文件,交给Java虚拟机解释);
1.3. 面向对象与面向过程对比。
我们都知道Java的核心思想是面向对象,Java中万事万物皆对象,那么面向对象与面向过程有什么不同呢?
(1).面向过程
优点: 性能比面向对象高,因为类调用时需要实例化,开销比较大,比较消耗资源;比如单片机、嵌入式开发、Linux/Unix等一般采用面向过程开发,性能是最重要的因素。
缺点: 没有面向对象易维护、易复用、易扩展。
(2).面向对象
优点: 易维护、易复用、易扩展,由于面向对象有封装、继承、多态性的特性,可以设计出低耦合的系统,使系统更加灵活、更加易于维护。
缺点: 性能比面向过程低。
1.4. Java平台的三个版本J2EE、J2SE、J2ME。
JavaSE:即Java标准版,主要用于开发和部署桌面、例如,Java应用程序开发平台Eclipse(常说的CS架构)。
JavaEE:即Java企业版,主要针对企业应用的开发。例如,电商网站(常说的BS架构)。
JavaME:即Java微型版,主要针对移动设备和嵌入式设备。例如,手机、PDA、电视机顶盒等等。
注:从JDK 5.0开始 J2EE 改名为 java EE,J2SE 改名为 java SE,J2ME 改名成 java ME。
1.5. JDK、JRE、JVM之间的区别于关系。
LZ身边很多Java程序员,虽然写了很久的代码,但问他们jre 和 jdk 之间有什么关系,jvm 又是什么东西,很多人都讲的不是特别清楚,作为一个合格的Java程序员了解这方面的基础理论知识是很必要的。
(1).三者之间的区别:
JDK:(Java Development Kit)即java的开发与运行环境,他除了包含完整的JRE之外,还包含了供开发者使用的工具包。
JRE:(Java Runtime Environment)即Java运行环境,非开发者只需要安装 JRE来运行程序, 它包含java运行的所需的类库+JVM(java虚拟机)。
JVM: (Java Virtual Machine) 即Java虚拟机, 当我们运行一个程序时,JVM 负责将字节码转换为特定机器代码,JVM 提供了内存管理/垃圾回收和安全机制等。这种独立于硬件和操作系统,正是 java 程序可以一次编写多处执行的原因。
(2).三者之间的关系
- 作为程序员,就必须安装JDK,因为其中包含Java开发工具包,同时也包含了JRE。
- 作为使用者,运行已经开发好的Java程序,只需要安装JRE。
- JVM和JRE的关系:JRE包含了JVM,JVM是运行Java程序的核心虚拟机,同时也包含了Java程序所需的环境支持
- 总结:JDK>JRE>JVM
1.6. 什么是Java环境变量?
- 环境变量的意义
让java bin目录下的工具,可以在任意目录下运行,原理是将该工具所在目录告诉了系统,当使用该工具时,由系统帮我们去找指定的目录。 - JAVA_HOME
- 它指向jdk的安装目录,引用%JAVA_HOME%即可,避免每次引用都输入很长的路径串,方便第三方软件引用约定好的JAVA_HOME变量,保证程序正常运行。
- Path环境变量
设置Path环境变量之后就可以在任何目录下执行javac/java等工具命令了。 系统默认先去当前路径下找要执行的程序,如果没有,再去path中设置的路径下找。 - ClassPath
如果指定了classpath,那么会在指定的目录下查找要运行的类文件(JDK1.5后不需要配置)
1.7. javac命令和java命令做什么事情呢?
java运行分两部分:一个是编译,一个是运行。
javac:负责的是编译的部分,当执行javac时,会启动java的编译器程序。对指定扩展名的.java文件进行编译。编译后生成class文件。
java:负责运行的部分.会启动jvm虚拟机,加载运行时所需的类库,并对class文件进行执行.
一个文件要被执行,必须要有一个执行的起始点,这个起始点就是main函数.
1.8. 什么是字节码,采用字节码的好处是什么。
首先我们来谈谈Java文件类型,一共有两种:
-
扩展名为Java,Java的源文件,编译之前的纯文本文件,用来储存Java源代码。
-
扩展名为class,Java 的类文件,编译之后的二进制文件,存储的是字节码。
也就是说编译后的.class文件存储就是字节码*。
采用字节码的最大好处: 可以实现一次编译到处运行,也就是java的与平台无关性,它依靠不同平台的Java虚拟机将编译后的字节码解释成具体平台上的机器指令执行。
1.9. import java和javax有什么区别
刚开始的时候 JavaAPI 所必需的包是 java 开头的包,javax 当时只是扩展 API 包来说使用。然而随着时间的推移,javax 逐渐的扩展成为 Java API 的组成部分。但是,将扩展从 javax 包移动到 java 包将是太麻烦了,最终会破坏一堆现有的代码。因此,最终决定 javax 包将成为标准API的一部分。
所以,实际上java和javax没有区别。这都是一个名字。