Skip to content

第 22 周 · Day 1:系统设计面试方法论——用你亲手建过的平台当案例 ​

对应手册任务:学习「系统设计基础:需求收集 → 高层设计 → 深入组件」,动手用 45 分钟设计「AI 客服 Agent 平台」并画出架构图,当日产出一张架构图加一份一页纸设计文档。本篇只解决一个问题:系统设计面试不考你背过多少架构,考的是 45 分钟内把一个模糊需求推成可落地方案的思考过程,而你最大的底牌,是前 21 周亲手建过的那套平台。

今日目标 ​

  1. 说得清 45 分钟标准流程的五个阶段,以及每个阶段面试官真正在看什么
  2. 掌握需求澄清的四个维度:功能、规模、延迟、一致性,并且明白问对比说对更重要
  3. 独立完成一次完整走场:掐表 45 分钟设计「AI 客服 Agent 平台」,产出一张架构图和一页纸设计文档

概念讲解:为什么背题必死,做过的人天然占优 ​

先泼一盆冷水。很多人准备系统设计面试的方式是背题库:短链接怎么设计、秒杀怎么设计,每道题记一套标准答案。这条路在八股文面试上或许管用,在系统设计面试上是死路。原因很简单:面试官每天听十个候选人讲同一套背来的答案,他只要在任何环节追问一句「为什么不用另一种方案」,背题的人就当场卡住。

系统设计面试的真实形态是一场 45 分钟的模拟协作:面试官扮演产品方兼技术评审,你扮演架构师,双方把一个模糊需求逐步推成可落地的方案。它考察四件事:会不会问对的问题(工程判断)、方案里有没有取舍意识(没有银弹,只有权衡)、能不能让别人听懂你(沟通)、以及有没有真实工程经验兜底。

最后一条就是你的护城河。别人讲「用消息队列削峰」,是从面经里抄的;你讲流式链路的延迟优化,讲的是自己真调过的东西:哪个环节慢过、怎么定位的、改完之后首 token 时间从多少降到多少。同样一句话,细节密度完全不同,面试官一听就知道谁的手真的脏过。这 21 周建的平台就是你的案例库,今天的任务是学会把它用在面试的正确位置上,而不是把它当成答案本身。

核心知识:45 分钟标准流程 ​

先给全景。五个阶段,时间盒如下:

  • 0–5 分钟:需求澄清
  • 5–15 分钟:高层设计
  • 15–30 分钟:深入组件
  • 30–40 分钟:瓶颈与演进
  • 40–45 分钟:总结

节奏不是死规定,本质是让面试官在任意时刻打断你,看到的都是结构化思考。下面逐段拆,每段都标出面试官想看什么。

1. 需求澄清(5 分钟):问比说重要 ​

照四个维度发问,每个维度一到两个问题就够:

  • 功能边界:核心功能是什么?哪些明确不做?
  • 规模:QPS 多少?用户量多大?数据每天涨多少?
  • 延迟:P99 要求多少?要实时还是准实时?
  • 一致性:哪些数据必须强一致?哪些最终一致就能接受?

面试官想看什么:你问的每个问题是否在收窄方案空间。问 QPS,是在判断要不要分布式;问一致性,是在判断能不能上缓存。没做过系统的人跳过这步直接画框图,做过的人知道需求不清就动手是返工的根源。这一段展示的正是工程判断,而非口才。

一个实用技巧:每个问题后面跟一句默认假设。「QPS 大概什么量级?不确定的话我先按 500 设计,瓶颈环节单独谈扩容。」这样即便面试官不接话,设计的边界也已经被你定死了。

2. 高层设计(10 分钟):核心实体 + 框图 + 数据流 ​

三样东西缺一不可。核心实体:这个系统围绕哪几个名词转,AI 客服平台就是租户、会话、消息、Agent、知识库五个。框图:客户端、网关、核心服务、存储,画在白板中间,四周留足空白,后面 30 分钟要不断往里填。数据流:一条用户消息从进来到回复出去,经过哪些框、走什么协议,讲清「请求怎么走」,先不碰「怎么实现」。

面试官想看什么:你能不能把大问题切成职责清楚的模块。自测标准:把图给一个没参与讨论的工程师看,他能复述出数据怎么流。

