---
url: /java/Java高级面试知识体系.md
---
# Java 高级面试知识体系：覆盖全面、兼顾深度与广度的体系化指南

> 目标：把零散知识点串成一张网——**广度上无死角、深度上能下钻、表达上有模板、记忆上有抓手**。
> 阅读建议：先通读第一章建立方法论，再按模块逐个攻破，最后用第五、六章的表达框架与记忆策略把知识"焊"在脑子里。

***

## 一、方法论先行：高级面试到底考什么

### 1.1 三层能力模型

| 层级 | 考察点 | 典型问法 | 应对要求 |
|---|---|---|---|
| 广度（知道） | 技术栈覆盖面 | "你了解 XX 吗？" | 能说清定义、定位、适用场景 |
| 深度（理解） | 原理与源码 | "为什么这样设计？" | 能讲到实现机制、设计取舍 |
| 体系（会用） | 实战与权衡 | "你会怎么选型/排查？" | 能结合项目讲方案、数据、坑 |

**初级面试考"会不会"，中级面试考"懂不懂"，高级面试考"权衡与实战"。** 同一个知识点，高级岗必须能讲出：它解决什么问题 → 怎么解决的 → 有什么代价 → 我在哪里用过 → 踩过什么坑。

### 1.2 高级面试的评分公式

```
得分 = 知识准确性 × 表达结构性 × 实战证据(数据/案例) × 追问抗压
```

四个因子缺一不可：背得再熟，讲得混乱、没有实战佐证、一问深了就崩，依然过不了。

***

## 二、知识体系全景图（广度覆盖清单）

```mermaid
mindmap
  root((Java高级面试))
    语言底层
      JVM内存与GC
      并发编程
      集合框架
      IO与网络
    主流框架
      Spring与SpringBoot
      SpringCloud微服务
      Netty
    存储层
      MySQL
      Redis
    中间件
      消息队列
      注册中心与网关
    分布式
      CAP与一致性协议
      分布式事务
      分布式锁与ID
    架构与场景
      高并发设计
      高可用设计
      系统设计场景题
```

### 2.1 模块权重与备考优先级

| 模块 | 高频程度 | 深度要求 | 优先级 | 说明 |
|---|---|---|---|---|
| JVM 与 GC | ★★★★★ | 深 | P0 | 高级岗区分度核心，必问调优实战 |
| 并发编程 | ★★★★★ | 深 | P0 | synchronized/AQS/线程池必问源码级 |
| MySQL | ★★★★★ | 深 | P0 | 索引、事务、锁、调优是必答题 |
| Redis | ★★★★★ | 深 | P0 | 缓存三件套 + 高可用 + 分布式锁 |
| Spring 全家桶 | ★★★★☆ | 深 | P0 | 生命周期、循环依赖、事务失效 |
| 消息队列 | ★★★★☆ | 中深 | P1 | 可靠性、顺序、幂等、积压 |
| 分布式理论与方案 | ★★★★☆ | 深 | P1 | CAP、一致性、分布式事务选型 |
| 系统设计/场景题 | ★★★★☆ | 广+设计 | P1 | 高级岗的胜负手 |
| 集合源码 | ★★★☆☆ | 中 | P2 | HashMap/ConcurrentHashMap 为焦点 |
| 网络与 Netty | ★★★☆☆ | 中 | P2 | TCP、IO 模型、零拷贝 |
| 微服务治理 | ★★★☆☆ | 中 | P2 | 限流熔断、注册发现、链路追踪 |
| JDK21 新特性 | ★★★☆☆ | 中 | P2 | 虚拟线程已成 2025-2026 新晋高频 |

### 2.2 一条主线串全局

把所有模块串在"一次请求的生命周期"上，任何知识点都能挂到这条主线上：

```mermaid
flowchart LR
    A[客户端] --> B[网关: 限流鉴权路由]
    B --> C[微服务: 业务逻辑+线程池]
    C --> D[本地缓存 Caffeine]
    D --> E[Redis 分布式缓存]
    E --> F[MySQL: 主写从读]
    C --> G[MQ: 削峰解耦异步]
    G --> H[消费者: 幂等+落库]
```

学任何新技术都问自己：**它在这条链路的哪个环节？解决该环节的什么问题？**——这就是体系。

