愿为科技 Java开发工程师 二面

1. Spring Boot Starter中spring.factories与自动配置类的关联逻辑?

思路

核心围绕“spring.factories的配置格式 + SpringBoot的加载机制”展开,解释“配置声明→加载扫描→条件生效”的完整链路。

回答示例

spring.factories是Starter实现自动配置的核心配置文件,关联逻辑如下:

  1. 配置声明:在Starter的META-INF/spring.factories中,以org.springframework.boot.autoconfigure.EnableAutoConfiguration为key,值为自动配置类的全限定名(多个用逗号分隔);
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.example.starter.MyAutoConfiguration
  1. 加载扫描:Spring Boot启动时,通过SpringFactoriesLoader加载所有jar包中的spring.factories,收集自动配置类;
  2. 条件生效:自动配置类通过@ConditionalOnClass/@ConditionalOnMissingBean等注解做条件判断,满足条件则将类内@Bean注册到容器;
  3. 核心关联:spring.factories是“自动配置类的注册清单”,SpringBoot通过它找到所有待加载的自动配置类,再按条件筛选生效。

2. MySQL主从复制中,ROW格式binlog如何避免主从数据不一致?

思路

对比STATEMENT格式的“逻辑SQL”缺陷,突出ROW格式“记录数据变更”的核心优势。

回答示例

ROW格式(行格式)是binlog的一种记录模式,避免主从不一致的核心逻辑:

  1. 记录内容差异
  2. 一致性保障

补充:ROW格式缺点是日志量更大,可结合MIXED格式(自动切换)平衡性能与一致性。

3. Redis Cluster的Gossip协议如何传播节点状态变更?

思路

围绕“随机节点通信 + 状态广播 + 消息确认”的核心机制,解释Gossip协议的去中心化传播逻辑。

回答示例

Redis Cluster的Gossip协议是去中心化的节点状态传播机制,核心流程:

  1. 节点通信规则:每个节点每秒随机选择几个节点(默认5个),发送PING消息(包含自身状态+已知节点状态);
  2. 状态变更触发:当节点发生上线/下线/故障/槽位迁移等变更时,会将变更信息写入自身状态;
  3. 消息传播:PING消息携带最新状态,接收节点更新本地节点列表,并继续将新状态传播给其他节点;
  4. 故障检测:若节点多次PING无响应(默认PING超时30秒),标记为疑似故障,通过Gossip广播,集群达成共识后标记为下线。

核心特点:去中心化、最终一致性,传播延迟随集群规模增加略有上升,但无单点故障。

4. Kafka消费者组内分区重平衡时,如何减少重复消费?

思路

围绕“消费位移提交 + 重平衡策略 + 幂等处理”展开,给出具体可落地的优化方案。

回答示例

分区重平衡(Rebalance)是消费者组内分区重新分配的过程,减少重复消费的核心策略:

  1. 及时提交消费位移
  2. 使用幂等消费
  3. 优化重平衡触发条件
  4. 使用新版本重平衡策略

核心逻辑:重复消费的根源是“位移未提交就触发重平衡”,需从“位移提交”和“减少重平衡”双维度优化。

5. Seata AT模式中,undo_log表在全局回滚时的作用?

思路

明确undo_log的“数据快照”核心作用,解释全局回滚时的“反向操作”逻辑。

回答示例

undo_log是Seata AT模式实现分布式事务回滚的核心表,全局回滚时的作用:

  1. 记录快照:分支事务执行前,Seata会将数据的“前镜像”(修改前)和“后镜像”(修改后)写入undo_log表,并加行锁;
  2. 全局回滚触发:当TC(事务协调器)判定全局事务需要回滚时,向各RM(资源管理器)发送回滚指令;
  3. 反向还原数据:RM读取undo_log中的前镜像,执行“反向SQL”(如UPDATE回滚为原数据、INSERT回滚为DELETE),将数据还原到事务执行前的状态;
  4. 解锁清理:回滚完成后,删除undo_log记录,释放行锁。

核心价值:undo_log是“数据回滚的凭证”,保证分布式事务失败时,各分支数据能精准回滚到初始状态。

6. MAT分析堆转储时,“Dominator Tree”视图的核心价值?

思路

围绕“支配树的核心定义(对象的内存支配关系)”展开,解释其定位内存泄漏的核心优势。

回答示例

Dominator Tree(支配树)是MAT分析堆内存的核心视图,核心价值:

  1. 内存支配关系可视化:每个节点表示一个对象,节点的“Retained Heap”表示该对象被GC回收后能释放的总内存(包含其支配的所有子对象);
  2. 快速定位大对象:按Retained Heap降序排序,可快速找到占用内存最多的“根对象”(如静态集合、线程池);
  3. 定位内存泄漏根因

核心优势:相比普通的对象列表,支配树能直接展示“谁在占用内存、谁导致对象无法被回收”,是定位内存泄漏的最优视图。

7. 雪花算法中,时间戳位移计算错误会导致什么后果?

思路

围绕雪花算法的结构(时间戳+机器ID+序列号),分析位移错误对ID唯一性和有序性的影响。

回答示例

雪花算法的ID结构为:高位0 + 41位时间戳 + 10位机器ID + 12位序列号,时间戳位移计算错误的后果:

  1. ID重复
  2. ID无序:时间戳是ID有序性的核心,位移错误可能导致时间戳位段被覆盖,ID失去按时间递增的特性;
  3. 时间回:位移错误可能导致时间戳位段有效范围缩小,更容易触发“时钟回拨”导致的ID重复。

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

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

全部评论

相关推荐

暴杀流调参工作者:春招又试了一些岗位,现在投递很有意思,不仅要精心准备简历,投递官网还得把自己写的东西一条一条复制上去,阿里更是各个bu都有自己的官网,重复操作无数次,投完简历卡完学历了,又该写性格测评、能力测评,写完了又要写专业笔试,最近还有些公司搞了AI辅助编程笔试,有些还有AI面试,对着机器人话也听不明白录屏硬说,终于到了人工面试又要一二三四面,小组成员面主管面部门主管面hr面,次次都没出错机会,稍有不慎就是挂。 卡学历卡项目卡论文卡实习什么都卡,没有不卡的😂
点赞 评论 收藏
分享
评论
点赞
4
分享

创作者周榜

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