携程Java开发一面面经

携程 · Java开发 · 一面 · 2026-03

《面试题目》

  1. 自我介绍
  2. 项目介绍及上线情况
  3. 本地缓存加令牌桶限流的具体实现
  4. 令牌桶的生产机制及高并发下的性能优化
  5. 消息服务的高可用部署
  6. 限流算法改造思路
  7. RateLimiter组件底层原理
  8. AT模式与死信队列的关系
  9. MySQL处理超卖问题的可行性
  10. RabbitMQ消费写库失败的保障机制
  11. AI工具在开发中的应用
  12. Java基础:Object公共父类、equals与hashCode重写原则及原因

手撕算法:

  1. 快速排序
  2. 海量数据求Top 10
  3. 统计长整型二进制中1的个数
  4. 2的31次方个整数查重(BitMap方案及边界处理)

《参考解析》

  1. 令牌桶算法:基于定时任务或延迟计算生成令牌,Guava的RateLimiter使用预占位机制解决高并发下平滑突发请求问题。
  2. RabbitMQ写库失败:应采用补偿机制,如本地消息表配合定时任务轮询,或确保幂等性后进行重试,必要时存入死信队列由人工介入。
  3. equals与hashCode重写:若只重写equals,会导致相同对象在HashMap中可能被判定为不同Key(hashCode不同),导致无法正确检索,需保证二者一致性。
  4. 海量数据查重:使用位图(BitMap),2^31个整数需约256MB内存(1 bit/数);若有负数,可整体偏移映射到正数区间,BitMap空间利用率极高。