Java基础面试应聚焦20个高频题,覆盖85%考察场景,强调逻辑理解与易错点辨析,辅以3天闭环训练法提升实战表达能力。

短时间冲刺 Java 基础面试题,关键不是“全背”,而是抓高频、理逻辑、辨易错点。真正拉开差距的,往往是那些看似简单却容易答偏的题——比如 == 和 equals 的区别、Integer 缓存机制、String 创建方式与内存分布、自动装箱拆箱的陷阱。
聚焦 20 个核心题,覆盖 85% 基础考察场景
不必硬啃 300 道题。按近年大厂(阿里、腾讯、字节、美团)校招/社招真实面经统计,以下 20 题出现频次最高,且常被追问延伸:
- String 是基本类型吗?为什么不可变?intern() 什么情况下生效?
- new String("abc") 创建了几个对象?堆里还是常量池?
- Integer a = 100; Integer b = 100; a == b 为 true;但 Integer c = 200; d = 200; c == d 为 false ——为什么?
- ArrayList 和 LinkedList 底层结构差异如何决定查询/增删性能?
- HashMap 的 put 过程(含 hash 计算、扰动、数组+链表/红黑树转换条件)
- ConcurrentHashMap 如何实现线程安全?JDK 1.7 和 1.8 设计差异在哪?
- synchronized 和 ReentrantLock 的本质区别(可重入、公平性、中断响应、条件队列)
- volatile 能保证原子性吗?它解决了什么问题?happens-before 关系怎么体现?
- ThreadLocal 的内存泄漏风险在哪?为什么推荐用 static 修饰?
- sleep() 和 wait() 的根本区别(是否释放锁、调用位置、所属类)
- final 修饰类、方法、变量分别意味着什么?能阻止反射修改吗?
- try-catch-finally 中 return 的执行顺序(尤其 finally 里有 return 时)
- 抽象类和接口在 JDK 8 后的语义变化(default/static 方法、构造器、字段)
- static 嵌套类 vs 成员内部类:能否访问外部类非静态成员?加载时机有何不同?
- 泛型擦除后,ArrayList<String> 和 ArrayList<Integer> 运行时是同一个 Class 吗?
- ClassLoader 双亲委派模型:为什么需要?破坏双亲委派的典型场景有哪些?
- Java 异常体系中,哪些是 checked exception?哪些是 unchecked?自定义异常该继承谁?
- Object 类的 hashCode() 和 equals() 为何要一起重写?不重写会怎样?
- StringBuilder 和 StringBuffer 的线程安全性差异源于哪一行代码?
- Java 中的 “值传递” 到底指什么?为什么说“对象传递的是引用的副本”?
每天 2 小时,3 天闭环式精练
别堆时间,要堆“有效反馈”。建议按如下节奏推进:
- Day 1:概念串讲 + 手写关键代码——对着上面列表,逐条默写核心结论(如 HashMap resize 触发条件、volatile 内存屏障作用),再手写 3 行关键源码片段(如 String.equals()、ArrayList.add()、ReentrantLock.lock())加深记忆
- Day 2:反向推导 + 错题复盘——找 5 道自己曾答错或模棱两可的题,不看答案,先尝试从 JVM 内存模型 / 字节码 / 源码角度解释“为什么这样设计”,再对照标准答案修正逻辑断点
- Day 3:模拟口述 + 画图表达——选 3 个题(如“HashMap 扩容过程”、“ThreadLocal 内存结构”、“类加载双亲委派流程”),用白纸画出简图,并口头讲解 2 分钟,录音回听是否逻辑连贯、术语准确、重点突出
警惕三类高频失分点
很多候选人基础不差,但一开口就暴露理解浮浅。注意避开这些坑:
立即学习“Java免费学习笔记(深入)”;
- 混淆编译期与运行期行为:比如认为 “String s = "a" + "b" 在编译期就拼成 "ab"” 是对的,但若其中一个是变量(如 final String b = "b"; s = "a" + b),JDK 8 下仍可能优化为 StringBuilder,需结合常量折叠规则判断
- 忽略边界与版本差异:如 “HashMap 初始容量是多少?” 答 “16” 不完整,应说明 “默认构造函数为 16,但实际 table 数组首次使用才初始化;JDK 1.8 后扩容阈值是 0.75 × capacity,而非固定值”
- 用 API 文档代替原理阐述:比如被问 “synchronized 底层怎么实现?”,只答 “它是重量级锁” 或 “基于 monitor” 属于无效回答,应点出 “对象头 Mark Word 存储锁标志位 + 指向 monitor 对象的指针,monitor 由 C++ 实现,含 Owner、EntryList、WaitSet 等结构”
最后一天:做减法,留钩子
面试前 24 小时,停止新增输入。只做两件事:
- 快速过一遍自己整理的“一句话原理卡片”(例如:“Integer 缓存本质是 IntegerCache 类里的 static final Integer[] cache,范围 -128~127,valueOf() 查表返回,new 总是新建对象”)
- 准备 1–2 个“可延展的技术钩子”:比如聊到 HashMap,主动提一句 “我们项目里曾因 key 的 hashCode 实现不合理导致哈希冲突激增,后来通过重写 hashCode 并加盐优化”;聊到异常,补充 “线上我们用自定义业务异常统一包装,配合 Sentry 做分类告警”——让面试官有追问空间,展现真实经验感


















