Java 面试复习指南
重要
本指南完全围绕你的简历技术栈展开,每个考点都对应 JavaGuide 的具体章节。 复习主入口:Java 后端面试通关计划(不知道从哪开始就先看这个)。
怎么用这份指南
- 先看优先级地图,知道哪些是 P0(简历写了 + 高频必问),把时间砸在 P0 上。
- 按模块清单逐项过,每项都点开 JavaGuide 对应文章,把"必背问题"能口述讲清楚。
- 重点打磨项目深挖(Oasis + newPan),面试 60% 的时间花在你的项目上,八股反而次之。
- 用自测清单检验,讲不清楚 = 没复习到位。
提示
优先级含义: P0 = 简历明确写了 + 几乎逢面必问,必须能讲清原理和取舍。 P1 = 简历相关 + 高频,要能答出主流答案。 P2 = 加分项/计算机基础,时间充裕再补。
一、复习优先级地图(总览)
| 优先级 | 模块 | 对应简历来源 | JavaGuide 入口 |
|---|---|---|---|
| 🔴 P0 | Java 集合 + 并发 | 个人技能 + 两个项目(ThreadLocal/线程池) | Java 并发 · Java 集合 |
| 🔴 P0 | Redis + 缓存 | 个人技能 + 两个项目核心(多级缓存/Zset/三大问题) | Redis 专题 |
| 🔴 P0 | MySQL | 个人技能(事务/索引/锁/日志) | MySQL 专题 |
| 🔴 P0 | Spring/SpringBoot/MyBatis | 个人技能 + 项目 | Spring 框架 |
| 🔴 P0 | 项目深挖(Oasis + newPan) | 项目经历 | 见第六节 |
| 🟡 P1 | 消息队列(RabbitMQ/RocketMQ) | 两个项目 | JavaGuide 无独立 MQ 板块,见第五节补充 |
| 🟡 P1 | 设计模式 | 个人技能(工厂/单例/策略/责任链) | 设计模式 |
| 🟡 P1 | 分布式(锁/事务/ID) | newPan 项目演进 | 分布式系统 |
| 🟡 P1 | JVM | 校招高频(简历未写但必问) | JVM |
| 🟢 P2 | 计算机网络 | 主修课程 + 八股必备 | 计算机网络 |
| 🟢 P2 | 操作系统 | 主修课程(操作系统) | 操作系统 |
| 🟢 P2 | 数据结构与算法 | 主修课程 + 笔试 | 数据结构 |
| 🟢 P2 | Git / Maven / Linux | 个人技能 | Git · Maven |
二、Java 基础与集合(P0)
简历原文:"掌握 Java 基础知识,如集合框架、I/O流、Stream 流、反射机制等。"
对应 JavaGuide
- Java 基础常见知识点&面试题总结(上/中/下)
- Java 反射机制详解 (板块页内找「反射」)
- Java 集合常见知识点&面试题总结(上/下)
- 源码分析:HashMap 源码 · ConcurrentHashMap 源码 · ArrayList 扩容机制
必背问题
提示
集合是 Java 八股的「基本盘」,HashMap 几乎逢面必问。把 HashMap 的 put 流程、扩容、并发问题讲清楚,这一关基本稳了。
三、Java 并发(P0,项目重灾区)
简历两处用到 ThreadLocal(认证过滤器建立用户上下文),两处用到线程池(异步转存 OSS)。这是面试官深挖的重灾区。
对应 JavaGuide
必背问题
- 原理?
Thread、ThreadLocal、ThreadLocalMap三者关系? - 为什么用
ThreadLocalMap而不是用Map<Thread, Value>? - 内存泄漏问题?key 为什么用弱引用?value 为什么是强引用?怎么解决(用完
remove())? InheritableThreadLocal能解决什么?父子线程传值?- ⚠️ 线程池下 ThreadLocal 会串数据!你的项目用线程池 + ThreadLocal,面试官一定会问怎么避免(任务执行前后清理 / 用阿里的
TransmittableThreadLocal)。
- 原理?
- 七大核心参数?工作流程(核心线程 → 队列 → 最大线程 → 拒绝策略)?
- 四种拒绝策略?
- 线程池怎么合理设置参数(CPU 密集 vs IO 密集)?为什么不要用
Executors.newFixedThreadPool(无界队列 OOM)? - 你的 OSS 转存线程池参数怎么定的?
警告
你的两个项目都用了 「ThreadLocal + 线程池」,这是经典的「坑点组合」。务必把「线程池下 ThreadLocal 内存泄漏和上下文丢失」搞透,否则简历亮点会变成翻车点。
四、Redis 与缓存(P0,绝对核心)
简历最浓墨重彩的部分:Caffeine+Redis 多级缓存、Zset 排行榜、Cache-Aside 一致性、持久化、过期淘汰、分布式锁、缓存三大问题。
对应 JavaGuide
- Redis 专题 ⭐ 重点板块
- 缓存基础常见面试题总结(缓存穿透/击穿/雪崩/一致性)
- 3 种常用的缓存读写策略详解(Cache Aside / Read-Write Through / Write Behind)
- Redis 5 种基本数据结构 · Redis 持久化机制 · Redis 集群详解 · Redis 为什么用跳表实现 ZSet
必背问题
- 穿透(查不存在的数据)→ 布隆过滤器 / 缓存空值(⚠️ 你的 newPan 正是用 Bloom Filter 解决这个!)
- 击穿(热点 key 过期)→ 互斥锁 / 逻辑过期 / 热点 key 永不过期
- 雪崩(大量 key 同时过期 / Redis 宕机)→ 过期时间加随机值 / 多级缓存 / 集群高可用
- Cache Aside / Read Through / Write Behind 三种策略区别?
- 「先删缓存再更新 DB」有什么问题?(缓存删除后、DB 更新前有读请求把旧值写回)
- 「先更新 DB 再删缓存」就安全吗?(并发下仍可能不一致)→ 延迟双删怎么实现?
- 删除缓存失败怎么办?(消息队列重试 / 订阅 binlog 如 Canal)
- 为什么需要多级缓存?Caffeine 和 Redis 各解决什么问题?
- Caffeine 用什么淘汰算法(W-TinyLFU)?
- 本地缓存(Caffeine)多实例部署时怎么保证一致性?(这是深坑:可以用 Redis 发布订阅广播失效 / MQ 通知)
- 怎么用 Zset 实现排行榜?(
ZADD/ZINCRBY/ZREVRANGE) - 相同分数怎么排序?数据量巨大(亿级)怎么办?(分片 / 冷热分离)
- 实时排行榜 vs 定时排行榜的取舍?
- 怎么用 Zset 实现排行榜?(
- 怎么用 Redis 实现分布式锁?(
SET key value NX PX) - 业务没执行完锁过期了怎么办?(看门狗续期 → Redisson)
- Redisson 原理?Redlock 算法?为什么 Redlock 有争议?
- 怎么用 Redis 实现分布式锁?(
重要
Redis 是你简历的「王牌」,但也是面试官最容易找到破绽的地方。多级缓存一致性、Zset 排行榜的边界、分布式锁的坑——这三块每个都要能讲到生产细节,不能停在概念。
五、MySQL(P0)
简历原文:"熟练使用 MySQL,掌握事务、索引、锁、日志等相关知识。"
对应 JavaGuide
- MySQL 专题
- MySQL 索引详解 · MySQL 索引失效场景总结 · MySQL 事务隔离级别图文详解 · MySQL 三大日志详解 · InnoDB 对 MVCC 的实现 · 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 语句的执行流程(涉及这三种日志的写入顺序)
提示
MySQL 面试的「黄金主线」:索引 → 执行计划 → 事务 → MVCC → 三大日志 → 性能优化。把这条线串起来讲,比零散背题强十倍。
六、项目深挖准备(P0,重中之重)
注意
面试中 60% 的时间会花在你的项目上。八股答得再好,项目讲不清也挂。 下面把简历里每个技术点都拆成「面试官会怎么追问」,每个都要能答出来。
项目一:Oasis 技术社区
模块负责人:消息通知、文章教程。技术栈 SpringBoot + MySQL + Redis + RabbitMQ + Vue3。
1. RabbitMQ 异步处理互动数据 + 通知
2. Caffeine + Redis 多级缓存(热门文章排行、专栏)
3. Redis Zset 活跃度排行榜 + Cache-Aside
4. ThreadLocal 认证上下文
5. 第三方图片 OSS 自动转存 + 线程池
6. AOP + TraceID 全链路日志
项目二:newPan 分布式存储系统
核心开发:存储引擎、缓存、分享。技术栈 SpringBoot2 + MySQL + Redis + RocketMQ + 多存储引擎。
1. Caffeine + Redis 多级缓存(同上,注意对比两个项目用法)
2. 阿里 OSS 存储引擎 + 自动转存
3. SpringCloud Stream + RocketMQ
4. Bloom Filter 分享链接校验
5. ThreadLocal(同上)
6. ⚠️ 项目演进(简历重点,也是最大风险点)
警告
简历写了 「本地事务升级为分布式事务」、「本地锁升级为分布式锁」。这两句话如果没有真正落地,面试官一追问就露馅。要么把方案学透,要么调整简历表述。
重要
如果某个演进点你没真正做过,诚实承认"这是项目规划/学习阶段"比硬编强百倍。面试官欣赏诚实 + 有思考,最反感编造细节。
七、Spring / SpringBoot / MyBatis(P0)
简历原文:"熟悉 Spring、SpringMVC、MyBatis、SpringBoot,了解 Spring Cloud。"
对应 JavaGuide
- Spring/SpringBoot 专题 ⭐
- Spring 常见面试题 · SpringBoot 常见面试题 · IoC & AOP 详解 · Spring 事务详解 · SpringBoot 自动装配原理 · Spring 中的设计模式
- MyBatis 常见面试题
必背问题
@Transactional原理?传播行为(7 种)?隔离级别?@Transactional失效场景?(自调用、非 public、异常被吞、抛检查异常未配 rollbackFor、多线程)
- 自动装配原理?(
@SpringBootApplication→@EnableAutoConfiguration→ SPI 加载AutoConfiguration.imports) - 起步依赖(starter)原理?
- 内嵌 Tomcat 启动流程?
- 自动装配原理?(
#{}和${}区别?(预编译 vs 字符串拼接,SQL 注入)- 一级缓存 / 二级缓存?
- 动态 SQL?MyBatis 的延迟加载?
- MyBatis 的接口为什么能直接执行 SQL?(动态代理)
八、设计模式(P1)
简历原文:"熟悉工厂模式、单例模式、策略模式、责任链模式。"
对应 JavaGuide
必背问题(这四个必须结合项目讲)
提示
设计模式一定要结合你的项目讲:「我的 newPan 用工厂 + 策略模式做了存储引擎的可插拔」。这比空谈概念有说服力得多。
九、消息队列(P1)
JavaGuide 没有独立的 MQ 板块,但你的两个项目深度用了 RabbitMQ(Oasis)和 RocketMQ(newPan),必须单独准备。
必背问题
十、分布式(P1,呼应 newPan 演进)
对应 JavaGuide
必背问题
十一、JVM(P1,校招高频)
简历没写 JVM,但校招八股几乎必问。建议必看。
对应 JavaGuide
必背问题
- 判断对象存活(可达性分析、GC Roots)
- 引用类型(强、软、弱、虚 —— 呼应 ThreadLocal 的弱引用 key!)
- GC 算法(标记清除、复制、标记整理、分代)
- 垃圾收集器(CMS、G1、ZGC)—— G1 原理?
十二、计算机基础(P2)
计算机网络
必背:
操作系统(主修课程)
必背:进程 vs 线程、进程通信方式、死锁四条件与预防、虚拟内存、IO 多路复用(select/poll/epoll —— 呼应 Redis)
数据结构与算法(主修课程 + 笔试)
重点:布隆过滤器、跳表(ZSet)、LRU(手写)、堆(Top K)、B+ 树(MySQL 索引)—— 这些和你项目直接相关。 笔试准备:剑指 Offer / LeetCode Hot 100,每天 1-2 道保持手感。
十三、开发工具(P2)
必背:
十四、高频八股自测清单(面试前过一遍)
能口述回答,才算过关。讲不清的回去重看 JavaGuide 对应章节。
Java
Redis
MySQL
框架
项目
十五、四周复习计划(参考)
| 周次 | 重点 | 产出 |
|---|---|---|
| 第 1 周 | Java 基础/集合/并发 + JVM | 八股能口述,HashMap/ThreadLocal/线程池烂熟 |
| 第 2 周 | MySQL + Redis/缓存 | 索引/MVCC/日志 + 缓存三大问题/一致性/分布式锁 |
| 第 3 周 | Spring 全家桶 + 设计模式 + MQ + 分布式 | 框架原理 + 设计模式结合项目 + MQ 深挖 |
| 第 4 周 | 项目深挖 + 模拟面试 + 计算机基础 | 把第六节所有追问点练到脱稿;每天 1 道算法 |
重要
每天必做两件事:① 刷 1-2 道算法保持手感;② 对着空气/录音把项目讲一遍。 面试不是考你会不会,是考你能不能讲清楚。能讲清楚的前提是讲过很多遍。
十六、简历风险提示(⚠️ 请务必确认)
注意
以下几处面试时容易"翻车",建议提前想好答案或调整表述:
- "分布式事务升级" —— 如果 newPan 没有真正落地分布式事务,面试官追问方案/细节会很被动。建议要么补学透 Seata/本地消息表(见第十节),要么把表述弱化为"计划引入 / 学习了方案"。
- "性能优化提升 TPS/QPS" —— 要有量化数据来源(JMeter / wrk 压测)。没有压测数据的话,面试官追问"提升了多少、怎么测的"会答不上。
- ThreadLocal + 线程池组合(两个项目都有)—— 这是技术亮点,但也是"内存泄漏/上下文丢失"的经典考点,第三节已重点标注,务必搞透。
- Caffeine 多级缓存的一致性 —— 单机缓存多实例同步是深坑,第四节已展开。
- 前端技能 —— 简历写了较多前端(Vue/Tailwind/AntD),但求职意向是 Java 后端。如果面试官不问就少主动展开,避免被认为"想转前端"或分散重点。
附:JavaGuide 核心入口速查
配合 Java面试模拟(项目深挖压力测试 + 行为面复盘)一起用效果更好。
