Skip to content

附录 A2 · 大厂场景设计题方法论

一句话开篇:场景题考的是"前端架构师"思维——不是写代码,而是搭舞台。能不能把一个模糊的需求拆成清晰的方案、能不能把一个看似简单的功能讲出 80 个细节、能不能在权衡中给出有理有据的取舍,这些就是 P5/P6/P7 的分水岭。


0. 生活类比:场景题就是"装修一套房子"

把每道场景题想象成"业主告诉你要装修一套房子":

阶段装修类比答题阶段
听需求三口之家 / 60㎡ / 预算 30 万还原需求:用户量?性能要求?兼容性?
画图纸户型规划 + 主材清单架构设计:模块划分、数据流、技术选型
挑材料地板用瓷砖还是木地板?技术选型:为什么用 X 不用 Y?
施工细节水管走顶还是走地?关键技术点:核心算法、关键 API
难点处理承重墙不能拆怎么办?难点与权衡:性能/体验/成本的平衡
验收业主突然要加装中央空调加分项:可扩展性、监控、灰度
保修漏水了怎么办?兜底容错:降级、重试、监控告警

新人只会说"先量房,再做柜子";老司机会问"承重墙在哪?水电预留多少?通风怎么走?要不要做地暖?"——问题问得好不好,决定了你的等级


1. 场景题为什么这么重要?

1.1 它在面试中的占比

岗位级别场景题占比评价权重
校招10%加分项
P5 / 初级20%区分"会写"和"会想"
P6 / 中级40%决定 offer 等级
P7+ / 高级60%+几乎全是场景题

1.2 它考察什么?

┌─────────────────────────────────────────────────────┐
│                 场景题考察维度                        │
├─────────────────────────────────────────────────────┤
│  ① 需求理解力  ── 能不能问对问题、提对假设            │
│  ② 系统设计力  ── 能不能画出合理的模块/数据/调用链    │
│  ③ 技术选型力  ── 能不能解释"为什么用 X 不用 Y"      │
│  ④ 工程素养    ── 有没有想到监控/降级/灰度/可观测性  │
│  ⑤ 边界思考力  ── 弱网/异常/极端用户/竞态等          │
│  ⑥ 表达组织力  ── 能不能 5 分钟内讲清一个复杂系统    │
└─────────────────────────────────────────────────────┘

2. 场景题的"通用答题框架"(必背)

2.1 五段式结构

这个结构来自 Google / Meta 系统设计面试的标准模板,国内大厂同样适用。

┌──────────────────────────────────────────────────────┐
│   Step 1:明确需求(Requirements)             1 min  │
│   Step 2:高层设计(High-Level Design)        2 min  │
│   Step 3:核心组件(Components & Tech)        3 min  │
│   Step 4:难点权衡(Trade-offs)               2 min  │
│   Step 5:扩展兜底(Scale & Fallback)         2 min  │
└──────────────────────────────────────────────────────┘

2.2 五段式详解

Step 1:明确需求(最容易跳过,但最关键)

"面试官,我先确认几个前提,方便我设计:……"

必问的 5 件事:

  1. 核心流程:典型用户场景一句话
  2. 规模:QPS / DAU / 数据量 / 文件大小
  3. 性能要求:首屏 / FCP / LCP / 接口耗时
  4. 兼容性:浏览器 / 移动端 / 微信内
  5. 特殊约束:弱网 / 离线 / 国际化 / 隐私

示例(大文件分片上传):

  • "用户量大概多少?最大文件多大?"(决定要不要分布式存储)
  • "需要断点续传吗?秒传?"(决定要不要 hash)
  • "并发上传支持几个?"(决定限流逻辑)
  • "上传失败要不要自动重试?"(决定容错策略)

Step 2:高层设计(先画图,再讲)

"整体我会分成 4 个模块:…… 它们的数据流是这样的:……"

必画一张架构图(ASCII 即可)。

┌──────────┐     ┌──────────┐     ┌──────────┐
│   UI     │────▶│  逻辑层   │────▶│  服务端   │
│  (View)  │     │ (Service) │     │  (API)   │
└──────────┘     └──────────┘     └──────────┘


                 ┌──────────┐
                 │  数据层   │
                 │ (Cache)  │
                 └──────────┘

