ARTICLE DETAIL

资讯详情

深耕商务建站与企业官网运营的一线实战洞察。

宠物经济大厂Java面试实录:JDK17、Redis分布式锁、Kafka订单削峰、Seata分布式事务、Spring AI+RAG智能养宠助手,谢飞机三轮被虐哭(附完整答案解析)

宠物经济大厂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幻觉只能缓解不能消除面试答这句最加分彩蛋据说谢飞机三个月后靠这份答案解析入职了竞品宠物公司工牌上写着「等通知侠」。
返回列表
PREV
查看更多资讯
NEXT
返回资讯列表