宠物经济大厂Java面试实录:JDK17、Redis分布式锁、Kafka订单削峰、Seata分布式事务、Spring AI+RAG智能养宠助手,谢飞机三轮被虐哭(附完整答案解析)
宠物经济大厂Java面试实录JDK17、Redis分布式锁、Kafka订单削峰、Seata分布式事务、Spring AIRAG智能养宠助手谢飞机三轮被虐哭附完整答案解析场景设定公司宠物经济独角兽「萌宠星球」——宠物电商、宠物医疗、宠物社区、智能养宠硬件四轮驱动注册用户8000万、日订单1000万单、宠物主粮大促峰值每秒80万单。业务链路注册登录 → 创建宠物档案 → 浏览主粮/零食/玩具 → 下单支付 → 智能分仓发货 → 宠物在线问诊 → 社区晒宠 → AI养宠助手喂食建议/体检报告解读/医疗问答贯穿全程。第一轮·筑基期核心语言与平台、构建工具、ORM与连接池老K严肃面试官你好谢飞机同学。先聊聊技术选型我们线上服务是Spring Boot 3.x你来说说JDK 8/11/17的区别为什么必须上17谢飞机JDK 8是经典老干妈11是保温杯17是……折叠屏17就是“一起发”嘛寓意好大家涨薪一起发至于区别……嗯8有Lambda和Stream17有……有更贵的授权费老K血压升高……那JVM运行时内存分区你总该知道吧谢飞机堆、栈、还有那个……元宇宙空间对元空间就是元宇宙空间类元数据都放那儿老K……如果线上OOM了你怎么排查谢飞机重启大法先重启不行就加内存256G拉满再不行就换电脑我们之前项目都是这么干的物理重启专治各种疑难杂症老K扶额……那Maven依赖冲突呢谢飞机谁报错就删谁删了还报错就换版本换到不报错为止。实在不行把同事的本地仓库也删了大家同归于尽老K……行吧。那聊聊ORM我们订单表数据量很大你用MyBatis还是JPA谢飞机MyBatisJPA一时爽排查火葬场。写SQL咱心里有底MyBatis还能用动态SQL就是SQL要自己手写但咱不怕老K嗯这点你倒是说对了。那连接池呢为什么用HikariCP而不是C3P0谢飞机名字短加载快C3P0一听就像科幻电影里的机器人HikariCP听着就很快像博尔特还是日本名字看着就卷老K难得点头虽然比喻离谱但结论正确。第二轮·历劫期缓存、分布式锁、消息队列、分布式事务老K我们大促时主粮商品会被瞬间秒光说说缓存穿透、击穿、雪崩怎么处理谢飞机这个我会口诀防空、加锁、错峰穿透就是查了个不存在的key布隆过滤器挡在前面“防空”击穿是热点key过期一瞬间互斥锁“加锁”顶上雪崩是大面积key同时过期过期时间加随机值“错峰”老K不错这次背得挺熟。那库存扣减你怎么保证不超卖谢飞机用Redissetnx锁抢到锁就扣库存……嗯还要记得finally里释放锁再给锁设个过期时间防止死锁老K那你锁过期了怎么办业务还没执行完锁就被释放了别的线程进来了怎么办谢飞机啊这……那就再抢一次不行就……让楼下那条大黄狗看着锁谁也不能动老K……那是看门狗机制WatchDog不是真的狗还有你setnx只设值不设过期时间宕机了锁就永远不释放了。谢飞机哦哦对要SET key value NX EX 30这种原子操作老K那Kafka怎么保证消息不丢失谢飞机大厂产品不会丢的Kafka是King王者不丢王冠老K……生产者acksall、副本min.insync.replicas、消费者手动提交幂等三环节一个都不能少。谢飞机哦对对对我就是这个意思老K下单要扣库存、减优惠券、生成订单三个服务跨库操作怎么保证一致性谢飞机撒海盐Seata往数据库里撒一把海盐就一致了它有四种模式海盐味、烧烤味、番茄味、原味……老K……是AT、TCC、SAGA、XA四种模式行了进第三轮吧。第三轮·飞升期WebSocket、可观测性、Spring AI全家桶老K我们宠物社区有百万用户同时在线的实时消息WebSocket怎么撑住百万连接谢飞机for循环挨个发消息啊连上就存起来有消息就遍历一遍全发出去100万连接就for循环100万次很快的老K深吸一口气……那是O(n)灾难要用NettyChannelGroup管理连接消息通过Redis Pub/Sub广播。老K系统出问题怎么快速定位谢飞机这个我会Prometheus收集指标、Grafana画大盘、ELK存日志、Jaeger/Zipkin做链路追踪指标、日志、链路三件套比福尔摩斯还神老K难得利索一次。最后一个方向我们要做AI养宠助手怎么用Spring AI谢飞机ChatClient跟JdbcTemplate一个味儿写起来倍儿亲切老K用户问“我家猫一天吃多少粮”模型不知道你家猫的体重怎么办谢飞机RAG先搜后答把宠物档案、喂养手册、药品说明书都切块向量化存进向量数据库用户提问先做语义检索再把检索结果塞给大模型让它基于资料回答老K不错。向量数据库你选什么谢飞机Milvus社区大、性能强小规模就用Chroma想要简单还能用Redis Stack一个Redis全搞定老K那AI怎么调用我们现有的库存查询、疫苗预约接口谢飞机MCP模型上下文协议AI界的USB-C把工具标准化注册进去大模型想调哪个插哪个即插即用老K那如果用户问的是多轮复杂问题比如“我家狗吐了附近哪家医院能看帮我预约”普通RAG够吗谢飞机不够要Agentic RAGAI侦探模式先检索宠物症状资料判断紧急程度再调用地图服务找医院再调预约接口下单一步步推理、一步步调工具跟破案一样老K那AI会不会瞎编答案比如把狗粮推荐成猫粮谢飞机AI幻觉嘛只能缓解不能消除得靠RAG给资料兜底、提示词约束、答案引用溯源、人工审核兜底多管齐下老K……虽然中间有不少离谱发言但最后AI这块答得还行。谢飞机那我能入职了吗老K回去等通知吧。谢飞机好嘞这是我集齐的第七张“等通知”卡片了再集两张就能召唤神龙了 文末答案解析小白学习版16大考点1. JDK 8/11/17特性对比与选型| 版本 | 关键特性 | 定位 | |------|---------|------| | JDK 8 | Lambda、Stream、Optional、新日期API | 经典老干妈LTS | | JDK 11 | 局部变量var、ZGC试验、HttpClient | 保温杯LTS | | JDK 17 | 密封类、ZGC成熟、Spring Boot 3.x强制要求 | 折叠屏最新LTS |选型逻辑Spring Boot 3.x/Spring Framework 6 基于Jakarta EE 9最低要求JDK 17。新项目直接17老项目至少规划升级到11。2. JVM内存分区与OOM排查堆对象实例新生代Eden两个Survivor老年代栈线程私有存局部变量、方法调用栈StackOverflowError在这方法区/元空间类元数据、常量池OOM时元空间报“Metaspace”程序计数器、本地方法栈小角色OOM排查四板斧jps找PIDjmap -dump:formatb,fileheap.hprof PID导堆jstack PID看线程栈MAT分析大对象/泄漏点3. Maven/Gradle依赖冲突冲突原因不同依赖传递引入同一坐标不同版本。解决四板斧mvn dependency:tree看依赖树找到冲突路径exclusion排除统一用BOMBill of Materials管理版本规则就近原则 先声明者优先必要时显式声明版本4. MyBatis vs JPA HikariCPMyBatis手写SQL灵活可控适合复杂查询、大数据量、DBA强管控场景订单/报表JPA/Hibernate对象映射省代码适合CRUD密集型但复杂查询容易N1、SQL不可控口诀JPA一时爽排查火葬场调侃实际按场景选HikariCP为什么快FastList替代ArrayList优化get/remove性能ConcurrentBag无锁化借还连接比锁队列更高效字节码精简、无反射开销5. 缓存穿透/击穿/雪崩| 问题 | 现象 | 解法 | |------|------|------| | 穿透 | 查不存在的key打爆DB | 布隆过滤器 空值缓存 | | 击穿 | 热点key过期瞬间 | 互斥锁 逻辑过期 | | 雪崩 | 大量key同时过期 | 过期时间加随机值 多级缓存 |口诀防空、加锁、错峰6. Redis分布式锁三大坑没设过期时间→ 宕机锁永不释放 → 必须SET key value NX EX 30原子操作锁被误删→ 线程A锁过期线程B拿到锁A执行完把B的锁删了 →value用UUID标识删除前Lua脚本校验锁过期业务没执行完→ 用Redisson看门狗WatchDog默认每10秒续期到30秒业务结束自动释放7. Kafka消息不丢失三环节生产者acksall所有副本确认 重试机制Brokermin.insync.replicas最小同步副本数 副本机制消费者手动提交offset 消费成功后提交 幂等消费唯一业务ID去重8. 分布式事务四方案| 方案 | 原理 | 适用 | |------|------|------| | XA/2PC | 数据库层两阶段提交 | 强一致、低并发 | | TCC | Try-Confirm-Cancel 业务补偿 | 高并发、业务可拆分 | | 可靠消息 | 本地消息表 MQ最终一致 | 异步链路、容忍延迟 | | Seata AT | 自动生成回滚SQL | 透明无侵入最常用 |9. 注册中心CAP对比EurekaAP服务注册Netflix OSSNacosAP/CP可切换配置中心注册中心中文文档全国内主流ConsulCP一致性更强自带KV存储10. WebSocket百万连接架构NettyNIO高并发网络框架单机可扛几十万连接ChannelGroup统一管理连接广播O(1)级别粘性会话保证同一用户连接同一节点Redis Pub/Sub跨节点广播一个节点发消息所有节点同步推送心跳机制定期ping/pong清理死连接千万别for循环挨个遍历百万连接发消息O(n)灾难11. 可观测性三件套指标Prometheus采集 Grafana可视化QPS、RT、GC、CPU日志SLF4J Logback/Log4j2 ELKElasticsearchLogstashKibana链路Micrometer Jaeger/Zipkin 实现分布式链路追踪一次请求全链路打点12. Spring AI核心能力ChatClient统一对话API跟JdbcTemplate一样简洁EmbeddingModel文本向量化OpenAI/Ollama本地模型Function Calling让模型调用Java方法查库存、预约、下单ChatMemory聊天会话内存多轮对话上下文Advisors提示词填充、RAG检索增强、安全校验等横切逻辑13. RAG离线/在线双阶段离线阶段文档加载 → 切分chunk → Embedding向量化 → 存入向量数据库Milvus/Chroma/Redis Stack在线阶段用户提问 → 向量化 → 语义检索TopK → 拼接上下文 → 大模型生成答案带引用价值解决AI幻觉、知识时效性、企业私有知识库问答14. 向量数据库选型| 库 | 特点 | 场景 | |----|------|------| | Milvus | 分布式、十亿级、性能强 | 大规模生产 | | Chroma | 轻量、嵌入式 | 原型/小规模 | | Redis Stack | 复用Redis、简单 | 中小规模、已有Redis |15. MCP A2A Agentic RAGMCP模型上下文协议AI界的USB-C统一工具调用标准客户端-服务器架构三大原语工具/资源/提示解决“每个AI接一套API”的碎片化A2AAgent-to-Agent智能体之间互相通信协作Google提出Agentic RAG vs 普通RAG普通RAG“搜一次答一次”Agentic RAG是ReAct循环ReasonAct——先推理需要什么信息检索调工具再推理再行动直到完成复杂任务如“狗吐了→查资料→找医院→预约”多步流程16. AI幻觉本质与缓解本质大模型本质是概率生成没有真实世界校验会“一本正经地胡说八道”。六大缓解手段RAG检索增强给资料兜底提示词约束“不知道就说不知道”答案引用溯源标注来源温度参数调低减少发散人工审核兜底高敏场景模型微调/持续更新划重点AI幻觉只能缓解不能消除面试答这句最加分彩蛋据说谢飞机三个月后靠这份答案解析入职了竞品宠物公司工牌上写着「等通知侠」。

