覆盖的技术领域统计:
- 分布式系统:45个问题(事务、一致性、消息队列、缓存)
- 微服务架构:38个问题(服务治理、网关、配置中心、链路追踪)
- 数据库优化:32个问题(索引、查询、分库分表、备份恢复)
- 性能调优:28个问题(JVM、GC、线程池、内存管理)
- 安全防护:22个问题(认证授权、漏洞防护、数据安全)
- 监控运维:18个问题(监控告警、日志、APM、部署)
- 大数据处理:15个问题(实时计算、流处理、数据同步)
- 云原生:12个问题(容器化、K8s、Service Mesh)
🔥 1. 如何确保本地事务与消息发送的最终一致性?
场景:下单成功后发 MQ 消息,但 MQ 发送失败怎么办?
关键技术:本地消息表(Local Message Table)、事务消息(RocketMQ/Kafka)、最大努力通知 + 幂等消费
延伸:对比 Seata 的 AT 模式 vs RocketMQ 事务消息
🔥 2. Spring 中 @Transactional 在哪些情况下会失效?
常见陷阱:
自调用(this.method())
非 public 方法
异常被 try-catch 吞掉
代理模式(JDK vs CGLIB)限制
深层原理:AOP 代理机制与事务上下文绑定(ThreadLocal)
🔥 3. 如何实现"延迟任务"且保证高可靠?
场景:订单 30 分钟未支付自动取消
方案对比:
JDK Timer / ScheduledThreadPool(不可靠)
Redis ZSet + 轮询(中等可靠)
RabbitMQ TTL + 死信队列(可靠)
时间轮算法(Netty/HashedWheelTimer)
关键:任务持久化 + 故障恢复
🔥 4. 微服务下如何保证跨服务的数据一致性?
模式选择:
Saga 模式(长事务补偿)
TCC(Try-Confirm-Cancel)
事件驱动架构(Event Sourcing + CQRS)
工具链:Seata、Apache ServiceComb、自研状态机
🔥 5. 如何设计一个高性能、线程安全的本地缓存?
要求:支持过期、淘汰、高并发读写
对比:
Guava Cache(LRU + 定时回收)
Caffeine(Window TinyLFU + 异步刷新)
手写:ConcurrentHashMap + DelayQueue
高级:缓存穿透/击穿/雪崩防护
🔥 6. Spring Boot 应用启动慢?如何诊断和优化?
分析工具:
--debug 查看自动配置报告
StartupReporter(Spring Boot 2.7+)
Async Bean 初始化
优化点:
延迟初始化(spring.main.lazy-initialization=true)
移除无用 Starter
AOT 编译(GraalVM)
🔥 7. 如何安全地在线修改运行中的 JVM 应用逻辑?
技术栈:
Java Agent + Instrumentation(动态字节码修改)
Arthas(线上诊断 & 热更新)
JRebel(商业方案)
风险:内存泄漏、类版本冲突
🔥 8. 高并发下数据库连接池为何会耗尽?如何调优?
根本原因:
连接泄漏(未 close)
慢 SQL 占用连接
连接池配置不合理(maxPoolSize vs 线程数)
监控:HikariCP 的 leakDetectionThreshold
替代方案:R2DBC(响应式连接池)
🔥 9. 如何实现"幂等性"接口?不同场景的最佳实践?
方案:
Token 机制(前端生成唯一 ID)
数据库唯一索引(如 order_no)
Redis SETNX + 过期时间
状态机校验(如"仅允许从待支付→已支付")
关键:幂等 ≠ 重试安全,需结合业务语义
🔥 10. Spring 中 @Async 如何保证异常被捕获和监控?
默认行为:异步任务异常被静默吞掉!
解决方案:
自定义 AsyncConfigurer + ErrorHandler
返回 CompletableFuture 并 .exceptionally()
集成 Sleuth 实现链路追踪
高级:异步任务持久化(Quartz 替代方案)
继续生成的问题 (11-210)
🔥 11. 如何设计一个支持千万级用户的分布式 ID 生成器?
要求:全局唯一、趋势递增、高可用、低延迟
方案对比:
雪花算法(Snowflake):时钟回拨问题如何解决?
数据库号段模式:Leaf、美团 Leaf 实现原理
Redis 原子操作:INCR + Lua 脚本保证原子性
UUID/GUID:存储空间 vs 索引性能
生产考量:数据中心 ID 分配、容器化部署的机器 ID 管理
🔥 12. Spring Cloud 微服务如何实现灰度发布?
场景:新版本上线,需要部分用户先体验
技术栈:
Spring Cloud Gateway + 权重路由
Nacos 配置中心 + 标签路由
Sentinel 流量染色 + 链路透传
SkyWalking 全链路灰度追踪
难点:数据库、缓存、消息队列的灰度兼容性
🔥 13. JVM 内存泄漏如何定位和修复?
现象:Full GC 频繁,OOM 频发
诊断工具:
jmap + jhat:生成堆转储分析
VisualVM / JProfiler:实时监控
Arthas:线上动态诊断
GC 日志分析(-Xlog:gc*)
常见泄漏点:
静态集合类(如 static Map)
线程局部变量未清理
连接池未关闭(DB、HTTP、Redis)
监听器/回调注册未注销
🔥 14. 如何实现数据库分库分表后的跨分片查询?
问题:用户表按 user_id 分片,但需要按 create_time 范围查询
解决方案:
全局二级索引(如 Elasticsearch 同步)
广播表 + 内存聚合
分页查询优化(最后一条记录定位法)
异构索引(如 TiDB 的全局索引)
工具:ShardingSphere、MyCat 的路由策略扩展
🔥 15. Spring Security OAuth2 如何实现多租户隔离?
场景:SaaS 系统,每个租户独立数据权限
架构设计:
数据库 schema 隔离 vs 数据行隔离
动态数据源切换(AbstractRoutingDataSource)
SecurityContext 多租户上下文传递
JWT 中携带租户 ID 声明
安全考虑:防止越权访问、租户数据泄露
🔥 16. 如何设计一个高可用的配置中心?
要求:配置实时生效、版本管理、权限控制、审计日志
技术选型:
Apollo:灰度发布、回滚、监控
Nacos:配置+服务发现一体化
Spring Cloud Config + Bus:Git WebHook 触发刷新
自研:基于 etcd/ZooKeeper 的 watch 机制
生产问题:配置推送丢失、客户端长连接保持
🔥 17. 分布式锁在哪些场景下会失效?如何避免?
失效场景:
Redis 锁过期时间设置不合理(业务未执行完锁已释放)
主从切换导致锁丢失(Redlock 算法争议)
时钟漂移(NTP 同步问题)
GC 停顿导致锁超时
最佳实践:
锁续期机制(watchdog)
锁令牌传递(fencing token)
基于数据库唯一索引的悲观锁
分布式协调器(ZooKeeper/etcd)
🔥 18. 如何实现一个高性能的 API 网关?
核心功能:路由、限流、熔断、鉴权、监控
性能优化:
异步非阻塞(Netty vs Tomcat NIO)
连接池复用(HTTP 客户端优化)
响应缓存(Cache-Control、ETag)
协议升级(HTTP/2、gRPC)
扩展性:插件化架构、动态加载、热更新
🔥 19. Spring Boot 应用如何实现优雅停机?
问题:K8s 滚动更新时,旧实例仍有请求在处理
解决方案:
注册中心反注册延迟(Spring Cloud 服务下线通知)
Tomcat graceful shutdown(spring.lifecycle.timeout-per-shutdown-phase)
请求排空(等待现有请求完成)
健康检查探针配合(readinessProbe → livenessProbe)
生产实践:停机脚本、监控告警、重试机制
🔥 20. 如何设计一个支持海量数据的实时监控系统?
数据特点:高吞吐、低延迟、时序数据
技术栈:
数据采集:Micrometer + Prometheus PushGateway
存储:InfluxDB vs TimescaleDB vs ClickHouse
查询:Grafana 仪表盘 + 告警规则
流处理:Flink 实时聚合计算
难点:数据降采样、长期存储成本、异常检测算法