JavaGuide 内容很多,直接按仓库顺序阅读容易失去目标。这份导览只做精选导航和练习设计,不复制原文章正文。固定版本:992dae31eade2a34ba8dbbbcf5ed9de5511325ec。
建议使用当前仍受支持的 JDK,并以你所学版本的官方文档核对语法和 API。上游文章可能使用不同 JDK、框架或数据库版本,不要把示例配置原样套进生产。
路线总览
- 第 1 阶段:Java 基础,产出可运行的小程序。
- 第 2 阶段:集合,能根据数据特征选择结构并解释复杂度。
- 第 3 阶段:并发,能识别共享状态、线程池边界和可见性问题。
- 第 4 阶段:JVM,能用日志和工具解释内存与 GC 现象。
- 第 5 阶段:MySQL,能用执行计划和事务实验验证判断。
- 第 6 阶段:Redis,能区分缓存、数据结构和一致性策略。
1. Java 基础:先建立可验证的语言模型
学习入口:
重点不是背定义,而是回答:值传递如何表现?对象相等与哈希为什么相关?异常何时应该捕获?泛型为什么有类型擦除?I/O 资源如何可靠关闭?
练习产出:
- 写一个命令行记账程序,支持增加、查询和汇总。
- 用集合保存记录,用自定义类型表达业务对象。
- 对非法金额、空输入和文件失败给出明确错误。
- 用自动化测试覆盖正常路径和至少三个异常分支。
自测:不看文章解释 == 与 equals、接口与抽象类、受检与非受检异常、重写与重载,并各写一个反例。
2. 集合:从使用场景推导选择
学习入口:
先会比较 ArrayList、LinkedList、HashMap、LinkedHashMap、TreeMap、HashSet 和并发集合,再读源码。理解扩容不等于背阈值,关键是它能解释查询、插入、迭代和内存权衡。
练习产出:为记账程序建立索引,对比按 ID 查询、按时间排序和按类别去重分别适合什么结构;写基准样例,但不用微小且未预热的结果夸大结论。
3. 并发:先证明正确,再谈性能
学习入口:
必须掌握共享可变状态、原子性、可见性、有序性、锁、线程池任务边界、拒绝策略、超时和取消。虚拟线程不能自动修复锁竞争、连接池耗尽或无界队列。
练习产出:写一个并发统计任务,分别用加锁和并发集合并实现;测试异常任务、超时、关闭和重复提交,记录线程数与队列上限。
4. JVM:从参数背诵转向证据
学习入口:
理解类加载、运行时数据区、对象生命周期、GC Roots、回收算法和不同收集器的取舍。不要在没有证据时“调优”。
练习产出:在本地构造可控对象分配,记录 GC 日志,观察堆使用和停顿;保存 JDK 版本、参数、输入和结论。测试结束即停止,不在共享服务器制造内存压力。
5. MySQL:用执行计划和实验说话
学习入口:
重点包括 B+ 树、联合索引最左匹配、覆盖索引、回表、事务 ACID、隔离级别、MVCC、锁与慢查询分析。文章中的执行结果要在相同 MySQL 版本和隔离级别下复核。
练习产出:在本地测试库创建订单表,构造足够区分度的数据,对三组查询执行 EXPLAIN;用两个事务会话复现可见性差异。不要在生产库做实验。
6. Redis:把缓存策略和一致性放在一起
学习入口:
先理解字符串、哈希、列表、集合和有序集合的用途,再学习缓存穿透、击穿、雪崩、过期策略、持久化和读写一致性。不存在脱离业务约束的“万能缓存模板”。
练习产出:给记账查询加缓存,明确 TTL、键规范、主动失效和异常降级;写出数据库成功而缓存删除失败时的处理方案。
面试前的项目化自测
- 能在白板上画出一次查询经过索引、缓冲和事务可见性的关键路径。
- 能解释一个线上慢查询的排查顺序,而不是直接回答“加索引”。
- 能说明线程池参数、队列、拒绝策略和下游容量之间的关系。
- 能给出一次 JVM 问题的证据:版本、参数、日志、复现和验证。
- 能承认版本差异和不确定性,并用小实验补足。
来源与许可
上游为 Snailclimb 及 JavaGuide 贡献者,采用 Apache License 2.0。本站新增学习顺序、练习和自测,仅引用固定版本目录与章节链接,不复制原文章正文,也不把本导览称为官方面试答案。