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
。
- 自定义:拆分
*-starter
(依赖聚合)与 *-autoconfigure
(自动配置),并在 AutoConfiguration.imports
注册配置类。
65.如何使用 Redis 快速实现排行榜?
展开 简单 VIP 后端 Redis
- 使用 ZSet:
ZADD board score member
写入;ZREVRANGE board 0 N WITHSCORES
获取 Top N;ZINCRBY
增量变更分数。
- 排名与分数:
ZREVRANK
获取名次(从 0 开始);ZSCORE
查分数;分页用 ZREVRANGE start end
。
- 过期与分区:按周期(天/周/月)滚动排行榜;超大榜单可分片或保留 TopK + 近段位数据。
- 去重与并发:member 唯一;批量更新用 Pipeline;必要时加 Lua 保证原子性。
66.Redis 中如何保证缓存与数据库的数据一致性?
展开 中等 VIP 后端 Redis
- 常见策略:Cache-Aside(旁路缓存,最常用)、Read/Write-Through、Write-Behind。
- 写入顺序:先更新 DB 再删除缓存;删除失败用“延迟双删”或订阅 binlog 的异步失效(Canal → MQ → 失效)。
- 过期与回源:设置合理 TTL,热点 Key 提前刷 新;穿透用布隆过滤器/空值缓存,击穿用互斥锁,雪崩做 Key 过期随机。
- 幂等与顺序:写入请求加唯一标识;MQ 消费保持幂等;跨库更新需事务或补偿(TCC/Saga)。
67.说说 TCP 的三次握手?
展开 简单 VIP 网络
- 步骤:
- 客户端 → 服务器:
SYN
(含初始序列号 ISN_c
)
- 服务器 → 客户端:
SYN+ACK
(含 ISN_s
,确认 ISN_c+1
)
- 客户端 → 服务器:
ACK
(确认 ISN_s+1
)
- 目的:同步双方序列号与窗口,确认对端收发能力,防止旧连接请求误建立(两次握手无法区分旧 SYN)。
- 相关:防 SYN Flood(半连接队列、SYN Cookies、限速/黑白名单)。
68.简单说说 Netty 的零拷贝机制?
展开 中等 VIP Netty 后端
- ByteBuf 池化与切片:
slice()/duplicate()
共享内存不复制,CompositeByteBuf
拼接视图减少拼包拷贝。
- 直接内存:
DirectByteBuf
降低一次用户态/内核态拷贝。
- 文件传输:
FileRegion
基于 sendfile
实现内核级搬运,避免用户态拷贝。
- Linux 原语:
epoll
+ splice
/mmap
等在特定场景进一步减少拷贝与上下文切换。
69.什么是配置中心?有哪些常见的配置中心?
展开 中等 VIP 后端 Spring Cloud
- 定义:集中管理应用配置,支持动态下发、灰度、版本、审计与权限控制。
- 常见实现:Nacos、Apollo、Spring Cloud Config、Consul、Etcd、ZooKeeper。
- 客户端:长轮询/推送(HTTP/GRPC)、本地缓存、变更回调(
@RefreshScope
)。
70.说说 TCP 的四次挥手?