语雀《学习文档》内容整理:Java 后端知识地图(站内独立版)
说明:本文已将原“目录 + 外链”形式改为站内可直接阅读的独立文档。
一、全景知识地图
Java 后端知识可按 3 层能力来组织:
- 基础运行时层:并发编程、JVM、IO、TCP/IP。
- 数据与性能层:Redis、缓存、分布式缓存。
- 分布式治理层:消息中间件、限流、GC 与稳定性优化。
建议学习策略:先构建“运行时 + 网络”底座,再进入“缓存 + 消息”中间件,最后补齐“限流 + GC”稳定性治理。
二、并发编程(Concurrency)
1. 核心目标
- 让多线程在正确性(不出错)和性能(吞吐/延迟)之间取得平衡。
2. 必会概念
- 线程与进程、用户态与内核态切换。
- 可见性、原子性、有序性(JMM 三大问题)。
synchronized、volatile、Lock、CAS。- 线程池参数:核心线程数、队列、拒绝策略。
3. 高频实践
- IO 密集型场景:线程数可大于 CPU 核数。
- CPU 密集型场景:线程数通常接近 CPU 核数。
- 避免在业务代码里滥用
new Thread(),统一收敛到线程池。
4. 常见故障定位
- 吞吐下降:看线程池队列堆积与上下文切换。
- 响应变慢:排查锁竞争、长临界区与阻塞调用。
- 偶发错误:优先怀疑共享变量发布与并发容器使用方式。
三、JVM 整理(Java Runtime)
1. 执行路径
.java 源码 → 编译成 .class → 类加载(加载/链接/初始化)→ 字节码执行。
2. 运行时内存区域
- 堆(对象分配主区域)
- 虚拟机栈(方法调用)
- 方法区/元空间(类元数据)
- 程序计数器、本地方法栈
3. 类加载机制
- 双亲委派模型:避免核心类被篡改、避免重复加载。
- 重点掌握:何时触发类初始化、何时只加载不初始化。
4. 排查主线
OOM:先看堆、再看元空间、最后看直接内存。Full GC频繁:看对象晋升、内存分配速率与大对象分配。
四、IO 与 TCP/IP 基础
1. IO 模型
- BIO:阻塞式,编码简单,连接数大时扩展性弱。
- NIO:多路复用,适合高并发网络场景。
- AIO:异步回调,模型复杂但理论并发能力更高。
2. TCP/IP 关键点
- 三次握手、四次挥手。
- 滑动窗口、重传机制、拥塞控制。
TIME_WAIT过多与连接复用。
3. 后端实践关注
- 长连接与短连接的取舍。
- 粘包拆包与应用层协议设计。
- 超时设置(连接超时 / 读超时 / 写超时)分层治理。
五、Redis、缓存与分布式缓存
1. Redis 认知
- 数据结构:String、Hash、List、Set、ZSet。
- 常见底层结构:动态字符串、哈希表、跳表等。
- 场景:缓存、分布式锁、计数器、排行榜。
2. 缓存三大问题
- 缓存穿透:查不到的数据反复打 DB。
- 缓存击穿:热点 key 失效瞬间冲垮后端。
- 缓存雪崩:大量 key 同时过期导致服务雪崩。
3. 常用治理手段
- 空值缓存 + BloomFilter。
- 热点 key 永不过期或逻辑过期。
- 过期时间打散 + 多级缓存(本地 + Redis)。
4. 分布式缓存设计要点
- 一致性:先更新库还是先删缓存要有统一策略。
- 可用性:主从、哨兵、集群模式按业务体量选择。
- 可观测性:命中率、慢查询、内存碎片率、连接数必须可监控。
六、消息中间件(RocketMQ / Pulsar)
1. 为什么需要 MQ
- 解耦:生产者与消费者职责分离。
- 削峰:瞬时流量用队列缓冲。
- 异步:把非核心链路改为异步处理。
2. 关键语义
- 至少一次、至多一次、尽力一次(语义与成本权衡)。
- 顺序消息、延迟消息、事务消息。
- 幂等消费:用业务主键或去重表防重。
3. RocketMQ 与 Pulsar(选型视角)
- RocketMQ:工程化成熟,国内生态与实践丰富。
- Pulsar:存算分离架构突出,多租户能力更强。
- 选型优先看:团队经验、运维复杂度、生态整合成本。
4. 常见问题
- 消息堆积:消费者能力不足或下游阻塞。
- 重复消费:业务层必须实现幂等。
- 消息丢失:生产、存储、消费确认链路逐层兜底。
七、限流算法与稳定性治理
1. 常见限流算法
- 固定窗口计数器:实现简单,但临界突刺明显。
- 滑动窗口:统计更平滑,复杂度略高。
- 令牌桶:允许突发,整体速率可控。
- 漏桶:输出速率稳定,适合下游保护。
2. 落地策略
- 网关层做全局限流(按 IP、接口、租户)。
- 服务层做资源限流(线程池、连接池、QPS)。
- 降级与熔断联动,避免“限流成功但服务仍雪崩”。
3. 观测指标
- 限流触发率、请求拒绝率、95/99 线延迟、错误率。
八、GC 算法与内存调优
1. 垃圾回收核心思想
- 判断对象是否存活(可达性分析)。
- 回收策略:标记-清除、标记-整理、复制算法。
2. 分代回收思路
- 新生代:对象朝生夕灭,回收频繁。
- 老年代:存活对象多,回收成本高。
3. 调优方法论
- 先看日志与监控,再改参数。
- 关注吞吐优先还是停顿优先。
- 避免“凭感觉调参”,每次变更都要可回滚、可对比。
九、4 周复习路线(可直接执行)
第 1 周:并发 + JVM
- 输出:线程池参数模板 + 常见 OOM 排查清单。
第 2 周:IO + TCP/IP + 缓存基础
- 输出:服务超时治理基线 + 缓存问题排查手册。
第 3 周:Redis + 分布式缓存 + MQ
- 输出:热点 key 保护方案 + 消费幂等模板。
第 4 周:限流 + GC + 全链路复盘
- 输出:接口限流策略表 + GC 监控看板指标清单。
十、作为站内文档的后续维护建议
- 每个主题继续拆分为三部分:概念卡片 / 面试题 / 最小可运行代码。
- 每次新增知识点时补齐:适用场景、边界条件、故障信号、排查命令。
- 在文章末尾维护“版本记录”,确保知识地图可追踪迭代。