目前市面上的面试题存在两大问题:第一,题目太旧好久没有更新了,还都停留在 2010 年之前的状态;第二,近几年 JDK 更新和发布都很快,Java 的用法也变了不少,加上 Java 技术栈也加入了许多新的框架,列如 Spring Boot、Spring Cloud 等,但类似的面试题却极少。
相比与这些问题,我的这些面试题具备以下优点:
披沙拣金提炼出每个 Java 模块中最经典的面试题;
答案准确,每个题目都是我仔细校对过的;
接近最真实的企业面试,题目实用有效果;
难懂的题目,我加入了代码解析和原理分析。
Java 基础
1.JDK和JRE有什么区别
JDK:Java Development Kit 的简称,java开发工具包,提供了java开发环境和运行环境
JRE:Java Runtime Environment 的简称,java运行环境,为java提供了运行环境
==和equals的区别
==解读
对于基本类型和应用类型==的作用和效果是不同的,
基本类型:比较的是值是否一样
引用类型:比较的是引用是否一样
代码示例:

equals解读:
equals 本质上就是 ==,只不过 String 和 Integer 等重写了 equals 方法,把它变成了值比较。看下面的代码就清楚了。
第一来看默认情况下 equals 比较一个有一样值的对象,代码如下:


总结 :== 对于基本类型来说是值比较,对于引用类型来说是比较的是引用;而 equals 默认情况下是引用比较,只是许多类重新了 equals 方法,列如 String、Integer 等把它变成了值比较,所以一般情况下 equals 比较的是值是否相等。
final 在 java 中有什么作用?
final修饰的类叫最终类,该类不能被继承
final修饰的方法不能被重写
final修饰的变量叫常量,常量必须初始化,初始化之后值不能被修改
java 中的 Math.round(-1.5) 等于多少?
等于 -1,由于在数轴上取值时,中间值(0.5)向右取整,所以正 0.5 是往上取整,负 0.5 是直接舍弃。
String 属于基础的数据类型吗?
String 不属于基础类型,基础类型有 8 种:byte、boolean、char、short、int、float、long、double,而 String 属于对象。
如何将字符串反转
使用 StringBuilder 或者 stringBuffer 的 reverse() 方法。
代码如下:

String类的常用方法有哪些?
indexOf():返回指定字符串索引
charAt():返回指定索引处的字符
replace():字符串替换
trim():去除字符串两端的空白
split():分割字符串,返回一个分割后的字符串数组
getBytes():返回字符串的byte类型数组
length():返回字符串长度
toLowerCase():将字符串转换为小写字母
toUpperCase():将字符串转换为大写字母
substring():截取字符串。
equals():字符串比较。
抽象类必须有抽象方法嘛?
不需要,抽象类不必定要有抽象方法
普通类和抽象类的区别
普通类不能包含抽象方法,抽象类可以包含抽象方法
抽象类不能直接实例化,普通类可以直接实例化
抽象类可以有final修饰吗?
不能,定义抽象类就是让其他类继承的,如果定义为final该类就不能被继承,这样就会彼此产生矛盾,所以final不能修饰抽象类
接口和抽象类有哪些区别?
实现:抽象类的子类用extends来继承,接口用implements来实现
构造函数:抽象类可以有构造函数,接口不能有
实现数量:类可以有多个接口;但只能继承一个抽象类
访问修饰符:接口中的方法默认使用public修饰;抽象类中的方法可以是任意修饰符
Java 中 IO 流分为几种?
按功能来分:输入流(input)、输出流(output)。
按类型来分:字节流和字符流。
字节流和字符流的区别是:字节流按 8 位传输以字节为单位输入输出数据,字符流按 16 位传输以字符为单位输入输出数据。



