Java 核心面试知识点整理
本文整理了 Java 开发中高频出现的面试问题,涵盖基础语法、集合框架、多线程并发、反射机制及 Web 技术栈等核心内容。以下内容基于实际开发经验总结,旨在帮助开发者梳理知识体系。
Java 基础
JDK 和 JRE 有什么区别?
JDK(Java Development Kit)是开发工具包,提供了开发环境和运行环境;JRE(Java Runtime Environment)是运行环境,仅包含运行所需组件。 简单来说,JDK 包含了 JRE,还多了编译器(javac)和调试分析工具。若只需运行程序,安装 JRE 即可;若要编写代码,则必须安装 JDK。
== 和 equals 的区别是什么?
== 对基本类型比较值,对引用类型比较地址。
equals 默认比较地址,但 String、Integer 等类重写了该方法,改为比较值。
String x = "string";
String y = "string";
String z = new String("string");
System.out.println(x == y); // true,指向常量池同一对象
System.out.println(x == z); // false,new 开辟新内存
System.out.println(x.equals(y)); // true
System.out.println(x.equals(z)); // true
注意: Object 类的 equals 源码逻辑如下,本质仍是 ==:
public boolean equals(Object obj) {
return (this == obj);
}
而 String 类重写了它,实现了字符数组的内容比对。
两个对象的 hashCode() 相同,则 equals() 也一定为 true,对吗?
不对。哈希冲突是常见现象,hashCode 相同不代表对象相等。
String str1 = "通话";
String str2 = "重地";
System.out.println(str1.hashCode()); // 1179395
System.out.println(str2.hashCode()); // 1179395
System.out.println(str1.equals(str2)); // false
final 在 Java 中有什么作用?
- 修饰类:该类不能被继承。
- 修饰方法:该方法不能被重写。
- 修饰变量:成为常量,初始化后不可修改。
Math.round(-1.5) 等于多少?
等于 -1。四舍五入规则是向正无穷方向取整,0.5 向上取,负 0.5 向下取。
String 属于基础的数据类型吗?
不属于。Java 有 8 种基本数据类型(byte, boolean, char, short, int, float, long, double),String 是对象。
操作字符串都有哪些类?区别是什么?
主要有 String、StringBuffer、StringBuilder。
- String:不可变对象,每次修改都会生成新对象。
- StringBuffer:可变,线程安全(synchronized),性能稍低。
- StringBuilder:可变,非线程安全,性能最高。 单线程推荐 StringBuilder,多线程推荐 StringBuffer。
String str="i"与 String str=new String('i')一样吗?
不一样。前者分配在常量池,后者分配在堆内存。
如何将字符串反转?
使用 StringBuilder 或 StringBuffer 的 reverse() 方法。
抽象类必须要有抽象方法吗?
不需要。抽象类可以没有抽象方法,但不能实例化。
接口和抽象类有什么区别?
- 实现方式:接口用 implements,抽象类用 extends。
- 构造函数:抽象类有,接口无。
- 继承数量:类可实现多个接口,但只能继承一个抽象类。
- 访问修饰符:接口方法默认为 public,抽象类方法任意。
IO 流分为几种?
按功能分:输入流、输出流。 按类型分:字节流(8 位)、字符流(16 位)。
BIO、NIO、AIO 有什么区别?
- BIO:同步阻塞 IO,模式简单,并发能力低。
- NIO:同步非阻塞 IO,基于 Channel,支持多路复用。
- AIO:异步非阻塞 IO,基于事件和回调机制。
容器
Java 容器都有哪些?
主要分为 Collection 和 Map 两大类。
- Collection:List(ArrayList, LinkedList, Vector, Stack)、Set(HashSet, LinkedHashSet, TreeSet)。
- Map:HashMap, LinkedHashMap, TreeMap, ConcurrentHashMap, Hashtable。
Collection 和 Collections 有什么区别?
- Collection:集合接口,所有集合的父接口。
- Collections:包装类,提供静态工具方法(如排序)。
List、Set、Map 之间的区别是什么?
- List:有序,可重复。
- Set:无序,不可重复。
- Map:键值对,Key 不可重复。
HashMap 和 Hashtable 有什么区别?
- Null 值:HashMap 允许 key/value 为 null,Hashtable 不允许。
- 线程安全:Hashtable 线程安全,HashMap 非线程安全。
- 推荐:单线程用 HashMap,多线程用 ConcurrentHashMap。
如何决定使用 HashMap 还是 TreeMap?
需要快速插入删除选 HashMap;需要对 Key 进行有序遍历选 TreeMap。
HashMap 的实现原理?
基于 Hash 算法。通过 key.hashCode() 计算 hash 值定位 bucket。发生哈希冲突时,链表存储;链表长度过长(Java 8+)转为红黑树。
ArrayList 和 LinkedList 的区别?
- 结构:ArrayList 是动态数组,LinkedList 是双向链表。
- 随机访问:ArrayList 效率高(索引直接访问)。
- 增删操作:LinkedList 效率高(无需移动元素)。
如何实现数组和 List 之间的转换?
- 数组转 List:Arrays.asList(array)
- List 转数组:list.toArray()
哪些集合类是线程安全的?
Vector、Hashtable、Stack 是线程安全的。JDK 1.5 后推荐使用 java.util.concurrent 包下的类,如 ConcurrentHashMap。
Iterator 是什么?
迭代器接口,用于遍历 Collection。支持移除元素,比 Enumeration 更安全。
怎么确保一个集合不能被修改?
使用 Collections.unmodifiableCollection() 创建只读集合。
多线程
并行和并发有什么区别?
- 并行:多核 CPU 同时处理多个任务。
- 并发:单核 CPU 通过时间片轮转交替执行多个任务。
线程和进程的区别?
进程是资源分配的最小单位,线程是 CPU 调度的最小单位。一个进程可包含多个线程。
守护线程是什么?
后台运行的线程,如垃圾回收线程。当所有用户线程结束时,守护线程自动结束。
创建线程有哪几种方式?
- 继承 Thread 类并重写 run 方法。
- 实现 Runnable 接口。
- 实现 Callable 接口(可返回结果)。
sleep() 和 wait() 有什么区别?
- 来源:sleep 来自 Thread,wait 来自 Object。
- 锁:sleep 不释放锁,wait 释放锁。
- 唤醒:sleep 时间到自动恢复,wait 需 notify/notifyAll 唤醒。
线程池有哪些状态?
- RUNNING:接受新任务,处理队列。
- SHUTDOWN:不接受新任务,处理队列。
- STOP:不接受新任务,中断正在执行的任务。
- TIDYING:所有任务销毁,workCount 为 0。
- TERMINATED:终止状态。
synchronized 和 Lock 有什么区别?
- 锁范围:synchronized 可修饰类、方法、代码块;Lock 只能代码块。
- 手动释放:synchronized 自动释放;Lock 需手动 unlock。
- 异常处理:synchronized 异常自动释放;Lock 需 finally 保证释放。
synchronized 和 volatile 的区别?
- 可见性:volatile 保证可见性,synchronized 保证可见性和原子性。
- 阻塞:volatile 不阻塞,synchronized 可能阻塞。
atomic 的原理?
利用 CAS(Compare And Swap)和 volatile 保证原子操作,避免 synchronized 的高开销。
反射
什么是反射?
运行时动态获取类的属性和方法,并调用它们的能力。
什么是 Java 序列化?
将对象状态保存到文件或传输网络。常用于 RMI、Socket 通信。
动态代理是什么?
运行时动态生成代理类。Spring AOP、Hibernate 查询常用此技术。
对象拷贝
深拷贝和浅拷贝区别?
- 浅拷贝:复制对象本身和值类型成员,引用类型成员仍指向原对象。
- 深拷贝:完全复制对象及其所有成员变量,包括引用的对象。
Java Web
JSP 和 servlet 有什么区别?
JSP 本质是 Servlet。Servlet 侧重控制逻辑,JSP 侧重视图展示。
JSP 有哪些内置对象?
request, response, pageContext, session, application, out, config, page, exception。
session 和 cookie 有什么区别?
- 存储位置:session 在服务端,cookie 在浏览器。
- 安全性:cookie 易被伪造,session 相对安全。
- 容量:cookie 有大小限制,session 取决于服务器内存。
注:以上内容涵盖了 Java 面试中的核心考点,建议结合实际项目场景深入理解。