相关新闻

scrcpy 投屏指南:三步实现电脑控制手机的快速无缝互联

scrcpy 投屏指南:三步实现电脑控制手机的快速无缝互联

scrcpy 投屏指南:三步实现电脑控制手机的快速无缝互联 【免费下载链接】scrcpy Display and control your Android device 项目地址: https://gitcode.com/GitHub_Trending/sc/scrcpy 会议刚开场,手机突然弹出一连串通知,你想当场演示…

2026/10/20 13:19:41 阅读更多 →
车联网大厂Java面试实录:JDK17、Redis分布式锁、Kafka车辆数据削峰、Seata分布式事务、Spring AI+RAG智能车主助手,谢飞机三轮被虐哭(附完整答案解析)

车联网大厂Java面试实录:JDK17、Redis分布式锁、Kafka车辆数据削峰、Seata分布式事务、Spring AI+RAG智能车主助手,谢飞机三轮被虐哭(附完整答案解析)

车联网大厂Java面试实录:JDK17、Redis分布式锁、Kafka车辆数据削峰、Seata分布式事务、Spring AIRAG智能车主助手,谢飞机三轮被虐哭(附完整答案解析) 一、面试场景设定 公司:车联网独角兽「智驾云」 业务:智…

2026/10/19 11:53:21 阅读更多 →
信创深水区:国产化即时通讯为何成安全合规短板

