Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

第 38 章 通用系统设计题库

本章按通用能力组织题卡。每张题卡都要求从业务目标、规模、主路径、权威状态、失败处理和演进取舍展开,不把组件名称当作答案。

需求澄清与范围控制

Q-GEN-SCOPE-01:系统设计面试与算法面试的区别是什么?

元信息

项目内容
题目编号Q-GEN-SCOPE-01
来源01-system-design-interview-overview.md,本章面试题与追问第 1 题
时长10 分钟
难度基础
场景通用面试
题型短追问
能力标签问题定义、结构化表达

题干与约束

说明系统设计面试与算法面试考察的差异,以及为什么系统设计题应先澄清问题。

候选人作答任务

用一段完整回答说明考察目标,并给出首轮澄清问题。

推荐作答顺序

先区分确定输入下的求解与不完整约束下的设计,再说明目标、规模、状态和风险如何影响方案。

答案骨架

算法题更强调在确定条件下构造正确、高效的求解;系统设计题要求在信息不完整时定义问题、选取边界并解释取舍。先澄清可避免为错误目标堆组件,随后才能讨论容量、数据与可靠性。

评分锚点

基础回答能说出先澄清。较好回答能指出约束改变架构。优秀回答能主动给出非目标和验证指标。

递进追问

业务方只说“用户很多且必须稳定”时,下一句如何追问?

常见失分点

把系统设计说成算法题的放大版;直接罗列中间件;遗漏非目标。

关联正文

第 1 章 系统设计方法论第 3 章 生产系统治理

复盘清单

  • 我是否先说明了目标、约束和非目标?
  • 我是否把澄清结果连到后续决策?

Q-GEN-SCOPE-02:设计秒杀系统前需要澄清什么?

元信息

项目内容
题目编号Q-GEN-SCOPE-02
来源01-system-design-interview-overview.md,本章面试题与追问第 2 题
时长10 分钟
难度基础
场景秒杀
题型专题设计
能力标签需求澄清、热点识别

题干与约束

设计一个秒杀系统,但尚未给出商品规模、库存、用户资格和支付规则。

候选人作答任务

列出会改变库存、限流和异步方案的关键问题,并说明原因。

推荐作答顺序

确认活动峰值和商品热点,再确认库存事实、资格规则、下单与支付时限,最后确认可接受的排队、失败和降级体验。

答案骨架

需要确认瞬时请求量、商品库存和每人限购、是否预热、库存以何处为准、订单是否必须同步创建、未支付释放规则、风控和地域限制。极端热点决定入口限流与排队;正确性要求决定预扣、条件更新和对账方案。

评分锚点

基础回答问流量和库存。较好回答补充资格、支付超时和风控。优秀回答能把每项约束映射到对应机制。

递进追问

十万人同时抢一万件商品,和一小时内均匀产生十万订单,设计有什么不同?

常见失分点

把平均流量当峰值;只谈 Redis;没有问库存释放和重复提交。

关联正文

第 7 章 高准确性与强一致性第 9 章 高并发写与热点第 27 章 库存系统

复盘清单

  • 我是否区分了活动瞬时峰值与平均流量?
  • 我是否说明了库存和订单的权威状态?

容量估算与性能设计

Q-GEN-CAP-01:如何把容量估算转化为设计依据?

元信息

项目内容
题目编号Q-GEN-CAP-01
来源01-system-design-interview-overview.md,本章面试题与追问第 3 题;06-whiteboard-capacity-estimation.md,容量估算口径
时长20 分钟
难度进阶
场景通用白板
题型专题设计
能力标签容量估算、性能设计

题干与约束

说明如何估算峰值 QPS、并发、数据量、带宽和存储增长,并把结果用于设计。

候选人作答任务

选择一个下单或内容读取场景,给出口径、数量级和至少三项设计影响。

推荐作答顺序

从用户行为推导请求量,再用峰值放大和读写比例拆链路,随后估算数据、带宽、热点和异步流量。

答案骨架

先声明活跃用户、每人操作次数和峰值集中度;再计算核心读写 QPS,并加上重试、回调和异步消费。读高时设计缓存与读模型,写高时设计削峰和分片,热点集中时预热、隔离和限流,数据增长影响索引、归档与容量余量。

评分锚点

