这份路线把已有系统设计讲解、技术专题和 DDIA 笔记串成 30 个练习任务。它是本站整理的练习清单,不是某家公司当前题库。可按顺序学习,也可从薄弱阶段开始。

DDIA 面试对照表

每题怎么练

  1. 先不看答案,用 5 分钟写清用户、核心操作、容量假设与正确性要求。
  2. 用约 20 分钟画最小可行架构,挑一条关键路径解释数据流。
  3. 再用约 10 分钟加入热点、超时、重复请求或组件失效,说明系统如何恢复。
  4. 打开对应讲解,对照本题自测要求;记录一个遗漏,下一次先复述它。时间分配是练习建议,可按题目调整。
六阶段目录
  1. 1. 先估算,再划定边界
  2. 2. 把更新交付给用户
  3. 3. 守住稀缺资源的正确性
  4. 4. 存储与传输大规模数据
  5. 5. 用热点与故障检验设计
  6. 6. 综合应用与复盘

1. 先估算,再划定边界

01 从 DAU 推导容量

明确每日请求量、读写比例、峰值、载荷与保留期,区分外部 QPS 和数据库操作量。

自测:指出一个最不确定的假设,并解释它变化 10 倍时的设计影响。

打开讲解 / 工具 →

02 设计短链接服务

选择 ID 生成方式、跳转路径与过期策略,说明哪些数据必须持久化。

自测:分别处理冲突、已删除链接和热点链接,并保持接口语义清晰。

打开讲解 / 工具 →

03 解释 DNS 解析链路

沿缓存和权威服务器解释一次解析,区分配置传播与缓存过期。

自测:解释迁移时缩短 TTL 的收益与代价。

打开讲解 / 工具 →

04 设计 CDN 分发策略

为公开资源定义缓存键、TTL 与失效策略,明确私有响应的处理边界。

自测:说明源站故障和错误缓存版本各自如何恢复。

打开讲解 / 工具 →

05 加入缓存并保持正确性

选择权威数据源、填充策略与可接受的陈旧程度。

自测:完整推演缓存未命中、并发更新与缓存宕机。

打开讲解 / 工具 →

2. 把更新交付给用户

06 设计聊天服务

定义消息 ID、有序范围、送达确认和重连行为。

自测:处理离线接收者与重复发送,明确是否只保证会话内有序。

打开讲解 / 工具 →

07 设计通知系统

按渠道与用户偏好发送消息,明确重试上限与有效期。

自测:限制重复通知,并说明死信队列之后如何人工或自动恢复。

打开讲解 / 工具 →

08 设计信息流

比较写时扇出和读时拉取,把粉丝数量分布纳入估算。

自测:解释名人发帖与关注关系变化时,陈旧缓存如何影响结果。

打开讲解 / 工具 →

09 设计附近搜索

选择地理索引与半径查询方案,区分候选召回与排序。

自测:讨论城市高密度热点与位置更新频率对结果的影响。

打开讲解 / 工具 →

10 设计搜索补全

设计前缀检索、热度更新与延迟预算,说明哪里需要及时更新。

自测:说明突发热门词如何生效,而不必同步重建所有前缀。

打开讲解 / 工具 →

3. 守住稀缺资源的正确性

11 预订连续多晚酒店

定义跨多个日期的库存不变量和事务边界。

自测:若最后一晚无房,证明前面几晚不会残留预留。

打开讲解 / 工具 →

12 处理预留到期后的支付

先选择期限策略,再推演确认与过期的两种先后顺序。

自测:库存只释放一次,重复回调不创建多笔退款。

打开讲解 / 工具 →

13 设计支付幂等

区分业务支付身份、调用尝试与支付方请求键。

自测:解释超时结果未知时如何恢复,避免二次扣款。

打开讲解 / 工具 →

14 应对抢票流量

定义准入、排队、库存归属和预留过期。

自测:说明已获准用户断线后,公平性和库存正确性如何保持。

打开讲解 / 工具 →

15 设计分布式限流

选择限流键、时间模型、算法及计数存储不可用时的策略。

自测:明确是否允许短时超限,并给出影响边界。

打开讲解 / 工具 →

4. 存储与传输大规模数据

16 设计键值存储

针对明确负载选择分区、复制与读写一致性。

自测:解释副本失效,以及恢复期间读取的行为。

打开讲解 / 工具 →

17 设计文件同步

建模分块、元数据、版本历史和断点续传,区分内容与权限。

自测:处理同一文件的双端编辑与未完成上传。

打开讲解 / 工具 →

18 设计带过期时间的文本存储

为文本分享设计标识符、保留期、读取缓存和滥用限制。

自测:区分过期后不再展示与物理删除数据。

打开讲解 / 工具 →

19 设计视频分发

分离上传、转码、元数据与播放,并用明确的载荷模型估算带宽。

自测:说明转码失败如何重试,同时避免发布不完整资源。

打开讲解 / 工具 →

20 设计网页爬虫

定义 URL 去重、调度、每站点访问节奏和增量更新。

自测:解释如何限制 URL 陷阱,避免其无限占用待抓取队列。

打开讲解 / 工具 →

5. 用热点与故障检验设计

21 设计网约车匹配

区分位置更新、候选检索、匹配与行程状态转换。

自测:处理过期位置,以及两个乘客争抢同一司机。

打开讲解 / 工具 →

22 设计地图应用

区分瓦片分发、路径计算和变化中的交通数据。

自测:说明哪些操作能接受旧缓存,哪些需要更及时的数据。

打开讲解 / 工具 →

23 设计排行榜

明确排名语义、同分规则、更新频率及是否允许近似排名。

自测:讨论热门赛事的热点,以及精确全局排名的代价。

打开讲解 / 工具 →

24 协调电商结账

分离购物车意向、库存预留、支付、订单确认和履约。

自测:为每个失败步骤说明持久化状态与补偿路径。

打开讲解 / 工具 →

25 重放事件流

为派生视图选择分区键、offset 处理与消费者幂等方案。

自测:从历史事件重建时,避免重复触发外部副作用。

打开讲解 / 工具 →

6. 综合应用与复盘

26 设计 RAG 服务

连接数据导入、分块、检索、权限与答案评测。

自测:解释已删除文档如何停止出现在检索结果和答案中。

打开讲解 / 工具 →

27 设计流式 AI 聊天服务

分离准入、推理、token 流、会话状态与成本控制。

自测:处理断线与重试,避免重复启动昂贵任务。

打开讲解 / 工具 →

28 迁移热点分片

识别热点键,选择可观察进度的迁移或重新分区方案。

自测:明确迁移期间读写归属,以及何时应回滚。

打开讲解 / 工具 →

29 选择批处理还是流处理

定义新鲜度、事件时间语义、重放需求和输出正确性。

自测:解释迟到事件,以及重算如何修正已经输出的结果。

打开讲解 / 工具 →

30 让架构支持渐进升级

规划 schema 变化如何跨越新旧生产者、消费者和存量数据。

自测:用一个具体字段变化演示向后和向前兼容。

打开讲解 / 工具 →

统一复盘标准

每题用四项各 0–2 分自评:需求和不变量、负载估算、关键数据路径、故障与恢复。0 分是缺失,1 分是提到但没有推演,2 分是能用具体请求或故障过程解释。这个分数帮助找出薄弱点,不预测面试结果。

练习记录建议保留:日期、题号、最不确定的假设、一个故障时序、下次要补的内容。下一轮先做解释不清的题,而不是只增加题量。

用容量估算器检查假设 · 练习库存和支付故障