互联网大厂 Java 面试实录:Spring Boot、MyBatis、Kafka、Redis、Spring Cloud、JWT、Kubernetes 的三轮追问

📅 2026/8/21 11:45:50
互联网大厂 Java 面试实录:Spring Boot、MyBatis、Kafka、Redis、Spring Cloud、JWT、Kubernetes 的三轮追问
互联网大厂 Java 面试实录Spring Boot、MyBatis、Kafka、Redis、Spring Cloud、JWT、Kubernetes 的三轮追问场景互联网大厂 Java 求职面试业务方向为企业协同与 SaaS 大数据与 AI 服务面试官严肃候选人是搞笑的水货程序员燕双非。面试官今天聊一个 SaaS 平台的核心后端你先说说你在 Java 8/11/17 里平时最常用的是哪个版本为什么燕双非我最常用的是 8因为……大家都在用17 也挺好LTS 吗生命周期长面试时说出来显得很稳。面试官那你说得不算差。Java 17 除了语法层面还有哪些你会关注的点燕双非嗯……比如 GC、性能、还有模块化……再就是一些更现代的语法糖能少写点代码。面试官可以至少方向是对的。那我们进入业务场景。第一轮SaaS 订单与用户体系问题 1如果你负责一个企业协同 SaaS 系统的用户注册接口Spring Boot 里你会怎么组织 Controller、Service、DAO问题 2数据库层你会优先用 MyBatis 还是 JPA为什么如果用户注册要写入多张表你怎么处理事务问题 3为了保证注册接口高并发下不把数据库打爆你会怎么做限流、缓存和连接池优化问题 4如果要把“注册成功欢迎消息”异步发送到消息队列你会选 Kafka 还是 RabbitMQ为什么燕双非Controller 接收参数Service 做业务DAO 负责查库这个比较经典。MyBatis 和 JPA……我都用过一点点MyBatis 更灵活JPA 更省事。事务的话就加个 Transactional基本稳了。限流可以用 Redis缓存一些热点数据连接池我会调大一点别让它太容易满。消息队列嘛Kafka 听起来更大厂吞吐高欢迎消息这种异步场景可以上它。面试官基础结构清楚选型也不算离谱。你至少知道该先保住主链路。再往下问。第二轮认证、风控与服务治理问题 1企业 SaaS 有多租户隔离需求登录后你会如何设计 JWT Spring Security 的认证与授权问题 2如果有一个“审批流服务”需要调用“组织架构服务”你会怎么做服务发现、容错和降级问题 3如果审批服务需要对外暴露 REST API你会怎么设计接口版本、错误码和幂等性问题 4当服务调用变多以后你会如何监控链路、定位慢请求和消息堆积问题燕双非JWT 就是登录后发个 token前端带着走。Spring Security 主要负责拦一下没登录的人。多租户的话我觉得可以把租户信息放到 token 里然后每次查询都带上 tenantId。服务发现嘛Spring Cloud 或者 Eureka 都能搞容错就 Resilience4j失败了就熔断一下。REST API 版本我一般放到 URL 里比如 /v1/。幂等性就是别重复提交。链路监控的话Prometheus、Grafana、Zipkin 这些都挺常见慢请求和消息堆积看一下图就知道了。面试官你这个回答有点“会用名词”但框架思路基本能串起来。尤其是多租户和幂等知道问题在哪值得继续往下聊。第三轮AI 助手与平台化能力问题 1如果 SaaS 平台要加一个“智能客服助手”你会怎么基于 Spring AI、RAG、向量数据库做企业文档问答问题 2如果要做 Agent让它能自动查订单、查工单、查知识库你会怎么设计工具调用和会话记忆问题 3面对 AI 幻觉你怎么在业务上控制风险保证回答尽量可靠问题 4如果这个系统要部署到 Kubernetes并要求支持灰度发布、弹性扩缩容你会怎么配合 CI/CD 做交付燕双非智能客服助手我会先把公司文档、FAQ、工单知识这些做文档加载然后切分、向量化放到 Milvus 或 Redis 这种向量库里。用户提问时先做语义检索再把相关内容拼到提示词里让模型基于资料回答这就是 RAG。Agent 的话可以给它查订单、查工单这些工具带会话记忆避免每次都像失忆一样重新问。AI 幻觉嘛我觉得要尽量让它“有据可依”检索结果不够就直接提示不确定不要瞎编。Kubernetes 部署的话Docker 打包CI/CD 自动构建镜像K8s 做发布和扩缩容灰度可以分流一部分流量稳一点。面试官这轮回答比前面更像干过事的人了。特别是你知道 RAG 的核心是“先检索再生成”也知道不能让模型自由发挥太过头。面试官今天就先到这里你回家等通知吧。详细解析每道问题怎么答一、Spring Boot、MyBatis、Kafka、Redis、事务与连接池1Controller / Service / DAO 分层Controller 负责 HTTP 入参、出参和协议转换Service 承担业务规则、事务控制和领域编排DAO/Mapper 负责持久化访问。SaaS 场景里这一层次非常重要因为后续常会扩展租户隔离、审计日志、审批流等能力分层清晰有利于演进。2MyBatis vs JPAMyBatis 更适合复杂 SQL、强控制力和性能调优JPA 更适合领域模型清晰、CRUD 占比较高的场景。企业协同 SaaS 常常存在多表联查、动态查询、报表统计因此 MyBatis 很常见。若用 JPA也要理解懒加载、脏检查和级联的影响。3事务处理注册时写用户表、租户表、角色表等一般在 Service 层加 Transactional保证同一事务边界内要么全部成功要么全部回滚。分布式场景下如果跨服务就不能只靠本地事务需要考虑最终一致性、消息事务或 Saga。4限流、缓存、连接池高并发注册接口可以使用 Redis 做验证码、频次限制和热点数据缓存接入网关做限流数据库侧通过 HikariCP 调整连接池大小、超时和泄漏检测。核心原则不是“调大就行”而是根据 CPU、数据库承载和请求模式综合压测。5Kafka / RabbitMQ 选型欢迎消息、用户行为埋点、日志汇聚这类吞吐优先的场景Kafka 很合适而订单状态变更、任务路由、需要更灵活路由能力的业务RabbitMQ 常更合适。面试时最好结合业务说而不是只说“哪个更火”。二、JWT、Spring Security、Spring Cloud、Resilience4j、API 设计与监控1JWT Spring Security登录后签发 JWT把用户身份、租户 ID、角色、权限摘要等放入 token claims 中。请求进入后由过滤器解析 token构造 Authentication 放入 SecurityContext。多租户隔离不能只靠前端传参最好由后端从 token 中取租户上下文并贯穿到查询层。2服务发现与容错Spring Cloud 体系下可以通过注册中心做服务发现调用方通过服务名访问服务实例。Resilience4j 用于熔断、限流、隔离和重试避免下游异常级联扩散。这里的重点是“保护系统整体稳定”不是单个请求一定成功。3REST API 设计版本号可放在 URL 或 Header 中通常企业内部更常见 URL 方式便于演进。错误码要体系化区分参数错误、权限不足、资源不存在、系统异常。幂等性尤其重要比如创建审批单、提交订单建议通过业务唯一键、幂等 token 或数据库唯一约束来兜底。4监控与链路追踪Prometheus 负责采集指标Grafana 负责可视化Zipkin/Jaeger 负责分布式链路追踪Micrometer 负责统一指标采集埋点。排查慢请求时先看接口耗时分布再看下游依赖耗时最后定位是 SQL、缓存、网络还是线程池问题。消息堆积则看消费速率、分区、消费者数量和处理耗时。三、Spring AI、RAG、Agent、向量检索、Kubernetes 与 CI/CD1企业文档问答核心链路通常是“文档加载 → 切分 → 向量化 → 入库 → 语义检索 → 组装上下文 → 大模型生成”。向量数据库可以是 Milvus、Chroma 或 Redis Vector。关键不是把所有文档都塞给模型而是先检索最相关的片段再让模型回答这样能提升准确率并降低成本。2Agent 与工具调用Agent 不是单纯聊天而是能根据任务决定调用什么工具。比如“查我的审批进度”它先识别意图再调用工单系统、订单系统、知识库接口最后组合结果回答。会话记忆用于保留上下文工具执行框架则负责标准化输入输出和权限控制。3AI 幻觉治理最常见的做法是加强检索质量、限定回答范围、加入引用来源、对关键结论做规则校验并在低置信度时明确提示“不确定”。在企业场景里宁可少答也不要瞎答。尤其是客服、财务、医疗、合同等领域幻觉风险必须控制。4Kubernetes CI/CDDocker 负责镜像构建Jenkins/GitHub Actions/GitLab CI 负责编译、测试、制品生成和发布Kubernetes 负责部署、扩缩容、滚动更新和故障自愈。灰度发布通常通过 Service、Ingress、Istio 或流量分配策略实现。对于 SaaS 平台这种方式能显著降低发布风险。四、面试表达建议面试中回答技术题最好的方式是“先说结论再说理由再结合业务场景”。比如“这个场景我会优先用 MyBatis因为这里有多表查询和复杂条件事务放在 Service 层保证注册流程一致性异步通知用 Kafka 处理避免阻塞主链路。”这种回答比单纯堆概念更容易拿分。感谢阅读希望这篇互联网大厂 Java 面试实录能帮助到你在真实面试中少一点慌张多一点底气顺利拿到心仪 offer。