基础回答有数量级。较好回答区分读写与峰值。优秀回答能说明估算误差、外部依赖和演进阈值。

递进追问

若用户流量不变但活动压缩到一分钟,哪些估算必须重做?

常见失分点

只报一个 QPS;忽略重试和回调;估算后没有落到架构选择。

关联正文

第 1 章 系统设计方法论第 8 章 低延迟复杂读第 9 章 高并发写与热点

复盘清单

  • 我是否明确了峰值和容量余量的口径?
  • 我是否把每个数量级结论转化为设计选择?

数据建模、一致性与事务

Q-GEN-DATA-01:为什么核心交易状态要有权威来源?

元信息

项目内容
题目编号Q-GEN-DATA-01
来源01-system-design-interview-overview.md,本章面试题与追问第 4 题
时长15 分钟
难度进阶
场景订单、支付、库存
题型短追问
能力标签数据建模、一致性

题干与约束

订单、支付、库存热路径使用缓存时,如何解释权威状态与修复策略?

候选人作答任务

说明权威来源、缓存职责,以及不一致后的恢复流程。

推荐作答顺序

先定义不可丢失的业务事实,再划分热路径与权威路径,最后说明对账、补偿和人工处理。

答案骨架

交易状态必须有可审计、可约束、可恢复的权威来源;缓存承担低延迟、热点拦截或短期预扣,不能替代账本与状态机。发生偏差时以权威记录为准,通过事件重放、对账任务、补偿和告警追平。

评分锚点

基础回答区分缓存和数据库。较好回答说明状态机和幂等。优秀回答明确责任方、修复入口和审计证据。

递进追问

缓存预扣成功、权威写入失败时,用户和库存分别如何处理?

常见失分点

宣称缓存天然强一致;没有对账;把最终一致当作不处理失败。

关联正文

第 4 章 大事务处理第 7 章 高准确性与强一致性第 32 章 订单系统

复盘清单

  • 我是否明确了每类状态的权威来源?
  • 我是否说明了发现和修复偏差的闭环?

Q-GEN-DATA-02:系统设计题中如何回答一致性问题?

元信息

项目内容
题目编号Q-GEN-DATA-02
来源01-system-design-interview-overview.md,本章面试题与追问第 8 题
时长15 分钟
难度进阶
场景跨系统协作
题型短追问
能力标签一致性、取舍表达

题干与约束

如何避免把强一致和最终一致说成空泛口号?

候选人作答任务

以交易主链路和搜索投影为例,说明对象、强度、时限、失败处理和代价。

推荐作答顺序

先界定对象与错误后果,再确定同步边界和允许延迟,随后说明幂等、补偿、对账和监控。

答案骨架

订单提交、支付状态和库存确认等资损敏感事实需要强约束或同步确认;搜索、推荐、报表等派生读模型通常允许最终一致。最终一致必须说明延迟目标、可靠投递、重放幂等、对账和人工修复,而不是只说异步。

评分锚点

基础回答能分类。较好回答说出延迟和补偿。优秀回答能量化错误后果并解释性能代价。

递进追问

支付已成功但订单状态尚未更新时,什么数据对用户可见,谁负责补偿?

常见失分点

所有链路都强一致;所有异步都最终一致;没有时间边界和修复责任。

关联正文

第 4 章 大事务处理第 7 章 高准确性与强一致性第 33 章 支付系统

复盘清单

  • 我是否说明了一致性的对象和可接受时限?
  • 我是否给出了失败后的补偿和对账路径?

Q-GEN-DATA-03:为什么核心交易状态通常放在 MySQL?

元信息

项目内容
题目编号Q-GEN-DATA-03
来源02-middleware-reliability-interview.md,MySQL 高频追问:为什么核心交易状态通常放在 MySQL?
时长10 分钟
难度基础
场景交易存储
题型中间件追问
能力标签权威存储、事务

题干与约束

解释为什么订单、支付和库存流水通常以 MySQL 承载权威状态。

候选人作答任务

说明 MySQL 的职责、缓存和消息的职责,以及边界。

推荐作答顺序

先讲事务、约束、审计和恢复,再说明读扩展与异步传播。

答案骨架

核心交易需要原子更新、唯一约束、状态机校验、审计和恢复能力,因此以关系型事务存储承载权威事实。缓存用于加速与削峰,消息用于传播副作用;它们都不能替代最终状态的可验证来源。

