大厂Java面试实录:Spring Boot/Cloud、Kafka、Redis、K8s 与 Spring AI(RAG/Agent)三轮连环问

张开发
2026/6/17 15:48:19 15 分钟阅读
大厂Java面试实录:Spring Boot/Cloud、Kafka、Redis、K8s 与 Spring AI(RAG/Agent)三轮连环问
大厂Java面试实录Spring Boot/Cloud、Kafka、Redis、MySQL、K8s 与 Spring AI(RAG/Agent) 连环问故事背景你面前坐着两个人面试官严肃版互联网大厂内容社区 音视频 AIGC 平台的后端负责人。小Y搞笑版水货程序员自称“全栈微服务架构师”简历上写满 Spring 全家桶、Kafka、K8s、Spring AI。业务场景公司做一个内容社区 UGC 短视频平台新增AIGC 智能创作/智能客服能力。你小Y应聘 Java 后端。第一轮基础到进阶从单体到微服务的落地Q1如果用 Spring Boot 做内容发布服务你会怎么拆模块面试官内容发布图文/视频、审核、推荐、用户关系、通知这些怎么拆小Y呃……就按“一个功能一个服务”拆嘛。比如发帖一个服务点赞一个服务……拆得越细越好微服务就是要“微”。面试官你这说法有点危险。继续。Q2内容发布写 MySQL如何保证“写入成功但消息没发出去”的一致性面试官发布成功要通知粉丝、触发审核、写 ES 索引。你怎么保证不丢小Y用事务啊MySQL 事务提交就说明都成功了……消息队列也放事务里提交就行。面试官眉毛动了一下队列事务你具体怎么做小YKafka……它不是有事务吗反正配一下就好了。Q3你会用 Redis 做什么怎么避免缓存穿透/击穿/雪崩面试官热点视频详情、评论数、点赞状态。小YRedis 就是缓存嘛。穿透的话……加个布隆过滤器击穿就加锁雪崩就随机过期时间。面试官点头这题回答不错能落地。Q4连接池为什么大厂普遍用 HikariCPC3P0 为什么不推荐小YHikariCP 快C3P0 慢……大概是这样。面试官还有呢小Y嗯……Hikari 名字比较酷。面试官忍住笑行先过。第二轮分布式与可观测性微服务上线后的“挨打”问题Q1Kafka 用在“发布事件流”里你怎么设计 Topic、分区、消费组面试官发布事件要保证同一内容的事件顺序。小YTopic 就叫content_publish分区越多越好消费组随便起保证顺序的话……Kafka 天生有序吧面试官你确定“天生有序”小Y至少……听起来有序。Q2微服务调用链路很长怎么做超时、重试、熔断、限流面试官OpenFeign Resilience4j 你会怎么配小Y超时就……配个超时。重试就多试几次熔断就是断掉限流就是限一下。面试官有没有更具体的策略例如幂等、退避、隔离小Y幂等就是“不要重复”退避就是“慢一点”隔离就是“分开”。面试官沉默两秒……Q3你们用 K8s 部署 Spring Boot如何优雅停机避免请求丢失小YK8s 会帮我们停的。要优雅就……kill -9不优雅kill比较优雅面试官你说的是进程信号和 readiness/liveness、preStop、grace period 有关系。小Y对对对就是那个……readiness读一读就好了。Q4监控怎么做Micrometer Prometheus Grafana 你能讲一下链路吗小YMicrometer 采集指标Prometheus 拉Grafana 画。面试官哪些指标你会重点看小YCPU、内存、还有……幸福指数。面试官点头至少方向对。第三轮AI 业务落地AIGC创作与智能客服Q1你要做“企业文档问答 客服”RAG 的完整链路是什么面试官从文档到回答讲清楚。小YRAG 就是“先查再答”。先把文档丢进去然后大模型就会了。面试官向量化、切分、Embedding、向量库、召回、重排、提示填充、引用来源、会话内存呢小Y这个……都可以用 Spring AI 一把梭配置一下application.yml。Q2如何降低 AI 幻觉Hallucination小Y让它别胡说。面试官技术手段小Y给它加一个“请不要胡说”的提示词。面试官……Q3Agent智能代理和传统 RAG 有什么区别什么时候用 Agentic RAG小YAgent 就是更智能的 RAG能自己想办法。什么时候用……想用的时候用。面试官如果要“查订单状态 退款规则 触发工单”你会怎么编排工具小Y用一个超级方法doAll()。Q4AI 服务如何做权限与审计OAuth2/JWT/Keycloak 怎么选小YJWT 就是 tokenOAuth2 就是登录Keycloak 是个 UI……都可以用。面试官那审计怎么落日志脱敏怎么做小Y打日志的时候……把密码打成***。结束语面试官今天先到这里。你回去等通知吧我们 HR 会联系。小Y好的好的我等“热通知”最好带高薪那种。面试题详细答案与小白学习版解析按业务链路串起来下面把每一轮的问题按“内容社区 音视频 AIGC”的业务链路补齐标准答案与可落地做法。第一轮答案服务拆分、数据一致性、缓存、连接池1内容发布服务怎么拆Spring Boot Spring Cloud 常见边界业务目标发布内容会触发审核、分发、推荐、通知、索引等。建议拆分思路不是越细越好而是围绕边界与团队协作内容域 Content Service内容元数据标题、正文、作者、可见性、状态、发布/下架。媒体域 Media Service视频转码、封面截图、音视频存储地址、CDN 分发。审核域 Audit Service机审/人审状态流转。互动域 Interaction Service点赞/收藏/评论计数与明细。关系域 Relation Service关注/粉丝。通知域 Notify Service站内信/推送。搜索域 Search ServiceES 索引构建与查询。推荐域 Recommend Service召回/排序/策略。落地原则先从“模块化单体”或“少量粗粒度服务”起步再按瓶颈拆。以数据所有权划分一个服务拥有自己的库表Database per service避免跨服务写。以变更频率与扩展性划分视频转码、推荐通常独立扩缩容。2MySQL 写成功但消息没发出去如何保证一致性问题本质本地事务MySQL与外部系统Kafka/ES/通知之间的分布式一致性。常见可落地方案Outbox Pattern推荐同一个 MySQL 事务里写业务表content写 outbox 表event_outbox记录事件 payload、状态事务提交后由异步任务/CDC如 Debezium把 outbox 事件投递到 Kafka。投递成功后更新 outbox 状态。Kafka 事务可用但要谨慎Kafka 事务解决的是Kafka 生产者多分区/消费-生产的 exactly-once 语义。但它不能把 MySQL 本地事务纳入同一分布式事务。因此仍需要 Outbox/补偿机制。最终一致性 幂等消费允许短时间不一致但下游必须可重试、可补偿。消费端以业务 keycontentId eventId做幂等Redis/DB 去重表。3Redis 缓存怎么用穿透/击穿/雪崩怎么防业务例子视频详情页 QPS 高MySQL 扛不住。缓存穿透请求不存在的数据绕过缓存直击 DB布隆过滤器Bloom Filter先判断 key 可能存在再查缓存/DB。缓存空对象对不存在的 ID 缓存短 TTL 的空值。缓存击穿热点 key 过期瞬间大量请求打到 DB互斥锁/单飞用 RedisSETNX或本地锁只有一个线程回源构建缓存。逻辑过期缓存不过期值里带过期时间后台异步刷新。缓存雪崩大量 key 同时过期或 Redis 故障TTL 加随机抖动。多级缓存Caffeine本地 Redis分布式。限流/降级例如只返回基础信息。可配合Spring Cache统一注解与缓存管理但要自己设计 key、TTL、穿透策略。4HikariCP 为什么更常用关键点性能与稳定性HikariCP 以轻量、高性能著称C3P0 历史包袱较多。更合理的超时控制连接获取超时、连接泄漏检测leakDetectionThreshold。与 Spring Boot 默认集成Spring Boot 2 默认优先 HikariCP运维经验丰富。第二轮答案Kafka 设计、韧性治理、K8s 优雅停机、可观测性1KafkaTopic/分区/消费组怎么设计如何保证“同一内容事件有序”核心结论Kafka只保证“同一分区内有序”。设计方法Topiccontent-events按领域事件命名。分区数根据吞吐预估与扩展选择例如 12/24并留余量。key 选择用contentId作为消息 key确保同一 contentId 的事件落到同一分区从而保持顺序。消费组审核服务一个组AuditGroup索引服务一个组SearchGroup通知服务一个组NotifyGroup 这样每个下游都能独立消费一份。幂等与重复消费Kafka 至少一次语义下要考虑重复消费端用 eventId 去重。2OpenFeign Resilience4j超时/重试/熔断/限流怎么配才“像大厂”原则先超时再重试重试要谨慎否则放大雪崩。GET/查询类可重试下单/扣款等写操作必须幂等幂等键。重试用指数退避Exponential Backoff 抖动。熔断CircuitBreaker下游持续失败时快速失败保护线程资源。隔离线程池/信号量隔离Bulkhead避免一个下游拖死全局。限流对外接口做 RateLimiter对内关键资源也可限。落地Feign 设置连接/读超时。Resilience4j 在方法或 Feign Client 上挂装饰器Retry CircuitBreaker TimeLimiter Bulkhead。3K8s 部署 Spring Boot如何优雅停机目标Pod 下线时不丢请求、不产生半处理。关键点Spring Boot 开启graceful shutdownBoot 2.3。K8sreadinessProbe收到 SIGTERM 前/后要快速变为 not ready停止接新流量。preStophook给应用一点时间摘流。terminationGracePeriodSeconds给足优雅退出时间。业务侧消费者Kafka/RabbitMQ在 shutdown 时停止拉取并提交 offset。长事务/长请求设置上限。4Micrometer Prometheus Grafana该看哪些指标建议按RED/USE方法HTTPRRateQPSEErrors4xx/5xx 比例DDurationP95/P99 延迟JVM堆内存、GC 次数/耗时、线程数、类加载。DB连接池使用率、等待时间、慢 SQL。MQ消费延迟lag、堆积量、失败率。链路追踪Zipkin/Jaeger日志ELK指标Prometheus。第三轮答案Spring AI、RAG、Agentic RAG、权限审计与反幻觉1RAG 完整链路企业文档问答/客服业务目标客服回答必须“有依据、可追溯”。完整链路文档加载PDF/Word/网页/知识库Spring AI DocumentLoader。清洗与切分按段落/标题切 chunk控制长度保留结构。向量化Embedding调用 OpenAI/Ollama 等 embedding 模型把 chunk 转成向量。写入向量数据库Milvus/Chroma/Redis Vector 等保存向量 元数据来源、页码、权限标签。查询时语义检索用户问题 embedding → 向量召回 TopK。可选重排 rerank用交叉编码器或 LLM 重排提升相关度。提示填充Prompt Template把“问题 召回片段 规则必须引用来源/不确定就说不知道”拼装。生成回答LLM 输出。引用与可追溯返回引用片段/文档链接。会话内存保存上下文但要防止把错误信息带入。2降低 AI 幻觉Hallucination的工程手段可落地组合拳基于检索的约束回答必须基于检索片段提示中强制“仅依据上下文”。置信度门控召回相似度低于阈值 → 直接拒答/转人工。引用校验要求模型输出引用编号后处理校验引用是否存在。结构化输出用 JSON Schema/函数调用约束输出格式。多模型或自检让另一个模型进行事实一致性检查。敏感场景医疗/金融必须加入规则引擎、黑白名单、人工兜底。3Agent vs RAG什么时候用 Agentic RAG传统 RAG一次检索 一次生成适合“问答”。Agent能够规划步骤并调用工具查库、查订单、发工单、调用搜索、二次检索。适用场景多步任务“查订单状态 → 判断是否可退 → 生成退款说明 → 创建工单 → 通知用户”需要在多个系统之间编排订单服务、工单系统、规则中心。工程化要点工具调用标准化函数签名/JSON Schema。权限控制Agent 调用工具必须鉴权、审计。失败回退某一步失败要能停止并给出可解释反馈。4AI 服务权限与审计OAuth2/JWT/Keycloak 怎么选JWT适合无状态鉴权与微服务间传递身份注意过期、吊销策略。OAuth2/OIDC标准授权框架适合第三方登录/统一身份。Keycloak成熟的 IAM身份与访问管理产品提供 OAuth2/OIDC、用户/角色/租户管理、SSO。审计与脱敏审计日志记录谁userId/tenant在什么时间调用了哪个模型/工具输入输出摘要耗时与成本。PII 脱敏手机号/身份证/地址在日志与向量库元数据中脱敏或加密。加密可用 Bouncy Castle 做加解密/签名能力扩展。给小白的学习路线按面试这套链路Spring Boot MVC能写出发布接口MySQL 索引 事务 Outbox 最终一致性Redis 缓存策略三大问题Kafka分区有序、幂等、消费组Spring Cloud/OpenFeign Resilience4j治理K8s 基础readiness/liveness/优雅停机可观测性Micrometer Prometheus Grafana ELK/JaegerSpring AIRAG 链路、向量库、反幻觉、Agent 工具编排

更多文章