Java 面试核心基础
本文聚焦于 Java 面试中决定生死的基础能力,不讲花活。
一、为什么 80% 的人死在基础?
你可能:
- 会用 Spring Boot 写接口
- 做过分布式项目,用过 Redis、MQ
- 熟悉微服务架构,会调用各种中间件
但当面试官问出下面这些问题时,你还能从容应对吗?
❓ HashMap 在 JDK 1.8 之后为什么引入红黑树? ❓ volatile 到底保证了什么?它和 synchronized 的区别是什么? ❓ 线程池为什么不允许用 Executors 创建? ❓ MySQL 的 MVCC 是怎么实现的? ❓ JVM 内存模型是怎样的?GC 如何工作?
如果你开始:
- 语速变慢
- 眼神闪躲
- 回答里夹杂着'应该是''大概是''可能吧'
那一刻,胜负已分。
二、金三银四的核心逻辑:企业真正想要什么?
企业要的不是只会用框架的'API 工程师'。 框架更新换代快,但底层原理十年不变。
企业真正想要的是:
- 能定位线上问题的人——懂 JVM、懂并发、懂排查工具。
- 能设计系统的人——懂数据库原理、懂缓存策略、懂分布式。
- 懂性能优化的人——知道瓶颈在哪,知道怎么调整。
- 理解'为什么'的人——不只是会用,而是能讲清楚背后的设计思想。
而这些能力的根基,全部来自 Java 基础。
三、Java 基础高频必杀点梳理
1️⃣ HashMap —— 面试第一杀器
高频问题:
- JDK 1.7 和 1.8 的 HashMap 有什么区别?
- 为什么要引入红黑树?什么条件下会树化?什么条件下会退化?
- 并发环境下 HashMap 为什么会死循环?
- 为什么负载因子默认是 0.75?
标准回答思路(结构化表达):
| 版本 | 数据结构 | 插入方式 | 并发问题 |
|---|---|---|---|
| 1.7 | 数组 + 链表 | 头插法 | 扩容时可能形成环形链表,导致死循环 |
| 1.8 | 数组 + 链表 + 红黑树 | 尾插法 | 改用尾插法,避免死循环,但仍有数据丢失等问题 |
树化条件:
- 链表长度 ≥ 8
- 且数组长度 ≥ 64 两者缺一不可,避免早期频繁树化。
退化条件:
- 扩容后链表长度 ≤ 6,红黑树退化为链表。
为什么树化阈值是 8?
- 基于泊松分布,链表长度达到 8 的概率极低(不到千万分之一),选择 8 是为了在时间和空间上取得平衡。
💡 本质: 用红黑树的 O(log n) 查找性能,替代链表 O(n) 查找,优化极端哈希碰撞场景。
2️⃣ 并发基础 —— 决定薪资层级
volatile 关键字
- :写 volatile 变量后,会强制刷新到主内存;读 volatile 变量前,会强制从主内存读取。


