互联网大厂 Java 面试实录:Java SE、Spring Boot、微服务与 Spring AI 三轮拷问

发布时间:2026/8/2 3:36:59
互联网大厂 Java 面试实录:Java SE、Spring Boot、微服务与 Spring AI 三轮拷问 互联网大厂 Java 面试实录从 Java SE、Spring Boot 到 Spring AI 的三轮拷问场景互联网大厂 Java 岗面试。角色面试官严肃、问题刁钻、追问不断小Y有点水但不是完全不会简单题能答难题开始“云里雾里”第一轮基础功和框架入门面试官小Y先热热身。Java 8、11、17 这几个版本你实际项目里最常用哪个为什么小Y我项目里主要用 Java 11感觉比 8 更稳一些。用起来也有些新特性比如var、更好的 GC 和更成熟的性能表现。17 我也知道是 LTS很多新项目开始往上走。面试官回答得还行至少知道 LTS。那你说说 JVM 里对象是怎么分配和回收的小Y对象一般先在堆里分配年轻代优先。大对象或者长期存活对象会进入老年代。垃圾回收的话常见有 Minor GC、Major GC、Full GC具体要看 GC 算法和对象存活情况。面试官不错至少不是把 JVM 当黑盒。那 Maven 和 Gradle 你怎么选小YMaven 更规范适合团队统一依赖管理Gradle 更灵活构建速度也常常更快。如果团队已有 Maven 体系我一般不会硬改成 Gradle避免额外学习和维护成本。面试官这个思路挺对。那 Spring Boot 启动时自动装配到底做了什么小Y它会基于spring.factories或者现在相关的自动配置机制结合类路径里的依赖条件帮我们把常见组件自动注册到容器里。比如 Web、Jackson、数据源这些不需要手写太多配置。面试官行能说出核心逻辑。那 Spring MVC 和 WebFlux 的区别呢小YSpring MVC 是传统的 Servlet 模型适合大多数 CRUD 项目。WebFlux 是响应式编程基于 Reactor适合高并发、IO 密集场景。不过如果链路里大部分组件还是阻塞式的强行上 WebFlux 反而不一定有收益。面试官这句挺实在。继续给你一个内容社区的场景用户发帖、看帖、点赞你会怎么设计一个普通的 Spring Boot 接口层小Y我会先拆成 Controller、Service、Repository 三层。Controller 负责参数接收和返回Service 处理业务规则Repository 或 Mapper 访问数据库。请求参数校验、统一异常处理、接口文档也会一起做。面试官可以基础比较扎实。第一轮先到这儿。第二轮数据库、缓存、消息队列和测试面试官进入业务一些。内容社区里“点赞数”怎么设计MyBatis、JPA、Hibernate 你会怎么选小Y如果是简单查询和复杂 SQL 多一点我更倾向 MyBatis因为 SQL 可控如果是领域模型比较清晰、关系映射比较多JPA 或 Hibernate 能省不少样板代码。点赞数这种高频变更字段我会谨慎避免每次都直接打主表。面试官还行。那点赞数高并发更新怎么抗小Y可以先放 Redis 里做增量累计异步批量落库避免数据库被打爆。也可以结合消息队列削峰比如 Kafka 或 RabbitMQ把点赞事件先发出去后面用消费端统一处理。面试官说到队列Kafka 和 RabbitMQ 你怎么区分小YKafka 更偏吞吐和流式处理适合日志、埋点、异步事件RabbitMQ 更偏灵活路由和业务解耦延迟、确认机制、死信这些能力比较常用。两者都能做消息解耦但侧重点不一样。面试官这题答得不错。那你说说 Redis 里缓存热点帖子时Spring Cache 你会怎么用小YSpring Cache 可以把缓存抽象起来比如配合 Redis 做Cacheable、CacheEvict。热点帖子详情可以缓存写操作时及时失效或更新。关键是要处理缓存穿透、击穿、雪崩。面试官缓存失效策略你知道几种小Y常见有 TTL 过期、主动更新、写后删除、延迟双删。对一致性要求高的场景通常不能只靠“过期自动失效”得结合业务写路径设计。面试官那数据库连接池为什么常用 HikariCP小Y因为性能好、实现轻量、配置相对简单社区也很主流。相比一些老连接池它在高并发场景下表现通常更稳定。面试官测试这块呢你平时怎么写单测JUnit 5、Mockito、AssertJ 会用吗小Y会。JUnit 5 负责组织测试Mockito 做依赖 mockAssertJ 让断言可读性更好。我一般会优先测核心业务逻辑把外部依赖隔离掉。面试官那如果有老代码里用到了 PowerMock 呢小Y啊……PowerMock 我知道能 mock 一些静态方法和构造函数不过我平时更倾向重构代码尽量减少对这类工具的依赖。因为用得太多测试会比较脆。面试官这个态度是对的。第二轮结束。第三轮微服务、安全、监控和 AI 融合面试官进入后半场。假设你负责一个电商的订单中心Spring Cloud、Eureka、Consul、OpenFeign、Resilience4j 这些你怎么串起来小Y注册中心可以用 Eureka 或 Consul服务之间调用可以用 OpenFeign容错降级用 Resilience4j。整体思路就是服务注册发现、声明式调用、熔断限流重试把链路稳定性先兜住。面试官那如果注册中心挂了呢小Y这个……理论上客户端会有缓存短时间还能用不过具体要看实现和配置。关键还是要做高可用部署避免单点。面试官还算知道方向。那安全呢如果订单中心对外提供接口Spring Security、OAuth2、JWT、Keycloak 怎么配合小YSpring Security 负责认证授权框架能力OAuth2 负责授权流程JWT 常用来承载无状态令牌Keycloak 可以作为统一身份认证平台。一般是用户登录后拿 token后续请求带 token网关或服务端校验权限。面试官如果接口要做接口级权限和方法级权限你怎么控制小Y可以在 Spring Security 里做 URL 级别拦截也可以在方法上用注解控制比如基于角色、权限表达式。敏感接口还要结合审计日志不能只看“登录没登录”。面试官监控和排障怎么做小Y我会接 Micrometer 打指标配 Prometheus Grafana 看监控面板链路追踪可以用 Jaeger 或 Zipkin日志统一用 SLF4J 门面底层接 Logback 或 Log4j2再进 ELK 做检索分析。面试官如果线上接口慢你怎么定位是数据库慢、MQ 慢还是下游服务慢小Y先看指标和链路追踪再看日志时间点和耗时分布。如果是下游调用慢Trace 能直接看到 span如果是数据库慢再结合 SQL 日志、连接池、慢查询和索引分析。面试官最后一个问题电商客服场景想接入 AI。Spring AI、RAG、MCP、Agent、向量数据库这些你怎么理解小YSpring AI 可以帮助 Java 项目快速接入大模型能力。RAG 是先检索再生成适合企业知识库问答MCP 我理解是把工具调用标准化让模型更容易接外部系统Agent 则是让模型能规划步骤、调用工具、完成复杂工作流。向量数据库像 Milvus、Chroma、Redis可以存 embedding做语义检索。面试官那如果客服回答开始“胡说八道”你怎么控制幻觉小Y这个我知道一点不能直接让模型自由发挥。要先做文档加载和清洗检索结果要有来源约束提示词里要求“仅根据知识库回答”必要时还要加规则校验和人工兜底。面试官行今天就到这。你基础不是完全没有但复杂问题还不够收敛。先回去等通知吧。详细答案解析1. Java 8 / 11 / 17 怎么选在互联网大厂面试里Java 版本选择经常被问到。常见思路是Java 8生态成熟很多历史项目还在用Java 11LTS 版本兼容性和性能都比较平衡Java 17新项目更常见长期支持语言特性更完善如果是求职场景回答时要强调“版本选择和团队现状、框架兼容、运维稳定性有关”不要只背特性。2. JVM 对象分配和回收对象一般会先在堆上分配年轻代适合存放“朝生夕死”的对象。常见回收路径是Minor GC回收年轻代Major GC / Old GC回收老年代Full GC通常代价更高涉及更多区域回答时可以顺带提到大对象可能直接进入老年代长生命周期对象会经历多次复制后晋升GC 选择会影响延迟和吞吐3. Maven 和 Gradle 的选择Maven 更适合规范化团队协作依赖管理清晰Gradle 更灵活适合复杂构建和更高定制化场景。面试中最重要的是你知道它们都能做什么你知道团队协作时为什么不能随便乱换你知道构建工具不仅是“打包”还涉及依赖冲突处理、生命周期管理、插件扩展4. Spring Boot 自动装配原理Spring Boot 的价值在于减少样板配置。核心思路是根据类路径上的依赖判断是否启用某个配置通过自动配置类把 Bean 装进容器用条件装配实现“有依赖才生效”典型面试回答可以围绕“约定优于配置”和“条件化 Bean 注册”来展开。5. Spring MVC 和 WebFluxSpring MVC 是阻塞式请求处理模型成熟稳定适合绝大多数业务。WebFlux 是响应式模型优势主要在高并发、IO 密集事件驱动非阻塞链路但要注意如果数据库、MQ、第三方服务还是阻塞式WebFlux 的收益会被削弱。面试里说出这点通常会加分。6. MyBatis、JPA、Hibernate 怎么选MyBatisSQL 可控适合复杂查询、性能敏感、强 SQL 场景JPA/Hibernate对象关系映射更方便适合领域模型更清晰的场景电商、内容社区里很多团队会混用简单 CRUD 用 JPA复杂查询或报表用 MyBatis7. 高并发点赞如何设计点赞、收藏、关注这类功能典型难点是写多读多。常见方案Redis 做计数和去重MQ 异步落库定时批处理或消费线程合并更新关键是平衡一致性可用性性能8. Kafka 和 RabbitMQ 区别Kafka高吞吐、日志流、事件流、顺序消费模型更常见RabbitMQ路由灵活、确认机制成熟、业务消息场景常见在业务上不要机械记忆“谁更好”要结合“吞吐、延迟、可靠性、路由复杂度”来答。9. Redis 缓存和 Spring CacheSpring Cache 是缓存抽象层Redis 是常用底层实现。常见问题包括缓存穿透查不存在的数据缓存击穿热点 key 失效瞬间并发打到数据库缓存雪崩大量 key 同时失效解决方式包括TTL 随机化互斥锁逻辑过期空值缓存10. HikariCP 为什么常用HikariCP 的优势通常体现在性能好启动快配置简单社区主流面试里如果被追问“连接池为什么重要”可以延伸到控制数据库连接资源限制并发压力监控连接泄漏和等待时间11. JUnit 5、Mockito、AssertJ测试链路里常见搭配JUnit 5测试框架本体MockitoMock 依赖AssertJ更可读的断言一个好回答应该体现单测只测当前单元不依赖外部系统核心业务逻辑优先覆盖测试用例要可读、可维护12. PowerMock 的态度PowerMock 常用于处理静态方法、final、构造函数等难 mock 场景但在现代代码里最好通过设计优化减少依赖。比如把静态调用封装到可注入组件里通过接口替代硬编码依赖优先让代码更易测而不是让测试工具更“强大”13. Spring Cloud、Eureka、Consul、OpenFeign、Resilience4j典型微服务组合注册发现Eureka / Consul声明式调用OpenFeign熔断限流重试Resilience4j它们一起解决的是服务如何互相找到对方服务调用失败怎么办如何避免雪崩式故障传播14. Spring Security、OAuth2、JWT、Keycloak这套组合常用于企业级认证授权Spring Security安全框架基础OAuth2授权协议JWT无状态 tokenKeycloak统一身份认证和 SSO 平台典型落地是用户登录后拿 token请求到网关或服务端做校验再根据角色/权限访问资源。15. Micrometer、Prometheus、Grafana、Jaeger、Zipkin、ELK生产环境不能只看“接口能不能跑”还要看“跑得好不好”。Micrometer埋点采集统一接口Prometheus指标采集和告警Grafana可视化看板Jaeger / Zipkin分布式链路追踪ELK日志检索与分析定位慢接口时通常先看Trace 找慢在哪一段Metrics 看是否整体异常Logs 看错误与上下文16. Spring AI、RAG、MCP、Agent这部分是近年非常加分的方向。Spring AIJava 生态接入大模型能力的框架化支持RAG先检索企业知识再让模型生成答案MCP把工具调用接口标准化方便模型接外部能力Agent模型不只是回答还能规划步骤、调用工具、执行任务业务上常见场景企业文档问答智能客服工单辅助处理复杂流程自动化17. 如何控制 AI 幻觉AI 幻觉就是“说得像真的但其实不对”。治理思路让模型基于检索结果回答限制回答范围增加来源引用对敏感结论做规则校验人工兜底高风险场景这是企业落地里非常关键的一点。这场面试的核心启示基础题要稳回答要短、准、能落地中间题要会结合业务场景不要只背概念难题如果不熟宁可讲清边界也不要硬编面试官真正想看的是你是否能把技术和业务链路连起来