面试知识

JVM(Java 虚拟机)与线上排障:知识图谱与复习路线

11-JVM与线上排障 面试知识整理。

JVM(Java 虚拟机)与线上排障:知识图谱与复习路线

本入口定义 JVM(Java 虚拟机)模块的唯一迁移边界、学习顺序、版本表达边界、图形交付和验收方式。它只做导航与质量门禁;01 至 08 子文档分别承担机制、排障、项目表达和综合题正文。旧主文档仍是本轮迁移的基线,不在本文件中复制正文。

1. 使用方式与当前边界

  • 旧主文档:11-JVM与线上排障.md
  • 本入口:11-JVM与线上排障/00-知识图谱与复习路线.md,负责范围、顺序、版本、图表和验收。
  • 正文边界:01 至 05 解释运行机制,06 只组织线上排障证据链,07 只组织项目话术,08 只组织跨章节口述题;跨文档只链接,不复制完整正文。
  • 深度目标:全部子文档达到 L4(精通级),即能说明概念、底层机制、数据演绎、失败边界、排查证据和项目取舍。

2. 旧主文档问题基线与唯一迁移口径

2.1 计数基线

统计对象旧主文档计数解释用途
回答思路88旧文档每出现一次,代表一组已有答题骨架。唯一迁移计数基线。
字面“问题”141同时包含题干、普通叙述、章节名称与追问文字。仅用于发现遗漏,不用于题目总数。
#### 热门面试题24代表旧正文中 24 处章节级题目区。用于检查章节级题目分布。
“热门面试题”文字25比标题数多 1 次,来自“模块综合热门面试题补强”章节名。用于校验标题与文字检索差异。

2.2 唯一迁移规则

**以 88 处“回答思路”为唯一题目迁移口径。**每一处只能归属一个目标子文档;它在其他子文档被复用时,只保留到原文的链接和一句适用边界,不能复制为第二份题目正文。字面“问题”计数会把非题干文字计入,热门题标题只描述题目区而非题组,因此两者都不能替代 88 组基线。

旧主文档第 10 节存在重复编号和补强题。迁移时按“题目所解释的核心机制”落位,先以章节映射确定唯一归属,再以 88 组“回答思路”逐组核对;不以编号相同、标题相似或项目案例相似为理由重复计数。

3. 知识树与章节唯一映射

flowchart TB
    A["JVM(Java 虚拟机)与线上排障"]
    B["01 运行时内存与对象创建"]
    C["02 类文件、类加载与执行引擎"]
    D["03 GC(垃圾回收)基础算法与对象生命周期"]
    E["04 垃圾收集器与版本演进"]
    F["05 内存、日志、参数与容器化"]
    G["06 线上排障与事故复盘"]
    H["07 项目案例与面试话术"]
    I["08 综合面试题库"]
    A --> B
    B --> C
    C --> D
    D --> E
    B --> F
    E --> F
    F --> G
    G --> H
    B --> I
    C --> I
    D --> I
    E --> I
    F --> I
    G --> I
    H --> I

这张 Mermaid(图表语法)图说明知识依赖:对象创建要先理解内存,收集器选择依赖 GC(垃圾回收)算法,容器内存预算汇总运行时和收集器信息;事故复盘与综合题只消费前序证据,不重复讲机制。图中所有含括号的节点均使用双引号,避免 Mermaid(图表语法)把括号误解析为语法。