Step 3:核心组件(细化每个模块)

每个组件要讲清:接口定义 / 关键算法 / 关键 API

示例(无限滚动):

  • 数据层:分页接口设计(cursor 还是 offset)
  • 检测层:用 IntersectionObserver 检测底部
  • 渲染层:虚拟列表(只渲染可视区域 + 缓冲区)
  • 状态层:去重、loading、has more、错误重试

Step 4:难点与权衡

"这里有 3 个值得讨论的权衡:……"

每道题都至少列 2 个权衡:

维度方案 A方案 B选哪个?为什么
性能 vs 体验节流防抖滚动用节流,输入用防抖
一致性 vs 可用性强一致最终一致离线场景选最终一致
兼容性 vs 体验老 API新 API移动端有 polyfill 用新 API

Step 5:扩展兜底

"如果用户量翻 10 倍 / 接口挂了 / 弱网下,我会这样兜底:……"

必讲的 5 件事:

  1. 降级:核心功能有兜底(接口 500 → 显示缓存)
  2. 重试:失败重试策略(指数退避)
  3. 监控:埋点上报(性能、异常、行为)
  4. 灰度:新功能小范围灰度,再全量
  5. 可扩展:未来扩展点预留(插件化、配置化)

3. 场景题"加分话术"模板

3.1 体现工程经验

话术加分点
"我会先做埋点,用数据驱动优化方向"数据驱动思维
"灰度 1% → 10% → 50% → 100%"风险意识
"上线前压测,给出 QPS 上限"性能意识
"我会预留插件机制,方便业务方扩展"可扩展性
"弱网下用 LocalStorage 缓存上次结果"用户体验

3.2 体现技术深度

话术加分点
"首屏用 SSR,二屏用 CSR Hydrate"性能优化
"用 IntersectionObserver 而不是 scroll,避免 layout thrashing"浏览器原理
"WebWorker 跑 hash 计算,避免主线程卡顿"性能优化
"用 OffscreenCanvas 异步渲染"前沿 API
"用 SharedArrayBuffer 实现多 Tab 共享状态"高级特性

3.3 体现产品思维

话术加分点
"我会先和产品对齐:是 PC 优先还是移动优先?"业务理解
"考虑到 SEO,我会做 SSR"业务结果
"为了海外用户,CDN 会选边缘节点"全球化视角
"可访问性要兼顾屏幕阅读器"A11y 意识

4. 15 道场景题地图

┌────────────────────────────────────────────────────────────────┐
│              15 道大厂场景题地图(按主题分组)                  │
├────────────────────────────────────────────────────────────────┤
│                                                                 │
│  ① 文件与流(1)                                                 │
│  Q1  大文件分片上传(断点续传 / 秒传 / 并发控制)                 │
│                                                                 │
│  ② 列表与渲染(2)                                                │
│  Q2  无限滚动列表(虚拟列表 + IntersectionObserver)              │
│  Q9  复杂表单设计(嵌套 / 动态字段 / 校验联动)                   │
│                                                                 │
│  ③ 权限与登录(2)                                                │
│  Q3  权限系统(菜单/按钮/接口三级)                              │
│  Q4  单点登录 SSO                                               │
│                                                                 │
│  ④ 性能与体验(2)                                                │
│  Q5  SPA 首屏优化                                               │
│  Q14 国际化 i18n                                                │
│                                                                 │
│  ⑤ 监控与数据(3)                                                │
│  Q6  前端埋点系统                                               │
│  Q7  错误监控系统                                               │
│  Q15 A/B 测试系统                                               │
│                                                                 │
│  ⑥ 通信与协作(2)                                                │
│  Q8  多 Tab 通信                                                │
│  Q11 实时聊天界面(WebSocket)                                   │
│                                                                 │
│  ⑦ 编辑器与画布(2)                                              │
│  Q10 富文本编辑器                                               │
│  Q12 撤销重做画板                                               │
│                                                                 │
│  ⑧ 架构(1)                                                     │
│  Q13 微前端架构(qiankun / Module Federation)                   │
│                                                                 │
└────────────────────────────────────────────────────────────────┘

5. 高频技术点速查表

下表是这 15 道题中最常出现的 30 个技术点,至少要混个脸熟

