携程暑期-AI后端开发一面面经

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

面试题目

  1. 项目拷打
  2. 你的domain层分别是什么?
  3. 你拆分领域时,到底是按什么原则拆的?
  4. 你项目里用了 Redis,怎么防止缓存穿透?
  5. 如果现在让你设计一套存储系统,每天大约 10TB 数据,你会怎么设计?
  6. 这套系统还要提供一个按时间范围查询日志的 RESTful 接口,你说说存储结构设计思路,以及接口设计思路。
  7. 你的查询时间跨度可能从 1 分钟到 1 年,这种场景下你会怎么考虑?
  8. 所有检索是不是都走 ES吗?
  9. 你的接口里会限制时间范围、分页参数来避免一次返回过多数据,这个思路之外,你有没有想过底层数据做冷热分离?
  10. 如果让你设计冷热分离,你会怎么做?
  11. Java 21 和 Java 8 的区别?
  12. 你了解虚拟线程吗?
  13. 算法题:一群学生围成一圈,从 1 开始报数,报到 3 的人出圈,循环直到只剩最后一人,求最后这个人的编号
  14. StackOverflow 和 OutOfMemory 的区别是什么吗?怎么排查、怎么解决?
  15. 你自己做过压测吗?
  16. 如果发生 MQ 消息队列堵塞/积压,你有什么应急手段?

参考解析

  • 缓存穿透:指查询不存在的数据导致请求直接打到数据库。解决方案:缓存空对象(注意设置过期时间)、布隆过滤器(拦截非法请求)。
  • 10TB/天存储设计:需考虑分库分表、按天/月进行冷热存储分区。热数据存入Elasticsearch或ClickHouse供快速查询,冷数据存入HDFS或对象存储,并建立索引元数据表。
  • 冷热分离:根据数据访问频率,将近期频繁查询的数据放在SSD或高性能集群,过期数据通过ETL同步至廉价存储,并异步清理过期数据或归档。
  • Java 21虚拟线程:Java 21引入轻量级线程,由JVM管理而非OS内核,大幅降低高并发下的上下文切换开销,适合I/O密集型任务。
  • MQ积压处理:临时扩容增加消费者数量,排查下游服务瓶颈;若积压严重,可先消费入库,后续再分批处理;必要时增加临时队列进行旁路处理。
  • 约瑟夫环问题:这是经典的递归/动态规划算法题,公式为 f(n, m) = (f(n-1, m) + m) % n,其中 f(1, m) = 0