Java高级面试与工程实践问题集(一)

覆盖的技术领域统计:

  1. 分布式系统:45个问题(事务、一致性、消息队列、缓存)
  2. 微服务架构:38个问题(服务治理、网关、配置中心、链路追踪)
  3. 数据库优化:32个问题(索引、查询、分库分表、备份恢复)
  4. 性能调优:28个问题(JVM、GC、线程池、内存管理)
  5. 安全防护:22个问题(认证授权、漏洞防护、数据安全)
  6. 监控运维:18个问题(监控告警、日志、APM、部署)
  7. 大数据处理:15个问题(实时计算、流处理、数据同步)
  8. 云原生: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 实时聚合计算

难点:数据降采样、长期存储成本、异常检测算法

相关推荐
感性的程序员小王1 小时前
阿里面试官:说说Agent Skills、MCP、Function Call之间的区别吧?
人工智能·面试
进击的cc1 小时前
面试官:Handler 没消息时为啥不卡死?带你从源码到底层内核彻底整明白!
android·面试
cyforkk1 小时前
Spring AOP 进阶:揭秘 @annotation 参数绑定的底层逻辑
java·数据库·spring
清风徐来QCQ1 小时前
Java2(valueOf,Character,StringBuilder,设计模式)
java·开发语言
Neptune11 小时前
让我带你迅速吃透React组件通信:从入门到精通(中篇)
前端·react.js·面试
2403_835568471 小时前
多平台UI框架C++开发
开发语言·c++·算法
台XX1 小时前
Java容器常用方法
java·开发语言
tonyhi61 小时前
Ubuntu DeepSeek R1本地化部署 Ollama+Docker+OpenWebUI
java·ubuntu·docker
yunyun321231 小时前
C++中的适配器模式
开发语言·c++·算法