美团后端开发岗面经-10
- 时间
- 2026-09
- 来源
- 牛客网
《面试题目》
- 为什么选择 RocketMQ,如何保证消息可靠投递?
- 令牌桶限流如何实现,为什么适合用 Lua 保证原子性?
- Redis ZSet 为什么使用跳表?
- 高并发优惠券秒杀如何防止超卖?
- Redis 缓存击穿如何处理?
- ThreadLocal 的原理和常见问题是什么?
- 如何解决买卖股票的最佳时机问题?
《参考解析》
- RocketMQ 提供持久化、确认和重试机制;生产端确认、服务端持久化和消费端幂等共同构成可靠链路。
- 令牌桶按速率补充令牌,Lua 将检查和扣减放在一次 Redis 脚本中,避免并发请求之间出现竞态。
- 跳表实现有序集合,平均查找、插入和删除为 O(log n),实现比平衡树更简单且便于范围遍历。
- 先在 Redis 原子预扣库存并限制重复购买,再异步落库;最终以幂等订单和补偿机制保证一致性。
- 可用互斥重建、逻辑过期、热点预热或随机过期时间降低同一时刻大量回源。
- ThreadLocal 为每个线程保存独立变量,线程池场景要及时 remove,避免对象和上下文在线程复用中泄漏。
- 维护持有股票和现金两种状态的最大收益,每天按买入、卖出或保持更新即可。