【极兔快递Java社招】一面复盘|数据库+线程池+AQS+中间件面面俱到
📍面试公司:极兔快递
👜面试岗位:Java后端开发工程师
🕐面试时长:约 60 分钟
🔄面试轮次:第 1 轮技术面(社招)
✨ 面试整体节奏:
这场面试整体节奏偏快,面试官问题覆盖面广,基本围绕数据库、Java基础、中间件和项目实战来发问。其中数据库部分问得最细,尤其事务与隔离级别这块深入探讨了 InnoDB 默认 RC 的原因。Java并发和线程池也有不少细节题,整体不算太刁钻但广度很大。
✅ 面试题目逐题整理与解析:
🗃️ 数据库部分
-
数据库事务,以及对应的解决方案。
考察点:事务四大特性(ACID)、事务实现机制
答案:主要介绍了事务的四大特性,以及InnoDB通过Undo Log、Redo Log来实现原子性和持久性,隔离性依靠锁和MVCC保证。
-
隔离级别,innodb默认隔离级别以及为什么放弃rr选择rc出于什么考虑。
考察点:事务隔离级别的理解与实践考量
答案:InnoDB 默认采用 RC(Read Committed)主要是出于性能与一致性的权衡,RR 会引入更多锁竞争,导致并发吞吐下降;而 RC 配合 MVCC 可以实现一致性读,保证大部分场景下的数据正确性。
-
索引问题,包括数据结构,使用场景,什么字段适合加,联合索引最左前缀原因,局部有序,数据库对于索引的优化,数据库优化器,sql执行过程。
考察点:索引原理、优化器、SQL执行流程
答案:索引底层为 B+树,最左前缀匹配保证了索引使用的有效性。列值唯一、过滤性高的字段适合加索引。SQL 执行包括解析器 -> 预处理器 -> 查询优化器 -> 执行器几个阶段。
-
锁的内容,rc的锁,rr的锁,s锁和x锁
考察点:锁的分类与隔离级别对应关系
答案:RC 使用临键锁,RR 引入间隙锁防止幻读;S 锁共享读取,X 锁用于独占写操作。
☕ Java 并发/线程池相关
-
线程池的数据结构,配置信息,工作原理。
考察点:线程池核心实现与参数调优
答案:线程池核心参数包括 corePoolSize、maximumPoolSize、keepAliveTime、workQueue、handler、threadFactory。工作流程包括任务提交 -> 判断核心线程数 -> 队列是否满 -> 是否创建非核心线程。
-
可重入锁,公平与非公平,内容aqs,cas原理
考察点:锁实现机制及原理
答案:ReentrantLock 是可重入锁,底层基于 AQS 实现。公平锁通过队列排队保证顺序获取,非公平锁可能插队。CAS 是无锁编程核心原子操作,通过比较交换避免加锁开销。
-
阻塞队列,非阻塞队
考察点:并发容器和通信机制
答案:阻塞队列如 ArrayBlockingQueue、LinkedBlockingQueue 用于线程池任务存储;非阻塞如 ConcurrentLinkedQueue 用于高并发读写但无阻塞机制。
📦 中间件相关
-
rabbit模型,重复消费 ,(没用过就没再问;es也是没用过没问)
考察点:消息中间件基本原理
答案:只简单提了下 RabbitMQ 的生产消费模型,未深入展开。
-
radis雪崩击穿穿透什么的
考察点:缓存容灾方案
答案:
- 缓存穿透:缓存和数据库都没有,可通过布隆过滤器、缓存空对象解决;
- 缓存击穿:热点 key 突然失效,使用互斥锁或设置永不过期;
- 缓存雪崩:大量 key 同时失效,需设置随机过期时间+限流+降级等方式缓解。
-
xxljob工作中怎么用的
考察点:定时任务中间件实践经验
答案:结合业务任务调度,定时触发调用远程接口或更新数据等。
-
分库分表
考察点:数据库扩展与架构设计
答案:提到了数据库水平拆分,业务层引入中间件如 ShardingSphere 控制路由逻辑。
🧰 项目实战相关
- 项目没什么优势,问了权限相关内容,nacos作用,feign作用,xxljob等。
- nacos:服务注册与配置中心;
- feign:声明式HTTP客户端,用于服务间调用;
- xxljob:分布式定时任务平台,简化任务调度。
❓ 反问环节
- 问了业务内容,以及当前岗位技术栈
- 也问了下自己整体面试表现,面试官表示「基础还不错,有些点还可以再补一补」
📝 总结 & 面试复盘:
这场极兔的一面整体覆盖广度很大,从数据库事务、索引、锁机制到线程池、AQS 乃至分库分表、中间件都有所涉及,虽然没有特别刁钻的场景题,但对基础知识的掌握要求较高,细节问得也不少。
由于准备时间比较紧,项目没有讲出亮点是个遗憾,建议未来面试时,项目部分尽量结合「问题-方案-收益」的结构来展开,更容易吸引面试官深入追问。
📣 如果你也在准备 Java 后端社招,可以留言交流,我会持续整理类似的高频面试题+项目思路拆解,祝大家都能稳稳上岸 💪!