这份路线把已有系统设计讲解、技术专题和 DDIA 笔记串成 30 个练习任务。它是本站整理的练习清单,不是某家公司当前题库。可按顺序学习,也可从薄弱阶段开始。
每题怎么练
- 先不看答案,用 5 分钟写清用户、核心操作、容量假设与正确性要求。
- 用约 20 分钟画最小可行架构,挑一条关键路径解释数据流。
- 再用约 10 分钟加入热点、超时、重复请求或组件失效,说明系统如何恢复。
- 打开对应讲解,对照本题自测要求;记录一个遗漏,下一次先复述它。时间分配是练习建议,可按题目调整。
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 分是能用具体请求或故障过程解释。这个分数帮助找出薄弱点,不预测面试结果。
练习记录建议保留:日期、题号、最不确定的假设、一个故障时序、下次要补的内容。下一轮先做解释不清的题,而不是只增加题量。