技术点涉及题号一句话
IntersectionObserverQ2/Q5/Q6元素可见性观察器,性能优于 scroll 监听
requestIdleCallbackQ5/Q6浏览器空闲时执行任务
Web WorkerQ1/Q12主线程之外跑 CPU 密集任务
Service WorkerQ5离线缓存 / PWA
WebSocketQ11全双工实时通信
BroadcastChannelQ8同源多 Tab 广播
SharedWorkerQ8多 Tab 共享 Worker
postMessageQ8/Q13iframe / window 通信
localStorageQ1/Q4/Q8/Q155MB 持久化存储
IndexedDBQ1/Q11浏览器结构化数据库
File API + BlobQ1文件读取与切片
Range / SelectionQ10富文本光标 / 选区
contenteditableQ10原生富文本基石
Canvas / OffscreenCanvasQ12画板 / 性能优化
CSP / SOPQ4/Q13安全策略
JWT / OAuth 2.0 / CASQ4鉴权协议
RBAC / ABACQ3权限模型
路由守卫 / Vue Router beforeEachQ3/Q5SPA 前端守卫
qiankun / single-spa / MFQ13微前端框架
Webpack 5 Module FederationQ13远程模块加载
骨架屏 / 路由懒加载Q5首屏体验
HTTP/2 Server PushQ5资源推送
Performance APIQ5/Q6性能采集
error / unhandledrejectionQ7异常监听
Source MapQ7错误反查源码
sendBeacon / fetch keepaliveQ6/Q7离开页面时上报
MutationObserverQ6/Q10DOM 变化监听
命令模式Q12撤销重做的核心
ICU / i18n formatQ14复数 / 性别 / 时间格式化
Cookie SameSiteQ4跨域登录

6. 答场景题的"6 个雷区"

#雷区后果
1不问需求直接答显得不懂业务
2一头扎进代码细节看不到全局,没架构感
3只讲方案不讲权衡像背书,不像设计
4没有 ASCII 图表达能力差,听者没画面
5不讲监控/降级没做过线上系统
6用最新最潮的技术全部往上堆显得没经验,"屠龙术"思维

7. 训练方法(4 周提升计划)

第一周:模板与套路

  • 把"五段式答题框架"背熟
  • 选 3 道经典题(大文件上传 / 无限滚动 / 错误监控),每道写出 80 行答案

第二周:技术广度

  • 把"30 个技术点速查表"逐个搜资料、看 MDN、写 demo
  • 不必精通,但要"听过、知道在哪用"

第三周:模拟面试

  • 找 1-2 个朋友模拟,对方扮演面试官,强行打断追问
  • 录音回听,找出"啰嗦 / 跳跃 / 没自信"的地方

第四周:复盘与定制

  • 准备 2-3 个"自己做过的项目",能用本框架讲清
  • 回看面经,遇到没见过的题,用框架现场套

8. ⚠️ 易踩的坑

#解决
1不画图,光用嘴说,听者没画面强制自己画 ASCII 架构图
2把单个 API 当成方案("用 IntersectionObserver 就行")至少讲 3 个组件协同
3选型只说"好",不说"为什么不用别的"必带"对比表"
4把网上文章的方案原样复述加入自己的项目经验
5完美主义,啥都要讲到控制在 5-8 分钟
6听不进面试官的"反问",硬刚反问是引导,请尝试调整方案

9. 配套文件

  • 📖 qa.md:15 道题完整答案(按 5 段式结构)
  • 💻 examples/:典型场景的核心代码片段(分片上传、虚拟列表、命令模式等)
  • 🌐 demo/index.html:交互式演示(大文件分片上传可视化 + 虚拟无限滚动)

10. 一句话总结

场景题的核心不是"知道一个 API",而是能把这个 API 放进一个"系统"里,讲清它的位置、它的边界、它失败时的兜底。从"会写"到"会想",是前端工程师真正的成长。


11. 延伸阅读

  • 《Designing Data-Intensive Applications》——系统设计圣经
  • System Design Primer
  • 前端九部 - 入门者手册
  • 极客时间《前端工程师 30 道场景题》专栏
  • 配套:qa.md(15 道题完整解答)/ examples/(核心代码)/ demo/index.html