面试知识

系统设计题训练

94-系统设计题训练 面试知识整理。

系统设计题训练

1. 训练方法

系统设计题不要急着画图。建议按下面顺序:

需求澄清 -> 容量估算 -> 核心模型 -> 架构设计 -> 数据流 -> 异常流 -> 扩展与治理

2. 题目一:设计库存防超卖系统

2.1 需求澄清

  • 是否是单仓还是多仓。
  • 是否有秒杀峰值。
  • 是否允许预扣。
  • 下单后多久未支付释放库存。
  • 是否需要跨渠道共享库存。

2.2 参考答案结构

层级设计
入口Gateway(网关)限流、用户幂等
缓存Redis(远程字典服务)热点库存预扣
核心库存服务统一扣减
数据库MySQL(关系型数据库)条件更新兜底
异步MQ(消息队列)同步库存事件
补偿超时释放、对账修复

2.3 必讲风险

  • 重复下单。
  • Redis(远程字典服务)和数据库不一致。
  • 支付超时库存未释放。
  • 热点 SKU(库存单位)打爆单点。
  • MQ(消息队列)消息延迟。

3. 题目二:设计支付回调一致性系统

3.1 需求澄清

  • 支付通道数量。
  • 是否支持退款和部分退款。
  • 回调是否可能重复、乱序。
  • 是否需要每日对账。

3.2 参考答案结构

flowchart TD
    A["支付通道 Webhook(回调通知)"] --> B["验签"]
    B --> C["防重放"]
    C --> D["幂等入库"]
    D --> E["状态机流转"]
    E --> F["MQ(消息队列)事件"]
    F --> G["订单/库存/账务"]
    E --> H["对账和补偿"]

3.3 必讲风险

  • 回调重复。
  • 回调延迟。
  • 主动查询和回调状态冲突。
  • 下游消费失败。
  • 对账差异。

4. 题目三:设计跨境物流轨迹系统

4.1 需求澄清

  • 轨迹来源是推送还是拉取。
  • 日轨迹量级。
  • 是否需要实时展示。
  • 轨迹是否乱序。
  • 历史数据保留多久。

4.2 参考答案结构

能力方案
接入API(应用程序接口)接收或定时拉取
削峰Kafka(分布式日志消息系统)或 RocketMQ(分布式消息队列)
幂等运单号 + 轨迹节点 + 时间
状态状态机合并轨迹
查询MySQL(关系型数据库)主记录 + Elasticsearch(搜索引擎)搜索
归档历史轨迹冷热分离

5. 题目四:设计 IoT(物联网)报警风暴治理系统

5.1 需求澄清

  • 设备数量。
  • 报警峰值。
  • 报警等级。
  • 是否允许丢弃低级报警。
  • 通知渠道有哪些。

5.2 参考答案结构

接入限流 -> MQ(消息队列)削峰 -> 窗口聚合 -> 分级路由 -> 通知 -> 存储 -> 复盘

5.3 必讲风险

  • 低级报警刷屏。
  • 高级报警被降噪误伤。
  • MQ(消息队列)积压。
  • 通知渠道限流。
  • 设备重复上报。

6. 题目五:设计异步任务调度平台

6.1 需求澄清

  • 任务类型和优先级。
  • 是否需要定时任务。
  • 是否允许重复执行。
  • 失败是否自动重试。
  • 是否多实例部署。

6.2 参考答案结构

模块方案
任务存储MySQL(关系型数据库)记录任务状态
调度分片扫描、乐观锁抢占
执行Runner(执行器)线程池隔离
重试指数退避、最大次数
补偿死信任务、人工重跑
观测成功率、失败率、积压量、耗时

7. 题目六:设计高可用订单系统

7.1 参考答案结构

  • Gateway(网关)限流。
  • 订单服务无状态多实例。
  • MySQL(关系型数据库)主从和备份。
  • Redis(远程字典服务)缓存热点数据。
  • MQ(消息队列)异步通知。
  • Trace(链路追踪)贯穿全链路。
  • 灰度发布和快速回滚。

8. 容量估算与压测检查点

系统设计题里,如果只讲服务拆分和组件选型,会像“画图题”。架构师面试要主动补一层容量口径:业务量、峰值、实例数、资源规格、压测方法、监控指标和扩容阈值。

