面试公司:极兔快递
面试岗位:Java后端开发工程师
面试时长:约 40 分钟
面试轮次:第 2 轮技术面(社招)
✨ 面试整体节奏:
这场极兔的二面相比一面而言“和善”了不少,虽然面试官迟到了约 15 分钟,但整体交流还算顺畅。虽然没有深度“拷打”,但仍然围绕项目实践、数据库一致性、JVM 细节、分布式锁等核心知识点进行了较全面的提问。面试时长不长,约 40 分钟左右,不过三天后还是顺利收到通过通知,属于典型的“看基础,不拼题量”风格。
请解释一下数据库事务的本质和四大特性。
考察点:事务基础理解(ACID)
答案:事务具备原子性、一致性、隔离性、持久性。InnoDB 通过 Undo Log、Redo Log、锁机制等保障事务的完整性。
为什么 RR(可重复读)可以解决重复读问题,而 RC(读已提交)却不行?
考察点:事务隔离级别差异
答案:RC 每次读取都能看到其他事务提交的最新值,无法保证“当前读”一致;而 RR 利用快照读+加锁机制,可以避免在一个事务中两次读取结果不一致的问题。
你了解 MVCC 吗?MySQL 是如何实现的?
考察点:多版本并发控制
答案:MVCC 基于隐藏字段(事务ID、回滚指针)+ Undo Log,实现非锁机制下的读写隔离,提升并发性能。
请简要介绍 Undo Log、Redo Log 和 Binlog 分别起什么作用。
考察点:日志机制与崩溃恢复
答案:
Java 中锁的升级过程是怎样的?
考察点:锁优化机制
答案:从偏向锁 -> 轻量级锁 -> 重量级锁,逐步增加开销,以适应并发场景。虚拟机会根据竞争情况动态升级锁状态。
请讲讲你了解的分布式锁实现方式,以及它们的优劣势。
考察点:分布式并发控制
答案:
类加载的过程是怎样的?
考察点:类加载机制
答案:类加载过程包括:加载 -> 验证 -> 准备 -> 解析 -> 初始化。采用双亲委派模型保证安全性。
一个对象从创建到销毁,会被分配在哪些区域?什么情况会直接进入老年代?
考察点:对象分配 & GC策略
答案:对象一般在 Eden 区创建,经过 Minor GC 后晋升至老年代。如果对象较大或 Survivor 空间无法容纳,可能直接进入老年代。
元空间是什么?主要存放什么内容?
考察点:JDK8 后期改动
答案:元空间取代方法区,存放类的元信息,如方法、字段、常量池等,不再占用 JVM 堆内存,使用 native memory。
JVM 是如何进行 GC 的?什么情况下会触发 GC?频繁 GC 应该怎么处理?
考察点:垃圾回收原理
答案:GC 分为 Minor(新生代)和 Major(老年代);频繁 GC 可能因内存不足或对象泄漏导致,需结合 jstat、jmap、堆 dump 等工具排查,优化对象生命周期或调整内存参数。
Redis 分布式锁你是怎么实现的?有没有遇到一致性问题?
考察点:Redis CAP 实践
答案:基于 SETNX + EX + UUID实现,需确保原子性;可能存在死锁、锁丢失问题。RedLock 理论在实际环境下并不完全可靠。
延迟双删策略有哪些问题?有没有更好的解决方案?
考察点:缓存一致性策略
答案:延迟双删无法保证缓存和数据库强一致,存在更新不及时问题。可通过 Binlog 监听、消息队列等方式异步更新缓存。
你是否使用过 Canal?它在哪些场景下会存在问题?
考察点:Binlog订阅机制
答案:Canal 可能因延迟、网络中断、格式解析错误等导致同步失败,需设置幂等逻辑与补偿机制。
相比一面,这轮极兔 Java 二面节奏更轻松,面试官没有过多追问,但仍然覆盖了数据库事务、日志机制、JVM运行模型、分布式锁等多个关键模块。虽然整体不“紧张”,但问题仍然很有代表性,尤其是对于JVM掌握程度的深度判断非常重要。
项目经验方面,建议多准备几个模块的拆解讲解方式,清晰说清“做了什么”、“为什么这样做”、“做完有什么提升”这三点,会大大加分。
如果你也在准备 Java 后端社招,可以留言交流,我会持续整理类似的高频面试题+项目思路拆解,祝大家都能稳稳上岸 !