综合架构题

共 19 题
#

1. 设计一个千万级 QPS 的短链生成系统,ID 生成、缓存、持久化、统计?

A 短码直接用长链哈希,无需唯一性
B 用全局唯一 ID 编码为短码,Redis 缓存扛高并发读,异步落库并撑统计 ✓ 正确答案
C 高并发下应直接读数据库,不缓存
D 统计通过同步写数据库即可
#

2. 审计日志的写入与查询,Append-only、压缩、分区的设计?

A 审计日志允许更新与删除
B 审计日志应 Append-only 追加、按时间分区并压缩归档,保证不可篡改且可查询 ✓ 正确答案
C 审计日志应不分区、全量扫描查询
D 审计日志无需时间戳
#

3. 支付系统的对账,T+1 对账、资金安全、幂等设计?

A 对账补偿可以重复执行
B 对账只需核对总额,无需明细
C T+1 用内部流水与渠道流水比对差异并补偿,处理必须幂等以保资金安全 ✓ 正确答案
D 幂等与资金安全无关
#

4. 秒杀场景的库存扣减,行锁、乐观锁、Redis 预扣减、消息队列削峰的取舍?

A 乐观锁适合超高并发秒杀
B 秒杀直接用事务锁库存即可满足千万 QPS
C 行锁简单但吞吐低,主流方案是 Redis 原子预扣 + 消息队列削峰 + 数据库最终扣减 ✓ 正确答案
D 无需防超卖
#

5. 设计千万级用户的 Feed 流存储,推拉结合、缓存、分库与一致性

A 推拉结合(普通用户推、大 V 拉)平衡读写放大,配合缓存与分库及最终一致 ✓ 正确答案
B 纯拉模式写放大严重
C 明星大 V 也应使用推模式
D Feed 流无需缓存
#

6. 设计一个亿级日活的点赞与收藏系统,如何用 Redis 聚合计数、异步落库与最终对账,保证计数与明细的一致性?

A 点赞数直接在数据库每条请求累加即可
B 无需记录点赞明细
C 对账会破坏一致性
D 用 Redis 原子计数与明细、消息队列异步落库、最终对账保证计数与明细一致 ✓ 正确答案
#

7. 设计一个附近的人 LBS 系统,GeoHash、Redis GEO 与数据库空间索引在精度、范围查询与写入成本上的取舍?

A GeoHash 能精确按真实距离排序
B Redis GEO 查询快但内存成本高,数据库空间索引持久可靠但慢,GeoHash 便于分桶常配合使用 ✓ 正确答案
C 空间索引查询性能高于 Redis GEO
D 只需用一个方案即可应对所有场景
#

8. 如何设计数据库主库宕机切换(failover)演练,检测与选主流程、脑裂防护(fencing、quorum、STONITH)、切换后的数据一致性校验与旧主降级回收?

A 切换后旧主可直接升回主,无需校验
B 无需检测主库健康状态
C 脑裂不会造成数据问题
D 需检测选主、用 quorum/fencing/STONITH 防脑裂,切换后校验一致性并让旧主降级为从库再回收 ✓ 正确答案
#

9. 区域级故障下如何设计跨地域灾备切换演练,DNS/全局流量调度切换、备库禁写与追平确认、RPO 评估与切回(failback)方案?

A 切换无需关闭备库写入
B 跨地域复制 RPO 一定为 0
C failback 无需同步数据即可切回
D 用 DNS/全局调度切流量,切换前备库禁写并追平确认,评估 RPO,切回前先反向同步 ✓ 正确答案
#

10. 如何设计定期备份恢复演练以实测验证 RTO/RPO 达标(恢复沙箱、计时、数据校验)?演练如何自动化与常态化?

A 演练只需恢复一次,无需校验
B 演练会影响生产业务
C 在恢复沙箱恢复备份、计时测 RTO、数据校验测 RPO,并自动化每周/每月常态化执行 ✓ 正确答案
D RTO/RPO 无需实测,靠估计即可
#

11. CDC/复制链路中断后如何设计数据回补与对账方案(断点续传、全量/增量比对、差异补偿写入与幂等)?

A 中断后直接重灌全量即可,无需比对
B 用日志位点断点续传防止重漏,全量/增量比对定位差异,补偿写入幂等防止重复 ✓ 正确答案
C 断点续传无需记录位点
D 补偿写入可以不幂等
#

12. 设计一个全球部署的 SaaS 数据库,多租户、跨地域、合规?

A 多租户用库/schema/表隔离,跨地域就近部署并异步同步,同时考虑数据主权与隐私合规 ✓ 正确答案
B 所有租户共享一个表即可,无需隔离
C 跨地域部署无需遵循数据本地化
D 合规与数据库设计无关
#

13. 设计一个分布式 IM 系统的消息存储,消息顺序、漫游、消息可靠性?

A 消息无需持久化,只存内存
B 用会话内单调 seq 保证顺序,服务端持久化支持漫游,落库+去重+ACK 保证可靠 ✓ 正确答案
C 会话内消息顺序无关紧要
D 消息可以重复发送,无需去重
#

14. 设计一个电商订单系统的数据库 Schema,订单、库存、支付、物流的关系建模与一致性约束?

A 金额用 FLOAT 存即可
B 订单与明细一对多、金额用 DECIMAL、库存扣减原子、状态机受控并加唯一约束保证一致 ✓ 正确答案
C 库存可随意扣减,无需考虑超卖
D 订单状态可以任意跳转
#

15. 实时排行榜的数据库设计(Redis ZSET 缓存 + 定期落库 + 对账)

A 用 Redis ZSET 原子加分与实时排名,异步落库持久化,定期对账保证一致 ✓ 正确答案
B 排行榜直接实时写数据库即可
C 分数无需持久化,重启丢失也无妨
D 对账会拖慢排行榜
#

16. 设计订单超时未支付自动取消,延迟队列(Redis ZSET 时间轮)与数据库定时扫描两种方案的精度、吞吐与恢复机制如何权衡?

A DB 定时扫描精度最高
B 扫描时需要重复处理已取消订单
C Redis 延迟队列无需持久化
D Redis 延迟队列精度与吞吐高但需设计恢复,DB 定时扫描简单可靠但精度吞吐受限,常用二者结合 ✓ 正确答案
#

17. 设计一个可观测性平台的数据存储,Metrics、Logs、Traces?

A 三类数据都用一个关系库即可
B Metrics 数据量最大,无需压缩
C Trace 无需关联日志
D Metrics 用时序库、Logs 用日志检索库、Traces 用链路库,三者关联用于故障定位 ✓ 正确答案
#

18. 设计数据库读写分离的监控与自动切换(延迟告警、从库摘除)

A 从库延迟不影响读取一致性
B 从库故障会拖垮主库,无需摘除
C 读写路由无需监控主库状态
D 监控复制延迟,超阈值告警并摘除异常从库,主库故障才切换主从 ✓ 正确答案
#

19. 设计用户签到系统,连续签到天数、补签与月度统计如何用 Redis 与数据库建模?并发防重与跨天边界如何处理?

A 签到无需防重,可重复签到
B Redis 用 Bitmap 存签到与 SETNX 防重,DB 持久化统计,统一日期键处理跨天边界 ✓ 正确答案
C 连续天数可任意计算,无需按日期连续
D 月度统计只能全量扫描 DB