信创深水区:国产化即时通讯为何成安全合规短板

信创深水区:国产化即时通讯为何成了安全合规的“补课生” 信创替代推进到今天,早已不是“用不用”的选择题,而是“怎么用才不出事”的生存题。当OA、ERP、邮箱先后完成国产化替换,运维安全负责人猛然发现,最容易被忽视…

2026/10/19 11:53:06 阅读更多 →

最新新闻

多格式票据识别系统设计与深度学习落地实践

多格式票据识别系统设计与深度学习落地实践

发票识别这个事儿,听起来好像就是个“拍照→出结果”的小工具,但真正在业务里跑过一圈的人都知道,它是个典型的“看着简单、做起来全是坑”的工程问题。尤其是当票据来源一多——纸质发票、电子发票、PDF打印件、拍照件、扫描件、甚至带水印和…

2026/10/20 13:22:17 阅读更多 →
链接器与静态库:按需提取与命令行顺序的完整规则解析

链接器与静态库:按需提取与命令行顺序的完整规则解析

如果你写过C程序,大概率被这样的报错折磨过:代码编译全过,最后链接阶段跳出一排“undefined reference to xxx”。我的第一反应永远是“漏了个-l”,可有一次为了修复某个构建问题,把-l加了又删、删了又加,折…

2026/10/20 13:22:17 阅读更多 →
Spring Boot健康检查:用Actuator告别端口探测假死