8.1 通用容量估算模板

第一步:业务量
日订单量、日请求量、设备数、轨迹量、支付回调量、峰值时间窗口。

第二步:峰值换算
峰值 TPS(每秒事务数) = 日业务量 * 峰值占比 / 峰值秒数
内部 QPS(每秒查询率) = 峰值 TPS(每秒事务数) * 平均内部调用次数

第三步:资源估算
单实例能力来自压测,不凭经验拍数。
实例数 = 目标峰值 / 单实例稳定能力 * 冗余系数。

第四步:压测验证
看 QPS(每秒查询率)、TPS(每秒事务数)、P95(95 分位响应时间)、P99(99 分位响应时间)、错误率、CPU(中央处理器)、内存、GC(垃圾回收)、线程池、连接池、数据库慢 SQL(结构化查询语言)、Redis(远程字典服务)命中率和 MQ(消息队列)积压。

8.2 库存防超卖容量检查点

检查点面试要说清
峰值 TPS(每秒事务数)下单、库存预扣、支付成功扣减分别估算
热点 SKU(库存单位)是否存在单 SKU(库存单位)瞬时高并发
Redis(远程字典服务)能力Lua(脚本语言)预扣耗时、hot key(热键)、内存和网络
MySQL(关系型数据库)兜底条件更新 TPS(每秒事务数)、锁等待、慢 SQL(结构化查询语言)
P99(99 分位响应时间)热点库存扣减时是否长尾升高
压测重点重复下单、超卖、少卖、支付超时释放、MQ(消息队列)延迟

口述补充:

库存系统我会把性能和正确性分开看。Redis(远程字典服务)负责削峰和预扣,MySQL(关系型数据库)负责最终不超卖;容量上看热点 SKU(库存单位)的峰值 TPS(每秒事务数)和数据库条件更新能力,压测时不能只看 QPS(每秒查询率),还要校验库存结果是否正确。

8.3 支付回调一致性容量检查点

检查点面试要说清
回调 TPS(每秒事务数)正常支付、活动峰值、通道重试峰值
幂等冲突数重复 Webhook(回调通知)和主动查询冲突
状态机耗时支付单、订单、账务状态流转耗时
下游 MQ(消息队列)消费成功率、dead letter(死信)数量、重试次数
可用性支付核心链路优先级高于通知和报表
压测重点重复、乱序、延迟、验签失败、通道超时

口述补充:

支付回调不能只压接口吞吐,还要压幂等和状态机。比如同一通道事件重复进来时,只允许一条成功流转;下游失败要靠 MQ(消息队列)重试和对账补偿,不能让资金状态悬空。

8.4 跨境物流轨迹容量检查点

检查点面试要说清
轨迹 msg/s(每秒消息数)推送和拉取分别估算
第三方 API(应用程序接口)RT(响应时间)、超时率、限流规则
MQ(消息队列)backlog(积压量)、consumer lag(消费者延迟)、Partition(分区)热点
数据库写入批量写入、幂等索引、历史归档
查询体验最新轨迹优先,历史轨迹冷热分离
压测重点乱序、重复、延迟、外部接口慢、批量入库

口述补充:

跨境物流的稳定性重点不是单接口 QPS(每秒查询率),而是外部接口慢、轨迹乱序、MQ(消息队列)积压和批量写入能力。主链路要异步化,外部慢依赖要隔离。

8.5 IoT(物联网)报警风暴容量检查点

检查点面试要说清
设备规模在线设备数、单设备上报频率
峰值 msg/s(每秒消息数)故障风暴时的瞬时上报
聚合率窗口聚合前后消息量变化
通知能力短信、邮件、站内信、Webhook(回调通知)限流
队列保护高级报警和普通报警分流
压测重点突增流量、降噪误伤、通知限流、MQ(消息队列)积压

口述补充:

IoT(物联网)报警风暴的目标不是把报警全吞掉,而是降低噪声同时保护高级报警。容量设计上要看峰值 msg/s(每秒消息数)、聚合率、通知通道能力和 MQ(消息队列)积压。

8.6 异步任务调度平台容量检查点

