携程AI后端开发实习一面面经

携程 · AI后端开发 · 一面 · 2026-04

《面试题目》

  1. 实习经历深挖
  2. 项目介绍及上线情况
  3. 本地缓存与令牌桶限流的实现细节
  4. 令牌桶放入令牌的逻辑
  5. 消息队列服务在多机部署下的处理
  6. 算法改造思路
  7. RateLimiter组件实现原理
  8. AT模式与死信队列的关系
  9. MySQL处理超卖问题的可行性分析
  10. RabbitMQ消费侧MySQL写入失败的异常处理机制
  11. AI工具在开发中的应用
  12. Java中所有类的公共父类
  13. equals与hashCode同时改写的必要性及举例

手撕算法:

  1. 快速排序
  2. 从大数组中查找前10个最大值

《参考解析》

  • 令牌桶限流:令牌桶以固定速率向桶内放入令牌,请求需获取令牌才能通过。RateLimiter底层基于Semaphore或同步原语控制获取节奏,支持平滑突发限流。
  • 分布式事务(AT模式):AT模式是Seata提供的一种无侵入式方案,通过记录undo_log实现回滚。死信队列用于处理消费失败后的兜底,两者均属于分布式场景下的稳定性保障机制。
  • 超卖问题:在MySQL中可用 UPDATE table SET stock = stock - 1 WHERE stock > 0 配合数据库行锁解决,但在高并发下数据库压力大,通常引入Redis预减库存。
  • 消息消费失败处理:可通过ACK机制、重试机制、本地消息表或死信队列解决。最严谨做法是保持消费的幂等性,并使用本地事务结合消息表保证最终一致性。
  • equals与hashCode:Java规定如果两个对象equals返回true,则hashCode必须相等。如果不成对重写,在HashMap等集合中,相同的对象可能被存储在不同的桶中,导致无法正确检索。