评分锚点

基础回答提到事务。较好回答提到约束和账本。优秀回答能说明热点下的缓存预扣与数据库兜底。

递进追问

数据库成为瓶颈后,怎样扩展而不把权威状态交给缓存?

常见失分点

把 MySQL 说成所有数据的唯一选择;忽略读写分离、分片和归档;把消息当存储替代品。

关联正文

第 7 章 高准确性与强一致性第 27 章 库存系统第 32 章 订单系统

复盘清单

  • 我是否说清了权威状态需要的能力?
  • 我是否说明了缓存和消息不承担什么职责?

Q-GEN-DATA-04:库存扣减如何防止超卖?

元信息

项目内容
题目编号Q-GEN-DATA-04
来源02-middleware-reliability-interview.md,MySQL 高频追问:库存扣减如何防止超卖?
时长20 分钟
难度进阶
场景库存扣减
题型专题设计
能力标签并发控制、库存一致性

题干与约束

高并发下单时既要防超卖,也要处理取消、支付失败和重复请求。

候选人作答任务

设计库存检查、预占、确认、释放和对账链路。

推荐作答顺序

先确定库存事实和售卖规则,再讲原子扣减或条件更新,随后补充预占生命周期、幂等和恢复。

答案骨架

数据库使用条件更新、乐观锁或库存账本保护最终正确性;热点可先在缓存中原子预扣和限流。订单创建、支付成功、超时取消都通过唯一业务键和状态机推进预占、确认或释放;定期对账修复缓存与权威库存偏差。

评分锚点

基础回答有条件更新。较好回答有预占释放。优秀回答覆盖重复、乱序、对账和资损告警。

递进追问

支付回调重复且取消任务晚到时,如何避免已售库存被释放?

常见失分点

只用分布式锁;没有库存流水;支付失败后不释放;没有幂等键。

关联正文

第 7 章 高准确性与强一致性第 9 章 高并发写与热点第 27 章 库存系统

复盘清单

  • 我是否覆盖了预占、确认、释放和对账?
  • 我是否说明了并发与重复下的状态机约束?

Q-GEN-DATA-05:缓存和数据库不一致怎么办?

元信息

项目内容
题目编号Q-GEN-DATA-05
来源02-middleware-reliability-interview.md,Redis 高频追问:缓存和数据库不一致怎么办?
时长15 分钟
难度进阶
场景缓存
题型中间件追问
能力标签缓存一致性、故障恢复

题干与约束

核心数据更新后,缓存删除或刷新可能失败,业务允许的不一致窗口有限。

候选人作答任务

选择一致性策略,说明失败恢复和适用边界。

推荐作答顺序

先确认数据是否可容忍短暂陈旧,再确定权威读写路径,最后设计失效、重试、补偿和监控。

答案骨架

通常采用缓存旁路:写入权威存储成功后删除缓存,读取未命中时回源重建,并设置合理过期。对更敏感的数据可使用消息驱动刷新、延迟删除、版本号或直接读权威存储;删除失败必须重试、告警和补偿,不能承诺绝对一致。

评分锚点

基础回答会删除缓存。较好回答说明并发窗口。优秀回答能按业务风险选择策略并提供可观测性。

递进追问

更新成功但删除缓存失败,怎样避免陈旧数据长期存在?

常见失分点

先删缓存再写库且不处理失败;读写都强制同步更新缓存;没有过期和补偿。

关联正文

第 3 章 生产系统治理第 8 章 低延迟复杂读第 30 章 搜索与导购

复盘清单

  • 我是否先判断陈旧数据的业务后果?
  • 我是否说明了缓存刷新失败后的恢复闭环?

Q-GEN-DATA-06:分布式锁能解决所有并发问题吗?

元信息

项目内容
题目编号Q-GEN-DATA-06
来源02-middleware-reliability-interview.md,Redis 高频追问:分布式锁能解决所有并发问题吗?
时长10 分钟
难度进阶
场景并发控制
题型中间件追问
能力标签锁、幂等、状态机

题干与约束

多个节点并发修改库存或订单状态,团队希望统一使用分布式锁。

候选人作答任务

说明锁能解决什么、不能解决什么,以及核心状态的更可靠保护方式。

推荐作答顺序

