我来为您整理这些系统设计和架构相关面试题的关键要点: | 问题分类 | 问题 | 关键词/关键概念 | | ---------- | ----------------------------- | ---------------------------------------- | | **秒杀系统** | 阿里库存秒杀如何实现?| 缓存预热、Redis扣减库存、异步下单、限流熔断、队列削峰、库存分片 | | | 阿里数据库抗秒杀原理 | 读写分离、分库分表、缓存前置、批量提交、异步处理、降级策略 | | | 为什么不用分布式锁实现秒杀?| 性能瓶颈、锁竞争激烈、超时问题、单点故障、用Redis原子操作更好 | | | 让你设计秒杀系统考虑哪些?| 页面静态化、CDN、限流、缓存、消息队列、库存预扣、超卖防护、降级 | | **海量数据处理** | 40亿QQ号1G内存去重?| 位图Bitmap、布隆过滤器、外部排序、分治法、40亿bit=500MB | | | 100M内存存储1亿整数判断存在?| 位图、2亿bit=25MB、O(1)查询、空间换时间 | | | 大量手机号标记骚扰如何存储?| 布隆过滤器、HyperLogLog、位图、前缀树Trie | | | 百万级排行榜功能?| Redis ZSet、分片处理、定时计算、冷热分离、TopK算法 | | **系统选型** | 4C8G×16 vs 8C16G×8选择?| 前者高可用好、故障影响小、后者单机性能强、网络开销少、看业务特点 | | | 4C8G机器系统指标正常范围?| CPU<70%、Load<4、内存<80%、IO wait<20%、网络<70% | | | InnoDB为什么不用跳表?| B+树磁盘友好、顺序访问、范围查询效率高、跳表适合内存 | | | Redis为什么不用B+树?| 内存数据库、跳表实现简单、并发性能好、B+树适合磁盘 | | **分布式事务** | 加分布式锁在事务内外区别?| 外面:锁时间长、包含事务时间;里面:可能脏读、锁时间短 | | | 为啥不在事务中做外部调用?| 事务时间长、连接占用、超时回滚、死锁风险、性能差 | | | 代码中长事务带来哪些问题?| 锁表时间长、连接池耗尽、内存占用、主从延迟、死锁 | | **高并发优化** | 一个接口3000QPS/200ms需要几台机器?| 并发数=3000×0.2=600、单机100并发、需6-8台考虑冗余 | | | 业务量突增100倍QPS怎么办?| 限流降级、扩容、缓存、CDN、队列削峰、读写分离、服务降级 | | | 加分布式锁影响并发怎么办?| 分段锁、读写锁、乐观锁、缓存、异步处理、锁粒度优化 | | **数据库设计** | MySQL 2000W数据Redis 20W如何保证热点?| LRU淘汰、定期分析访问日志、预热、懒加载、TTL设置 | | | MySQL千万级大表数据清理?| 分批删除、归档历史表、分区表、主从延迟考虑、pt-archiver | | | 单表2000万为什么要分表?| B+树高度增加、IO次数增多、索引效率降低、锁竞争、维护成本 | | | 外卖系统千万数据30天查询设计?| 分区表按日期、冷热分离、用户/商家分表、索引优化、缓存 | | **缓存策略** | Redis挂了怎么办?| 熔断降级、主从切换、持久化恢复、缓存预热、限流保护 | | | Redis内存满了会挂吗?| 不会挂、触发淘汰策略、LRU/LFU、拒绝写入、OOM | | | 如何实现缓存预热?| 启动加载、定时任务、懒加载、全量/增量预热、并行加载 | | | 多级缓存如何应用?| 浏览器→CDN→Nginx→Redis→数据库、就近原则、命中率统计 | | **消息队列** | MQ消息乱序如何解决?| 单分区单消费者、消息键路由、顺序消费、版本号控制 | | | 为什么不建议MQ实现订单关闭?| 延迟不精确、消息丢失、重复消费、不如定时任务可靠 | | | 消息队列拉模式vs推模式?| 拉:消费者控制、批量获取;推:实时性好、推送压力 | | **支付场景** | 支付单多渠道同时成功怎么办?| 幂等设计、状态机、分布式锁、退款处理、对账 | | | 订单超时同时支付成功怎么办?| 状态机控制、时间戳判断、异步退款、补偿机制 | | | 账户10元两笔订单防超花?| 悲观锁、乐观锁CAS、预扣减、Redis原子操作 | | **接口设计** | 给第三方提供接口注意什么?| 认证授权、限流、幂等、版本管理、监控、文档、降级 | | | 用户重复点击如何防止?| 前端防抖、Token机制、幂等设计、分布式锁、唯一索引 | | | RPC框架设计考虑什么?| 序列化、通信协议、服务发现、负载均衡、熔断限流、监控 | | **数据一致性** | 电商下单数据一致性方案?| 分布式事务、Saga、TCC、最终一致性、补偿机制 | | | 锁查更新还有重复数据?| 事务隔离级别、间隙锁、并发时序、唯一索引、幂等设计 | | | 数据对账怎么做?| 定时任务、增量对账、全量对账、差异处理、监控告警 | | **性能优化** | SQL调优主键索引反而慢?| 回表代价大、数据分布、缓存未命中、统计信息过期 | | | 应用启动前几分钟指标飙高?| JIT编译、类加载、连接池初始化、缓存预热、Bean初始化 | | | 日志打印成为瓶颈如何优化?| 异步日志、批量写入、日志级别、采样、本地缓存 | | **其他架构问题** | 分布式架构一定比单体好吗?| 不一定、复杂度增加、网络开销、事务处理难、运维成本高 | | | 查找附近的人功能?| GeoHash、R树、Redis GEO、网格索引、KD树 | | | 敏感词过滤实现?| AC自动机、DFA、Trie树、正则表达式、布隆过滤器 | # 核心设计原则 ## **高并发设计** - 无状态设计、水平扩展 - 缓存策略、CDN加速 - 异步处理、消息队列 - 限流降级、熔断保护 ## **数据一致性** - CAP理论权衡 - 最终一致性设计 - 分布式事务方案 - 幂等性保证 ## **性能优化思路** - 减少网络调用 - 批量处理 - 预计算/预加载 - 空间换时间