检查点面试要说清
任务进入速率每分钟新增任务数、定时任务集中触发
Runner(执行器)吞吐单 Runner(执行器)并发、平均任务耗时
积压量backlog(积压量)、最老任务等待时间
重试风暴失败率、重试次数、指数退避
资源隔离不同任务类型独立线程池和队列
压测重点扫描抢占、重复执行、任务超时、失败重试

口述补充:

调度平台不能只看“能不能执行”,还要看任务进入速率和 Runner(执行器)消费能力是否匹配。失败重试必须退避,否则下游故障时会把系统拖进重试风暴。

8.7 高可用订单系统容量检查点

检查点面试要说清
读写比例查询 QPS(每秒查询率)和下单 TPS(每秒事务数)分开估算
实例规格2C4G(2 核 CPU,4GB 内存)或 4C8G(4 核 CPU,8GB 内存)起步,压测校准
数据库订单主表写入、索引、归档、读写分离
缓存热点订单、商品、库存缓存命中率
发布容量滚动发布时仍保留足够实例
压测重点下单链路、库存链路、支付链路、MQ(消息队列)异步通知

口述补充:

订单系统要把查询 QPS(每秒查询率)和写入 TPS(每秒事务数)分开。查询可以靠缓存和读模型扩展,写入要看订单状态机、库存扣减、支付状态和数据库事务能力。

9. 业务指标与埋点检查点

系统设计题如果能补充业务指标,会更像资深工程师或架构师的回答:不仅知道系统怎么扛住,还知道业务结果怎么衡量、数据是否可信、异常变化怎么排查。

9.1 通用业务指标模板

第一步:定义业务目标
这个系统是提升交易转化、履约效率、库存准确率、报警处理效率,还是任务执行可靠性。

第二步:定义核心指标
PV(页面浏览量)、UV(独立访客数)、DAU(每日活跃用户数)、MAU(月活跃用户数)、Conversion Rate(转化率)、Retention Rate(留存率)、成功率、异常率、处理时长。

第三步:定义埋点和事实来源
前端埋点看曝光点击路径,后端埋点看业务结果,订单、支付、库存、履约必须以后端事实表和对账为准。

第四步:定义数据质量
说明 User ID(用户标识)、Device ID(设备标识)、Session ID(会话标识)、Event ID(事件标识)、去重规则、测试账号过滤、爬虫过滤和对账规则。

9.2 库存防超卖业务指标

检查点面试要说清
下单 Conversion Rate(转化率)商品页、下单、库存预扣、支付成功分步看
超卖拦截数系统拦截的风险订单
少卖率有库存但用户无法购买的比例
库存调整次数库存不一致风险
支付超时释放量库存冻结和释放是否合理
后端事实库存流水、订单状态、支付状态

口述补充:

库存防超卖不能只讲不超卖,还要看是否少卖、是否影响下单 Conversion Rate(转化率)、库存冻结是否及时释放,以及库存流水和订单支付状态能否对账。

9.3 支付回调业务指标

检查点面试要说清
发起支付数用户进入支付步骤的数量
支付成功率支付成功 / 发起支付
Webhook(回调通知)延迟通道成功到系统更新的耗时
对账差异数通道流水和内部流水不一致
Refund Rate(退款率)退款订单 / 支付成功订单
后端事实支付流水、订单状态机、账务记录

口述补充:

支付系统的业务指标必须和资金事实一致。前端支付成功页只能作为用户行为参考,真正成功要看通道回调、主动查询和对账。

9.4 跨境物流业务指标

检查点面试要说清
面单成功率面单获取成功 / 面单请求
轨迹完整率关键节点完整的运单比例
轨迹延迟节点发生到系统可见的耗时
异常件率异常运单 / 总运单
妥投率妥投运单 / 发运运单
后端事实运单表、轨迹表、状态机

口述补充:

跨境物流的业务指标要能反映履约质量。比如轨迹延迟升高时,要同时看第三方 API(应用程序接口)、MQ(消息队列)积压、消费者能力和状态机合并逻辑。

9.5 IoT(物联网)报警和 Runner(执行器)任务业务指标

场景检查点面试要说清
IoT(物联网)报警报警确认率报警是否被闭环
IoT(物联网)报警重复报警率降噪是否有效
IoT(物联网)报警高级报警触达率关键风险是否穿透
Runner(执行器)任务任务成功率平台可靠性
Runner(执行器)任务重试率是否依赖重试掩盖问题
Runner(执行器)任务平均等待时长调度能力和积压