3. 深入组件(15 分钟):挑 2–3 个难点深挖 ​

分差最大的一段。时间只够深挖两三个组件,选哪个本身就是信号:要选这个系统的难度中心,而不是你最熟的部分。挖的深度也有标准:不能停在「用 Redis 缓存」,要讲到机制和数字——延迟多少、命中率多少、失效策略是什么、踩过什么坑。

面试官想看什么:你是背过这个组件还是调过它。判断手段就是追问一层「为什么不用另一方案」。做过的答得出取舍,背过的会露馅。

4. 瓶颈与演进(10 分钟) ​

固定问题:量级乘 10,系统哪里先死?提前排好序:LLM 配额、数据库写入、网关连接数,一个瓶颈配一个扩容手段。

面试官想看什么:你知道任何设计都有适用边界,并且对「什么时候该重新设计而不是打补丁」有感觉。

5. 总结(5 分钟) ​

30 秒复述整个方案,1 分钟讲清最重要的一个取舍,剩下的时间留给提问。别小看这 5 分钟,面试官写评估表时记得最牢的往往就是结尾那两句。

6. 通用话题速览 ​

短链接、排行榜、Feed 流三类题出现率极高,先用一句话混个脸熟,明天开始逐个实战:

  • 短链接:长 URL 换短码,发号器或哈希生成,考点在重定向和读写比例
  • 排行榜:Redis ZSET 是标准起点,考点在分片后全局 Top N 怎么归并
  • Feed 流:推拉结合,考点在大 V 发文的扇出放大怎么扛

一句话记不住细节没关系,记住每道题的考点是什么,比背整套方案有用。

动手任务:45 分钟设计「AI 客服 Agent 平台」 ​

这次动手不写代码。定一个真的 45 分钟计时器,掐表走完五个阶段,产出两样东西:架构图、一页纸设计文档。

练习方式

中途别翻资料,卡住就写「待定」继续往下走,模拟真实面试的压力。走完再复盘哪个阶段超时,超时的地方就是明天要重点练的地方。

第 1 步(5 分钟):需求澄清,自问自答写下来。 照四个维度列:

  • 功能:智能问答、人工转接、会话存档;不做语音、不做主动外呼
  • 规模:500 家租户,日均 100 万次会话,峰值 500 QPS
  • 延迟:首 token 1.5 秒内,完整回复 P95 8 秒内
  • 一致性:消息存档最终一致可接受;转人工判定必须读最新的租户配置

第 2 步(10 分钟):画高层图。 白板或纸都行。画完对照第 19 周你画过的 v4 全系统图,会发现几乎是同一张图,这就是「你的项目即答案」的含义:

用户/坐席 ──HTTPS + SSE──▶ API 网关(鉴权 · 限流 · 租户路由)
                               │
                               ▼
                           会话服务 ────▶ 消息存储(按租户分片)
                               │ 意图路由
          ┌────────────────────┼────────────────────┐
          ▼                    ▼                    ▼
      FAQ 直答             Agent 编排           转人工队列
                          │      │
             ┌────────────┘      └────────────┐
             ▼                                ▼
       知识库检索(向量 + 全文)            LLM API(流式)

  (旁路)评估与观测:离线评测集 + 在线指标,订阅全量消息

核心实体五个:租户、会话、消息、Agent、知识库。数据流一句话:用户消息经网关进会话服务,路由到 Agent,Agent 检索知识库后调 LLM,SSE 分片流回客户端,旁路评估系统全程订阅。

第 3 步(15 分钟):深挖三个点。 每个点按「问题、方案、取舍、数字」四段讲。

流式链路延迟。 首 token 时间是体验命门。链路拆成网关、会话服务、编排、检索、LLM 五段,逐段给预算:检索 200ms、编排 50ms、LLM 首 token 800ms。优化三招:检索与编排并行、SSE 分片透传不等完整回复、LLM 连接复用。把每段的数字说出来,就是做过的证据。

多 Agent 编排取舍。 单 Agent 加工具调用,上下文一长准确率掉;多 Agent 各自上下文短、职责单一,但路由错了答非所问。按意图分层:高频简单意图走单 Agent 直答,长尾复杂意图才上多 Agent 编排。这个取舍本身就是一段好的面试素材。