***

## 三、核心模块详解（广度清单 + 深度下钻）

> 每个模块 = 知识点清单（广度）+ 深度追问方向（深度）+ 高频题答题要点。

### 3.1 JVM（P0）

**广度清单**：运行时数据区、对象创建与内存布局、类加载机制、GC 算法与分代假说、主流收集器、调优参数、内存问题排查工具（jps/jstat/jmap/MAT/Arthas）。

**深度下钻方向**：

* 为什么需要 TLAB？对象一定分配在堆上吗（逃逸分析/标量替换）？
* G1 的 RSet/Card Table 如何跨 Region 找引用？ZGC 着色指针 + 读屏障原理？
* 安全点（Safepoint）与 STW 的关系；写屏障在 GC 中的作用。
* 双亲委派为什么会被打破（SPI/Tomcat/热部署）？如何打破？

**收集器对比（必背表）**：

| 收集器 | 区域 | 算法/特点 | 停顿 | 适用场景 |
|---|---|---|---|---|
| CMS | 老年代 | 并发标记清除，低停顿但有碎片 | 几十 ms | 遗留系统，已废弃 |
| G1 | 全堆 | Region 化 + 分代，可预测停顿模型 | 10~100ms | 大内存通用首选 |
| ZGC | 全堆 | 着色指针 + 读屏障，并发整理 | <1ms | 极低延迟、超大堆 |

**OOM 排查流程（答"你排查过内存问题吗"的剧本）**：

```mermaid
flowchart TD
    A[告警: 内存高或GC频繁] --> B{看监控判断方向}
    B -->|堆持续增长| C[jmap导出堆转储]
    B -->|GC频繁但堆稳定| D[查分配速率与大对象]
    C --> E[MAT分析支配树找泄漏链]
    E --> F[定位代码修复]
    F --> G[压测验证并沉淀参数基线]
```

答题时按此流程讲一个真实案例：现象 → 数据 → 工具 → 根因 → 修复 → 效果，这就是"体系 + 实战"。

***

### 3.2 并发编程（P0，分水岭）

**广度清单**：JMM、volatile/synchronized、CAS 与原子类、AQS、ReentrantLock/ReadWriteLock、线程池、ThreadLocal、并发工具类（CountDownLatch/CyclicBarrier/Semaphore）、并发容器、CompletableFuture、虚拟线程。

**深度下钻方向**：

* JMM 三特性（原子/可见/有序）分别由什么机制保证；happens-before 八条规则能举例。
* synchronized 锁升级全过程：无锁 → 偏向锁 → 轻量级锁（CAS 自旋）→ 重量级锁（OS 互斥量）。
* AQS：state + CLH 双向队列；独占/共享模式；ReentrantLock 公平与非公平的源码差异。
* 线程池：7 参数、执行流程、拒绝策略、参数如何评估（IO 密集 vs CPU 密集）、如何做监控与动态调参。
* ThreadLocal：ThreadLocalMap 弱引用 key 与内存泄漏成因。

**线程池执行流程（高频画图题）**：

```mermaid
flowchart TD
    A[提交任务] --> B{核心线程满}
    B -->|否| C[创建核心线程执行]
    B -->|是| D{队列已满}
    D -->|否| E[入队等待]
    D -->|是| F{最大线程数已满}
    F -->|否| G[创建非核心线程执行]
    F -->|是| H[执行拒绝策略]
```

**synchronized vs ReentrantLock 对比**：

| 维度 | synchronized | ReentrantLock |
|---|---|---|
| 层级 | JVM 内置（monitorenter/monitorexit） | JDK API（AQS 实现） |
| 锁释放 | 自动（退出同步块） | 必须手动 finally unlock |
| 能力 | 锁升级优化 | 可中断/超时/公平锁/多条件 Condition |
| 选择 | 简单同步首选 | 需要高级特性时用 |

**虚拟线程（JDK21 新晋高频）**：用户态轻量线程，由 JVM 调度，M:N 映射到平台线程；阻塞时挂起而非占用 OS 线程，适合 IO 密集高并发（Web 服务、消息消费）；注意不适合 CPU 密集任务，警惕 synchronized 中的 pinning 问题。答出"替换 Tomcat 线程池后 QPS 提升"的实测数据是加分项。

