D

Ch10 · Java Interview Lab

Java 场景面试动画实验室

把高并发、MQ、JVM、缓存一致性、线上排查这些难讲的场景题,拆成「面试官问题 → 工程链路 → 动画推演 → 30 秒表达」。

面试官问题工程链路动画推演30 秒表达

Live Preview

场景题推演流水线

Explain, not effect
  1. 01

    面试官问题

    订单 30 分钟未支付,怎么自动关单且不误关?

  2. 02

    业务约束

    支付回调和关单消息可能同时到达。

  3. 03

    系统链路

    订单状态机 + 延迟队列 + 支付服务 + 订单库。

  4. 04

    风险点

    重复消息、ACK 丢失、CAS 失败、补偿漏扫。

  5. 05

    30 秒答案

    先建模状态机,再讲延迟触发、CAS 幂等和补偿扫描。

Learning Routes

面试路线图

不同路线解决不同面试场景:会讲项目、扛高并发、讲 MQ、做排查、处理一致性和发布迁移。

会讲项目

简历项目表达、分层架构、技术选型、项目亮点

8 Labs
学完能回答什么

能把项目从业务目标讲到架构分层、技术取舍、线上指标和个人贡献。

预计 2.5 小时顺序 简历项目表达 / 分层架构 / 技术选型 / 项目亮点

高并发系统

秒杀、库存超卖、热点数据、10 万 QPS

11 Labs
学完能回答什么

能解释洪峰怎么挡、库存怎么扣、热点怎么隔离,以及数据库为什么不会被打挂。

预计 3 小时顺序 秒杀系统设计 / 库存超卖 / 热点数据 / 10 万 QPS

MQ 异步系统

幂等消费、顺序消费、消息堆积、死信补偿

9 Labs
学完能回答什么

能讲清 MQ 为什么会重投、如何幂等、如何保证局部有序,以及堆积怎么恢复。

预计 2.5 小时顺序 幂等消费 / 顺序消费 / 消息堆积 / 死信补偿

JVM 与线上排查

CPU 飙高、OOM、Full GC、死锁、慢接口

10 Labs
学完能回答什么

能从告警出发,用指标和工具把问题定位到线程、SQL、对象或下游依赖。

预计 3 小时顺序 CPU 飙高 / OOM / Full GC / 死锁 / 慢接口

一致性与发布迁移

缓存一致性、平滑迁移、灰度发布、多活容灾

9 Labs
学完能回答什么

能把一致性问题拆成写路径、读路径、补偿路径和发布回滚路径。

预计 2.5 小时顺序 缓存一致性 / 平滑迁移 / 灰度发布 / 多活容灾

Answer Practice

练 30 秒表达 · 订单超时自动关单

一眼看懂一个场景题从问题、约束、状态机到面试表达的完整链路。

订单超时自动关单 · 预览
订单状态机
WAIT_PAY● 当前
PAID
CLOSED

合法跃迁:WAIT_PAY → CLOSED / PAID。已支付不可关单。

系统链路
订单服务
状态机 + 校验
RocketMQ
延迟消息 scheduled
库存服务
预扣 / 回滚
DB
订单 / 库存表
库存 −1(预扣)

下单成功,订单置 WAIT_PAY,预扣 1 件库存,同时向 MQ 投递一条 30 分钟延迟消息。

时间轴
  1. 0 min
    下单 · 投递延迟消息
  2. 30 min
    到点 · MQ 触发
  3. 消费消息
    校验 → 关单
下单 · 1/5
关键追问

支付回调和关单消息同时到怎么办?

两边都不能盲改状态。支付只允许 WAIT_PAY -> PAID,关单只允许 WAIT_PAY -> CLOSED,用版本号或 where status='WAIT_PAY' 的 CAS 保证只有一方成功。

消息重复消费怎么办?

重复消费只会再次尝试 WAIT_PAY -> CLOSED。订单已 CLOSED 或 PAID 时直接 ack,库存释放也用流水或状态判断做幂等。

MQ 消息丢了怎么办?

MQ 是快路径,补偿扫描是安全网。扫 expireAt 已过且 WAIT_PAY 的订单,按同样的状态机逻辑补关单。