携程Java开发二面面经

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

《面试题目》

  1. 自我介绍
  2. 介绍实习项目
  3. 为什么使用ES存储日志,有做过别的方案和调研吗
  4. 有了解过别的存储媒介吗(追问ClickHouse优缺点)
  5. 监控告警是如何生成告警的(基于Alertmanager)
  6. 告警异常数据分为什么类型,如何监控(Prometheus自监控与自定义Exporter)
  7. 多线程使用场景
  8. 线程池核心参数设置及依据
  9. 线程池参数的评估方案(基于CPU核数等硬件性能)
  10. 线程池完整的处理流程
  11. 索引的数据结构
  12. B+树、B树、红黑树区别
  13. 分库分表实现逻辑
  14. 状态机
  15. Redis缓存与分布式锁应用
  16. Redis与MySQL数据一致性解决方案
  17. Redis内存淘汰策略
  18. 分布式锁实现原理
  19. 消息队列如何保障消息不丢失(生产者与消费者端)
  20. JDK版本及JDK 21相较于1.8的新特性
  21. 常见GC算法

手撕代码:

  • 给定一个已经排序的数字数组和两个整数k、x,在数组中找到k个最接近x的数字(要求二分法与双指针实现)。

《参考解析》

  1. Redis与MySQL一致性: 常见策略有更新数据库后删除缓存、延迟双删或使用Canal监听Binlog进行异步更新。核心是保证最终一致性,避免脏数据。
  2. 线程池参数设置: 核心线程数与最大线程数依据任务类型设置,CPU密集型设为N+1,IO密集型设为2N+1(N为CPU核数),需结合压测结果调整。
  3. 消息队列不丢失: 生产者端使用ACK确认机制+消息重发;MQ服务器端开启持久化;消费者端开启手动ACK,处理完成后再确认,确保消息被成功处理。
  4. B+树与索引: B+树适合磁盘存储,非叶子节点只存索引,叶子节点存数据且有双向链表,区间查找效率高。对比红黑树(适合内存查找,如HashMap)和B树(所有节点存数据,查找开销不稳定)。
  5. JDK 21新特性: 虚拟线程(Virtual Threads)极大地提升了高并发IO场景下的吞吐量,增强了模式匹配(Pattern Matching)和结构化并发能力。