***

### 3.3 集合框架（P2，但 HashMap 是 P0 级焦点）

**广度清单**：ArrayList/LinkedList、HashMap/LinkedHashMap/TreeMap、HashSet、ConcurrentHashMap、CopyOnWriteArrayList、fail-fast/fail-safe。

**HashMap 深度下钻（必问）**：

* 结构：数组 + 链表 + 红黑树；链表转树条件：长度 ≥ 8 且数组长度 ≥ 64（泊松分布解释为什么是 8）。
* 扰动函数：高 16 位与低 16 位异或，减少高位信息丢失导致的碰撞。

```java
static final int hash(Object key) {
    int h;
    return (key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16);
}
```

* 容量为什么必须是 2 的幂：`(n-1) & hash` 可用位运算取模，且扩容时元素只需判断新增 bit 是 0 还是 1，无需重新计算。
* 扩容流程、1.7 头插死循环 vs 1.8 尾插、多线程下应选 ConcurrentHashMap（1.8：CAS + synchronized 锁单个桶节点，size 用 LongAdder 风格计数）。

***

### 3.4 IO 与网络（P2）

**广度清单**：BIO/NIO/AIO、IO 多路复用（select/poll/epoll）、零拷贝、Netty（Reactor、ByteBuf、内存池）、TCP 三次握手/四次挥手、TIME_WAIT、滑动窗口、拥塞控制、HTTP/HTTPS/HTTP2。

**深度下钻**：

* epoll 相比 select 的优势：无 fd 数量限制、事件驱动回调（epoll_wait）、LT/ET 模式。
* 零拷贝：sendFile、mmap、Kafka/RocketMQ 如何使用 mmap + 页缓存。
* Netty 主从 Reactor 模型；堆外内存与 DirectByteBuffer 的回收时机。
* TIME_WAIT 大量出现怎么排查（短连接 + 主动关闭方），如何优化。

***

### 3.5 Spring 生态（P0）

**广度清单**：IoC/DI、Bean 生命周期、作用域、循环依赖、AOP 实现、事务（传播行为/失效场景）、SpringBoot 自动配置、starter 机制、SpringCloud 组件。

**Bean 生命周期（背诵主线）**：

```mermaid
flowchart LR
    A[实例化] --> B[属性填充] --> C[Aware回调]
    C --> D[初始化前: BeanPostProcessor] --> E[初始化: InitializingBean与init-method]
    E --> F[初始化后: AOP代理在此生成] --> G[就绪使用] --> H[销毁]
```

**深度下钻**：

* 循环依赖与三级缓存：为什么需要第三级缓存（提前暴露 ObjectFactory，解决 AOP 代理对象提前引用问题）；构造器注入为何无法解决。
* AOP：JDK 动态代理（接口）vs CGLIB（子类，final 类无法代理）；SpringBoot 2.x 起默认 CGLIB。
* 事务失效八大场景：自调用、非 public、异常被吞、异常类型不匹配（默认只回滚 RuntimeException/Error）、传播行为不当、多线程、未被 Spring 管理、数据库引擎不支持。
* 自动配置原理：`@EnableAutoConfiguration` → `@Import(AutoConfigurationImportSelector)` → 读取 `AutoConfiguration.imports`（旧版 spring.factories）→ `@Conditional` 条件装配。

**常用传播行为速记**：REQUIRED（有则加入，无则新建，默认）、REQUIRES_NEW（挂起当前、新开事务）、NESTED（保存点嵌套）。

***

### 3.6 MySQL（P0，面试最高频）

**广度清单**：索引原理与优化、事务 ACID、隔离级别、MVCC、锁机制、日志系统（redo/undo/binlog）、缓冲池、SQL 调优。

**索引深度下钻**：

* 为什么用 B+ 树：对比 B 树（叶子才存数据、范围查询友好、树更矮 IO 更少）、红黑树（树高不可控）、Hash（不支持范围）。
* 聚簇索引 vs 二级索引、回表、覆盖索引、索引下推（ICP）、最左前缀、索引失效场景（函数计算、隐式类型转换、`!=`/`OR` 不当、前导模糊 LIKE）。

**事务与 MVCC**：

