互联网大厂 Java 面试实录:Spring Boot、JVM、MyBatis、Redis、Kafka、Spring Security 到 AI/RAG

互联网大厂 Java 面试实录:Spring Boot、JVM、MyBatis、Redis、Kafka、Spring Security 到 AI/RAG 互联网大厂 Java 面试实录Spring Boot、JVM、MyBatis、Redis、Kafka、Spring Security 到 AI/RAG故事背景面试官老周表情严肃讲话像在开生产事故复盘会。候选人小Y外号“水货程序员”特点是简单题能答上来而且答对了还会抖机灵复杂题开始“先说结论”我感觉、应该、差不多、可能一旦被追问就会进入“接口设计很灵活具体看业务”的安全区今天的场景是一家互联网大厂的 Java 技术面业务方向是内容社区 电商 AI 智能客服。系统要支持用户发帖、评论、点赞、收藏商品下单、支付回调、优惠券核销消息通知、实时弹幕、异步审核企业知识库问答、智能客服、RAG 检索增强生成第一轮基础功底和工程化能力1面试官你先说说Spring Boot 和 Spring MVC 的关系是什么小YSpring Boot 是“开箱即用”的脚手架负责把 Spring 生态快速搭起来Spring MVC 主要负责 Web 请求处理比如DispatcherServlet、参数绑定、视图渲染这些。简单说Boot 负责“启动快、配置少”MVC 负责“接请求、干活”。面试官这个回答可以至少不是把两个框架混成一个。2面试官那你项目里为什么选 Maven不选 AntGradle 呢小YAnt 偏老构建过程要手写很多步骤Maven 是约定大于配置依赖管理和生命周期都比较清晰Gradle 更灵活性能也不错但团队如果更看重统一规范Maven 会更稳。大厂里常见的做法是老项目 Maven新项目看团队熟悉度也可能用 Gradle。面试官不错知道是“团队协作成本”的问题不只是工具喜好。3面试官JVM 里线上接口偶发变慢你会先看什么小Y我会先看是不是 GC 频繁、CPU 飙高、线程池打满、还是锁竞争严重。通常先从 GC 日志、线程 dump、jstat、jstack、top这些入口定位。比如 Full GC 频繁可能是堆太小、对象晋升太快、或者缓存没控制住。面试官可以至少知道先从“现象-证据-定位”入手。4面试官那你说说 Java 8、11、17 有什么你在项目里最常用的差异小YJava 8 我最常用的是 Lambda、Stream、Optional、CompletableFuture。Java 11 我会关注新的 HTTP Client、字符串方法增强。Java 17 属于更现代的 LTS很多公司会逐步升级比较关注它的性能、语法演进和长期支持。面试官回答可以说明你不是只会背“版本号”。第二轮数据访问、缓存、消息与安全1面试官现在我们做内容社区帖子详情页很热。你会怎么设计 Redis 缓存小Y我会把热点帖子详情放 Redis设置合理 TTL防止永久热点。查询时先查缓存miss 再查数据库回填。为了避免缓存击穿可以加互斥锁或者逻辑过期为了避免雪崩TTL 加随机值如果是热门排行榜还可以用 Sorted Set 做实时排名。面试官很好三个经典问题都答到了。2面试官如果你用 MyBatis 和 JPA你怎么选小Y如果业务 SQL 比较复杂、查询条件变化多、需要精确控制 SQL我更倾向 MyBatis如果是简单 CRUD、领域模型比较清晰JPA 能减少样板代码。很多团队会混用写业务核心查询用 MyBatis简单管理后台用 JPA 或 Spring Data。面试官这就对了框架不是宗教。3面试官商品下单后要发 Kafka 消息通知库存、积分、风控你会怎么保证一致性小Y我一般会先用本地事务保证订单落库成功再通过消息队列做异步解耦。为了避免“订单成功但消息没发出去”可以用事务消息、Outbox 表、或者定时补偿任务。消费者侧要做幂等比如按业务单号去重。Kafka 适合高吞吐场景RabbitMQ 更偏灵活路由选型看业务侧重点。面试官不错已经不是“发条消息就完了”。4面试官安全怎么做比如用户登录、接口鉴权、第三方接入。小Y内部系统常见是 Spring Security 做统一认证授权外部接入可用 OAuth2 / JWT。JWT 适合无状态分布式场景但要注意过期、刷新、注销问题。像企业统一身份认证还可以接 Keycloak。敏感加解密如果涉及证书和算法实现可能会碰到 Bouncy Castle。面试官回答不错能区分“认证、授权、令牌、统一身份”。第三轮微服务、AI、可观测性与复杂业务联动1面试官现在把内容社区升级成“AI 智能客服 企业知识库问答”你怎么做 RAG小Y我会先把企业文档做切分、清洗、向量化存到向量数据库里比如 Milvus、Chroma 或 Redis 向量能力。用户提问时先做语义检索召回相关片段再把上下文和问题一起拼给大模型生成答案。这样比纯大模型更适合企业文档问答也能降低幻觉。面试官这个方向对了说明你知道 RAG 解决的不是“生成”而是“先找再答”。2面试官那如果检索结果不准或者模型开始胡说八道你怎么处理小Y我会从三层处理。第一层是检索层优化切分策略、embedding 模型和召回 TopK第二层是提示词层限制模型只能基于检索内容回答第三层是输出层加置信度判断和拒答策略。对于企业客服还要把高频问题做 FAQ 兜底避免 AI 幻觉影响业务。面试官这次回答比很多“只会调 API”的人强。3面试官微服务里订单服务、库存服务、支付服务怎么做治理小Y我会考虑注册发现、配置管理、限流熔断、链路追踪。老一点的方案会用 Eureka、Zuul或者 Consul现在更多会基于 Spring Cloud 体系和 Resilience4j 做熔断限流。调用链上可以接 Micrometer Prometheus Grafana再用 Jaeger 或 Zipkin 做链路追踪方便定位慢接口和跨服务延迟。面试官可以知道“业务跑得动”之外还要“出问题能看见”。4面试官最后一个问题如果让你用 Java 体系搭一个“在线教育直播间 实时互动 课后知识问答”的平台你会怎么串起来小Y我大概会这么拆前台用 Spring Boot WebSocket 做实时互动必要时接 WebFlux 提升高并发连接能力课程订单和支付用 Spring MVC MyBatis/JPA 做核心交易链路异步消息用 Kafka 做弹幕、通知、审核任务Redis 做会话、热点课件缓存和限流用 Prometheus、Grafana、ELK 做监控和日志课后问答用 Spring AI RAG把讲义、FAQ、课件向量化后检索回答如果是企业级场景还会加 SSO、OAuth2、JWT、权限体系和审计日志面试官整体思路是对的说明你不是只会单点技术而是会按业务拆系统。面试官收尾面试官基础还行方向也没跑偏不过有些深入细节还不够扎实。今天先到这你回去等通知吧。小Y好的周老师我回去再把“会一点”和“会很多”之间的那条线补一补。面试官嗯至少态度是对的。详细答案解析把每个问题讲透1. Spring Boot、Spring MVC 的业务关系Spring Boot 是应用启动和自动配置的入口解决的是“怎么快速把项目跑起来”。Spring MVC 负责 Web 层请求处理解决的是“请求来了怎么分发、怎么参数绑定、怎么返回结果”。在电商、内容社区、SaaS 后台里通常是Spring Boot 负责装配依赖、自动配置数据源、Web 容器、日志、监控Spring MVC 负责 Controller、参数校验、异常处理、返回 JSON小白记忆法Boot 是“搭台子”MVC 是“唱戏”。2. Maven、Gradle、Ant 的选择Ant更像“手工搭积木”灵活但配置碎适合早期老项目Maven强约定、依赖传递、生命周期完整适合大团队统一管理GradleDSL 更灵活构建性能好适合更复杂的工程组织企业里最重要的不是“谁更潮”而是团队是否统一CI/CD 是否稳定多模块工程是否易维护依赖冲突是否容易治理3. JVM 性能排查思路线上变慢优先排查四类GC看是否频繁 Full GC、停顿时间长CPU看是否有热点计算、死循环、序列化/反序列化过重线程看线程池是否满、是否有死锁、阻塞队列是否堆积锁看 synchronized、ReentrantLock、数据库锁竞争常用手段jstack看线程堆栈jstat看 GC 状态jmap看堆内存对象分布top/vmstat看系统负载4. Java 8/11/17 的实际意义Java 8Lambda、Stream、Optional、时间 API很多老系统仍是主力Java 11更成熟的 LTS常用于企业升级过渡Java 17更现代的 LTS适合新项目和逐步升级面试里真正要表达的是你能理解版本演进带来的代码风格、运行时性能和长期维护成本变化。5. Redis 缓存设计内容社区里最常见的缓存对象帖子详情用户主页摘要热门榜单登录态、验证码、限流计数器常见问题和方案缓存击穿热点 key 失效用互斥锁或逻辑过期缓存雪崩TTL 加随机值分散过期时间缓存穿透空值缓存、布隆过滤器如果是排行榜、点赞数、热度值Redis 的 Sorted Set 很常见。6. MyBatis 和 JPA 的取舍MyBatis适合复杂 SQL、报表、动态查询、强控制场景JPA适合标准 CRUD、领域对象驱动开发减少模板代码在真实项目中经常不是“二选一”而是“按场景共存”。7. Kafka 消息一致性订单系统里最怕的是“数据库写成功了消息没发出去”或者“消息重复消费”。常用做法本地事务 消息表 Outbox事务消息消费者幂等设计重试 死信队列 补偿任务Kafka 更适合高吞吐日志流、业务事件流RabbitMQ 更适合复杂路由、灵活投递ActiveMQ/JMS 偏传统企业集成。8. Spring Security、JWT、OAuth2、KeycloakSpring SecurityJava 生态里最常见的认证授权框架JWT无状态令牌适合分布式服务OAuth2第三方授权标准协议Keycloak统一身份认证与 SSO 平台典型场景App 登录后拿 JWT 调接口企业内部用 Keycloak 做统一登录不同服务根据权限控制接口访问9. RAG 与 AI 智能客服RAG 的核心不是“让模型更聪明”而是“让模型先看到正确材料”。流程通常是文档加载导入 PDF、Word、网页、FAQ切分按段落、标题、语义切块向量化调用 Embedding 模型生成向量存储放到 Milvus、Chroma 或 Redis 向量库检索通过语义搜索找相关片段生成把检索结果与问题一起交给大模型回答在企业文档问答、智能客服、知识库搜索中这套方案非常常见。10. AI 幻觉的处理模型会“编”所以必须加约束检索增强减少凭空生成提示词限定只能基于知识库回答置信度阈值不足则拒答或转人工FAQ 与规则引擎兜底这就是企业 AI 和“聊天玩具”的最大区别。11. 微服务治理与可观测性微服务不是拆完就结束了真正难的是治理。常见能力注册发现Eureka、Consul网关Zuul 或现代网关方案容错Resilience4j指标Micrometer Prometheus可视化Grafana日志ELK Stack链路追踪Jaeger、Zipkin如果没有这些系统一旦慢了只能靠“感觉排查”。12. WebSocket 和 WebFlux 的适用场景WebSocket适合实时互动、弹幕、在线客服、协作编辑WebFlux适合高并发、非阻塞 I/O 场景比如大量长连接、实时通知在线教育直播间、游戏大厅、虚拟互动空间都可能用到这两类能力。13. 一个完整业务系统的组合思路比如“在线教育 AI 问答”平台可以这样组合登录鉴权Spring Security JWT核心业务Spring Boot Spring MVC实时互动WebSocket异步解耦Kafka缓存Redis数据持久化MyBatis / JPA Flyway / Liquibase监控Micrometer Prometheus GrafanaAI 问答Spring AI RAG 向量数据库这类题面试官真正想看的是你是否能把技术栈和业务场景串起来而不是单点背诵。结语如果把这场面试看成一次实战训练最重要的不是“背了多少框架名”而是能不能把业务说清楚能不能把技术选型说清楚能不能把问题定位思路说清楚小Y虽然有点“水”但至少每轮都在进步。真正的大厂面试也是这样先看基础再看思路最后看你能不能把系统讲成一张完整的图。