以下是 2025 年最新 Java 面试题合集,涵盖基础、进阶、多线程、集合、JVM 等关键方向,附精炼答案,堪称全网最全、最细版本。


✅ 基础篇

1. Java 是什么?与平台独立如何实现

:Java 是一种平台无关、面向对象、具备自动内存管理(GC)和丰富标准库的语言。通过编译成字节码运行在 JVM 上,实现 “一次编写,处处运行” (blog.csdn.net)。

2. 基本类型 vs 对象

:基本类型(如 int)存储实际值,内存占用小,速度快,不能为 null;对象存储引用,功能强,但占用更多空间且可为 null 。

3. String、StringBuilder、StringBuffer 区别

  • String 不可变,适用于少量拼接;
  • StringBuilder 可变,非线程安全,高效;
  • StringBuffer 可变,线程安全,但稍慢 (datacamp.com)。

4. == vs equals()

  • == 比较的是引用地址;
  • equals() 比较的是对象内容(需按需重写)(blog.csdn.net)。

5. static 关键字

:用于声明属于类而非实例的成员,常用于共享状态或工具函数 。


🧠 进阶篇

6. JDK、JRE、JVM 区别

  • JVM:执行字节码的虚拟机;
  • JRE:包含 JVM、核心类库;
  • JDK:包含 JRE+开发工具(如编译器、调试器)(rasathuraikaran26.medium.com)。

7. 重载 vs 重写

  • 重载:同类中方法名相同、参数不同,编译时多态;
  • 重写:子类提供父类同签名方法实现,运行时多态 (blog.csdn.net)。

8. 访问修饰符含义

  • public:任何地方可见;
  • protected:包内及子类;
  • default(无修饰):包内;
  • private:仅类内可见 (datacamp.com)。

⚙️ 并发 & 异常

9. Runnable vs Callable

Runnable 无返回值、有异常无法抛;Callable 有返回值,可抛异常,适合与 ExecutorService 搭配 。

10. 守护线程(Daemon Thread)

:后台线程,主线程退出后也会随 JVM 退出,不应用于关键任务 。

11. Checked 和 Unchecked 异常

  • Checked 异常在编译期必须处理;
  • Unchecked 是运行时异常,可不处理 (blog.csdn.net)。

12. throw vs throws

  • throw 用于方法内部抛出异常;
  • throws 用于方法声明,表示该方法可能抛出的异常 (datacamp.com)。

📚 集合框架

13. ArrayList vs LinkedList

ArrayList 随机访问快;LinkedList 插入/删除快,访问慢 。

14. HashSet vs TreeSet

HashSet 不排序、速度快;TreeSet 按自然顺序排序,性能相对慢 。

15. Fail-fast vs Fail-safe 迭代器

  • Fail‑fast(如 ArrayList、HashMap):遇修改抛 ConcurrentModificationException
  • Fail‑safe(如 ConcurrentHashMap、CopyOnWriteArrayList):对集合副本操作,不抛异常 (utho.com)。

🌐 Java 8 和函数式

16. Java 8 新特性

:Lambda 表达式、Stream API、函数式接口、Optional、Date/Time API、方法引用等 。

17. Lambda 表达式

:用来简化匿名内部类,适用于函数式接口,具备代码简洁、可读性强等优势 。

18. Stream API

:用于对集合进行过滤、映射、聚合等操作,支持并行处理,延迟执行 。

19. Optional 作用

:避免空指针,显式处理可能缺失的值 。


🧠 JVM & 性能优化

20. JVM 各内存区介绍

:包括方法区、堆、栈、程序计数器、本地方法栈,用于不同用途 。

21. Stack vs Heap 区别

  • 栈:用于方法调用、局部变量;
  • 堆:用于存放对象和实例变量,涉及 GC (utho.com)。

22. 内存泄漏举例

:当不再使用的对象仍被引用(比如静态集合中大量元素)时,GC 无法回收,产生泄漏 。


🧩 其他常见问题

23. 单例模式写法(线程安全)

:可用双重检查锁(Double-Checked Locking)、静态内部类(Bill Pugh 模式)等方式实现线程安全单例 。

24. 深拷贝 vs 浅拷贝

:浅拷贝复制对象引用,深拷贝复制对象本身(包括内部对象)。

25. 不可变类设计

:类声明为 final,字段为 private final 且无 setter,通过构造器初始化,确保对象状态不可变 。


✅ 面试准备建议

  • 结构化练习:基础 + 并发 + JVM + 框架;
  • 代码实现:准备常见代码题(如单例、深拷贝);
  • 结合场景:将知识点转为项目经验;
  • 模拟问答:练习流畅表达,附加补充项目背景。

如果你想要 按经验分类的完整题库(初、中、高级)包含 Spring、MyBatis、微服务等体系的问题清单与答案,也可以告诉我,我会进一步为你整理!