口述补充:

IoT(物联网)报警治理要看报警质量和闭环,不只是吞吐量。Runner(执行器)调度平台要看任务成功率、重试率和等待时长,才能说明异步任务是否真正可靠。

10. 自测评分标准

维度1 分3 分5 分
需求澄清直接讲方案问少量问题主动澄清规模、约束、质量目标
架构完整性只有组件有主链路有主链路、异常链路、补偿链路
技术取舍只说用了什么能说优缺点能结合业务说明为什么选和为什么不选
失败处理很少提提部分异常系统性覆盖超时、重复、乱序、宕机、回滚
可观测性不提提日志提 Log(日志)、Metrics(指标)、Trace(链路追踪)、告警
容量数据不提提少量 QPS(每秒查询率)能讲 TPS(每秒事务数)、P95(95 分位响应时间)、P99(99 分位响应时间)、资源规格、压测和扩容阈值
业务指标不提提少量 PV(页面浏览量)或 DAU(每日活跃用户数)能讲指标口径、埋点来源、业务事实、数据质量和异常排查

11. 练习计划

第一天:

  • 库存防超卖。
  • 支付回调一致性。

第二天:

  • 跨境物流轨迹。
  • IoT(物联网)报警风暴。

第三天:

  • 异步任务调度平台。
  • 高可用订单系统。

12. 精通级系统设计训练册入口

旧根保留系统设计题的快速题单和评分框架,精通级训练册负责把每一道题扩展成完整的答题合同:需求澄清、量级估算、API(应用程序接口)和数据模型、架构、正常关键路径、一致性、容量、安全、观测、失败、成本、迁移与演进。后续继续训练时,优先按下面路径进入。

训练文档主训练题核心不变量图形资产
00-旧题映射统一答题合同与评分路线把旧根题单升级为统一系统设计答题合同所有题都必须先有可验收的不变量和事实等级PlantUML(开源建模工具)系统设计闭环图
01-WMS库存防超卖系统设计训练WMS(仓储管理系统)库存防超卖可售、冻结、已扣、实物数量守恒PlantUML(开源建模工具)系统设计闭环图
02-支付资金一致性系统设计训练支付交易、回调、查单、退款、对账同一支付意图不能重复扣款,资金最终可对平PlantUML(开源建模工具)系统设计闭环图
03-跨境履约海外仓面单轨迹系统设计训练跨境履约、海外仓、面单、轨迹外部事实可追溯,终态不能被迟到事件非法回退PlantUML(开源建模工具)系统设计闭环图
04-异步导出与Runner(执行器)调度系统设计训练大数据导出和 Runner(执行器)调度任务快照明确,旧代次不能覆盖新结果PlantUML(开源建模工具)系统设计闭环图
05-IoT报警风暴治理系统设计训练IoT(物联网)报警风暴削峰与降噪严重告警必须可达,普通告警可解释聚合PlantUML(开源建模工具)系统设计闭环图
06-高可用订单与跨域演进系统设计训练高可用订单、跨域事件与演进迁移订单状态唯一、跨域事件可恢复、灰度可回滚PlantUML(开源建模工具)系统设计闭环图

12.1 系统设计题统一口述顺序

  1. 需求澄清:先问参与者、范围、业务目标、核心不变量、允许延迟、外部依赖和成功标准。
  2. 量级估算:用日量、峰值窗口、请求放大、突增系数和冗余系数推导目标吞吐。
  3. 模型设计:给稳定业务键、状态机、版本号、幂等键、流水表和事件表。
  4. 架构设计:沿入口、领域裁决、权威存储、事件传播、下游投影和查询路径讲正常链路。
  5. 一致性设计:区分本地事务、可靠消息、补偿、查证、对账和人工复核。
  6. 失败恢复:主动讲最高成本故障,按发现、止血、定位、修复、恢复验收和复盘回答。
  7. 安全观测成本:覆盖鉴权、验签、审计、Log(日志)、Metrics(指标)、Trace(链路追踪)、告警和预算护栏。
  8. 迁移演进:用影子流量、双读校验、分群灰度、回滚阈值和存量处理说明方案如何落地。