* 隔离级别：RU/RC/RR/Serializable；MySQL 默认 RR。
* MVCC：undo log 版本链 + ReadView；RC 每次 SELECT 生成新 ReadView，RR 仅事务首次生成——一句话区分两者差异。
* RR 下如何解决幻读：快照读靠 MVCC，当前读靠 Next-Key Lock。

**锁体系**：全局锁、表锁、行锁（Record Lock）、间隙锁（Gap Lock）、临键锁（Next-Key Lock）；死锁排查：`SHOW ENGINE INNODB STATUS` 看最近死锁日志。

**日志三剑客（必背）**：

| 日志 | 层级 | 作用 |
|---|---|---|
| redo log | InnoDB 引擎层 | 崩溃恢复（WAL，保证持久性） |
| undo log | InnoDB 引擎层 | 事务回滚 + MVCC 版本链 |
| binlog | Server 层 | 主从复制、归档恢复 |

两阶段提交保证 redo 与 binlog 一致——被追问"为什么更新语句要先写 redo 再写 binlog"时的标准答案。

**SQL 调优答题套路**：慢查询日志定位 → `EXPLAIN` 看 type/key/rows/Extra（出现 filesort、temporary 要警惕）→ 优化索引/改写 SQL/分页优化（延迟关联）→ 验证。

***

### 3.7 Redis（P0）

**广度清单**：数据结构与底层编码、持久化（RDB/AOF）、过期策略与内存淘汰、主从/哨兵/Cluster、缓存穿透/击穿/雪崩、缓存一致性、分布式锁、大 key 与热 key。

**数据结构与底层编码（深度体现）**：String→SDS；List→quicklist；Hash/Zset 小数据 listpack、大数据 hashtable/skiplist；跳表为什么不用红黑树（实现简单、范围查询友好）。

**缓存三剑客对比（必背表）**：

| 问题 | 现象 | 解法 |
|---|---|---|
| 穿透 | 查不存在的数据，缓存无、DB 被击穿 | 缓存空值 / 布隆过滤器 / 参数校验 |
| 击穿 | 热点 key 过期瞬间并发打到 DB | 互斥锁重建 / 逻辑过期 / 永不过期+异步刷新 |
| 雪崩 | 大量 key 同时过期或 Redis 宕机 | 过期时间加随机值 / 多级缓存 / 限流降级 / 集群高可用 |

**缓存一致性**：Cache Aside（先更新 DB 再删缓存）是默认答案；能讲清"延迟双删"与"binlog 订阅（Canal）兜底"是加分项；能说出"强一致需要分布式事务，工程上追求最终一致"是高级视角。

**分布式锁**：`SET key val NX PX` 起步 → Lua 脚本保证原子释放 → 看门狗续期（Redisson）→ Redlock 的争议（时钟假设）能主动提及体现深度。

**高可用演进**：主从（读写分离）→ 哨兵（自动故障转移）→ Cluster（16384 槽分片，MOVED/ASK 重定向）。

***

### 3.8 消息队列（P1）

**高频问题四连**：

1. **如何保证不丢**：生产者 confirm/事务消息 + Broker 持久化（同步刷盘/多副本）+ 消费者手动 ACK，三段都要答。
2. **如何保证顺序**：同一业务 key 路由到同一分区/队列 + 单线程消费；全局顺序则单分区。
3. **如何保证幂等**：唯一 ID + 去重表/Redis Set/数据库唯一键，消费端兜底。
4. **积压怎么办**：临时扩容消费者 + 转发到新 topic 扩并行度 + 修复根因 + 事后回放。

**选型对比**：

| MQ | 特点 | 适用 |
|---|---|---|
| Kafka | 高吞吐、日志流式生态 | 大数据、日志、流处理 |
| RocketMQ | 事务消息、延迟消息、顺序消息完善 | 业务系统、电商交易 |
| RabbitMQ | AMQP、路由灵活、管理成熟 | 中小规模、复杂路由 |

***

### 3.9 分布式理论与实践（P1）

**理论**：CAP（分区容错必选，CP/AP 是取舍）、BASE；一致性协议 Raft 核心流程（Leader 选举 → 日志复制 → 安全性约束）能画能讲。

**分布式事务选型（必背表）**：