Spring Boot健康检查:用Actuator告别端口探测假死

前言:如果还在用端口判断服务“活着”,迟早要背锅先讲一个我亲眼见过的线上事故。某天深夜,一个核心服务集群的CPU被打满,进程还挂着,端口也正常,但所有请求都卡在连接池里超时。监控面板上一切绿油油&…

2026/10/20 13:22:17 阅读更多 →
AST反混淆:精准还原JavaScript成员表达式字符串拼接

AST反混淆:精准还原JavaScript成员表达式字符串拼接

1. 项目概述:当JavaScript代码被压缩成“天书”,我们如何找回可读的逻辑?你有没有遇到过这样的场景:接手一个维护多年的前端项目,打开源码一看,满屏是_0x4a7f[\x63\x6f\x6e\x73\x74\x72\x75\x63\x74\x6f\x7…

2026/10/20 13:22:17 阅读更多 →
LiteLLM模型分层路由实战:让大模型调用成本降90%

LiteLLM模型分层路由实战:让大模型调用成本降90%

先说一件最近发生在我自己项目里的事。某天我习惯性去后台拉了一下模型调用账单,发现光是一个自动摘要功能,一个月居然烧掉了六位数(单位是分)。点开日志一看,80%的请求都是那种输入很长、输出很短、逻辑简单的“体力活…

2026/10/20 13:22:17 阅读更多 →
Linux桌面路径中文化陷阱与XDG英文目录标准化方案

Linux桌面路径中文化陷阱与XDG英文目录标准化方案

1. 项目概述:为什么Linux桌面用户总在“文档”“下载”文件夹上栽跟头?你刚装好一个主流Linux发行版,比如某国产桌面系统或某国际知名社区版,登录进去,桌面干干净净,文件管理器打开一看——左侧边栏赫然列着…

2026/10/20 13:21:15 阅读更多 →

日新闻

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →
ESP32舵机控制指南:原理、多路驱动与避坑实战

ESP32舵机控制指南:原理、多路驱动与避坑实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →
位移法实现一阶低通滤波:单片机ADC采样降噪实战

位移法实现一阶低通滤波:单片机ADC采样降噪实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/20 10:02:13 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/19 17:32:41 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/20 2:50:50 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 10:02:08 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 9:50:17 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 9:50:45 阅读更多 →