面灵AI

携程Java后端一面面经

时间
2026-08
来源
牛客网

《面试题目》

  1. 自我介绍,并简单介绍一下你最熟悉的项目经历。
  2. 针对项目中的技术难点进行展开,你是如何分析和解决问题的?
  3. Java中常见的数据结构有哪些?分别适用于什么场景?
  4. 数组和链表有什么区别?从查询、插入、删除等操作效率来看有什么不同?
  5. 栈和队列分别有什么特点?它们有哪些典型应用?
  6. 如果只使用队列,如何实现一个栈?整体实现思路是什么?
  7. 如果只使用栈,如何实现一个队列?需要如何设计?
  8. 二叉树有哪些遍历方式?前序、中序、后序遍历属于深度优先还是广度优先?层序遍历应该如何实现?
  9. 介绍一下常见排序算法。快速排序的平均时间复杂度是多少?什么情况下会退化到O(n²)?
  10. 如何理解动态规划?以爬楼梯问题为例,状态转移过程是什么?
  11. 什么是线程安全?Java中有哪些方式可以保证线程安全?
  12. synchronized锁Class对象和锁具体实例对象有什么区别?分别适用于什么场景?
  13. 介绍一下CAS机制,它为什么可以实现无锁并发?
  14. CAS中的ABA问题是什么?如何解决?
  15. 什么是可重入锁?synchronized是否属于可重入锁?为什么?
  16. HashMap底层数据结构是什么?为什么链表转红黑树的阈值设置为8,而退化阈值设置为6?
  17. MySQL索引的底层实现原理是什么?为什么索引可以提升查询效率?
  18. 有一个联合索引(类别+年份+姓名),查询“今年出版的科幻类张三书籍”时是否可以使用该索引?为什么?

《参考解析》

  1. MySQL索引通常使用B+树,叶子节点按顺序连接,适合范围查询;设计索引时结合选择性、最左匹配原则和执行计划,避免无效索引与回表开销。
  2. 并发问题应先明确共享状态和一致性边界,再选择锁、CAS或队列。线程池需要根据任务是CPU密集还是IO密集设置核心线程数、队列容量和拒绝策略,并监控活跃数与队列长度。
  3. TCP通过三次握手建立连接、四次挥手释放连接;HTTPS在TLS握手中协商会话密钥,并用证书校验服务端身份,数据传输阶段主要使用对称加密。
  4. 算法题先写出不变量和边界条件,再分析复杂度;常见数组、链表和树问题可分别使用双指针、哈希表、递归或迭代遍历,目标是在线性或对数复杂度内完成。