愿为科技 Java开发工程师 二面
1. Spring Boot Starter中spring.factories与自动配置类的关联逻辑?
思路
核心围绕“spring.factories的配置格式 + SpringBoot的加载机制”展开,解释“配置声明→加载扫描→条件生效”的完整链路。
回答示例
spring.factories是Starter实现自动配置的核心配置文件,关联逻辑如下:
- 配置声明:在Starter的
META-INF/spring.factories中,以org.springframework.boot.autoconfigure.EnableAutoConfiguration为key,值为自动配置类的全限定名(多个用逗号分隔);
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ com.example.starter.MyAutoConfiguration
- 加载扫描:Spring Boot启动时,通过
SpringFactoriesLoader加载所有jar包中的spring.factories,收集自动配置类; - 条件生效:自动配置类通过@ConditionalOnClass/@ConditionalOnMissingBean等注解做条件判断,满足条件则将类内@Bean注册到容器;
- 核心关联:spring.factories是“自动配置类的注册清单”,SpringBoot通过它找到所有待加载的自动配置类,再按条件筛选生效。
2. MySQL主从复制中,ROW格式binlog如何避免主从数据不一致?
思路
对比STATEMENT格式的“逻辑SQL”缺陷,突出ROW格式“记录数据变更”的核心优势。
回答示例
ROW格式(行格式)是binlog的一种记录模式,避免主从不一致的核心逻辑:
- 记录内容差异:
- 一致性保障:
补充:ROW格式缺点是日志量更大,可结合MIXED格式(自动切换)平衡性能与一致性。
3. Redis Cluster的Gossip协议如何传播节点状态变更?
思路
围绕“随机节点通信 + 状态广播 + 消息确认”的核心机制,解释Gossip协议的去中心化传播逻辑。
回答示例
Redis Cluster的Gossip协议是去中心化的节点状态传播机制,核心流程:
- 节点通信规则:每个节点每秒随机选择几个节点(默认5个),发送PING消息(包含自身状态+已知节点状态);
- 状态变更触发:当节点发生上线/下线/故障/槽位迁移等变更时,会将变更信息写入自身状态;
- 消息传播:PING消息携带最新状态,接收节点更新本地节点列表,并继续将新状态传播给其他节点;
- 故障检测:若节点多次PING无响应(默认PING超时30秒),标记为疑似故障,通过Gossip广播,集群达成共识后标记为下线。
核心特点:去中心化、最终一致性,传播延迟随集群规模增加略有上升,但无单点故障。
4. Kafka消费者组内分区重平衡时,如何减少重复消费?
思路
围绕“消费位移提交 + 重平衡策略 + 幂等处理”展开,给出具体可落地的优化方案。
回答示例
分区重平衡(Rebalance)是消费者组内分区重新分配的过程,减少重复消费的核心策略:
- 及时提交消费位移:
- 使用幂等消费:
- 优化重平衡触发条件:
- 使用新版本重平衡策略:
核心逻辑:重复消费的根源是“位移未提交就触发重平衡”,需从“位移提交”和“减少重平衡”双维度优化。
5. Seata AT模式中,undo_log表在全局回滚时的作用?
思路
明确undo_log的“数据快照”核心作用,解释全局回滚时的“反向操作”逻辑。
回答示例
undo_log是Seata AT模式实现分布式事务回滚的核心表,全局回滚时的作用:
- 记录快照:分支事务执行前,Seata会将数据的“前镜像”(修改前)和“后镜像”(修改后)写入undo_log表,并加行锁;
- 全局回滚触发:当TC(事务协调器)判定全局事务需要回滚时,向各RM(资源管理器)发送回滚指令;
- 反向还原数据:RM读取undo_log中的前镜像,执行“反向SQL”(如UPDATE回滚为原数据、INSERT回滚为DELETE),将数据还原到事务执行前的状态;
- 解锁清理:回滚完成后,删除undo_log记录,释放行锁。
核心价值:undo_log是“数据回滚的凭证”,保证分布式事务失败时,各分支数据能精准回滚到初始状态。
6. MAT分析堆转储时,“Dominator Tree”视图的核心价值?
思路
围绕“支配树的核心定义(对象的内存支配关系)”展开,解释其定位内存泄漏的核心优势。
回答示例
Dominator Tree(支配树)是MAT分析堆内存的核心视图,核心价值:
- 内存支配关系可视化:每个节点表示一个对象,节点的“Retained Heap”表示该对象被GC回收后能释放的总内存(包含其支配的所有子对象);
- 快速定位大对象:按Retained Heap降序排序,可快速找到占用内存最多的“根对象”(如静态集合、线程池);
- 定位内存泄漏根因:
核心优势:相比普通的对象列表,支配树能直接展示“谁在占用内存、谁导致对象无法被回收”,是定位内存泄漏的最优视图。
7. 雪花算法中,时间戳位移计算错误会导致什么后果?
思路
围绕雪花算法的结构(时间戳+机器ID+序列号),分析位移错误对ID唯一性和有序性的影响。
回答示例
雪花算法的ID结构为:高位0 + 41位时间戳 + 10位机器ID + 12位序列号,时间戳位移计算错误的后果:
- ID重复:
- ID无序:时间戳是ID有序性的核心,位移错误可能导致时间戳位段被覆盖,ID失去按时间递增的特性;
- 时间回:位移错误可能导致时间戳位段有效范围缩小,更容易触发“时钟回拨”导致的ID重复。
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
本专栏在精不在多,内容分为八股文、大厂真实面经,面试通过后将offer和面试题私发给我,可退还专栏的收益部分费用。欢迎大家共建专栏
查看18道真题和解析