先界定临界区和锁的失效条件,再说明数据库约束、条件更新和业务幂等。

答案骨架

分布式锁只能降低特定临界区的并发冲突,还会面对超时、续租、误释放、主从切换和网络分区。资金、库存和状态流转应以唯一约束、条件更新、版本号和状态机为最终保护;锁可作为优化,业务操作仍必须幂等。

评分锚点

基础回答能指出锁超时。较好回答有条件更新。优秀回答说明围栏令牌或失锁后的停止写入。

递进追问

持锁节点长时间停顿后恢复,如何防止它覆盖新持锁者的结果?

常见失分点

把锁当事务;不设置业务幂等;只讨论获取锁,不讨论失锁和释放。

关联正文

第 5 章 长生命周期业务流程第 7 章 高准确性与强一致性第 27 章 库存系统

复盘清单

  • 我是否区分了并发优化和最终正确性保护?
  • 我是否覆盖了锁失效后的业务行为?

高可用、故障恢复与可观测性

Q-GEN-REL-01:如何解释高可用?

元信息

项目内容
题目编号Q-GEN-REL-01
来源01-system-design-interview-overview.md,本章面试题与追问第 7 题
时长15 分钟
难度进阶
场景生产治理
题型短追问
能力标签高可用、可观测性

题干与约束

解释限流、熔断、降级、隔离、数据保护和演练如何组成可用性设计。

候选人作答任务

按流量、依赖、数据和运维四层给出具体措施。

推荐作答顺序

先说明要保护的核心路径和可用性目标,再分别覆盖流量、依赖、数据和运营恢复。

答案骨架

高可用不是增加实例数,而是让故障被限制、被发现、被恢复。流量层限流和隔离,依赖层超时、重试、熔断和快速失败,数据层复制、对账和补偿,运维层监控、告警、压测、演练和扩容预案;非核心能力在故障时让路给主交易。

评分锚点

基础回答会列举保护手段。较好回答能关联到链路。优秀回答能定义降级优先级和恢复指标。

递进追问

推荐服务异常时,商品详情和下单链路分别应该如何表现?

常见失分点

只说多机房;所有功能同等保护;没有监控和演练。

关联正文

第 3 章 生产系统治理第 9 章 高并发写与热点第 36 章 电商用户全生命周期

复盘清单

  • 我是否先定义了必须保护的核心业务?
  • 我是否覆盖了预防、发现、恢复三个阶段?

Q-GEN-REL-02:超时、重试与幂等如何协作?

元信息

项目内容
题目编号Q-GEN-REL-02
来源02-middleware-reliability-interview.md,可靠性高频追问:超时、重试和幂等是什么关系?
时长15 分钟
难度进阶
场景同步与异步调用
题型中间件追问
能力标签超时、重试、幂等

题干与约束

下游偶发超时,调用方需要提高成功率但不能重复创建订单、扣库存或支付。

候选人作答任务

说明三者的职责、重试条件和幂等落点。

推荐作答顺序

先设定超时边界,再区分可重试与不可重试错误,最后定义业务唯一键和结果查询方式。

答案骨架

超时防止资源无限等待,重试处理可恢复的瞬时失败,幂等确保重复请求产生相同业务结果。调用方使用有限次数、退避和抖动;服务端用请求键、唯一约束、状态机或去重记录收敛副作用,并在未知结果时查询最终状态而非盲目重试。

评分锚点

基础回答能定义三者。较好回答有退避和错误分类。优秀回答能处理超时后结果未知与跨服务幂等。

递进追问

支付请求超时但渠道可能已扣款,客户端能否重试?服务端应返回什么?

常见失分点

所有异常都重试;只在客户端做幂等;没有重试上限和观测。

关联正文

第 3 章 生产系统治理第 4 章 大事务处理第 33 章 支付系统

复盘清单

  • 我是否区分了失败、超时和结果未知?
  • 我是否说明了幂等键与最终状态查询?

Q-GEN-REL-03:什么时候用熔断,什么时候用降级?

元信息

项目内容
题目编号Q-GEN-REL-03
来源02-middleware-reliability-interview.md,可靠性高频追问:什么时候用熔断,什么时候用降级?
时长10 分钟
难度基础
场景依赖故障
题型中间件追问
能力标签熔断、降级、业务优先级

题干与约束

