每日面试实录·携程·社招·JAVA
📍面试公司:携程
👜面试岗位:后端开发工程师(社招)
🕐面试时长:约 50 分钟
🔄面试轮次:第 1 轮技术面
✨面试整体节奏:
这场携程的社招 Java 一面整体偏“系统设计 + 高并发 + 中间件 + Java 基础 + 算法”方向,涵盖了项目实战、分布式系统细节、Redis、MySQL 底层原理等。整体节奏紧凑,问题细致且深入原理,算法题也考察了复杂排序规则和编码能力。
✅ 面试题目逐题整理与解析:
1. 项目介绍 + 商品库为什么要 BC 分开维护
考察点:系统设计能力、业务理解能力
面试公司:携程
答案:
B 端和 C 端面向的用户群体不同,商品属性、库存策略、定价方式可能存在较大差异。为了满足不同的业务模型和运营需求,BC 分开维护更灵活,方便分别做业务优化和权限控制。
2. BC 数据如何同步?是否存在不一致?
考察点:数据一致性、分布式同步策略
面试公司:携程
答案:
同步方式可采用双写、事件总线(如 Kafka)、定时任务等。确实存在不一致可能,比如异步消息延迟、网络异常。通常通过幂等设计、补偿机制、状态校验等手段保障最终一致性。
3. 秒杀场景如何做减库存?
考察点:高并发控制、Redis 原子性操作
面试公司:携程
答案:
常见方案:
- 使用 Redis 预减库存,减成功再异步落库;
- 使用 Lua 脚本确保 Redis 中的库存扣减原子性;
- 利用消息队列异步处理订单,削峰填谷;
- 数据库层做最终校验。
4. 异步操作如何与前端交互?
考察点:系统异步设计、用户体验优化
面试公司:携程
答案:
一般通过轮询、WebSocket、长轮询、通知接口等方式。前端发起操作后立即返回操作状态或任务 ID,然后定期轮询后端接口或通过事件推送获取进度和结果。
5. Redis 是单机版还是 cluster 模式?
考察点:缓存架构设计
面试公司:携程
答案:
生产环境一般推荐使用 cluster 模式,具备分片和高可用特性。单机版适合开发测试或小规模项目,不支持自动分片和容灾。
6. Redis 的主从同步原理
考察点:缓存高可用机制
面试公司:携程
答案:
主从同步包括全量同步(初次连接)和增量同步(复制 backlog)。当从节点第一次连接主节点时,会触发 RDB 快照并发送数据,之后通过命令传播保持同步。
7. Redis 的 RDB 与 AOF 有何区别?
考察点:数据持久化机制
面试公司:携程
答案:
对比项 | RDB | AOF |
---|---|---|
保存方式 | 定期快照 | 每次写操作追加日志 |
启动恢复速度 | 快 | 慢 |
数据完整性 | 有数据丢失风险 | 更安全 |
适用场景 | 大批量恢复 | 高可靠性需求 |
实际生产环境常组合使用。
8. Redis Cluster 分片策略 & 新节点加入机制
考察点:分布式缓存扩容机制
面试公司:携程
答案:
- Redis Cluster 使用 哈希槽(hash slot)机制,总共 16384 个槽。
- 加入新节点后会触发 槽重分配(resharding),部分槽会从旧节点迁移到新节点,迁移时需考虑数据复制和一致性。
9. 缓存击穿怎么解决?
考察点:缓存异常处理
面试公司:携程
答案:
- 加互斥锁(如基于 Redis setnx)防止并发回源;
- 设置热点 key 的 预热机制;
- 限流保护;
- 使用本地缓存 + Redis 双层结构。
10. NIO 与 BIO 的区别?
考察点:Java 网络编程模型
面试公司:携程
答案:
模型 | BIO | NIO |
---|---|---|
编程模型 | 阻塞 | 非阻塞 |
线程模型 | 一个请求一个线程 | 单线程处理多个请求 |
性能 | 并发差 | 并发强,适合高并发场景 |
11. HashMap 原理及线程安全问题
考察点:Java 容器原理
面试公司:携程
答案:
- HashMap 采用数组 + 链表 + 红黑树结构;
- 使用
hash(key)
计算索引; - 非线程安全,可能引发死循环;
- 线程安全推荐使用 ConcurrentHashMap。
12. ConcurrentHashMap 是如何实现线程安全的?
考察点:并发编程
面试公司:携程
答案:
- JDK 1.7 使用分段锁(Segment),每段加锁;
- JDK 1.8 使用 CAS + synchronized + 链表/红黑树;
- 提高并发度同时保证数据一致性。
13. CMS 与 G1 垃圾回收器对比
考察点:JVM 性能调优
面试公司:携程
答案:
特性 | CMS | G1 |
---|---|---|
回收策略 | 标记-清除 | 分区 + 并行回收 |
停顿时间 | 低 | 更可控 |
吞吐量 | 高 | 一般 |
碎片问题 | 有 | 少 |
推荐使用 | 已废弃 | 推荐使用 G1 及 ZGC 等新一代 GC |
14. MySQL 的索引、锁机制
考察点:数据库底层原理
面试公司:携程
答案:
- 索引底层为 B+ 树;
- 叶子节点存储的是完整记录的主键 ID(辅助索引需要回表);
- 索引匹配原则:最左前缀、联合索引顺序、范围查询终止匹配;
- 锁机制:行锁、间隙锁、意向锁等,InnoDB 默认支持行级锁。
15. 算法题:斗地主牌排序
考察点:集合使用、排序规则抽象、编码能力
面试公司:携程
题目描述:
给定一手斗地主牌(17 张),按照斗地主的排序规则从大到小依次排序牌面。从大到小依次为:大王、小王、2、A、K、Q、J、10、…、3。相同牌面时按花色排序:黑桃 > 红心 > 方块 > 梅花。
答案示例(Java 代码略,思路如下):
- 自定义牌面权重 map;
- 自定义花色权重;
- 构建牌对象(包含牌面+花色);
- 使用自定义 Comparator 排序。
💡总结 & 面试复盘:
这场携程社招 Java 一面从多个层面进行了考察:
- 系统设计:BC 商品维护分离、异步交互、缓存穿透等;
- 中间件理解:Redis 的持久化、分布式集群原理、消息队列处理;
- 并发编程:线程安全、ConcurrentHashMap 底层原理;
- JVM 与数据库原理:GC 算法、MySQL 索引机制;
- 算法题:考察代码抽象能力与逻辑思维。
✊写在最后:
这场携程的技术面,非常重视实战经验和原理理解,建议在准备时不要只停留在“用”,而要深入“为什么这么设计”。掌握中间件和高并发问题的应对方式,是面试成功的关键。
准备 Java 面试时,建议构建自己的知识体系:项目 → 原理 → 应用场景 → 性能优化,逐层递进,稳扎稳打,终会如愿拿下 offer!
如果你也在准备 Java 后端面试,可以留言交流或私信我,后续我也会持续整理高频 Java 面试题合集,助你顺利上岸!