北京微景数科 Java开发工程师 二面
1. Spring Boot 自动配置中 @ConditionalOnMissingBean 的生效逻辑?
思路
讲清楚:时机、判断范围、优先级、覆盖规则。
回答示例
逻辑很简单:
- 先去容器里找对应类型或名称的 Bean;
- 如果完全不存在,才创建当前这个自动配置的 Bean;
- 如果用户自己已经注册了同类型 Bean,自动配置就不生效;
- 生效时机是在用户配置之后、自动配置之前,保证用户配置优先。
一句话:用户定义优先,自动配置兜底。
2. MVCC 机制中 Read View 创建后如何判断记录可见性?
思路
讲 Read View 四件套 + 可见性判断规则,面试标准回答。
回答示例
Read View 里面保存四个关键值:
- min_trx_id:最小活跃事务ID
- max_trx_id:下一个要分配的事务ID
- m_ids:当前活跃的事务ID集合
- creator_trx_id:当前事务自己的ID
判断一条记录可见性规则:
- 记录的 trx_id == 自己事务ID → 可见
- 记录的 trx_id < min_trx_id → 可见(已提交)
- 记录的 trx_id >= max_trx_id → 不可见(未来事务)
- 记录的 trx_id 在 m_ids 里 → 不可见(还在活跃)
- 不在 m_ids 里 → 可见(已提交)
3. Redis AOF 重写过程中新写入命令如何处理?
思路
记住两个缓冲区:aof_buf + aof_rewrite_buf。
回答示例
AOF 重写期间:
- 新命令先写到 aof_buf,会刷到旧 AOF 文件;
- 同时也写到 aof_rewrite_buf(重写缓冲区);
- 重写完成后,把 rewrite_buf 里的命令追加到新 AOF;
- 然后原子替换成新 AOF 文件。
保证重写期间数据不丢失。
4. Redis 分布式锁设置超时后,如何避免业务没执行完锁就释放?
思路
核心方案:锁自动续期(看门狗)。
回答示例
用看门狗(WatchDog)机制:
- 启动一个后台定时线程;
- 每隔一段时间(比如锁超时的 1/3),重新设置锁的过期时间;
- 只要业务没执行完、线程没释放,锁就一直被续期;
- 业务结束手动释放锁,看门狗停止。
Redisson 就是这么实现的。
5. RabbitMQ Confirm 模式下,如何确认消息已持久化到磁盘?
思路
区分:普通确认 vs 持久化确认。
回答示例
要确保消息真正落盘,需要两点:
- 消息和队列都要设置 durable=true;
- 开启 publisher-confirm-type=CORRELATED;
- 生产者通过 ConfirmCallback 接收 ack:
6. 熔断器从打开变半开的试探机制?
思路
讲休眠时间窗口 + 单个试探 + 结果决定下一步。
回答示例
- 熔断器打开后,进入休眠时间窗口(比如 5s);
- 时间到,自动进入半开状态;
- 放少量请 试探调用;
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
【八股真解】精炼最新高频面经 文章被收录于专栏
本专栏在精不在多,内容分为八股文、大厂真实面经,面试通过后将offer和面试题私发给我,可退还专栏的收益部分费用。欢迎大家共建专栏
查看16道真题和解析