推荐、通知和支付渠道等依赖发生持续失败,主业务需要保持可用。

候选人作答任务

区分两种机制的目标,并给出具体业务动作。

推荐作答顺序

先确定下游故障是否拖垮调用方,再判断当前功能是否可被替代或延后。

答案骨架

熔断在错误率或延迟异常时快速拒绝调用,保护调用方资源并等待探测恢复;降级是在非核心能力不可用时提供简化结果或关闭功能,保护核心业务。例如详情页可移除推荐模块,支付渠道异常应切换渠道、保留处理中状态或转人工,不能伪造成功。

评分锚点

基础回答能区分定义。较好回答能给出恢复条件。优秀回答能按业务风险设计不同降级结果。

递进追问

通知服务熔断后,怎样保证交易状态仍可被用户查询和后续补发?

常见失分点

把熔断等同于服务下线;对支付直接返回成功;没有恢复和补偿策略。

关联正文

第 3 章 生产系统治理第 33 章 支付系统第 36 章 电商用户全生命周期

复盘清单

  • 我是否按核心程度定义降级结果?
  • 我是否说明熔断后的恢复探测和补偿?

中间件与基础设施

Q-GEN-MW-01:什么场景应该引入消息队列?

元信息

项目内容
题目编号Q-GEN-MW-01
来源01-system-design-interview-overview.md,本章面试题与追问第 5 题
时长15 分钟
难度进阶
场景异步协作
题型中间件追问
能力标签消息队列、异步设计

题干与约束

订单成功后需要通知、积分和索引更新,但主链路不能被非核心下游拖慢。

候选人作答任务

说明何时引入消息队列,以及顺序、重复、积压和失败如何处理。

推荐作答顺序

先定义必须同步确认的事实,再识别可异步的副作用,最后设计可靠投递和消费治理。

答案骨架

消息队列适合削峰、异步解耦、事件传播和失败重试,不是“解耦”万能答案。核心状态先在本地事务内落稳,通过本地消息表或可靠事件发布异步驱动下游;按业务键设计分区顺序,消费者幂等,积压时限流、扩容、回压或降级。

评分锚点

基础回答能说出异步化。较好回答覆盖幂等和积压。优秀回答能区分业务顺序、投递保证和补偿边界。

递进追问

订单创建成功但事件未发出,怎样避免下游长期遗漏?

常见失分点

事务内同步发送消息且无补偿;以为消息顺序等于业务正确;忽略积压和死信。

关联正文

第 4 章 大事务处理第 6 章 任务处理第 32 章 订单系统

复盘清单

  • 我是否说明了消息队列不承担的职责?
  • 我是否覆盖投递、消费、积压和补偿?

Q-GEN-MW-02:检索场景为什么不总是使用 Elasticsearch?

元信息

项目内容
题目编号Q-GEN-MW-02
来源01-system-design-interview-overview.md,本章面试题与追问第 6 题
时长10 分钟
难度基础
场景查询选型
题型中间件追问
能力标签搜索、存储选型

题干与约束

需要解释复杂搜索与按主键、简单条件查询的不同技术选择。

候选人作答任务

说明 Elasticsearch 的能力边界和引入后的代价。

推荐作答顺序

先识别查询模式,再比较事务存储和搜索读模型,最后说明索引同步与降级。

答案骨架

主键和有限条件查询通常由事务存储和索引满足;全文检索、多字段筛选、相关性排序、聚合和复杂分页更适合作为独立搜索读模型。引入 Elasticsearch 后要接受索引延迟,设计重建、异步同步、版本控制和回退查询。

评分锚点

基础回答区分查询能力。较好回答提到索引延迟。优秀回答能说明何时不引入搜索系统。

递进追问

搜索索引落后于商品主数据时,详情页和交易创建分别以什么数据为准?

常见失分点

把 Elasticsearch 当权威事务库;只谈性能;忽略运维和索引重建成本。

关联正文

第 8 章 低延迟复杂读第 25 章 商品中心第 30 章 搜索与导购

复盘清单

  • 我是否先按查询模式判断?
  • 我是否说明了搜索索引不是权威数据?

Q-GEN-MW-03:如何降低 Kafka 消息丢失风险?

元信息