目标文件L(深度等级)唯一职责旧主文档唯一迁移范围主要依赖
00-知识图谱与复习路线.mdL4(精通级)基线、顺序、版本、图表、验收和恢复。第 1、2、11 节,以及第 10 节的题库导航。OpenSpec(规格驱动框架)规则与旧主文档。
01-运行时内存与对象创建.mdL4(精通级)运行时内存、对象布局、分配、TLAB(线程本地分配缓冲区)、逃逸分析和引用。3.1;3.4 中对象创建部分。无,作为机制起点。
02-类文件类加载与执行引擎.mdL4(精通级)生命周期、类文件结构、类加载、字节码、解释执行和 JIT(即时编译)。3.2、3.3、3.5;第 10 节中的字节码与 JIT(即时编译)题。01 的内存与对象边界。
03-GC基础算法与对象生命周期.mdL4(精通级)GC(垃圾回收)根、可达性、引用、算法、年龄与晋升。4.1、4.2、4.3。01 的对象创建与 02 的类卸载边界。
04-垃圾收集器与版本演进.mdL4(精通级)Serial(串行收集器)、Parallel(并行收集器)、CMS(并发标记清除)、G1(垃圾优先回收器)与 ZGC(低延迟垃圾回收器)。4.4、6.1 的收集器对比;第 10 节的收集器题。03 的算法、对象年龄与晋升。
05-内存日志参数与容器化.mdL4(精通级)GC(垃圾回收)日志、参数、直接内存、线程栈、容器限制与可观测性。第 6 节;第 10 节的日志、直接内存与容器题。01 的内存预算与 04 的收集器阶段。
06-线上排障与事故复盘.mdL4(精通级)OOM(内存溢出)、CPU(中央处理器)、Full GC(完全垃圾回收)、死锁与泄漏的证据链。第 5、8 节;第 10 节的事故题。01 至 05 的可观测信号。
07-项目案例与面试话术.mdL4(精通级)异步导出、OkHttp(HTTP 客户端)、优雅停机与 Runner(执行器)调度。第 7、9 节。05 的预算与 06 的复盘结构。
08-综合面试题库.mdL4(精通级)跨章节长答案、追问和详细章节链接。第 10 节全部问题,去重后迁入。01 至 07 的稳定链接。

4. 学习与排障路线

flowchart LR
    A["识别现象:延迟、重启、内存、CPU(中央处理器)"]
    B["确认边界:JDK(Java 开发工具包)版本、容器限制、启动参数"]
    C["采集证据:日志、线程、堆与进程信息"]
    D["回到机制:内存、类加载、GC(垃圾回收)与执行引擎"]
    E["形成判断:泄漏、容量不足、分配过快、阻塞或配置失配"]
    F["止血与验证:限流、降级、扩容、参数调整、回归观察"]
    G["复盘与表达:项目话术、追问、预防指标"]
    A --> B --> C --> D --> E --> F --> G
    D -. "知识复习" .-> A
    G -. "题库复述" .-> D

这张 Mermaid(图表语法)图把学习和线上处理收敛为同一条闭环:先以版本、资源限制和证据缩小范围,再用机制解释根因,最后验证修复并沉淀面试表达。图中所有含括号的节点均使用双引号;虚线表示复习与复盘对下一次诊断的反馈,而非一次请求的同步调用。

顺序学习主题学习通过标准排障时如何使用
101 运行时内存与对象创建你能画出线程私有与共享内存,并解释一个对象从分配到发布的路径。区分堆、栈、直接内存和元空间的压力来源。
202 类文件、类加载与执行引擎你能区分类生命周期、对象生命周期和 JVM(Java 虚拟机)进程生命周期。解释类加载失败、代码缓存、解释与 JIT(即时编译)波动。
303 GC(垃圾回收)基础算法与对象生命周期你能按引用链和算法成本推演对象何时回收、为何晋升。判断存活集过大、晋升过快或引用链未释放。
404 垃圾收集器与版本演进你能按延迟、吞吐、堆规模和版本边界选择验证方向。判断收集器阶段、回收失败和不兼容参数。
505 内存、日志、参数与容器化你能做出进程内存预算并读出一次 GC(垃圾回收)事件的关键信号。先核对容器限制、进程 RSS(常驻内存集)与 JVM(Java 虚拟机)参数。
606 线上排障与事故复盘你能给出止血、取证、根因、修复验证的顺序。按证据链处置 OOM(内存溢出)、CPU(中央处理器)高和频繁 Full GC(完全垃圾回收)。
707 项目案例与面试话术你能用背景、量级、证据、方案、风险、结果完整复述案例。把异步导出、Runner(执行器)恢复和优雅停机讲成工程决策。
808 综合面试题库你能在三至五分钟内完成跨章节口述,并回答直接追问。将真实事故证据映射回机制和预防措施。

5. JDK(Java 开发工具包)8、17、21 版本基线与表达边界

5.1 先验证,再下结论

本模块以 OpenJDK(开放 Java 开发工具包)HotSpot(热点虚拟机)为解释参照,不把“默认”写成跨供应商、跨更新版本、跨硬件和跨启动参数都成立的结论。每次线上分析都记录实际发行版、完整版本、启动参数、容器运行时和限制值;再用 -XX:+PrintCommandLineFlags-XX:+PrintFlagsFinal-Xlog:gc*=info-Xlog:os+container=trace 的实际输出确认收集器、参数可用性和容器识别结果。

