携程Java后端一面面经
- 时间
- 2026-08
- 来源
- 牛客网
《面试题目》
- 自我介绍,并简单介绍一下你最熟悉的项目经历。
- 针对项目中的技术难点进行展开,你是如何分析和解决问题的?
- Java中常见的数据结构有哪些?分别适用于什么场景?
- 数组和链表有什么区别?从查询、插入、删除等操作效率来看有什么不同?
- 栈和队列分别有什么特点?它们有哪些典型应用?
- 如果只使用队列,如何实现一个栈?整体实现思路是什么?
- 如果只使用栈,如何实现一个队列?需要如何设计?
- 二叉树有哪些遍历方式?前序、中序、后序遍历属于深度优先还是广度优先?层序遍历应该如何实现?
- 介绍一下常见排序算法。快速排序的平均时间复杂度是多少?什么情况下会退化到O(n²)?
- 如何理解动态规划?以爬楼梯问题为例,状态转移过程是什么?
- 什么是线程安全?Java中有哪些方式可以保证线程安全?
- synchronized锁Class对象和锁具体实例对象有什么区别?分别适用于什么场景?
- 介绍一下CAS机制,它为什么可以实现无锁并发?
- CAS中的ABA问题是什么?如何解决?
- 什么是可重入锁?synchronized是否属于可重入锁?为什么?
- HashMap底层数据结构是什么?为什么链表转红黑树的阈值设置为8,而退化阈值设置为6?
- MySQL索引的底层实现原理是什么?为什么索引可以提升查询效率?
- 有一个联合索引(类别+年份+姓名),查询“今年出版的科幻类张三书籍”时是否可以使用该索引?为什么?
《参考解析》
- MySQL索引通常使用B+树,叶子节点按顺序连接,适合范围查询;设计索引时结合选择性、最左匹配原则和执行计划,避免无效索引与回表开销。
- 并发问题应先明确共享状态和一致性边界,再选择锁、CAS或队列。线程池需要根据任务是CPU密集还是IO密集设置核心线程数、队列容量和拒绝策略,并监控活跃数与队列长度。
- TCP通过三次握手建立连接、四次挥手释放连接;HTTPS在TLS握手中协商会话密钥,并用证书校验服务端身份,数据传输阶段主要使用对称加密。
- 算法题先写出不变量和边界条件,再分析复杂度;常见数组、链表和树问题可分别使用双指针、哈希表、递归或迭代遍历,目标是在线性或对数复杂度内完成。