互联网大厂Java面试:Spring Boot/Redis/Kafka/K8s 可观测 + RAG(向量检索/Agent)三轮追问实录

张开发
2026/4/18 1:16:17 15 分钟阅读

分享文章

互联网大厂Java面试:Spring Boot/Redis/Kafka/K8s 可观测 + RAG(向量检索/Agent)三轮追问实录
互联网大厂 Java 面试实录Spring Boot Redis Kafka Kubernetes RAG向量检索/Agent三轮追问场景某内容社区与UGC平台近期上线“RAG 智能客服”企业文档问答 工单流转并要求支持高并发、可观测、可灰度。人物面试官M严肃、节奏快、喜欢追问“为什么”。小YY自称“全栈Java”实际有点水但很会搞笑。第一轮Java 基础与 Web 入门3-5问Q1MJava 8/11/17 你最常用哪些新特性在我们“UGC内容审核/客服系统”里会怎么用YJava 8 就是……LambdaStream写起来像在写 SQL挺爽的。Java 11/17……我一般用 8兼容性好。MJava 8 用得熟是好事但别把“只会8”当优点。说说你在代码里怎么落地 Stream 的Y比如把用户列表stream().filter()一下……然后就更优雅了。M还行基础没丢。Q2MSpring MVC 和 Spring WebFlux 有什么区别我们智能客服“长连接/流式输出”该选哪个YMVC 是同步阻塞WebFlux 是……反应式就很快M快不快不是口号。背后模型是什么Y呃……就是 ReactorMono/Flux那种“流”。M回答有点虚但方向对。我们后面会追。Q3MHikariCP 为什么普遍比 C3P0 受欢迎你在 Spring Boot 怎么配置连接池参数Y因为……Hikari 轻量、快配置我一般用spring.datasource.hikari.*。M行能说出关键点。比如连接池满了会怎样Y会……排队M至少知道会阻塞/等待。继续。Q4M如果线上出现“接口偶发超时”你第一步看什么日志怎么打Y我先看 ELK再看日志里有没有 error。日志用 SLF4Jlog.info(xxx {}, id)。M参数化日志不错避免字符串拼接。还可以。第二轮微服务、缓存、消息队列业务递进3-5问业务设定UGC平台的“智能客服”接入站内私信与工单。用户提问后系统要先查缓存命中“常见问题”未命中则走 RAG向量检索 LLM 生成生成结果与引用片段落库异步写入 Kafka 做埋点与质检。Q1M你会怎么设计 Redis 缓存结构避免热点 Key 和缓存穿透Y热点 Key 我就加本地缓存 Caffeine穿透就……加布隆过滤器M不错能说到点上。布隆过滤器怎么落地Y就……Guava 有 BloomFilter放 Redis 也行。M思路可以但细节要补。Q2MKafka 和 RabbitMQ 怎么选我们这里“埋点/质检/回放”更适合哪个YKafka 吞吐高RabbitMQ 延迟低我感觉都行看团队喜好。M皱眉“都行”是面试大忌。说出语义顺序、消费模型、回放、消息堆积。YKafka 可以回放按 partition 顺序RabbitMQ 更像传统队列。M这句对了。Q3M你会如何做微服务间调用OpenFeign Resilience4j 怎么配合YFeign 调用很方便Resilience4j 就是限流熔断降级。我一般加个 fallback。Mfallback 只是表面。重试、超时、隔离、舱壁这些怎么选Y看感觉……哪个报错就加哪个。M嗯开始“凭感觉写代码”了。Q4M数据库层MyBatis 和 JPA/Hibernate 你怎么选RAG 结果落库的表会怎么设计Y复杂 SQL 用 MyBatis简单 CRUD 用 JPA。表设计就question、answer、time。M字段太少。引用片段、模型版本、embedding版本、traceId、反馈标签呢Y啊对对对可以再加。M……第三轮云原生可观测 AI 工程化3-5问业务设定升级RAG 客服上线后出现高峰期 P95 延迟抖动偶发“答非所问”幻觉模型供应商切换OpenAI ↔ Ollama/自建需要对接企业知识库支持文档加载与增量更新Q1MKubernetes 上部署 Spring Boot你会重点关注哪些资源与探针怎么做灰度Y资源就 CPU、内存探针有 liveness、readiness灰度用……分批发布M基本点都对。灰度更细一点Service、Ingress、或者 Service Mesh。你再想想。Y可以用 Kubernetes 的 rollout……或者直接手动M行吧。Q2MPrometheus Grafana Micrometer 你会采哪些指标定位“P95抖动”YJVM 指标、GC 指标、线程池指标……还有接口耗时。M继续。你如何区分是“下游慢”还是“GC慢”还是“连接池耗尽”Y我看图……哪个高就哪个。M过于朴素。Q3M链路追踪 Jaeger/Zipkin 怎么把一次“RAG请求”串起来要打哪些 tagYtraceId 串起来span 里面写“检索”和“生成”。M还不够。向量检索命中数、topK、prompt token、completion token、模型名、温度、知识库版本都要。Y这些也能打吗那我都打上。M……打多了也会贵。Q4M谈谈 RAG 的“文档加载→向量化→语义检索→提示填充→生成→引用校验”。你怎么降低幻觉Y幻觉就……让模型别乱说提示词写严格点。M沉默两秒继续。Y加个“如果不知道就说不知道”。M这是入门级。还可以检索质量、chunk策略、引用强约束、回答后验证、以及 Agentic RAG 的工具执行。Y我回去研究一下。Q5MSpring AI / MCP / 工具调用标准化如果要让客服 Agent “查订单、查物流、建工单”你会怎么设计工具接口Y我就写三个接口给它调……M怎么做权限、审计、幂等、防重复下单Y呃……加 Spring SecurityJWTM至少知道安全框架。细节先到这。面试收尾M今天整体看下来你 Java/Spring 基础还可以场景理解也有但在可观测细化、容灾治理、以及 RAG 工程化细节上比较虚。你回去把这些链路再系统补一下我们会综合评估回家等通知。Y好的好的我回去就把“凭感觉”升级成“凭数据”。文末复盘所有问题的详细答案含业务落地下面按三轮问题逐一给出更“能上生产”的回答小白可按此学习与扩展。第一轮答案Java / Web / 连接池 / 日志A1Java 8/11/17 常用特性与落地Java 8Lambda/Stream用于集合处理、DTO转换、过滤排序。Optional减少空指针但避免滥用不要把 Optional 当字段类型。CompletableFuture并行调用如“FAQ缓存查询 热门知识库检索”可并发。Java 11HttpClient替代老旧 HttpURLConnection微服务一般仍用 OkHttp/Apache HC。String/Collection API 增强。Java 17记录类 record适合不可变 DTO如检索结果、Embedding请求响应。switch 表达式、文本块拼 Prompt 更安全可读。UGC/客服落地示例并行CompletableFuture同时拉取“用户画像/历史工单/常见FAQ”最终合并为提示上下文。A2Spring MVC vs WebFlux流式输出怎么选Spring MVCServlet 模型线程-per-request适合传统 CRUD。Spring WebFlux基于 ReactorMono/Flux非阻塞 I/O适合SSE/WebSocket 流式输出LLM token streaming高并发下减少线程占用但需要全链路非阻塞Netty R2DBC/Reactive Redis等选择建议现有系统若大量阻塞组件JPA/JDBC强上 WebFlux 可能“表面Reactive、内部阻塞”。折中方案核心仍 MVC但对“生成回答”单独做 WebFlux/SSE 网关服务或用异步 Servlet chunked response。A3HikariCP 优势与关键参数优势代码路径短、锁竞争少、性能稳定Spring Boot 默认。关键配置maximumPoolSize并发上限结合 DB 连接限制与QPS评估minimumIdle空闲连接connectionTimeout拿不到连接等待多久避免线程无限挂leakDetectionThreshold连接泄露检测排查未关闭连接现象定位接口超时可能来自连接池耗尽activemaximumPoolSize、慢SQL、事务未提交、连接泄露。A4接口偶发超时的排查与日志规范排查优先级指标P95/P99、线程池/连接池、GC、下游依赖延迟日志是否有超时/重试/熔断链路追踪定位慢在网关、服务、DB、MQ、第三方日志实践统一用SLF4J Logback/Log4j2参数化log.info(orderId{}, id)关键链路打印traceId、用户id、请求耗时、下游耗时、错误码注意脱敏手机号、身份证、token。第二轮答案缓存 / MQ / 微服务治理 / ORM与表设计A1Redis 缓存结构 热点Key 穿透缓存目标FAQ命中、检索结果短缓存、会话上下文。设计Key 设计faq:answer:{normalizedQuery}rag:retrieval:{queryHash}短TTL热点 Key本地缓存 Caffeine Redis 二级缓存热点FAQ可以预热。对极热点可用 Redis Cluster Key hash tag、或拆分多Key。缓存穿透布隆过滤器对“FAQ问题集合/知识库文档id集合”做存在性判断。对确实不存在的请求写入空值缓存短TTL避免重复打DB。缓存击穿互斥锁/单飞SETNX或 Redisson Lock确保同一key回源只发生一次。A2Kafka vs RabbitMQ 的选择埋点/质检/回放Kafka更适合高吞吐日志/埋点消费者组并行消息回放按 offset 重放质检长时间堆积磁盘顺序写RabbitMQ更适合复杂路由topic/headers每条消息确认与低延迟队列语义业务命令型消息更强“队列感”本场景建议埋点、质检、对话回放Kafka。工单创建这类强一致命令可用 RabbitMQ 或事务外盒 DB。A3OpenFeign Resilience4j 的治理组合常见组合Feign声明式HTTP客户端Resilience4jTimeLimiter超时Retry谨慎使用只对幂等GET或可重试错误CircuitBreaker熔断防止雪崩Bulkhead舱壁隔离线程池/信号量隔离RateLimiter限流推荐策略客服RAG检索服务超时短如 200-400ms失败可降级“少量topK”或“只走FAQ”。LLM生成超时较长如 3-10s失败返回“转人工/创建工单”。对下游依赖加 Bulkhead避免生成占满线程池拖垮全站。A4MyBatis vs JPA/HibernateRAG落库表设计选型MyBatis复杂SQL、报表、多表join可控。JPA/Hibernate领域模型清晰、CRUD高效但复杂SQL可能难维护。也可Spring Data JDBC更轻量RAG结果建议表rag_conversation_turnidconversation_id会话user_idquestion_textanswer_textcitationsJSON文档id、chunkId、score、offsetretrieval_topk、hit_countkb_version、embedding_model、llm_model、prompt_versiontoken_prompt、token_completionlatency_ms总耗时分段耗时trace_idfeedbacklike/dislike/标签created_at配套用Flyway/Liquibase管理表结构演进。第三轮答案K8s、可观测、链路追踪、RAG与Agent工程化A1Kubernetes 部署要点 探针 灰度资源requests/limits 合理设置避免 OOMKilled 或 CPU throttlingJVM 参数与容器协同如-XX:MaxRAMPercentage探针readiness依赖就绪DB/MQ连接、缓存预热liveness死锁/假死检测不要把外部依赖失败当liveness失败灰度多 Deploymentv1/v2 Service 按标签切流Ingress/Nginx 按 header/cookie 做灰度或使用 Service MeshIstio做更精细流量治理A2Micrometer/Prometheus 指标定位 P95 抖动必采指标HTTPQPS、P50/P95/P99、错误率JVMGC次数/停顿、堆使用、线程数线程池active、queue size、reject count连接池Hikari active/idle/pending下游依赖HTTP client latency、DB query latency、Kafka produce latency定位方法若 GC pause 与延迟同周期上升调堆、对象分配、缓存结构。若 Hikaripending上升慢SQL/连接泄露/池太小。若下游依赖延迟上升加超时、隔离、熔断、降级。A3Jaeger/Zipkin 链路追踪RAG一次请求的 Span 设计建议 spanhttp:entrycache:faq_getretrieval:vector_searchprompt:renderllm:completionpostprocess:citation_checkdb:save_turnmq:kafka_produce关键 tags选取必要的避免过量conversationId、userIdtopK、hitCount、maxScorekbVersion、embeddingModel、llmModel、promptVersiontokensPrompt、tokensCompletionproviderOpenAI/Ollamafallback是否触发A4RAG 全流程与降低幻觉的工程手段流程文档加载PDF/HTML/Confluence等清洗切分chunk长度、重叠、按标题层级向量化Embedding模型向量库Milvus/Chroma/Redis Vector存储与索引语义检索topK、相似度阈值、混合检索BM25向量提示填充把“引用片段”注入prompt生成LLM引用校验与后处理必须基于引用回答降幻觉检索质量合理 chunk、去噪、增量索引、阈值过滤强约束回答格式要求输出引用id无引用则拒答/转人工回答后验证规则校验是否引用轻量模型/模板校验Agentic RAG当问题需要“查订单/查物流”时先工具调用拿到确定性数据再生成。A5Spring AI / MCP / 工具调用标准化工具接口设计目标让 Agent 安全、可审计、可扩展地调用业务能力。做法工具清单Tool RegistrygetOrderStatus(orderId)trackShipment(trackingNo)createTicket(category, content, attachments)关键工程点鉴权Spring Security OAuth2/JWT工具执行必须带用户上下文审计记录 toolName、参数摘要、结果摘要、traceId、耗时幂等如创建工单用幂等键conversationId turnId权限与风控敏感操作二次确认、限频Resilience4j RateLimiter客户端-服务器架构Agent服务作为客户端业务系统提供工具API或通过 MCP 统一协议暴露学习路线按面试暴露短板补齐JVM/性能GC、线程池、连接池、火焰图微服务治理超时/重试/熔断/隔离/限流的组合策略可观测指标 日志 追踪三件套联动RAG工程chunk/索引/阈值/引用约束/工具调用与审计完

更多文章