27实习 携程AI后端开发一面分享

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

面试题目

一、项目与基础

  1. 实习拷打
  2. 挑一个项目介绍一下
  3. 项目有没有上线
  4. 本地缓存加令牌桶控制频率具体怎么做的
  5. 如何往令牌桶里放令牌(追问:如果很多用户岂不是有很多令牌桶,按顺序放会不会很慢)
  6. 发消息的服务是否放在多台机器上
  7. 改造这个算法你会怎么做
  8. RateLimmiter组件如何做到的
  9. AT模式和死信队列的关系
  10. 超卖问题用mysql会出现吗
  11. 能不能通过mysql去解决这个问题
  12. 如果RabbitMQ发消息后,消费者去写MySQL的时候失败了怎么办?
  13. 是否会用ai去解决问题
  14. java里所有类的公共父类是什么
  15. Object中equals和hashCode的方法,Java里有个规定是这两个方法必须同时改写,不能只改写其中一个,原因是什么?举例说明

二、手撕算法

  1. 快速排序
  2. 有一个很大的整数数组,找出里面最大的10个数字
  3. 长整形的数字计算它二进制表示一的个数

参考解析

1. 令牌桶限流与高并发处理: 令牌桶通常基于AtomicLong或Semaphore实现,应对多用户场景可使用Redis的Lua脚本原子化操作。大规模并发下,应避免串行阻塞,采用滑动窗口或基于Redis Cluster分布式存储,提升吞吐量。

2. RabbitMQ消息可靠性(消费者写库失败): 采用确认机制(ACK)。若写库失败,建议引入重试机制(如本地重试+延时队列),或在数据库中记录处理记录,通过幂等逻辑(如全局唯一ID/分布式锁)保证多次消费不影响数据一致性。

3. Equals与HashCode的约定: 根据Java规范,若两对象equals相等,其hashCode必须相等。若只重写equals不重写hashCode,会导致对象在放入HashMap等集合时,因哈希值不同无法找到对应的Entry,破坏集合的唯一性约束。

4. 找最大TopK数字: 针对海量数据,最优解是维护一个大小为10的最小堆(Min-Heap)。遍历数组,当前数大于堆顶则替换并重新调整堆,时间复杂度为O(N log K),比全排序快得多。