---
url: /blog/java-review-7g9k/index.md
description: 基于 JavaGuide 的 Java 后端校招复习指南，紧扣个人简历技术栈，按优先级拆分复习清单与项目深挖要点。
---
# Java 面试复习指南（基于简历定制 · 配合 JavaGuide）

> \[!IMPORTANT]
> 本指南**完全围绕你的简历技术栈**展开，每个考点都对应 [JavaGuide](https://javaguide.cn/home.html) 的具体章节。
> 复习主入口：[Java 后端面试通关计划](https://javaguide.cn/interview-preparation/backend-interview-plan.html)（不知道从哪开始就先看这个）。

## 怎么用这份指南

1. **先看优先级地图**，知道哪些是 P0（简历写了 + 高频必问），把时间砸在 P0 上。
2. **按模块清单逐项过**，每项都点开 JavaGuide 对应文章，把"必背问题"能口述讲清楚。
3. **重点打磨项目深挖**（Oasis + newPan），面试 60% 的时间花在你的项目上，八股反而次之。
4. **用自测清单检验**，讲不清楚 = 没复习到位。

> \[!TIP]
> 优先级含义：
> **P0** = 简历明确写了 + 几乎逢面必问，必须能讲清原理和取舍。
> **P1** = 简历相关 + 高频，要能答出主流答案。
> **P2** = 加分项/计算机基础，时间充裕再补。

***

## 一、复习优先级地图（总览）

| 优先级   | 模块                        | 对应简历来源                        | JavaGuide 入口                                                                                        |
| ----- | ------------------------- | ----------------------------- | --------------------------------------------------------------------------------------------------- |
| 🔴 P0 | Java 集合 + 并发              | 个人技能 + 两个项目（ThreadLocal/线程池）  | [Java 并发](https://javaguide.cn/java/concurrent/) · [Java 集合](https://javaguide.cn/java/collection/) |
| 🔴 P0 | Redis + 缓存                | 个人技能 + 两个项目核心（多级缓存/Zset/三大问题） | [Redis 专题](https://javaguide.cn/database/redis/)                                                    |
| 🔴 P0 | MySQL                     | 个人技能（事务/索引/锁/日志）              | [MySQL 专题](https://javaguide.cn/database/mysql/)                                                    |
| 🔴 P0 | Spring/SpringBoot/MyBatis | 个人技能 + 项目                     | [Spring 框架](https://javaguide.cn/system-design/framework/spring/)                                   |
| 🔴 P0 | **项目深挖**（Oasis + newPan）  | 项目经历                          | 见第六节                                                                                                |
| 🟡 P1 | 消息队列（RabbitMQ/RocketMQ）   | 两个项目                          | JavaGuide 无独立 MQ 板块，见第五节补充                                                                          |
| 🟡 P1 | 设计模式                      | 个人技能（工厂/单例/策略/责任链）            | [设计模式](https://javaguide.cn/system-design/design-pattern/)                                          |
| 🟡 P1 | 分布式（锁/事务/ID）              | newPan 项目演进                   | [分布式系统](https://javaguide.cn/distributed-system/)                                                   |
| 🟡 P1 | JVM                       | 校招高频（简历未写但必问）                 | [JVM](https://javaguide.cn/java/jvm/)                                                               |
| 🟢 P2 | 计算机网络                     | 主修课程 + 八股必备                   | [计算机网络](https://javaguide.cn/cs-basics/network/)                                                    |
| 🟢 P2 | 操作系统                      | 主修课程（操作系统）                    | [操作系统](https://javaguide.cn/cs-basics/operating-system/)                                            |
| 🟢 P2 | 数据结构与算法                   | 主修课程 + 笔试                     | [数据结构](https://javaguide.cn/cs-basics/data-structure/)                                              |
| 🟢 P2 | Git / Maven / Linux       | 个人技能                          | [Git](https://javaguide.cn/tools/git/) · [Maven](https://javaguide.cn/tools/maven/)                 |

***

## 二、Java 基础与集合（P0）

> 简历原文：*"掌握 Java 基础知识，如集合框架、I/O流、Stream 流、反射机制等。"*

### 对应 JavaGuide

* [Java 基础常见知识点&面试题总结（上/中/下）](https://javaguide.cn/java/basis/)
* [Java 反射机制详解](https://javaguide.cn/java/basis/) （板块页内找「反射」）
* [Java 集合常见知识点&面试题总结（上/下）](https://javaguide.cn/java/collection/)
* 源码分析：[HashMap 源码](https://javaguide.cn/java/collection/) · [ConcurrentHashMap 源码](https://javaguide.cn/java/collection/) · ArrayList 扩容机制

### 必背问题

* \[ ] `HashMap` 底层结构？为什么用「数组 + 链表 + 红黑树」？为什么链表长度 > 8 才树化？
* \[ ] `HashMap` 扩容机制？负载因子为什么是 0.75？扩容时元素怎么迁移？
* \[ ] `HashMap` 和 `ConcurrentHashMap` 的区别？JDK 1.8 的 `ConcurrentHashMap` 怎么保证线程安全（CAS + synchronized 分段）？
* \[ ] `ArrayList` vs `LinkedList`？`ArrayList` 扩容机制（1.5 倍）？
* \[ ] `HashMap` 多线程下会有什么问题（死循环 / 数据丢失）？
* \[ ] **反射**：什么是反射？应用场景？反射的性能问题？反射能破坏单例吗？
* \[ ] **Stream**：中间操作 vs 终端操作？`map` vs `flatMap`？`peek` 和 `map` 的区别？
* \[ ] 值传递：Java 为什么只有值传递？（经典问题）

> \[!TIP]
> 集合是 Java 八股的「基本盘」，`HashMap` 几乎逢面必问。把 HashMap 的 put 流程、扩容、并发问题讲清楚，这一关基本稳了。

***

## 三、Java 并发（P0，项目重灾区）

> 简历两处用到 **ThreadLocal**（认证过滤器建立用户上下文），两处用到**线程池**（异步转存 OSS）。这是面试官深挖的重灾区。

### 对应 JavaGuide

* [Java 并发常见知识点&面试题总结（上/中/下）](https://javaguide.cn/java/concurrent/)
* [ThreadLocal 详解](https://javaguide.cn/java/concurrent/) · [Java 线程池详解](https://javaguide.cn/java/concurrent/) · [AQS 详解](https://javaguide.cn/java/concurrent/) · [JMM 详解](https://javaguide.cn/java/concurrent/) · [CAS 详解](https://javaguide.cn/java/concurrent/)

### 必背问题

* \[ ] **ThreadLocal**（⚠️ 简历核心，必被追问）：
  * 原理？`Thread`、`ThreadLocal`、`ThreadLocalMap` 三者关系？
  * 为什么用 `ThreadLocalMap` 而不是用 `Map<Thread, Value>`？
  * **内存泄漏**问题？key 为什么用弱引用？value 为什么是强引用？怎么解决（用完 `remove()`）？
  * **`InheritableThreadLocal`** 能解决什么？父子线程传值？
  * ⚠️ **线程池下 ThreadLocal 会串数据**！你的项目用线程池 + ThreadLocal，面试官一定会问怎么避免（任务执行前后清理 / 用阿里的 `TransmittableThreadLocal`）。
* \[ ] **线程池**（⚠️ 简历核心）：
  * 七大核心参数？工作流程（核心线程 → 队列 → 最大线程 → 拒绝策略）？
  * 四种拒绝策略？
  * 线程池怎么合理设置参数（CPU 密集 vs IO 密集）？为什么**不要用** `Executors.newFixedThreadPool`（无界队列 OOM）？
  * 你的 OSS 转存线程池参数怎么定的？
* \[ ] `synchronized` 和 `ReentrantLock` 区别？`synchronized` 锁升级（偏向→轻量→重量）？
* \[ ] `volatile` 的作用（可见性 + 禁止指令重排）？为什么不能保证原子性？
* \[ ] `synchronized` 和 `volatile` 的区别？
* \[ ] CAS 原理？ABA 问题怎么解决？
* \[ ] AQS 原理（state + CLH 队列 + 独占/共享）？
* \[ ] `ThreadLocalRandom`、`CompletableFuture`（异步编排，项目可能用到）

> \[!WARNING]
> 你的两个项目都用了 **「ThreadLocal + 线程池」**，这是经典的「坑点组合」。**务必**把「线程池下 ThreadLocal 内存泄漏和上下文丢失」搞透，否则简历亮点会变成翻车点。

***

## 四、Redis 与缓存（P0，绝对核心）

> 简历最浓墨重彩的部分：Caffeine+Redis 多级缓存、Zset 排行榜、Cache-Aside 一致性、持久化、过期淘汰、分布式锁、缓存三大问题。

### 对应 JavaGuide

* [Redis 专题](https://javaguide.cn/database/redis/) ⭐ 重点板块
* [缓存基础常见面试题总结](https://javaguide.cn/database/redis/)（缓存穿透/击穿/雪崩/一致性）
* [3 种常用的缓存读写策略详解](https://javaguide.cn/database/redis/)（Cache Aside / Read-Write Through / Write Behind）
* [Redis 5 种基本数据结构](https://javaguide.cn/database/redis/) · [Redis 持久化机制](https://javaguide.cn/database/redis/) · [Redis 集群详解](https://javaguide.cn/database/redis/) · [Redis 为什么用跳表实现 ZSet](https://javaguide.cn/database/redis/)

### 必背问题

* \[ ] **缓存三大问题**（简历直接写了，必须烂熟）：
  * **穿透**（查不存在的数据）→ 布隆过滤器 / 缓存空值（⚠️ 你的 newPan 正是用 Bloom Filter 解决这个！）
  * **击穿**（热点 key 过期）→ 互斥锁 / 逻辑过期 / 热点 key 永不过期
  * **雪崩**（大量 key 同时过期 / Redis 宕机）→ 过期时间加随机值 / 多级缓存 / 集群高可用
* \[ ] **缓存一致性**（⚠️ 简历写了「先更新 MySQL，再删除 Redis」）：
  * Cache Aside / Read Through / Write Behind 三种策略区别？
  * 「先删缓存再更新 DB」有什么问题？（缓存删除后、DB 更新前有读请求把旧值写回）
  * 「先更新 DB 再删缓存」就安全吗？（并发下仍可能不一致）→ **延迟双删**怎么实现？
  * 删除缓存失败怎么办？（消息队列重试 / 订阅 binlog 如 Canal）
* \[ ] **多级缓存**（⚠️ Caffeine + Redis，两个项目都用了）：
  * 为什么需要多级缓存？Caffeine 和 Redis 各解决什么问题？
  * Caffeine 用什么淘汰算法（W-TinyLFU）？
  * **本地缓存（Caffeine）多实例部署时怎么保证一致性**？（这是深坑：可以用 Redis 发布订阅广播失效 / MQ 通知）
* \[ ] **Zset 排行榜**（⚠️ Oasis 项目核心）：
  * 怎么用 Zset 实现排行榜？（`ZADD` / `ZINCRBY` / `ZREVRANGE`）
  * 相同分数怎么排序？数据量巨大（亿级）怎么办？（分片 / 冷热分离）
  * 实时排行榜 vs 定时排行榜的取舍？
* \[ ] **持久化**：RDB vs AOF 区别？AOF 重写？混合持久化？生产怎么选？
* \[ ] **过期与淘汰**：过期策略（惰性 + 定期）？8 种淘汰策略（noeviction / allkeys-lru / volatile-lru / allkeys-lfu …）？
* \[ ] **分布式锁**（简历提了）：
  * 怎么用 Redis 实现分布式锁？（`SET key value NX PX`）
  * 业务没执行完锁过期了怎么办？（看门狗续期 → Redisson）
  * Redisson 原理？Redlock 算法？为什么 Redlock 有争议？
* \[ ] Redis 为什么快？（内存 + 单线程 + IO 多路复用 + 高效数据结构）
* \[ ] Redis 6.0 为什么引入多线程？

> \[!IMPORTANT]
> Redis 是你简历的「王牌」，但也是面试官最容易找到破绽的地方。**多级缓存一致性、Zset 排行榜的边界、分布式锁的坑**——这三块每个都要能讲到生产细节，不能停在概念。

***

## 五、MySQL（P0）

> 简历原文：*"熟练使用 MySQL，掌握事务、索引、锁、日志等相关知识。"*

### 对应 JavaGuide

* [MySQL 专题](https://javaguide.cn/database/mysql/)
* [MySQL 索引详解](https://javaguide.cn/database/mysql/) · [MySQL 索引失效场景总结](https://javaguide.cn/database/mysql/) · [MySQL 事务隔离级别图文详解](https://javaguide.cn/database/mysql/) · [MySQL 三大日志详解](https://javaguide.cn/database/mysql/) · [InnoDB 对 MVCC 的实现](https://javaguide.cn/database/mysql/) · [MySQL 执行计划分析](https://javaguide.cn/database/mysql/)

### 必背问题

* \[ ] **索引**：
  * 为什么用 B+ 树？（对比 B 树 / 红黑树 / Hash）—— 为什么 B+ 树适合磁盘？
  * 聚簇索引 vs 非聚簇索引？回表？覆盖索引？最左前缀匹配？
  * 索引失效场景？（函数操作、隐式转换、`!=`、`OR`、`LIKE '%xx'`、不符合最左前缀）
  * `EXPLAIN` 怎么看？`type`、`key`、`rows`、`Extra`（Using index / Using filesort / Using temporary）？
* \[ ] **事务**：
  * ACID 四大特性？分别由什么保证（redo / undo / MVCC）？
  * 四种隔离级别？分别解决什么问题（脏读 / 不可重复读 / 幻读）？
  * MySQL 默认隔离级别（RR）？为什么 InnoDB 选 RR？
  * **MVCC** 原理？（隐藏字段 trx\_id/roll\_pointer + undo log 版本链 + ReadView）
  * RR 怎么解决幻读？（临键锁 + MVCC）—— 一定要说清「快照读靠 MVCC，当前读靠临键锁」
* \[ ] **锁**：
  * 行锁 / 间隙锁 / 临键锁 / 意向锁？
  * 共享锁 vs 排他锁？记录锁？
  * 死锁怎么排查？（`SHOW ENGINE INNODB STATUS`）
* \[ ] **日志**（⚠️ 三大日志是分水岭）：
  * **redo log**（InnoDB，崩溃恢复，物理日志，WAL 机制）
  * **undo log**（InnoDB，事务回滚 + MVCC，逻辑日志）
  * **binlog**（Server 层，主从复制 + 数据恢复，逻辑日志）
  * redo log 和 binlog 怎么保证一致性？（两阶段提交 / 内部 XA）
  * 一条 update 语句的执行流程（涉及这三种日志的写入顺序）
* \[ ] 主从复制原理？读写分离？分库分表？

> \[!TIP]
> MySQL 面试的「黄金主线」：**索引 → 执行计划 → 事务 → MVCC → 三大日志 → 性能优化**。把这条线串起来讲，比零散背题强十倍。

***

## 六、项目深挖准备（P0，重中之重）

> \[!CAUTION]
> 面试中 **60% 的时间会花在你的项目上**。八股答得再好，项目讲不清也挂。
> 下面把简历里每个技术点都拆成「面试官会怎么追问」，每个都要能答出来。

### 项目一：Oasis 技术社区

> 模块负责人：消息通知、文章教程。技术栈 SpringBoot + MySQL + Redis + RabbitMQ + Vue3。

#### 1. RabbitMQ 异步处理互动数据 + 通知

* \[ ] 为什么用 MQ？（解耦、异步、削峰）不用行不行？
* \[ ] **消息可靠性**：生产者确认（confirm）、持久化、消费者 ack —— 怎么保证消息不丢？
* \[ ] **重复消费**：怎么保证幂等？（唯一键 / 状态机 / Redis 标记）
* \[ ] **消息积压**怎么处理？（扩消费者 / 临时队列 / 批量消费）
* \[ ] **死信队列**：什么情况进死信？（消息被拒 / TTL 过期 / 队列满）
* \[ ] 点赞场景：如果用户狂点赞/取消，MQ 顺序乱了怎么办？

#### 2. Caffeine + Redis 多级缓存（热门文章排行、专栏）

* \[ ] 见第四节「多级缓存」。⚠️ 多实例下 Caffeine 怎么同步？（Redis Pub/Sub 广播失效）
* \[ ] 缓存击穿场景：热榜文章突然爆了怎么扛？

#### 3. Redis Zset 活跃度排行榜 + Cache-Aside

* \[ ] 见第四节。活跃度怎么算？权重怎么定？刷榜怎么防？

#### 4. ThreadLocal 认证上下文

* \[ ] 见第三节。⚠️ Tomcat 线程复用下，ThreadLocal 不清理会怎样？

#### 5. 第三方图片 OSS 自动转存 + 线程池

* \[ ] 怎么检测「非本域图片」？（正则匹配图片 URL）
* \[ ] 转存用 OSS 哪个接口？失败重试？
* \[ ] 线程池参数怎么定？大文章图片多，队列会不会爆？
* \[ ] ⚠️ 异步线程里拿不到 ThreadLocal 的用户信息怎么办？（TransmittableThreadLocal）

#### 6. AOP + TraceID 全链路日志

* \[ ] TraceID 怎么生成？怎么在日志里串联？（MDC）
* \[ ] ⚠️ **跨线程 TraceID 怎么传递**？（线程池包装 / 手动 set MDC）
* \[ ] AOP 切点怎么设计？记录了哪些信息？

***

### 项目二：newPan 分布式存储系统

> 核心开发：存储引擎、缓存、分享。技术栈 SpringBoot2 + MySQL + Redis + RocketMQ + 多存储引擎。

#### 1. Caffeine + Redis 多级缓存（同上，注意对比两个项目用法）

#### 2. 阿里 OSS 存储引擎 + 自动转存

* \[ ] 多存储引擎怎么抽象？（策略模式 / 工厂模式 —— 正好呼应设计模式技能）
* \[ ] 本地、FastDFS、OSS 三种引擎怎么切换？SPI 还是策略？
* \[ ] 大文件上传怎么做？（分片上传 / 断点续传）
* \[ ] 秒传怎么实现？（文件 MD5）

#### 3. SpringCloud Stream + RocketMQ

* \[ ] RocketMQ 和 RabbitMQ 区别？为什么 newPan 用 RocketMQ？（推/拉、事务消息、高吞吐）
* \[ ] SpringCloud Stream 抽象了什么？为什么要用它？（屏蔽底层 MQ 中间件）
* \[ ] RocketMQ **事务消息**原理？（半消息 + 本地事务 + 回查）

#### 4. Bloom Filter 分享链接校验

* \[ ] 布隆过滤器原理？（位数组 + 多个哈希）
* \[ ] 为什么会误判？为什么不能删除？
* \[ ] 容量和误判率怎么权衡？（位数组大小 m、哈希函数数 k）
* \[ ] 分享链接失效了，布隆过滤器里的位怎么更新？（难点：支持删除用 Counting Bloom Filter / 重建）

#### 5. ThreadLocal（同上）

#### 6. ⚠️ 项目演进（简历重点，也是最大风险点）

> \[!WARNING]
> 简历写了 **「本地事务升级为分布式事务」**、**「本地锁升级为分布式锁」**。这两句话如果没有真正落地，面试官一追问就露馅。**要么把方案学透，要么调整简历表述**。

* \[ ] **分布式事务**：你用了什么方案？（Seata AT / TCC / 本地消息表 / RocketMQ 事务消息 / Saga）—— 准备至少一种讲清楚
* \[ ] **分布式锁**：见第四节（Redisson）
* \[ ] 单体 → 分布式：拆了哪些服务？服务间怎么通信（HTTP / RPC / Dubbo）？
* \[ ] 性能优化：你说的 TPS/QPS 提升了多少？怎么测的？（⚠️ 别说虚的，要有压测数据或诚实说没测）
* \[ ] 注册中心 / 配置中心用的什么？（Nacos）网关？（Gateway）

> \[!IMPORTANT]
> 如果某个演进点你**没真正做过**，诚实承认"这是项目规划/学习阶段"比硬编强百倍。面试官欣赏诚实 + 有思考，最反感编造细节。

***

## 七、Spring / SpringBoot / MyBatis（P0）

> 简历原文：*"熟悉 Spring、SpringMVC、MyBatis、SpringBoot，了解 Spring Cloud。"*

### 对应 JavaGuide

* [Spring/SpringBoot 专题](https://javaguide.cn/system-design/framework/spring/) ⭐
* [Spring 常见面试题](https://javaguide.cn/system-design/framework/spring/) · [SpringBoot 常见面试题](https://javaguide.cn/system-design/framework/spring/) · [IoC & AOP 详解](https://javaguide.cn/system-design/framework/spring/) · [Spring 事务详解](https://javaguide.cn/system-design/framework/spring/) · [SpringBoot 自动装配原理](https://javaguide.cn/system-design/framework/spring/) · [Spring 中的设计模式](https://javaguide.cn/system-design/framework/spring/)
* [MyBatis 常见面试题](https://javaguide.cn/system-design/framework/mybatis/)

### 必背问题

* \[ ] **IoC**：是什么？解决什么问题？Bean 的作用域和生命周期？
* \[ ] **AOP**：是什么？应用场景（日志、事务、权限 —— 呼应你的 TraceID 项目）？通知类型？AOP 用什么动态代理（JDK / CGLIB）？两者区别？
* \[ ] **Spring 事务**（⚠️ 高频）：
  * `@Transactional` 原理？传播行为（7 种）？隔离级别？
  * **`@Transactional` 失效场景**？（自调用、非 public、异常被吞、抛检查异常未配 rollbackFor、多线程）
* \[ ] **SpringBoot**：
  * 自动装配原理？（`@SpringBootApplication` → `@EnableAutoConfiguration` → SPI 加载 `AutoConfiguration.imports`）
  * 起步依赖（starter）原理？
  * 内嵌 Tomcat 启动流程？
* \[ ] Spring 中用了哪些设计模式？（单例、工厂、代理、模板方法、观察者 —— 呼应你的设计模式技能）
* \[ ] **MyBatis**：
  * `#{}` 和 `${}` 区别？（预编译 vs 字符串拼接，SQL 注入）
  * 一级缓存 / 二级缓存？
  * 动态 SQL？MyBatis 的延迟加载？
  * MyBatis 的接口为什么能直接执行 SQL？（动态代理）

***

## 八、设计模式（P1）

> 简历原文：*"熟悉工厂模式、单例模式、策略模式、责任链模式。"*

### 对应 JavaGuide

* [设计模式常见面试题总结](https://javaguide.cn/system-design/design-pattern/)

### 必背问题（这四个必须结合项目讲）

* \[ ] **单例模式**：饿汉 / 懒汉 / 双重检查锁（DCL，注意 `volatile`）/ 静态内部类 / 枚举 —— 为什么枚举是最优解（防反射 + 防序列化破坏）？
* \[ ] **工厂模式**：简单工厂 / 工厂方法 / 抽象工厂 —— **你的 newPan 多存储引擎切换就是工厂 + 策略**！
* \[ ] **策略模式**：消除 if-else，配合工厂。项目中哪里用了？（存储引擎选择 / 通知渠道）
* \[ ] **责任链模式**：什么是责任链？项目中哪里用了？（认证过滤器链 / 日志处理 / 多级校验）
* \[ ] 能手写单例（DCL）和简单工厂/策略的代码

> \[!TIP]
> 设计模式一定要**结合你的项目讲**：「我的 newPan 用工厂 + 策略模式做了存储引擎的可插拔」。这比空谈概念有说服力得多。

***

## 九、消息队列（P1）

> JavaGuide 没有独立的 MQ 板块，但你的两个项目深度用了 RabbitMQ（Oasis）和 RocketMQ（newPan），必须单独准备。

### 必背问题

* \[ ] MQ 的三大作用（解耦、异步、削峰）
* \[ ] 为什么选 RabbitMQ / RocketMQ / Kafka？三者区别？（RabbitMQ 路由灵活、RocketMQ 事务消息和高吞吐、Kafka 日志/大数据）
* \[ ] 消息可靠性（不丢）：生产端 confirm + 持久化 + 消费端手动 ack
* \[ ] 幂等性（不重复消费）：唯一键 / 去重表 / Redis 标记 / 状态机
* \[ ] 顺序消息：怎么保证？（同一业务 key 进同一队列 + 单消费者）
* \[ ] 消息积压：扩消费者 / 临时\_topic 扩容 / 批量
* \[ ] 死信队列、延迟队列（RabbitMQ 用 TTL+DLX，RocketMQ 自带延迟等级）
* \[ ] **RocketMQ 事务消息**原理（半消息 → 本地事务 → commit/rollback → 回查）

***

## 十、分布式（P1，呼应 newPan 演进）

### 对应 JavaGuide

* [分布式系统知识体系](https://javaguide.cn/distributed-system/) ⭐
* [分布式锁实现方案详解](https://javaguide.cn/distributed-system/) · [分布式事务解决方案详解](https://javaguide.cn/distributed-system/) · [分布式 ID 生成方案详解](https://javaguide.cn/distributed-system/) · [CAP & BASE 理论](https://javaguide.cn/distributed-system/)

### 必背问题

* \[ ] CAP 理论？BASE 理论？为什么三者不可兼得？
* \[ ] **分布式锁**：Redis / Redisson / Redlock / ZooKeeper 各自方案和坑（见第四节）
* \[ ] **分布式事务**：XA / 2PC / 3PC / TCC / Saga / 本地消息表 / 事务消息 / Seata AT —— 至少讲透一种（呼应你的项目）
* \[ ] **分布式 ID**：UUID / 雪花算法 Snowflake / 号段模式（Leaf）—— newPan 文件 ID 怎么生成的？
* \[ ] 一致性哈希？（缓存分片、负载均衡）

***

## 十一、JVM（P1，校招高频）

> 简历没写 JVM，但校招八股几乎必问。建议必看。

### 对应 JavaGuide

* [JVM 专题](https://javaguide.cn/java/jvm/)

### 必背问题

* \[ ] **内存区域**：程序计数器、虚拟机栈、本地方法栈、堆、方法区/元空间 —— 哪些线程共享？哪些会 OOM？
* \[ ] **垃圾回收**：
  * 判断对象存活（可达性分析、GC Roots）
  * 引用类型（强、软、弱、虚 —— 呼应 ThreadLocal 的弱引用 key！）
  * GC 算法（标记清除、复制、标记整理、分代）
  * 垃圾收集器（CMS、G1、ZGC）—— G1 原理？
* \[ ] **类加载**：类加载过程（加载→验证→准备→解析→初始化）？双亲委派模型？为什么要有？怎么打破（Tomcat、SPI、热部署）？
* \[ ] OOM 怎么排查？（堆 dump + MAT / jstack / jmap）
* \[ ] JVM 调优参数（堆大小 `-Xms -Xmx`、`-XX:+UseG1GC`）

***

## 十二、计算机基础（P2）

### 计算机网络

* [JavaGuide 计算机网络](https://javaguide.cn/cs-basics/network/)

必背：

* \[ ] OSI 七层 vs TCP/IP 四层
* \[ ] TCP 三次握手 / 四次挥手 —— 为什么三次？为什么四次？TIME\_WAIT？
* \[ ] TCP vs UDP
* \[ ] HTTP 1.0 / 1.1 / 2.0 / 3.0 区别？HTTP 状态码？keep-alive？
* \[ ] HTTPS 原理？SSL/TLS 握手？对称加密 vs 非对称加密？
* \[ ] 浏览器输入 URL 到页面显示发生了什么？（经典压轴题）
* \[ ] Cookie / Session / Token / JWT 区别？（呼应你的认证过滤器项目）

### 操作系统（主修课程）

* [JavaGuide 操作系统](https://javaguide.cn/cs-basics/operating-system/)

必背：进程 vs 线程、进程通信方式、死锁四条件与预防、虚拟内存、IO 多路复用（select/poll/epoll —— 呼应 Redis）

### 数据结构与算法（主修课程 + 笔试）

* [数据结构知识体系](https://javaguide.cn/cs-basics/data-structure/) · [算法专题](https://javaguide.cn/cs-basics/algorithms/)

重点：布隆过滤器、跳表（ZSet）、LRU（手写）、堆（Top K）、B+ 树（MySQL 索引）—— 这些和你项目直接相关。
笔试准备：剑指 Offer / LeetCode Hot 100，每天 1-2 道保持手感。

***

## 十三、开发工具（P2）

* [Git 核心概念](https://javaguide.cn/tools/git/) · [Maven 核心概念](https://javaguide.cn/tools/maven/)

必背：

* \[ ] Git：`git rebase` vs `git merge`？冲突怎么解决？`git reset` 三种模式？`git cherry-pick`？
* \[ ] Maven：依赖范围（scope）、生命周期、`dependencyManagement` 和 `dependencies` 区别？
* \[ ] Linux 常见命令：`grep`、`awk`、`tail -f`、`top`、`ps`、`netstat`、`curl`、`chmod`

***

## 十四、高频八股自测清单（面试前过一遍）

> 能口述回答，才算过关。讲不清的回去重看 JavaGuide 对应章节。

**Java**

* \[ ] HashMap put 流程 / 扩容 / 并发问题
* \[ ] ThreadLocal 原理 + 内存泄漏 + 线程池下的坑
* \[ ] 线程池七大参数 + 工作流程 + 参数设置
* \[ ] synchronized 锁升级 / volatile / AQS / CAS

**Redis**

* \[ ] 缓存穿透/击穿/雪崩 + 解决方案
* \[ ] 缓存一致性（延迟双删）
* \[ ] 分布式锁（Redisson + 看门狗）
* \[ ] Zset 实现排行榜
* \[ ] RDB vs AOF / 淘汰策略

**MySQL**

* \[ ] B+ 树为什么适合索引
* \[ ] MVCC 原理 / RR 如何解决幻读
* \[ ] 三大日志 + 两阶段提交
* \[ ] 索引失效场景

**框架**

* \[ ] Spring IoC/AOP 原理
* \[ ] @Transactional 失效场景
* \[ ] SpringBoot 自动装配原理
* \[ ] MyBatis #{} vs ${}

**项目**

* \[ ] 能 5 分钟讲完每个项目的背景、架构、你的职责、亮点、难点、优化
* \[ ] 每个 Redis/MQ/线程池技术点都能答出「为什么 + 原理 + 踩坑 + 优化」

***

## 十五、四周复习计划（参考）

| 周次 | 重点 | 产出 |
| --- | --- | --- |
| **第 1 周** | Java 基础/集合/并发 + JVM | 八股能口述，HashMap/ThreadLocal/线程池烂熟 |
| **第 2 周** | MySQL + Redis/缓存 | 索引/MVCC/日志 + 缓存三大问题/一致性/分布式锁 |
| **第 3 周** | Spring 全家桶 + 设计模式 + MQ + 分布式 | 框架原理 + 设计模式结合项目 + MQ 深挖 |
| **第 4 周** | **项目深挖 + 模拟面试** + 计算机基础 | 把第六节所有追问点练到脱稿；每天 1 道算法 |

> \[!IMPORTANT]
> **每天必做两件事**：① 刷 1-2 道算法保持手感；② 对着空气/录音把项目讲一遍。
> 面试不是考你会不会，是考你**能不能讲清楚**。能讲清楚的前提是讲过很多遍。

***

## 十六、简历风险提示（⚠️ 请务必确认）

> \[!CAUTION]
> 以下几处面试时容易"翻车"，建议提前想好答案或调整表述：

1. **"分布式事务升级"** —— 如果 newPan 没有真正落地分布式事务，面试官追问方案/细节会很被动。建议要么补学透 Seata/本地消息表（见第十节），要么把表述弱化为"计划引入 / 学习了方案"。
2. **"性能优化提升 TPS/QPS"** —— 要有**量化数据来源**（JMeter / wrk 压测）。没有压测数据的话，面试官追问"提升了多少、怎么测的"会答不上。
3. **ThreadLocal + 线程池组合**（两个项目都有）—— 这是技术亮点，但也是"内存泄漏/上下文丢失"的经典考点，第三节已重点标注，务必搞透。
4. **Caffeine 多级缓存的一致性** —— 单机缓存多实例同步是深坑，第四节已展开。
5. **前端技能** —— 简历写了较多前端（Vue/Tailwind/AntD），但求职意向是 Java 后端。如果面试官不问就少主动展开，避免被认为"想转前端"或分散重点。

***

## 附：JavaGuide 核心入口速查

| 模块 | 链接 |
| --- | --- |
| 面试通关计划（总入口） | <https://javaguide.cn/interview-preparation/backend-interview-plan.html> |
| Java 基础 | <https://javaguide.cn/java/basis/> |
| Java 集合 | <https://javaguide.cn/java/collection/> |
| Java 并发 | <https://javaguide.cn/java/concurrent/> |
| JVM | <https://javaguide.cn/java/jvm/> |
| MySQL | <https://javaguide.cn/database/mysql/> |
| Redis / 缓存 | <https://javaguide.cn/database/redis/> |
| Spring 框架 | <https://javaguide.cn/system-design/framework/spring/> |
| MyBatis | <https://javaguide.cn/system-design/framework/mybatis/> |
| 设计模式 | <https://javaguide.cn/system-design/design-pattern/> |
| 分布式 | <https://javaguide.cn/distributed-system/> |
| 计算机网络 | <https://javaguide.cn/cs-basics/network/> |
| 操作系统 | <https://javaguide.cn/cs-basics/operating-system/> |
| 数据结构与算法 | <https://javaguide.cn/cs-basics/data-structure/> |
| Git / Maven | <https://javaguide.cn/tools/git/> · <https://javaguide.cn/tools/maven/> |

> 配合 \[\[Java面试模拟]]（项目深挖压力测试 + 行为面复盘）一起用效果更好。
