高频技术面试题(一):系统设计、高并发、分布式架构问题与回答框架
本章聚焦面试中最高频的三大题型:系统设计题、高并发场景题、分布式架构题。面试官通过开放性问题考察你的全局视野、技术深度、决策逻辑和沟通能力。我们将提供一套通用回答框架,并通过三个典型问题和真实项目案例,让你快速掌握高分表达。
题型核心考察点
| 题型 | 核心考察点 | 回答策略 |
|---|---|---|
| 系统设计 | 全局架构、数据模型、扩展性、权衡决策 | 先定功能→非功能→数据→分层→优化 |
| 高并发 | 流量预估、限流降级、缓存、异步削峰 | 分层缓存+MQ+限流+库表设计 |
| 分布式架构 | 一致性、可用性、分区容错、分布式事务 | CAP权衡、选型(2PC/TCC/Seata)、最终一致性 |
面试问答卡片
问题1:设计一个短链接系统
面试官考察点:系统设计基本功、数据存储选型、哈希冲突处理、高性能读写
回答框架:①功能需求(生成/跳转)②估算(日活QPS)③数据模型(长-短映射)④架构(写用DB+缓存,读用CDN)⑤扩展(布隆过滤器防恶意请求)
示例回答:(约80字)我会先明确短链接生成和跳转两个核心功能,估算每日QPS约1万。用MySQL存储映射关系,主键使用自增ID+62进制生成短码。Redis缓存热点短链,减少DB压力。通过布隆过滤器拦截无效短链,并引入CDN加速跳转。
可能追问:短码冲突怎么处理?如何防止同一长链接生成多个短码?用户自定义短码怎么扩展?
问题2:如何设计一个高并发秒杀系统
面试官考察点:流量控制、库存原子性、防超卖、异步化设计、限流降级
回答框架:①前端静态化+按钮限流②后端网关令牌桶③读库存用本地缓存④Redis+Lua原子扣减⑤MQ异步落单补偿
示例回答:(约90字)首先前端部署静态资源,CDN扛住90%流量。后端使用Nginx限流模块+令牌桶算法。库存数据预热到Redis,用Lua脚本保证扣减原子性。订单消息写入MQ,下游消费后写入DB,确保最终一致。利用限流+降级避免雪崩。
可能追问:Redis主从切换时库存丢失怎么办?MQ消息积压如何应对?用户重复点击怎么防重?
问题3:分布式一致性如何保证?
面试官考察点:CAP理论理解、分布式事务方案、最终一致性实践经验、冲突处理
回答框架:①明确业务一致性等级②强一致选型(2PC/3PC/TCC)③最终一致选型(MQ+本地消息表/Seata)④补偿与对账机制
示例回答:(约80字)我会根据业务场景选择方案。对于资金类业务采用TCC或Seata AT模式保证强一致;对于非关键业务使用MQ+本地消息表实现最终一致。同时在核心链路加入补偿任务和定时对账,确保数据可修复。
可能追问:TCC的空回滚和悬挂问题怎么解决?Seata AT模式有哪些局限?Raft与Paxos在哪些场景下使用?
项目案例:电商优惠券秒杀系统
| 字段 | 内容 |
|---|---|
| 项目名称 | 电商优惠券秒杀系统 |
| 业务背景 | 大促期间发放限量优惠券,需要支撑百万级并发请求,保证库存不超发、响应不超时。 |
| 规模指标 | QPS 10万+,券库存100万+,响应时间<200ms,容忍少量失败但禁止超发。 |
| 技术栈 | Redis Cluster + Lua + RocketMQ + MySQL + Nginx + CDN + 令牌桶限流 |
| 核心难点 | 库存扣减原子性(防超发)、流量削峰、Redis主从切换数据丢失、订单写入DB的最终一致性。 |
| 面试高频追问 | ①如何保证不超发?②Redis分布式锁有哪些坑?③MQ丢失消息怎么办?④库存预热如何实现?⑤防重复提交怎么做? |
| 可迁移回答话术 | “我们采用预扣+最终确认+补偿的库存设计,核心路径用Redis+Lua保证原子性,失败通过MQ补偿。遇到高并发时,先用本地缓存扛住热点,再用令牌桶+漏桶双重限流保护下游。这套方案可以复用到任何抢购、秒杀场景。” |