北京微景数科 Java开发工程师 二面

1. Spring Boot 自动配置中 @ConditionalOnMissingBean 的生效逻辑?

思路

讲清楚:时机、判断范围、优先级、覆盖规则

回答示例

逻辑很简单:

  1. 先去容器里找对应类型或名称的 Bean;
  2. 如果完全不存在,才创建当前这个自动配置的 Bean;
  3. 如果用户自己已经注册了同类型 Bean,自动配置就不生效
  4. 生效时机是在用户配置之后、自动配置之前,保证用户配置优先。

一句话:用户定义优先,自动配置兜底

2. MVCC 机制中 Read View 创建后如何判断记录可见性?

思路

讲 Read View 四件套 + 可见性判断规则,面试标准回答。

回答示例

Read View 里面保存四个关键值:

  • min_trx_id:最小活跃事务ID
  • max_trx_id:下一个要分配的事务ID
  • m_ids:当前活跃的事务ID集合
  • creator_trx_id:当前事务自己的ID

判断一条记录可见性规则:

  1. 记录的 trx_id == 自己事务ID → 可见
  2. 记录的 trx_id < min_trx_id → 可见(已提交)
  3. 记录的 trx_id >= max_trx_id → 不可见(未来事务)
  4. 记录的 trx_id 在 m_ids 里 → 不可见(还在活跃)
  5. 不在 m_ids 里 → 可见(已提交)

3. Redis AOF 重写过程中新写入命令如何处理?

思路

记住两个缓冲区:aof_buf + aof_rewrite_buf。

回答示例

AOF 重写期间:

  1. 新命令先写到 aof_buf,会刷到旧 AOF 文件;
  2. 同时也写到 aof_rewrite_buf(重写缓冲区);
  3. 重写完成后,把 rewrite_buf 里的命令追加到新 AOF
  4. 然后原子替换成新 AOF 文件。

保证重写期间数据不丢失

4. Redis 分布式锁设置超时后,如何避免业务没执行完锁就释放?

思路

核心方案:锁自动续期(看门狗)。

回答示例

看门狗(WatchDog)机制

  1. 启动一个后台定时线程
  2. 每隔一段时间(比如锁超时的 1/3),重新设置锁的过期时间
  3. 只要业务没执行完、线程没释放,锁就一直被续期;
  4. 业务结束手动释放锁,看门狗停止。

Redisson 就是这么实现的。

5. RabbitMQ Confirm 模式下,如何确认消息已持久化到磁盘?

思路

区分:普通确认 vs 持久化确认。

回答示例

要确保消息真正落盘,需要两点:

  1. 消息和队列都要设置 durable=true
  2. 开启 publisher-confirm-type=CORRELATED
  3. 生产者通过 ConfirmCallback 接收 ack:

6. 熔断器从打开变半开的试探机制?

思路

讲休眠时间窗口 + 单个试探 + 结果决定下一步。

回答示例

  1. 熔断器打开后,进入休眠时间窗口(比如 5s);
  2. 时间到,自动进入半开状态
  3. 少量请 试探调用;

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

本专栏在精不在多,内容分为八股文、大厂真实面经,面试通过后将offer和面试题私发给我,可退还专栏的收益部分费用。欢迎大家共建专栏

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务