携程大住宿BU Java后端面经与备考秘诀

携程 · Java后端开发工程师 · 两轮技术面+HR面 · 2026-05

《面试题目》

  1. 订单系统项目:表结构怎么设计?索引怎么建?
  2. 接口 QPS 预估多少?怎么压测?
  3. 如果 QPS 上去了响应时间被拉长怎么优化?
  4. 手撕代码:LRU 缓存,写完分析时间复杂度和空间复杂度,有没有其他实现方式(比如 LinkedHashMap)?

《参考解析》

  1. LRU 缓存的标准实现:核心数据结构是”哈希表+双向链表”——哈希表保证 O(1) 查找,双向链表维护访问顺序(最近访问的移到链表头/尾,最久未访问的在另一端待淘汰),插入/访问时间复杂度 O(1),空间复杂度 O(容量)。Java 中可以用 LinkedHashMapaccessOrder=true 模式并重写 removeEldestEntry 方法快速实现,本质上 LinkedHashMap 底层就是哈希表+双向链表的组合,与手写实现的思路一致。
  2. 接口 QPS 预估与压测方法论:QPS 预估通常基于历史流量数据或业务预期(如”日活用户数×人均操作次数÷有效时长”粗略估算),再结合压测工具(如 JMeter、wrk)模拟并发请求验证系统实际承载能力;QPS 提升后响应时间被拉长,需要从”连接数是否耗尽、数据库慢查询是否增多、线程池是否饱和、下游依赖是否成为瓶颈”等维度逐层排查,常见优化手段包括加缓存降低数据库压力、拆分热点数据、异步化非核心链路、水平扩容等。
  3. 表结构设计与索引的评估维度:面试官反复追问”为什么这么设计”,本质是考察候选人是否理解设计背后的权衡——比如订单表按什么字段分表分库、状态字段是否需要单独索引、是否考虑了历史数据归档,回答时应主动讲清楚”当时权衡了哪些方案、最终选择的理由是什么”,而不只是描述最终结果。