携程 AI 面试复盘(Java 后端校招)
- 轮次
- AI面试
- 时间
- 2026-09
- 来源
- 牛客网
《面试题目》
- 讲一次你发现问题、主动推动解决方案落地的经历
- HashMap 底层相关八股
- AQS 原理与锁相关问题
- ISO 七层网络模型的分层及各自作用
- 十万、百万 QPS 下的业务架构该如何设计?
- 描述一个项目中需要快速上手陌生技术栈的经历,讲讲你的学习路径
- 平时通过哪些渠道学习 AI 相关技术,最近在研究什么内容?
- 深挖实习经历,为什么选择携程,为什么投递这个 BU 的岗位?
- 简历项目连环追问:实现细节、踩坑点、线上遇到过什么问题
《参考解析》
-
HashMap 底层:JDK 8 起是「数组 + 链表 + 红黑树」。
put时先按(n-1) & hash定位桶,桶内链表长度到 8 且数组容量到 64 才转红黑树(数组还小就先扩容,避免树化后马上又扩容);扩容阈值是容量 × 0.75,扩容时容量翻倍,JDK 8 用高低位拆分代替了 JDK 7 的头插,避免了并发扩容成环。要点是答出「为什么容量取 2 的幂」(让取模变成位与)、「为什么阈值是 0.75」(空间与冲突概率的折中)、以及「线程不安全体现在哪」(并发 put 丢数据,需要并发场景用 ConcurrentHashMap)。 -
AQS:核心是一个
volatile int state加一个 CLH 变体的双向等待队列。独占模式下tryAcquire抢 state 失败就包装成 Node 入队并park;释放时改 state 再唤醒后继。ReentrantLock 公平与非公平的差别只在入队前是否检查队列有没有前驱;CountDownLatch、Semaphore、ReentrantReadWriteLock 都是复用它不同的 state 语义。面试里经常追问的「为什么要用双向队列」(取消节点时需要唤醒前驱接上)、「为什么唤醒要从尾往前找」(入队时尾指针先挂上、next 还没连好)。 -
ISO 七层:物理层传比特,数据链路层做帧与差错控制(MAC),网络层寻址与路由(IP),传输层端到端可靠或不可靠传输(TCP/UDP),会话层管会话建立与同步,表示层管编码、压缩、加密,应用层是 HTTP/DNS/FTP 这些。答的时候最好顺一句「实际上互联网是 TCP/IP 四层,OSI 更多是教学模型」,并且能把一次 HTTP 请求落到每层发生了什么讲清楚。
-
十万到百万 QPS 的架构设计:别一上来堆组件名,按数据流向分层讲。接入层做 DNS 轮询/anycast + LVS/SLB,再用 Nginx/网关做限流、鉴权与灰度;应用层无状态化后水平扩,热点读写靠本地缓存 + Redis 集群;数据层分库分表、读写分离,写路径尽量异步化(MQ 削峰、最终一致)。再补三件工程上的事:容量怎么估(QPS × 单请求资源开销反推机器数)、哪里会先崩(通常是数据库和下游依赖)、怎么兜底(降级、熔断、限流阈值、预案演练)。出行类业务的特殊性在于查询有明显的时段峰值和地域热点,缓存预热和热点 key 打散比一味加机器更划算。
-
快速上手陌生技术栈怎么讲:讲路径而不是讲「我学得快」。可用的套路是——先跑通最小可运行示例建立体感,再读官方文档的架构与核心概念章节,然后找一个真实小需求动手改,最后回看源码或设计文档补原理。把它落到具体经历上:当时是什么任务、用了几天、踩了什么坑、产出是什么。
-
动机题(为什么选携程/这个 BU):别背「平台大、口碑好」。有效的做法是讲清业务理解:携程不是一堆独立业务,背后有统一的搜索、交易、调度底座支撑机票、大住宿、火车票、商旅、金融多个 BU 协同,同一套底层能力既服务普通用户出行也承接企业差旅。把自己的技术兴趣挂到这层场景上,比通用模板可信得多。