| 方案 | 一致性 | 性能 | 适用 |
|---|---|---|---|
| 2PC/XA | 强一致 | 低（同步阻塞） | 传统数据库场景 |
| TCC | 强一致（业务补偿） | 中 | 资金类、短流程 |
| Saga | 最终一致 | 高 | 长流程、跨服务编排 |
| 本地消息表/事务消息 | 最终一致 | 高 | 异步解耦的可靠通知 |

答题套路："先看业务能否接受最终一致，能接受优先事务消息/本地消息表；资金类强一致用 TCC；能用 Saga 编排的长流程不上 2PC。"

**分布式 ID**：UUID（无序伤索引）→ 号段模式（Leaf）→ 雪花算法（时钟回拨问题与解法：等待/备用位/逻辑时钟）。

**分布式锁三方案对比**：Redis（性能高、需处理过期与续期）、ZK（可靠、临时顺序节点、性能一般）、DB（简单、性能差）——按业务对可靠性与性能的要求选。

***

### 3.10 微服务与高可用（P2）

**广度清单**：注册中心对比（Nacos CP/AP 可切换、Eureka AP、ZK CP）、负载均衡策略、网关职责（鉴权/限流/路由/灰度）、熔断降级、限流算法、链路追踪、灰度发布。

**限流算法对比（高频）**：

| 算法 | 特点 | 缺点 |
|---|---|---|
| 固定窗口 | 简单 | 临界突刺 |
| 滑动窗口 | 平滑统计 | 实现稍复杂 |
| 漏桶 | 恒定速率出流量 | 无法应对突发 |
| 令牌桶 | 允许一定突发 | 需维护令牌生成 |

**熔断三态**：关闭 → 打开 → 半开；能讲清滑动窗口统计失败率触发熔断即达深度。

***

### 3.11 系统设计 / 场景题（高级岗胜负手）

**答题五步框架（万能套路）**：

1. **澄清需求**：QPS/数据量/一致性要求/可用性目标（主动问，体现工程素养）。
2. **容量估算**：QPS × 单请求大小 → 带宽/存储，算分库分表数量。
3. **核心流程**：画出主链路（复用第二章那张图）。
4. **找瓶颈**：读多→缓存/读写分离；写多→异步化/分片；热点→本地缓存/隔离。
5. **演进与兜底**：限流、降级、灰度、监控告警。

**高频场景速查**：

| 场景 | 核心考点 | 关键词 |
|---|---|---|
| 秒杀 | 流量漏斗层层过滤 | 静态化、限流、库存预扣（Redis Lua）、异步下单、超卖 |
| 短链系统 | 发号器 + 重定向 | 雪花/自增 ID + Base62、301/302、布隆去重 |
| Feed 流 | 推拉结合 | 大 V 拉、普通用户推、Timeline 归并 |
| 抢红包 | 预拆包 | 提前生成金额列表、Redis LPOP、异步入账 |
| 延迟任务 | 实现选型 | 时间轮/DelayQueue/RocketMQ 延迟消息 |

***

## 四、如何把零散知识点串成体系

### 4.1 三种串联方法

**方法一：主线串联法**——沿"请求生命周期"把知识挂上去（见 2.2）。每学一个技术先回答：它位于链路哪一环？解决什么瓶颈？

**方法二：五问表格法**——任何新技术都用同一张表吃透，天然形成横向对比：

| 五问 | 示例（Redis） |
|---|---|
| 是什么 | 内存 KV 存储 |
| 为什么需要它（解决什么） | DB 扛不住高频读 |
| 怎么实现的 | 单线程 + epoll + 内存数据结构 |
| 代价与边界 | 容量有限、持久化有损风险 |
| 我用在哪 | 项目中的会话缓存/排行榜 |

**方法三：问题树法**——以一个高频问题为树干，向下拆子问题。示例（HashMap）：

```
HashMap 为什么快？
├── 哈希定位 O(1)
│   ├── hash 扰动函数为什么这样写？
│   └── 为什么容量是 2 的幂？
├── 冲突处理
│   ├── 链表为什么转红黑树？阈值为什么是 8？
│   └── 为什么不用跳表？
└── 扩容
    ├── 2 倍扩容的好处？
    └── 1.7 死循环的根因？
```

