单轮深入 · 面试题型

系统设计面试题:把假设和取舍讲清楚

练习系统设计面试,关键是把假设说出来:需求、粗略容量、数据模型和接口,再说明你会先解决哪个瓶颈、为什么。

早期体验期间免费。练习在应用内进行,需要登录账号。

准备清单系统设计

  1. 01需求与约束
  2. 02容量估算
  3. 03数据模型与接口
  4. 04故障与一致性

下一次练习技术面试练习室

01常见题

系统设计面试题示例

这些系统设计面试题由 InterviewWare 编写或改编,并非任何公司的真实面试题。每道题都列出面试官关注的信号和通常随之而来的追问。

点击“练习”,登录后即可在工作台中打开该题。

题目面试官关注什么可能的追问练习
R2 · 专业能力与案例
Q01中级 为分布式 API 设计限流系统。算法、一致性、故障处理计数存储不可用时会发生什么?
Q02中级 设计一个生成短链接并统计点击量的链接分享服务,从需求讲起。需求澄清、数据建模、可扩展性你如何避免短码冲突和滥用?
Q03高级 / 负责人 设计一个支持逐步放量、快速回滚的功能开关系统。发布安全、一致性、可运维性配置服务不可用时,开关判断应如何处理?
Q04 设计一个通知服务:发送失败会重试,但不能重复送达。每条消息带幂等键,用去重让“至少一次”投递变得安全,并为反复失败的消息设计死信处理。邮件服务商已经接收了消息,但你这边的确认丢了,接下来会发生什么?
Q05 如何扩展一个读多写少的商品目录系统?先说明读写比例;使用缓存和只读副本,并给出明确的数据新鲜度要求;搜索用独立索引承载。价格修改必须在一分钟内全网生效,这对缓存设计有什么影响?
Q06 设计一个能运行数百万延时任务的调度系统,比如“三天后提醒我”。任务如何存储、到期时如何被找到(按时间分桶的表或有序集合),工作进程如何保证一个任务只被领取一次,以及宕机期间到期的任务怎么处理。同一秒有一万个任务到期,如何避免瞬时洪峰?
Q07 为日活很高的手游设计实时排行榜。用有序结构维护前 N 名;排名靠后的精确名次可以近似或批量计算;分数更新的写入路径要讲清楚。如何支持每周重置、且不停服的周榜?
Q08 设计一条数据管道:从多个服务收集事件,驱动一个延迟不超过一分钟的看板。用持久化队列做缓冲、按时间窗口聚合、处理迟到和重复的事件,以及管道延迟时看板该显示什么。一个 bug 让两小时内的事件被重复计数,你如何回补正确的数据?
Q09 为最多几百人的群聊设计消息存储和已读回执。保证单个会话内的消息顺序;分区键让同一群聊的消息存在一起;已读回执按成员记录“读到哪一条”,而不是每条消息存一行。用户离线一周后打开应用,如何高效补齐消息?

02试答一题

试答一道系统设计面试题

从上面的题目中挑一道,先写下你的回答。在你请求反馈之前,草稿只保存在当前浏览器。

练习题 · 系统设计

为分布式 API 设计限流系统。

0 字

获取反馈需要注册免费账号(一步完成,无需银行卡)。草稿只保存在当前浏览器,注册后自动填入;在你提交之前不会上传。

03答题示例

为电商网站设计“最近浏览”功能。

高级岗位答题提纲:45 分钟面试的前十分钟。 示意内容:由 InterviewWare 编写,并非真实候选人的回答。

  1. 01

    需求

    每位登录用户可以在各个设备上看到最近浏览的 20 件商品,更新延迟在几秒以内。

  2. 02

    估算

    如果浏览量大约是下单量的十倍,写入会占主导,所以写路径要尽量轻。

  3. 03

    设计

    浏览事件先写入队列,由后台任务在键值存储里为每位用户维护一个上限为 20 条的列表。

  4. 04

    取舍

    我接受几秒的延迟来保证页面响应速度;如果必须实时,就改为同步写入,代价是写入成本更高。

04答题建议

系统设计面试答题要点

这样答更有效

  1. T1前五分钟留给需求:谁在用、主要的读写路径是什么、这里的“快”和“正确”分别指什么。
  2. T2把粗略估算说出来——每秒请求数、每年存储量——数字取整即可。
  3. T3先画出一条能跑通的端到端路径,再加缓存、队列或分片。
  4. T4每加一个组件,都说清它挂了会怎样。
  5. T5最后点明你做了什么取舍,以及到什么量级时需要重新评估。

系统设计面试常见误区

  1. M1一个需求都没问,就开始画微服务架构图。
  2. M2题目暗示只有几千用户,却按十亿用户来设计。
  3. M3加了缓存,却不说过期数据怎么失效。
  4. M4只说“用 Kafka”“用 Redis”,却不说明需要它提供什么特性。
  5. M5完全不提监控,系统出了问题也没人知道。

05国内求职

国内系统设计面试怎么准备

校招偶尔考,社招几乎必考

校招一般不会把系统设计作为独立一轮,最多在二面、三面里出一道开放题,考的是你能不能把需求问清楚、把一个简单方案讲完整;社招,尤其是三年以上经验的后端岗位,系统设计几乎是必考项,面试官会期待你主动做容量估算、讨论故障和一致性,并结合自己做过的系统举例。

设计题常和项目深挖混在一起

国内面试里,系统设计常常和项目深挖连在一起:面试官先让你讲自己负责的系统,再问“如果流量涨十倍,你会怎么改”。在 InterviewWare 里,这两部分都属于 R2 专业能力与案例:本页的开放设计题用来练“从零设计”;项目本身的深挖,可以在模拟面试里附上简历,让面试官围绕你的项目追问。

把简历上的系统画一遍

如果简历上写了“设计并实现了某某系统”,面试官很可能直接拿它当设计题:“当时为什么这样分库?现在回头看会怎么改?”。准备时,把自己做过的系统完整画一遍,标出当时的约束、你本人做的决定,以及今天会改变的地方。

06推荐工具

系统设计面试练习工具

  1. 技术面试练习室

    在系统设计白板上画出组件和连接关系,保存后再拿来讲解。

    JS · Python公开用例
  2. AI 语音模拟面试

    开一场 45 或 60 分钟的实时语音面试,把一整轮系统设计从头讲到尾,中途随时可能被打断。

    实时15–60 分钟
  3. 模拟面试复盘

    查看 IW-1 复盘中的“分析与取舍”一项:它会引用你说出(或漏掉)取舍的那句话。

    IW-14 × 0–4

更多方向

探索更多方向

早期体验 · 免费

今天,记下第一轮练习。

带上简历或岗位描述,或者只写下想要的岗位。从第一个回答开始,训练日志就会记录你的进步。