61.SpringBoot 是如何实现自动配置的?
展开 中等 VIP Spring Boot 后端
- 入口:
@SpringBootApplication
→ @EnableAutoConfiguration
导入自动配置。
- 发现机制:读取自动配置清单(Spring Boot 3+ 使用
META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
;旧版使用 META-INF/spring.factories
)。
- 条件装配:
@ConditionalOnClass/@ConditionalOnMissingBean/@ConditionalOnProperty
等按需启用配置类,避免重复与冲突。
- 外部化配置:
application.yml/properties
+ @ConfigurationProperties
实现属性绑定与多环境 @Profile
。
- 组件化:Starter 仅聚合依赖,AutoConfiguration 提供具体装配逻辑,解耦“依赖选择”与“装配策略”。
62.什么是 MySQL 的主从同步机制?它是如何实现的?
展开 中等 VIP MySQL 数据库
- 核心流程:主库写入 binlog;从库 I/O 线程通过 TCP 拉取到 relay log;SQL 线程重放 relay log 到从库。
- 复制模式:异步(默认)、半同步(插件,主库等待至少一个从库确认)、组复制/InnoDB Cluster(强一致拓扑)。
- 日志格式:ROW(行级,推荐)、STATEMENT、MIXED。
- 关键问题:主从延迟(大事务、IO 瓶颈、单线程回放)。缓解:并行复制、优化事务、硬件与参数调优、尽量 ROW 格式、拆批。
63.说说 Redisson 分布式锁的原理?
展开 中等 VIP 后端 Redis Redisson
- 基于 Redis 的键值锁:
SET lock value NX PX ttl
或 Lua 保证原子性;value
含实例标识与线程标识。
- 可重入:使用 Hash 结构记录同线程重入计数;加锁同线程计数递增。
- 看门狗:持锁任务未主动解锁时,后台定期续期,避免在长业务中锁过期被他人误抢。
- 解锁:校验标识只允许持有者释放;未命中则忽略,避免误删。
- 等待与唤醒:利用 Pub/Sub 通知等待线程重试,减少无效自旋。
- 高可用:多节点用 RedLock 思路(多主多数派),但工程上更推荐哨兵/集群配合主从容灾。
64.如何理解 Spring Boot 中的 starter?
展开 简单 Spring Boot
- Starter:一组功能边界清晰的依赖聚合(不含装配逻辑),降低坐标选择与版本管理成本。
- AutoConfiguration:承载条件化装配逻辑,随 Starter 引入后按条件生效。
- 命名约定:官方
spring-boot-starter-*
;第三方 *-spring-boot-starter