### 4.2 高频通用骨架（背骨架而非背答案）

* **"如何保证 XX"类**：先拆链路分段（生产→传输→存储→消费），每段给手段，最后谈兜底与监控。
* **"如何选型"类**：列 3 个候选 → 定评估维度（性能/一致性/成本/运维）→ 给结论与理由。
* **"性能优化"类**：先定位（监控/压测数据）→ 分层优化（网络/应用/缓存/DB/JVM）→ 验证（对比数据）→ 防劣化（基线与告警）。

***

## 五、临场表达：四个答题模板

### 5.1 模板 A：原理题五步法（是什么→为什么→怎么做→取舍→实践）

> 例题："说说你对线程池的理解"
> ① 一句话定位：线程池本质是生产者-消费者模型，复用线程避免创建销毁开销。
> ② 为什么需要：线程是稀缺资源，频繁创建开销大且无法限流。
> ③ 怎么工作：core→队列→max→拒绝策略（配执行流程图讲）。
> ④ 取舍：IO 密集线程可多、CPU 密集线程≈核数；队列不宜无界。
> ⑤ 实践：我在 XX 项目中把异步任务从 Executors.newFixedThreadPool 改为自定义线程池 + 有界队列 + 告警，避免了 OOM。

### 5.2 模板 B：对比/选型题（先给结论 → 维度表格 → 场景落地）

结论先行 10 秒，再用 2-3 个维度展开，最后落到"我在什么场景选了什么、效果如何"。

### 5.3 模板 C：项目经验题 STAR-L

Situation（背景）→ Task（你的职责）→ Action（方案与关键决策）→ Result（量化数据：QPS/RT/成本下降百分比）→ **Lesson（踩坑与沉淀）**。L 是高级岗的灵魂——能讲出坑才证明真做过。

### 5.4 模板 D：故障排查题（现象 → 定位过程 → 根因 → 修复 → 预防）

提前准备 2-3 个真实故障剧本：一次 OOM/CPU 100%、一次慢 SQL、一次缓存事故。每个剧本按此五段练到 3 分钟内讲完。

### 5.5 表达禁忌

* 只背名词不讲"为什么"——高级面试直接减分。
* 说"我们做了 XX"却讲不清自己负责什么——追问即露馅。
* 被问住时硬编——正确做法：坦诚边界 + 给出推理思路（"我没在生产用过，但按我的理解它应该……"）。
* 不给数据——"性能提升明显"不如"RT 从 200ms 降到 60ms"。

***

## 六、长期记忆策略

### 6.1 费曼输出法（最有效）

每个模块学完后做两件事：① 用自己的话写一篇 500 字总结（讲不清的地方就是没懂的地方）；② 找一个不懂技术的人（或对着墙）讲一遍核心原理。

### 6.2 艾宾浩斯复习表

| 复习轮次 | 时间点 | 动作 |
|---|---|---|
| R1 | 当天睡前 | 闭卷默写当日模块的思维导图主干 |
| R2 | 第 2 天 | 遮住答案自问自答高频题 |
| R3 | 第 4 天 | 跨模块串联（如 Redis 缓存 + MySQL 一致性） |
| R4 | 第 7 天 | 模拟面试（录音回放） |
| R5 | 第 15 天 | 只复习错题本与薄弱模块 |

### 6.3 关键词挂钩示例

* 线程池：核→队→最→拒（四步流程）
* 缓存三剑客：穿（不存在）→ 击（单点热）→ 雪（集体倒）
* MVCC：版本链 + ReadView，RC 次次读、RR 读一次
* 事务日志：redo 保命（崩溃恢复）、undo 后悔（回滚）、binlog 传宗（复制）

### 6.4 错题本机制

每次模拟/真实面试后记录：被问住的题 → 正确答案 → 当时为什么卡壳（没学过/学过没懂/懂了不会讲）。三种卡壳对应三种补法，一周后重测。

***

## 七、四周备考计划

| 周次 | 主攻模块 | 每日动作 |
|---|---|---|
| 第 1 周 | JVM + 并发（P0） | 上午精读原理，下午画思维导图，晚上自问自答 |
| 第 2 周 | MySQL + Redis（P0） | 同上 + 动手执行 EXPLAIN/redis-cli 验证 |
| 第 3 周 | Spring + MQ + 分布式（P1） | 整理对比表格，写项目经验 STAR-L 稿 |
| 第 4 周 | 系统设计 + 全面复盘 | 每天一场模拟面试（录音），按错题本补漏 |