| 基线 | 默认收集器的安全表述 | 日志边界 | 容器感知边界 | CMS(并发标记清除)与 ZGC(低延迟垃圾回收器)边界 | | --- | --- | --- | --- | | JDK(Java 开发工具包)8 | Oracle(甲骨文)文档说明,Server-class(服务器级)机器上的 Server VM(服务器虚拟机)默认选择 Parallel(并行收集器);实际选择仍受虚拟机类型、硬件资源和显式参数影响,必须以进程输出复核。 | 旧式 GC(垃圾回收)日志参数是本代基线;不要把 JDK(Java 开发工具包)9+ 的 -Xlog 配置原样当作 JDK(Java 开发工具包)8 语法。 | 不能把“JDK(Java 开发工具包)8”笼统等同于“已自动识别容器”;应记录具体更新版本、发行版和限制模式后验证。 | CMS(并发标记清除)仍是历史系统可能显式启用的选项;ZGC(低延迟垃圾回收器)不属于 JDK(Java 开发工具包)8 基线。 | | JDK(Java 开发工具包)17 | JDK(Java 开发工具包)9 的 JEP(JDK 增强提案)248 将 G1(垃圾优先回收器)设为 Server(服务器)配置的默认收集器;对 JDK(Java 开发工具包)17 进程仍以实际输出为准,不将其泛化为所有受限环境。 | 使用统一日志框架的 -Xlog 语法;日志字段、标签与解析器兼容性应在目标发行版验证。 | 以运行时探测结果为准,重点核对可见 CPU(中央处理器)、内存限制和百分比型堆参数的计算结果。 | JDK(Java 开发工具包)14 已按 JEP(JDK 增强提案)363 移除 CMS(并发标记清除);ZGC(低延迟垃圾回收器)在 JDK(Java 开发工具包)15 由实验性能力转为产品能力,但不是默认收集器。 | | JDK(Java 开发工具包)21 | 沿用“G1(垃圾优先回收器)通常是未显式选择收集器时的验证起点”,不以该句替代运行时检查。 | 延续统一日志框架;通过目标版本的 -Xlog:help 获取真实标签与可用选项。 | 同时核对容器限制、进程原生内存和线程数,因为容器 OOMKilled(容器内存杀死)不等同于 JVM(Java 虚拟机)抛出 OOM(内存溢出)。 | ZGC(低延迟垃圾回收器)的分代实现由 JEP(JDK 增强提案)439 在 JDK(Java 开发工具包)21 交付;是否启用、使用的模式和参数仍以目标构建的标志输出与发布说明为准。 |

版本依据与可复查来源:

6. 必画图与图形资产清单

图形主题唯一归属形式与必须表达的结论资产或产物
内存区域01-运行时内存与对象创建.mdMermaid(图表语法)图:线程私有、共享区域、直接内存与故障信号。内嵌 Mermaid(图表语法)图。
对象创建01-运行时内存与对象创建.mdMermaid(图表语法)顺序图:类检查、分配、零值、对象头、构造和安全发布。内嵌 Mermaid(图表语法)图。
对象生命周期03-GC基础算法与对象生命周期.md教学图:创建、跨代引用、不可达、标记与回收,并标注失败路径。assets/object-lifecycle.pumlassets/object-lifecycle.png
类生命周期02-类文件类加载与执行引擎.mdMermaid(图表语法)状态图:加载、验证、准备、解析、初始化、使用与卸载。内嵌 Mermaid(图表语法)图。
字节码执行02-类文件类加载与执行引擎.mdMermaid(图表语法)图:类文件、局部变量表、操作数栈、动态链接与返回。内嵌 Mermaid(图表语法)图。
GC(垃圾回收)算法03-GC基础算法与对象生命周期.mdMermaid(图表语法)图:标记清除、复制、标记整理与分代取舍。内嵌 Mermaid(图表语法)图。
G1(垃圾优先回收器)与 ZGC(低延迟垃圾回收器)04-垃圾收集器与版本演进.mdMermaid(图表语法)图:阶段、停顿与失败边界;PlantUML(开源建模工具)图:Region(区域)与跨区引用。assets/g1-regions.pumlassets/g1-regions.png
GC(垃圾回收)日志05-内存日志参数与容器化.mdMermaid(图表语法)图:日志字段到容量、停顿和原因的读法。内嵌 Mermaid(图表语法)图。
容器内存05-内存日志参数与容器化.mdMermaid(图表语法)图:限制值、堆、元空间、线程栈、直接内存与 RSS(常驻内存集)预算。内嵌 Mermaid(图表语法)图。
排障决策06-线上排障与事故复盘.mdMermaid(图表语法)图:现象、止血、取证、根因、验证和复盘。内嵌 Mermaid(图表语法)图。
项目事故07-项目案例与面试话术.mdMermaid(图表语法)图:异步导出、Runner(执行器)恢复或优雅停机的正常与失败路径。内嵌 Mermaid(图表语法)图。

