面灵AI

美团后端开发岗面经-10

时间
2026-09
来源
牛客网

《面试题目》

  1. 为什么选择 RocketMQ,如何保证消息可靠投递?
  2. 令牌桶限流如何实现,为什么适合用 Lua 保证原子性?
  3. Redis ZSet 为什么使用跳表?
  4. 高并发优惠券秒杀如何防止超卖?
  5. Redis 缓存击穿如何处理?
  6. ThreadLocal 的原理和常见问题是什么?
  7. 如何解决买卖股票的最佳时机问题?

《参考解析》

  1. RocketMQ 提供持久化、确认和重试机制;生产端确认、服务端持久化和消费端幂等共同构成可靠链路。
  2. 令牌桶按速率补充令牌,Lua 将检查和扣减放在一次 Redis 脚本中,避免并发请求之间出现竞态。
  3. 跳表实现有序集合,平均查找、插入和删除为 O(log n),实现比平衡树更简单且便于范围遍历。
  4. 先在 Redis 原子预扣库存并限制重复购买,再异步落库;最终以幂等订单和补偿机制保证一致性。
  5. 可用互斥重建、逻辑过期、热点预热或随机过期时间降低同一时刻大量回源。
  6. ThreadLocal 为每个线程保存独立变量,线程池场景要及时 remove,避免对象和上下文在线程复用中泄漏。
  7. 维护持有股票和现金两种状态的最大收益,每天按买入、卖出或保持更新即可。