评估体系。 没有评估的 Agent 改动都是盲改。离线评测集(标注问答对)守住每次 prompt 和模型变更,在线盯转人工率、满意度、首 token 延迟三个指标。面试里主动提评估,等于告诉面试官你有生产化思维,这恰恰是校招候选人最缺的。

第 4 步(10 分钟):瓶颈与演进。 量级乘 10 的死法排序:LLM 配额和成本先爆,上多模型分级(简单问题小模型)加高频问答缓存;消息库写入其次,按租户分片;网关连接数最后,连接层单独扩容。

第 5 步(5 分钟):写一页纸设计文档。 模板照抄:

# AI 客服 Agent 平台 · 设计一页纸
1. 需求假设   功能边界 / 规模(500 租户 · 峰值 500 QPS)/ SLA(首 token 1.5s)
2. 架构图     高层框图一张,标注数据流方向
3. 核心组件   每个三行:职责 / 关键决策 / 代价
4. 数据模型   租户—会话—消息—Agent 的实体关系
5. 瓶颈与演进 量级 ×10 的死法排序 + 扩容路径
6. 开放问题   没想清楚的,诚实列出

最后一节「开放问题」是加分项:主动暴露没想清楚的地方,是工程成熟的标志,不是减分。

常见踩坑 ​

坑 1:上来就画框图。 面试官话音刚落你就动笔,等于宣告「我不问需求」。处方:至少三个问题,每个带默认假设。

坑 2:想把所有组件讲完。 45 分钟讲十个点,每个点四分钟,全是表面。深挖两个点讲透,好过十个点各过一遍,深度才是分差。

坑 3:只讲方案不讲代价。 每引入一个组件,说清为什么不用更简单的方案。Redis 好,为什么这里本地缓存就够?没有取舍的方案读起来像抄的。

坑 4:全程没有数字。 「延迟大概还行」不算回答。QPS、P99、存储量级,说出具体数字才像做过的。数字从你项目的真实监控里来,这就是平时记录指标的价值。

坑 5:把项目当答案本身。 面试考的是「面对新需求的过程」,不是项目复盘。按流程走,让项目细节在深挖环节自然流出来,位置放对才是加分。

自测问题 ​

先自己答,再展开对照。答不上来的,回对应小节看一遍。

  1. 需求澄清的四个维度是什么?为什么说这一段展示的是工程判断?
参考答案

功能边界、规模、延迟、一致性。每个问题都在收窄方案空间:规模决定要不要分布式,一致性决定能不能上缓存。会问这些问题的人,说明被返工毒打过,这正是面试官要找的判断力。

  1. 高层设计的三要素是什么?自测标准是什么?
参考答案

核心实体、框图、数据流。自测标准:把图给一个没参与讨论的工程师,他能复述出一条消息从进到出的完整路径。

  1. 深挖组件应该选什么?挖到什么深度算够?
参考答案

选系统的难度中心,而不是最熟的部分。深度标准:讲到机制和数字——延迟预算、命中率、失效策略、踩过的坑,并且答得上「为什么不用另一种方案」。

  1. 「量级涨 100 倍怎么办」的回答框架是什么?
参考答案

先给瓶颈排序(哪个组件先死),再逐个配扩容手段,最后点出哪个量级该重新设计而不是打补丁。框架比结论重要,它展示的是你对系统边界的感知。

  1. 你的平台里最值得深挖的三个组件是什么?每个准备一句取舍说明。
参考答案

以本篇为例:流式链路(复杂度换首 token 体验)、多 Agent 分层编排(准确率与延迟的平衡)、评估体系(前期投入换长期可迭代)。记得用你自己项目里的真实数字替换文中示例值。

延伸阅读 ​

  • System Design Primer,GitHub 上最全的系统设计入门仓库,这两周当字典查,别通读
  • 第 22 周目录,本周从方法论开始,后面几天全是实战演练
  • 第 1 周 Day 1,21 周前从泛型起步的地方,回头看看已经走了多远

明天把今天这套流程套在短链接上跑第一遍。流程是固定的,换的只是题目。