Java 基础面试题
目录概述
Java 基础是面试的第一道门槛,也是最容易"表面通过、深层翻车"的模块。String 的不可变性、equals 与 hashCode 的关系、static/final/abstract 的语义、异常体系、泛型擦除、反射与注解——每一个都能追问到 JVM 层面。
这个目录不给你背八股的机会,而是站在面试官视角,告诉你追问的边界在哪里,什么深度才叫"真正理解"。
【面试官心理】 我出 Java 基础题,不是为了考你背概念。我是想看你有没有亲手踩过坑、看过源码、复盘过问题。能清晰解释一个知识点的人,说明他真的做过。而那些只会背概念的人,往往在第一轮追问后就崩了。
内容范围
核心主题
- OOP 四大特性:封装、继承、多态、抽象
equals与hashCode契约:为什么重写一个必须重写另一个- String 不可变性:源码级解读 + 性能陷阱
static关键字:类加载、内存布局、单例模式final关键字:编译期常量、不可变对象、空白 finalabstract与interface:default方法、静态方法、JDK 8+ 的演进- 泛型详解:类型擦除、条件擦除、泛型数组
- 泛型通配符:
? extends Tvs? super T的区别和使用场景 - 异常体系:受检异常 vs 非受检异常、异常链、
try-with-resources - 反射机制:类加载、性能损耗、框架底层依赖
- 内部类与静态内部类:内存泄漏隐患、闭包陷阱
- 值传递还是引用传递:Java 的内存模型决定了一切
- 对象创建过程:类加载检查、内存分配、构造函数执行
- 浅拷贝与深拷贝:
Cloneable接口、复制构造函数、序列化方式
面试题分级
高频必考题 🔴
equals 与 hashCode 契约
面试官问:"HashMap 的 key 为什么建议用 String?重写
equals不重写hashCode会怎样?"
这道题我通常用来测试候选人有没有真正理解"哈希表的契约"。背过源码的占 80%,能讲清楚哈希碰撞和扩容机制的占 50%,能说出这个契约背后原因的只有 10%。
String 不可变性
面试官问:"String 为什么设计成不可变的?
String s = new String("abc")创建了几个对象?"
这道题能追问到字符串常量池、GC 优化、类加载器等多个维度。是测试候选人有无全局视野的经典题。
泛型擦除
面试官问:"
List<String>和List<Integer>泛型擦除后变成什么?为什么?"
这道题是泛型部分的杀手题。很多人能背出"类型擦除"三个字,但被追问到"擦除后的类型是什么"、"桥接方法怎么回事"就彻底卡住。
中频常考题 🟡
static关键字与类加载顺序abstract与interface的选择- 异常体系与
try-with-resources - 反射机制与性能损耗
- 值传递与对象引用
低频了解题 🟢
- 内部类分类与使用场景
- 浅拷贝与深拷贝的实现方式
var关键字(JDK 10+)
学习路径指引
P5 候选人(校招/初级社招)
重点掌握:OOP 特性、equals 与 hashCode、String 基本概念、异常处理、集合常用 API。达到"能背出流程,不怵简单追问"即可。
P6 候选人(中级社招)
必须在源码层面理解 HashMap、ArrayList、LinkedList 的实现,能够解释为什么 HashMap 用红黑树、ArrayList 扩容为什么是 1.5 倍。泛型、反射、类加载机制要有深度理解。
P7 候选人(高级/架构方向)
除了原理,还要有方案选型能力和生产经验。比如:什么场景下不用 HashMap 而用其他结构、序列化框架如何选择、类加载器的隔离设计。
【面试官心理】 P7 候选人最值钱的地方不是知道得多,而是能在约束条件下做 trade-off。你说你熟悉设计模式,那你在项目里什么时候会违背开闭原则?这种问题比背模式定义重要一百倍。
常见翻车点
翻车点一:只背结论,不懂原理
表现太流畅、一问细节就卡。说明是背的,不是真的理解。
翻车点二:知道但讲不清楚
能实现功能,但在面试压力下无法清晰地解释为什么这么设计。
翻车点三:没有生产经验
能讲清楚概念,但说不出生产环境出过什么问题、怎么排查的。
看完每篇文章后,试着向自己复述三遍:如果我是面试官,我会追问什么?这个问题的边界条件是什么?生产环境这个问题会导致什么后果?