跳到主要内容

场景题通用分析与排障框架

场景

面对“线上突然变慢”“偶现白屏”“发布后部分用户异常”等信息不完整的场景题,如何快速组织思路,既解决眼前问题,又体现系统化排障和工程治理能力?

面试速答版

场景题统一按七步回答:

  1. 确认现象:谁、何时、在哪里、什么版本、能否稳定复现;
  2. 评估影响:影响用户、核心链路、错误率和业务损失;
  3. 必要时止血:回滚、关闭开关、降级或切换兜底;
  4. 建立证据链:监控、日志、网络、性能录制和变更记录;
  5. 分层定位:环境 → 资源 → 网络 → 数据 → 运行时 → 渲染;
  6. 最小修复并验证:对照实验、灰度、观察护栏指标;
  7. 复盘和预防:补监控、测试、发布门禁与责任人。

回答时要区分“我会检查什么”和“什么证据能证明它就是根因”。

一、场景题考察的核心能力

场景题不是背诵排查清单,而是考察四件事:

  • 优先级判断:是否知道先恢复用户可用性;
  • 假设驱动排查:能否用低成本实验快速缩小范围;
  • 证据意识:结论是否来自日志、指标、Trace 和对照实验;
  • 体系化改进:是否能把一次故障转化为监控、测试和流程能力。

二、七步排障闭环

1. 确认现象

用“人、端、网、版本、路径、时间”描述问题:

维度示例问题
全部用户、某租户还是某账号?
iOS、Android、桌面端还是某浏览器?
Wi-Fi、蜂窝网络、某运营商或地区?
版本前端构建版本、接口版本、配置版本是什么?
路径哪个入口、哪一步操作后出现?
时间首次发生、持续时间、是否与发布重合?

“页面打不开”要进一步拆成 DNS 失败、HTML 失败、静态资源失败、脚本异常、接口失败或渲染卡死。

2. 评估影响并决定是否止血

优先确认:

  • 核心交易、登录、支付等链路是否不可用;
  • 错误率和受影响用户是否持续扩大;
  • 是否存在数据错误、安全风险或不可逆操作;
  • 是否刚刚发生代码、配置、依赖或基础设施变更。
数据正确性优先

如果问题可能导致重复支付、数据覆盖或权限越界,应立即停止相关写操作。数据错误通常比短暂不可用更难恢复。

3. 建立证据链

一个完整的前端诊断事件至少应带上:

diagnostic-context.ts
interface DiagnosticContext {
eventId: string;
traceId?: string;
sessionId: string;
userIdHash?: string;
route: string;
release: string;
configVersion?: string;
userAgent: string;
networkType?: string;
occurredAt: number;
}

证据来源包括:

  • 错误监控:堆栈、Source Map、Breadcrumb;
  • 性能监控:Navigation/Resource/Event Timing、Long Task;
  • 网络证据:HAR、状态码、DNS/TLS/TTFB;
  • 服务端日志:通过 traceId 关联一次请求;
  • 发布记录:代码、配置、Feature Flag 和依赖变更;
  • 用户会话:脱敏后的关键操作路径和页面状态。

4. 分层定位

按层排查可以避免同时修改多个变量。常见的低成本实验包括:

  • 新旧版本或开关组对比;
  • 清缓存、无痕模式和新账号对比;
  • 切换网络、地区、浏览器和设备;
  • 禁用第三方脚本或某个模块;
  • 使用生产数据快照在隔离环境回放;
  • 对比成功请求和失败请求的关键字段。

5. 用假设驱动,而不是漫无目的地看日志

推荐记录假设表:

假设支持证据反证最小验证方式状态
新版本资源混用仅新版本用户失败部分旧版本也失败固定资源版本重试待验证
接口返回脏数据同一数据实体稳定失败Mock 数据仍失败替换为合法快照已排除
浏览器兼容问题仅某内核版本出现BrowserStack 复现已确认

每次实验尽量只改变一个变量,并记录结果。

6. 修复、灰度和验证

修复完成不等于问题结束,至少需要验证:

  • 原始复现路径已经恢复;
  • 错误率、性能和业务指标回到基线;
  • 没有引入新的异常或数据污染;
  • 灰度人群、地区和版本覆盖了原问题;
  • 回滚路径仍然可用。

7. 复盘和预防

改进项应具体到“负责人、完成时间和验收方式”:

根因类型长期改进示例
缺少监控增加带版本和租户维度的错误率告警
测试缺口为核心失败路径补 E2E 和契约测试
发布风险增加灰度、自动回滚和配置审计
设计缺陷补幂等、状态机和降级策略
操作失误自动化高风险步骤,减少手工操作

三、三种题型的回答侧重点

题型第一优先级回答重点
线上故障恢复可用性止血、影响面、变更关联、回滚
偶现问题提升可复现性上下文采集、采样、回放、假设验证
方案落地控制风险目标、约束、分阶段交付、指标与预案

四、常见低质量回答

  • 直接说“看控制台、看网络面板”,没有排查顺序;
  • 一遇到线上问题就改代码,没有先判断是否该回滚;
  • 把相关性当因果,例如“发布后出现,所以一定是前端代码”;
  • 同时改多个变量,修好后仍不知道根因;
  • 只修当前案例,不补监控、测试和发布防线;
  • 使用“可能是缓存”等模糊表述,却不给验证方法。

常见面试问题

Q1: 线上问题应该先定位还是先回滚?

答案:看影响和风险。核心链路大面积不可用、错误持续扩大或可能破坏数据时先止血;影响有限且可以快速确认根因时可边定位边准备回滚。关键是设置明确的决策时间窗。

Q2: 问题无法复现怎么办?

答案:不要依赖手工碰运气。补齐版本、设备、网络、路由、操作序列和数据特征等上下文,聚类失败样本,与成功样本做差异对比,再通过流量回放或受控注入扩大复现概率。

Q3: 如何证明找到的是真正根因?

答案:根因应同时满足三个条件:能解释现有证据;能稳定触发问题;移除该因素后问题消失且指标恢复。仅凭时间相关或单次修复成功不够。

Q4: 为什么排障时要先看最近变更?

答案:代码、配置、依赖、数据和基础设施变更是故障的高概率来源,而且通常容易通过版本对比或回滚验证。但不能因为存在变更就跳过证据验证。

Q5: 场景题怎样体现资深程度?

答案:除了修 Bug,还要说明影响评估、止血决策、跨团队协作、证据链、灰度验证和体系化预防。资深工程师关注的是让同类问题更难再次发生。

相关链接