真正值得深挖的是JDK17–21下高频真题:语言机制(==/equals差异、final语义)、内存机制(new String("abc")对象数、intern()版本差异)、设计意图(HashMap树化阈值、ArrayList扩容策略),须结合源码与JDK版本分析。

直接看重点,别从头翻到尾。
Java基础面试题“百问百答”类资料数量多、版本杂,很多题目早已过时(比如还在问 JDK7 的永久代、StringBuffer 和 StringBuilder 的线程安全对比却不提 JUC 工具类),答案也常不更新。真正值得花时间的,是当前主流 JDK(JDK17–JDK21)下高频、易错、能体现底层理解的真问题。
聚焦三类题才有效:
- ✅ 语言机制题:比如
==和equals()在 String、Integer、自定义类中的行为差异;final修饰类、方法、变量分别影响什么;static方法为什么不能调用非静态成员。 - ✅ 内存与运行机制题:比如
String s = new String("abc")创建几个对象?堆、栈、方法区(元空间)各自存什么?intern()在 JDK7 和 JDK8+ 的行为变化。 - ✅ 设计意图题:比如为什么 HashMap 在链表长度 ≥8 且数组长度 ≥64 才树化?为什么 ArrayList 的扩容是 1.5 倍而不是 2 倍?为什么接口能有 default 方法而抽象类不能有 private 方法?
怎么看才不浪费时间:
立即学习“Java免费学习笔记(深入)”;
- 先对照自己实际项目里写过的代码反推:你有没有重写过
hashCode()却忘了同步改equals()?有没有在多线程场景误用SimpleDateFormat?从真实踩坑点出发,找对应题目深挖。 - 看解析时盯住「JDK 版本标注」和「字节码/源码佐证」:没写明 JDK 版本的答案,大概率不准确;没引用
java.lang.String.equals()或HashMap.putVal()源码片段的解释,说服力弱。 - 遇到“背诵型”题目(如访问修饰符表格、基本类型字节数),快速过;遇到“为什么”题(如“为什么
wait()必须在 synchronized 块中调用?”),必须动手写个最小复现例子跑一遍。
避坑提醒:
- 别信“百问全背就稳过”的说法。大厂面试更倾向现场推演——比如给你一段含
Integer i = 128; Integer j = 128; System.out.println(i == j)的代码,让你现场分析输出并解释原因。 - 很多所谓“百问”把容器、JVM、并发混在里面,其实那已超出“基础”范畴。纯 Java 基础,核心就围绕语法、OOP、异常、集合接口、常用类(String/Date/Math)、泛型擦除、反射基础这七八块。
不复杂但容易忽略。


