**每日节奏建议**：30 分钟复习旧模块（艾宾浩斯）+ 2 小时新内容精读 + 1 小时输出（默写/讲题）+ 30 分钟真题演练。

**面试前 24 小时清单**：

* \[ ] 自我介绍 1/3 分钟两版，突出 2 个亮点项目
* \[ ] 2 个项目 STAR-L 稿 + 3 个故障剧本过一遍
* \[ ] 八张必背对比表（收集器/锁/缓存三剑客/事务方案/MQ/限流算法/传播行为/日志）
* \[ ] 反问环节准备 2-3 个问题（团队技术栈、业务挑战、成长路径）

***

## 附：高频必答题速查表（Top 30）

| # | 问题 | 一句话答题锚点 |
|---|---|---|
| 1 | HashMap 原理 | 数组+链表+红黑树，扰动函数，2 的幂，8 树化，2 倍扩容 |
| 2 | ConcurrentHashMap | 1.7 分段锁 → 1.8 CAS+synchronized 锁桶节点 |
| 3 | synchronized 锁升级 | 偏向→轻量级 CAS→重量级，竞争逐步升级 |
| 4 | volatile | 可见性（MESI/总线）+ 禁重排（内存屏障），不保证原子 |
| 5 | AQS | state + CLH 队列，模板方法模式 |
| 6 | 线程池参数与流程 | 核→队→最→拒，IO/CPU 密集定参 |
| 7 | ThreadLocal 泄漏 | 弱引用 key + 线程常驻，用完必 remove |
| 8 | 虚拟线程 | JVM 调度的用户态线程，M:N，IO 密集利器 |
| 9 | JVM 内存区域 | 堆/方法区共享，栈/程序计数器私有 |
| 10 | GC 分代与算法 | 复制（新）、标记整理（老），分代假说 |
| 11 | G1 vs ZGC | G1 区域化可预测停顿；ZGC 着色指针 <1ms |
| 12 | OOM 排查 | jmap + MAT 支配树 + 泄漏链 |
| 13 | 类加载与双亲委派 | 加载→链接→初始化，委派保唯一性，SPI 打破 |
| 14 | Bean 生命周期 | 实例化→填充→Aware→初始化→代理→销毁 |
| 15 | 循环依赖三级缓存 | 三级 ObjectFactory 解决代理提前暴露 |
| 16 | 事务失效场景 | 自调用/非 public/异常被吞/类型不符 |
| 17 | 自动配置 | ImportSelector + imports 文件 + Conditional |
| 18 | B+ 树索引 | 矮胖、叶子链表、范围友好 |
| 19 | 最左前缀与失效 | 函数/隐式转换/前导模糊 |
| 20 | MVCC | undo 版本链 + ReadView，RC 与 RR 的差异点 |
| 21 | redo/undo/binlog | 恢复/回滚/复制，两阶段提交 |
| 22 | MySQL 锁 | 行锁/间隙锁/临键锁，RR 防幻读 |
| 23 | Redis 单线程为何快 | 纯内存 + epoll + 单线程免锁 |
| 24 | 穿透/击穿/雪崩 | 空值布隆/互斥续期/随机过期+集群 |
| 25 | 缓存一致性 | Cache Aside + 延迟双删/binlog 兜底 |
| 26 | Redis 分布式锁 | SET NX PX + Lua 释放 + 看门狗 |
| 27 | MQ 不丢消息 | 生产 confirm + 持久化 + 手动 ACK |
| 28 | 分布式事务 | 优先最终一致（事务消息），资金用 TCC |
| 29 | 雪花算法 | 64 位三段，时钟回拨是考点 |
| 30 | 秒杀设计 | 层层过滤 + Redis 预扣 + 异步下单 |

***

> **最后一句话**：高级面试不是知识竞赛，而是"用结构化的表达，证明你有体系化的工程能力"。广度建立地图，深度打下井，体系连成网，表达磨成刃——四者合一，offer 自来。
