# Java 后端面试检查表

IT枫斗者 · 2026-11-06 · https://qiuzhiwang.vip/resources/

使用方法：逐项记录“能回答 / 需要查资料 / 需要实践”。先用 60 秒讲结论，再解释原理、一个例子和适用边界。不要只给自己打一个分。

## 基础与集合

- [ ] equals 与 hashCode 的约束是什么？怎样验证自定义键的行为？
- [ ] HashMap 的 put/get 怎么定位桶？给出所用 JDK 版本。
- [ ] HashMap 为什么不能直接用于并发读写？ConcurrentHashMap 适用什么场景？
- [ ] ArrayList 扩容会付出什么代价？批量写入前怎样估算容量？
- [ ] 异常如何分层处理？业务错误、外部超时和程序错误怎样区分？

## 并发与 JVM

- [ ] synchronized 解决什么问题？锁住的对象到底是谁？
- [ ] volatile 能保证什么，不能保证什么？用自增反例解释。
- [ ] 线程池大小、队列和拒绝策略怎样结合业务确定？
- [ ] 接口变慢时怎样区分 CPU、锁竞争、GC 与外部依赖？
- [ ] 如何读一次线程转储或 GC 日志，而不是只背 JVM 分区？

## Spring 与数据库

- [ ] Spring 事务失效的常见原因是什么？怎样写最小复现？
- [ ] 事务隔离级别与业务并发冲突有什么关系？
- [ ] 慢 SQL 怎么用执行计划定位？索引是否真的被使用？
- [ ] 分页、排序与复合索引怎样一起设计？
- [ ] 缓存更新失败后会发生什么？重试、过期与版本控制各解决哪部分问题？
- [ ] 缓存穿透、击穿、雪崩如何区分？防护是否能扛住下游限额？

## 消息与服务

- [ ] 消费重复、乱序和积压怎样分别处理？
- [ ] 幂等键放在哪里？请求超时后重试是否产生重复业务操作？
- [ ] 外部服务变慢时，超时、限流、熔断、降级的边界是什么？
- [ ] 监控告警怎样指向一个可执行的排查步骤？

## 项目与表达

- [ ] 用三分钟说明业务目标、系统边界和本人职责。
- [ ] 挑一个取舍：为什么没有选另一个技术方案？
- [ ] 挑一个失败路径：超时、消息重复、缓存失效或权限错误。
- [ ] 给出真实验证材料：测试步骤、日志、代码提交或压测条件。
- [ ] 所有数字是否有口径、时间范围和本人工作关联？
- [ ] 对未实际完成的工作，能否明确说“练习实现”或“设计方案”？

## 每题记录

问题：
我的结论（不超过三句）：
原理 / 实现版本：
我的例子或复现：
边界 / 失败情形：
参考资料：
下次复习日期：

知识文章：https://qiuzhiwang.vip/home.html
任务路线：https://qiuzhiwang.vip/roadmaps/java-interview.html