项目内容
题目编号Q-GEN-MW-03
来源02-middleware-reliability-interview.md,Kafka 高频追问:Kafka 如何保证消息不丢?
时长15 分钟
难度进阶
场景消息可靠性
题型中间件追问
能力标签可靠投递、消息恢复

题干与约束

关键事件需从生产端到消费端降低丢失风险,并能被业务恢复。

候选人作答任务

分段说明生产、存储、消费和业务端的保护措施。

推荐作答顺序

先确认业务事件是否已可靠地产生,再分别说明生产确认、副本存储、消费提交和补偿。

答案骨架

生产端使用确认、重试和幂等生产者;集群端使用副本和同步副本集合;消费者在业务处理成功后再提交位点。端到端仍需要本地消息表或可重放事件、幂等消费、监控积压和补偿,因为消息系统配置不能证明业务副作用已经完成。

评分锚点

基础回答知道确认和副本。较好回答知道成功后提交位点。优秀回答能覆盖业务事件生成与补偿。

递进追问

数据库事务已提交但生产者宕机,怎样确保事件最终发出?

常见失分点

只配置确认;先提交位点;把生产者幂等误当业务幂等。

关联正文

第 4 章 大事务处理第 6 章 任务处理第 3 章 生产系统治理

复盘清单

  • 我是否按生产、存储、消费和业务四段回答?
  • 我是否说明了可靠事件与业务恢复?

Q-GEN-MW-04:消息重复时如何保证结果正确?

元信息

项目内容
题目编号Q-GEN-MW-04
来源02-middleware-reliability-interview.md,Kafka 高频追问:消息重复怎么办?
时长15 分钟
难度进阶
场景消息消费
题型中间件追问
能力标签幂等、状态机

题干与约束

消费者按至少一次投递接收事件,重复消费不能造成重复扣款、积分或状态回退。

候选人作答任务

给出幂等键、状态约束和失败重试的设计。

推荐作答顺序

先定义业务唯一事件,再选择去重记录、唯一约束或条件更新,最后处理并发消费和重放。

答案骨架

默认假设消息会重复。消费者以业务唯一键或事件标识建立去重记录,结合数据库唯一约束、状态机条件更新或幂等写入,使重复执行得到相同结果。处理与标记完成要可恢复,失败可安全重试;生产者幂等只减少投递重复,不能替代业务幂等。

评分锚点

基础回答能说去重。较好回答有唯一约束和状态机。优秀回答能处理并发重复与补偿重放。

递进追问

消费者已产生外部副作用但进程在标记完成前崩溃,如何恢复?

常见失分点

仅依赖消息 ID 的内存去重;没有持久化约束;混淆投递幂等和业务幂等。

关联正文

第 4 章 大事务处理第 5 章 长生命周期业务流程第 32 章 订单系统

复盘清单

  • 我是否明确了幂等键对应的业务语义?
  • 我是否说明了重复与崩溃后的恢复?

Q-GEN-MW-05:何时选择 Elasticsearch 而不是 MySQL?

元信息

项目内容
题目编号Q-GEN-MW-05
来源02-middleware-reliability-interview.md,Elasticsearch 高频追问:为什么搜索不用 MySQL 直接查?
时长10 分钟
难度基础
场景搜索系统
题型中间件追问
能力标签搜索架构、读模型

题干与约束

商品需要关键词搜索、筛选、排序和聚合,同时交易系统不能依赖搜索索引正确性。

候选人作答任务

说明选择 Elasticsearch 的门槛、同步方案和交易边界。

推荐作答顺序

先界定搜索体验需求,再说明索引作为派生读模型,最后说明同步失败与重建。

答案骨架

当业务需要全文检索、多维筛选、相关性排序、聚合或深分页治理时选择 Elasticsearch;简单查询继续使用 MySQL。主数据变更通过异步事件更新索引,索引按版本幂等,支持全量重建和补偿;交易创建始终以权威商品、库存和价格校验为准。

评分锚点

基础回答有功能边界。较好回答有异步同步。优秀回答有索引重建、回退和交易隔离。

递进追问

索引更新延迟时,搜索结果中的过期商品怎样处理?

常见失分点

所有查询上搜索系统;同步写主库和索引;让订单直接信任索引字段。

关联正文

第 8 章 低延迟复杂读第 25 章 商品中心第 30 章 搜索与导购

复盘清单

  • 我是否说明了选择搜索系统的具体门槛?
  • 我是否保留了交易对权威状态的校验?

