场景1:分布式锁设计——从“会用”到“会设计”
面试官心理:判断你是否理解分布式系统的“资源竞争本质”,能否权衡性能与一致性。
高频问题:“用Redis实现分布式锁,如何避免死锁和误删?”
✅ 分层应答话术:
1. 基础实现(证明你会用):
“Redis分布式锁的核心是SET key value NX EX TTL命令(原子操作),NX保证只有一个线程能加锁,EX设置过期时间防死锁(列如30秒)。释放锁时用Lua脚本:if redis.call('get', KEYS[1]) == ARGV[1] then return redis.call('del', KEYS[1]) else return 0 end(避免误删其他线程的锁)。”
2. 进阶优化(证明你懂原理):
“但有两个坑需要解决:① 业务执行时间>锁过期时间→锁被提前释放。解决方案是‘守护线程续期’(如Redisson的watch dog机制),每隔10秒检查线程是否持有锁,持有则延长TTL;② 主从切换导致锁丢失→用RedLock算法,向5个独立Redis节点加锁,过半成功才算加锁成功(牺牲性能换高可用)。”
3. 场景落地(证明你能落地):
“我们在秒杀系统中用了‘Redis锁+本地锁’双重校验:先抢Redis分布式锁,抢到后再用synchronized加本地锁(减少Redis访问),最终支撑了10万QPS,锁竞争导致的性能损耗<5%。”
⚠️ 避坑指南:别只说“用SETNX”,要主动提“续期机制”和“RedLock”——这是区分“背题者”和“实战派”的关键。

场景2:缓存架构设计——从“能用”到“用好”
面试官心理:考察你是否理解缓存的“双刃剑效应”,能否解决穿透/击穿/雪崩问题。
高频问题:“如何设计多级缓存架构支撑商品详情页(10万QPS)?”
✅ 分层应答话术:
1. 架构选型(证明你懂场景):
“采用‘CDN+浏览器缓存+本地缓存+Caffeine+Redis’五级缓存:① CDN缓存静态资源(商品图片);② 浏览器缓存HTML/CSS(设置Cache-Control);③ 应用本地缓存Caffeine(缓存热点商品,TTL 5分钟);④ Redis集群缓存动态数据(商品价格/库存,TTL 30分钟)。”
2. 问题解决(证明你懂优化):
“针对三大问题:① 缓存穿透→布隆过滤器(过滤不存在的商品ID,误判率0.01%)+ 缓存空值(TTL 5分钟);② 缓存击穿→互斥锁(热点商品加锁重建缓存)+ 预热(大促前手动加载热点数据);③ 缓存雪崩→Redis集群(主从+哨兵防单点)+ 过期时间随机化(避免同时失效)。”
3. 性能数据(证明你有结果):
“优化后:99%请求命中CDN/本地缓存,Redis QPS从5万降到1万,数据库几乎无访问,响应时间从300ms降到20ms。”
加分技巧:主动说“我们用Prometheus监控缓存命中率,低于90%就告警”——体现你有监控意识。

场景3:秒杀系统设计——从“功能实现”到“极限优化”
面试官心理:判断你是否具备“高并发系统的全局观”,能否平衡体验与稳定性。
高频问题:“设计一个秒杀系统,如何防止超卖和系统崩溃?”
✅ 分层应答话术:
1. 流量削峰(证明你懂架构):
“前端:按钮置灰(防止重复点击)+ 验证码(过滤50%无效请求);后端:Nginx限流(令牌桶算法,单机QPS限制1万)+ Kafka异步化(秒杀请求先入队列,再由消费者按能力处理)。”
2. 库存防超卖(证明你懂业务):
“核心是‘分布式事务+原子操作’:① Redis预扣库存(decrby key 1,返回负数则失败);② 消息队列异步落库(确保最终一致性);③ 数据库唯一索引(user_id+goods_id防重复下单)。我们压测时故意模拟10万并发,最终超卖率为0,库存一致性100%。”
3. 兜底策略(证明你懂工程):
“熔断降级:Redis宕机则走本地缓存默认库存;服务过载则返回‘稍后重试’页面;库存为0时直接返回‘已抢完’(避免穿透到数据库)。”
⚠️ 避坑指南:别说“用Redis就行”,要强调“异步化+预扣+兜底”——秒杀的核心是“流量控制”而非“技术选型”。

场景4:线程池参数设计——从“会配”到“会调优”
面试官心理:考察你是否理解“线程调度的底层逻辑”,能否根据业务场景动态优化。
高频问题:“如何合理设置线程池参数(核心线程数、最大线程数、队列)?”
✅ 分层应答话术:
1. 核心公式(证明你懂原理):
“线程数=CPU核心数/(1-阻塞系数)。IO密集型任务(如接口调用)阻塞系数0.9→线程数=8核/(1-0.9)=80;CPU密集型任务(如计算)阻塞系数0.1→线程数=8/(1-0.1)≈8。”
2. 实战配置(证明你会落地):
“我们的支付系统用了‘动态参数线程池’:核心线程数8→最大16,队列用ArrayBlockingQueue(容量1000,有界防OOM),拒绝策略用‘CallerRunsPolicy’(让调用方线程执行,降级而非直接丢弃)。同时用线程池监控工具(如Hutool的ThreadPoolMonitor),当队列积压>500时自动扩容最大线程数到24。”
3. 踩坑经验(证明你有思考):
“之前踩过‘无界队列’的坑:任务无限入队导致内存飙升OOM。后来换成有界队列+拒绝策略,虽然会丢少量任务,但系统稳定性提升10倍。”
加分技巧:主动提“线程池隔离”——核心业务用单独线程池,避免被非核心任务拖垮。

场景5:分布式事务——从“理论”到“取舍”
面试官心理:判断你是否理解“分布式系统的一致性权衡”,能否根据业务选对方案。
高频问题:“订单支付后需要扣减库存、加积分,用什么分布式事务方案?”
✅ 分层应答话术:
1. 方案对比(证明你懂选型):
“三种方案各有优劣:① 2PC(强一致性):但性能差,适合金融核心场景;② TCC(补偿事务):代码侵入高,适合电商订单(我们用Seata TCC模式,定义Try-Confirm-Cancel接口);③ 最终一致性(MQ+本地事务表):实现简单但有延迟,适合积分等非核心场景。”
2. 落地选择(证明你懂业务):
“我们选‘TCC+最终一致性’混合方案:① 库存扣减用TCC(Try预扣→Confirm确认→Cancel回滚,确保实时一致性);② 积分增加用‘本地事务表+RabbitMQ’(订单成功后发消息,积分服务失败则重试,24小时内最终一致)。这样既保证了交易核心正确,又降低了非核心链路的复杂度。”
3. 数据兜底(证明你懂工程):
“每天跑定时任务对账:订单表vs库存表vs积分表,发现不一致则人工介入,全年数据不一致率<0.001%。”
⚠️ 避坑指南:别说“用Seata就行”,要讲清“为什么选TCC而不选2PC”——体现你的业务判断力。
3个“技术人专属”加分话术公式
- “原理+坑+解决方案”公式:讲技术时先说核心原理,再主动暴露1个踩过的坑,最后说优化方案(如“Redis分布式锁的坑是锁过期→解决方案是续期机制”)。
- “数据对比”公式:用“优化前vs优化后”体现价值(如“接口响应从500ms→50ms,支撑QPS从1万→10万”)。
- “业务关联”公式:每个技术点都绑定业务场景(如“用TCC是由于订单支付必须实时扣库存,否则用户会投诉”)。