所有图必须同时表达正常路径、至少一条失败路径和可用于面试复述的结论。PlantUML(开源建模工具)图保留源文件与 PNG(便携式网络图形)渲染结果;Mermaid(图表语法)图在提交前进行真实渲染。

7. 完成判定与模块审计

7.1 入口完成判定

本入口满足下列条件,才算可独立续接:88 组迁移口径与 24 个章节级热门题区已登记;01 至 08 的唯一职责、依赖、学习顺序和 L(深度等级)已明确;JDK(Java 开发工具包)8、17、21 的版本结论均有表达边界和来源;图形资产路径已登记;单文件术语与链接审计为 0 个问题。

7.2 模块完成判定

整个 JVM(Java 虚拟机)模块只有在以下条件同时成立时才可标记为“已完成”:

  1. 88 组“回答思路”都能追溯到唯一目标文件,且每组都补齐详细答案、进阶追问和进阶回答。
  2. 01 至 07 的每个知识型小节含 #### 热门面试题 和至少三道完整题;08 含至少 30 道跨章节长答案题,并链接到真实详细章节。
  3. 第 6 节登记的图形均有源文件或可渲染 Mermaid(图表语法)定义,且真实渲染通过。
  4. 术语、相对链接、代码围栏、题目字段、占位句和事实边界审计全部通过;JDK(Java 开发工具包)版本结论已按目标发行版抽查。
  5. 异步导出、Runner(执行器)调度、WMS(仓储管理系统)库存压力或 IoT(物联网)报警风暴至少各有一个可复述的 JVM(Java 虚拟机)排障落点。

7.3 本文件定向审计

审计器的 --module 参数按路径子串匹配,00-知识图谱与复习路线 会命中其他模块的同名入口。因此本文件使用审计器的 audit_file(单文件审计函数)进行定向检查;以下命令只检查本文件、术语与链接,不会把其他模块同名文件混入结果。

python3 - <<'PY'
from pathlib import Path
from tools.interview_kb_audit import audit_file, load_terminology

root = Path("面试知识整理")
target = root / "11-JVM与线上排障/00-知识图谱与复习路线.md"
terms = load_terminology(root / "04-英文术语标注规范.md")
issues = audit_file(target, terms)
for issue in issues:
    print(f"{issue.path}:{issue.line}: [{issue.code}] {issue.message}")
raise SystemExit(1 if issues else 0)
PY

命令退出码为 0 且无输出时,表示本文件的链接、术语、围栏、占位句和结构规则均无问题;这不替代 01 至 08 全部完成后的全模块审计。

8. 新对话恢复说明

  1. 先完整读取 AGENTS.md、OpenSpec(规格驱动框架)规格与变更包、面试知识整理/00-项目说明-续接必读.md03-成稿进度看板.md04-英文术语标注规范.md05-查漏补全-精通级补强计划.md06-审查报告与明日学习路线.md08-精通级扩展执行看板.md
  2. 再读取本入口、旧主文档全部标题、docs/superpowers/plans/2026-07-13-interview-knowledge-base-module-02-jvm-plan.mdtools/interview_kb_audit.py;先确认 88 组迁移基线和本文件第 3 节的唯一边界。
  3. 08-精通级扩展执行看板.md 的编号选择 JVM(Java 虚拟机)模块最小的未完成子文档;写作只落在该子文档及其允许的图形资产中,不回写旧主文档,不复制其他子文档正文。
  4. 写完后先执行该文件的 audit_file(单文件审计函数),再检查 Mermaid(图表语法)或 PlantUML(开源建模工具)真实渲染;只有该子文档的术语、链接、图形和事实边界均通过,才更新获授权的执行看板。
  5. 全部子文档通过后,以本文件第 7 节的模块完成判定收口;旧主文档的导航化、两级看板更新与全模块审计必须在同一获授权工作范围内完成。