架构演进、成本与技术取舍

Q-GEN-EVO-01:高频系统设计题的底层共性是什么?

元信息

项目内容
题目编号Q-GEN-EVO-01
来源01-system-design-interview-overview.md,本章面试题与追问第 9 题
时长15 分钟
难度进阶
场景综合归纳
题型短追问
能力标签模式识别、架构演进

题干与约束

秒杀、库存、支付、短链接和 Feed 流题面不同,如何归纳可迁移的设计模式?

候选人作答任务

总结三类以上核心矛盾,并说明各自的通用处理手段。

推荐作答顺序

先按热点写入、权威状态、读放大和跨系统副作用分类,再给出对应设计模式。

答案骨架

高频题通常归结为:热点与吞吐,使用削峰、排队、预热和隔离;业务事实正确性,使用权威状态、条件更新、状态机和对账;跨系统副作用,使用可靠事件、幂等、补偿与观测;复杂读,使用读模型、缓存和可接受的最终一致。题面变化时先识别主矛盾,再选择模式。

评分锚点

基础回答能归类。较好回答能联系具体题目。优秀回答能说明模式失效边界和演进条件。

递进追问

若只能优先解决一个问题,如何从资损、用户体验和系统吞吐中排序?

常见失分点

只按组件分类;把所有题归为缓存或消息队列;没有权威状态和失败恢复。

关联正文

第 1 章 系统设计方法论第 4 章 大事务处理第 9 章 高并发写与热点

复盘清单

  • 我是否先识别题目的主矛盾?
  • 我是否能为每种模式说明边界和失败处理?

Q-GEN-EVO-02:系统设计面试后如何复盘并改进?

元信息

项目内容
题目编号Q-GEN-EVO-02
来源01-system-design-interview-overview.md,本章面试题与追问第 10 题;06-whiteboard-capacity-estimation.md,收尾方式
时长10 分钟
难度基础
场景面试复盘
题型方法题
能力标签复盘、表达改进

题干与约束

一次面试后发现自己“懂很多但讲不清”,如何建立下一轮训练计划?

候选人作答任务

给出结构、内容和表达三层复盘方法,并转化为可执行练习。

推荐作答顺序

先回放回答顺序,再核对缺失的状态与失败处理,最后把问题写成下一次的限时动作。

答案骨架

结构层检查是否先讲目标、规模、主链路、状态、失败和演进;内容层检查结论是否有依据、是否遗漏权威状态与补偿;表达层检查是否先报框架、是否术语堆叠。每个失分点转成可验证动作,下一轮在改变约束后重答并比较改进。

评分锚点

基础回答会复盘。较好回答能分层。优秀回答能设置可观察的训练目标并根据追问调整。

递进追问

如果每次都遗漏异常处理,下一次白板上应加入什么固定检查点?

常见失分点

只看答案对错;只背更多题;没有记录假设和被追问的边界。

关联正文

第 1 章 系统设计方法论第 3 章 生产系统治理

复盘清单

  • 我是否能列出本次最影响结果的三项遗漏?
  • 我是否把每项遗漏转化为下一次可验证动作?

通用答题速查

以下内容用于补足题卡中的选型表达,不替代题卡的完整作答。

缓存策略

策略适用场景主要代价
缓存旁路通用读多写少需要处理失效窗口和回源
读穿透读密集实现与排障边界更复杂
写穿透对读一致性要求较高写延迟与吞吐受影响
异步回写写密集需面对数据丢失和恢复风险

分布式事务

方案适用判断主要代价
两阶段提交必须同步收敛且参与方可控可用性与性能成本高
TCC资源可预留、可确认和可取消业务实现复杂
Saga长流程可补偿需接受中间状态和补偿设计
本地消息表多数异步副作用需要消费者幂等和对账

限流算法

算法适用判断注意点
计数器简单固定窗口限制边界突刺明显
滑动窗口需要更平滑的统计成本更高
令牌桶允许有限突发需设置补充速率和容量
漏桶需要平滑输出可能增加排队延迟

分库分表

分片键应服务于主要查询和写入均衡,常见选择包括用户标识、订单标识与时间。先确认跨分片查询、扩容、归档和全局唯一标识的成本;规模未到阈值前可保持单库,同时预留分片键和归档策略。