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智能客服谢飞机三轮被虐哭附完整答案解析故事背景公司电商独角兽「星辰商城」——服饰、3C、美妆、生鲜、跨境五大品类。体量注册用户3亿、日活8000万、日订单5000万单、双11/618大促峰值每秒100万笔订单请求。业务链路注册登录 → 商品浏览 → 加购 → 下单 → 支付 → 库存扣减 → 订单履约 → 物流发货 → 售后维权 → AI智能客服助手。人物严肃面试官老K十年架构师VS 搞笑水货程序员谢飞机简历写“精通高并发”实际全靠背八股。第一轮·筑基期JVM / 构建工具 / ORM老K推了推眼镜先聊聊技术选型。我们星辰商城核心服务已经全面升级到JDK 17你知道我们为什么选17而不是8或者11吗谢飞机因为……17的谐音是“一起发”招我进来大家一起发财老K嘴角抽搐……说人话。谢飞机哦因为17是LTS长期支持版本而且JDK 9开始引入模块化JDK 14开始有recordJDK 15有密封类JDK 17把这些都正式稳定了还引入了ZGC和虚拟线程的预览配合Spring Boot 3.x必须用17以上所以选17最稳老K点头不错总算有点东西。那JVM内存分区你讲一下Metaspace是干嘛的谢飞机JVM内存分为堆、虚拟机栈、本地方法栈、程序计数器、方法区。Metaspace就是……元宇宙空间放各种虚拟世界的类老K血压飙升Metaspace是元空间不是Metaverse元宇宙它用来存放类的元数据JDK 8以后取代了永久代用的是本地内存谢飞机对对对反正就是装类的地方OOM的时候我一般先重启不行就加内存256G拉满老K扶额你是网吧网管吗生产OOM你重启不先jps查进程、jmap dump堆、jstack看线程、MAT分析算了……下一个你们项目用Maven遇到依赖冲突怎么办谢飞机谁报错就删谁删到不报错为止上次我把同事刚提交的包删了被追了三条街……老K……那是同事的代码不是依赖正确做法是mvn dependency:tree看依赖树用exclusion排除传递依赖或者用BOM统一版本管理。算了继续MyBatis和JPA你们怎么选谢飞机我们电商订单查询贼复杂用MyBatis写SQL灵活后台管理这种简单的用JPA。反正记住一句话JPA一时爽排查火葬场老K终于笑了哈哈这句倒是精辟那N1问题你懂吗谢飞机就是查一条主数据带出N条从数据像去奶茶店买一杯奶茶送N个吸管结果SQL发N1次用join fetch或者BatchSize就能解决老K可以。连接池你们用什么谢飞机HikariCP名字短所以加载快老K那是玄学。HikariCP快是因为用了FastList代替ArrayList避免扫描用ConcurrentBag实现无锁化的连接获取归还还做了字节码精简优化。谢飞机挠头学到了学到了。第二轮·历劫期缓存 / 分布式锁 / 消息队列 / 分布式事务老K大促秒杀场景商品详情和库存怎么抗住百万QPS谢飞机缓存三兄弟防穿透、防击穿、防雪崩口诀就是防空、加锁、错峰老K眼前一亮解释一下。谢飞机穿透就是查不存在的key打穿到DB用布隆过滤器或者缓存空值击穿就是热点key过期一瞬间大量请求打到DB用互斥锁或者逻辑过期雪崩就是大量key同时过期用随机过期时间错峰老K背得不错那库存扣减这种并发写怎么保证不超卖谢飞机用Redis分布式锁setnx加锁expire设过期时间用完del释放老K如果业务执行超过过期时间锁自动释放了别的线程进来怎么办你删锁的时候把别人的锁删了怎么办谢飞机呃……那就……设置长一点老K你这就是裸奔正确做法是用Redisson的看门狗机制默认30秒每10秒自动续期删锁前要校验value是自己的用UUID标识用Lua脚本保证判断删除原子性谢飞机哦看门狗就像楼下大黄狗帮我盯着锁快过期了就叫两声续命老K……行吧。订单创建后要发消息给库存、积分、物流服务用Kafka怎么保证消息不丢谢飞机Kafka叫KafkaKing不丢王冠所以消息不会丢老K拍桌那叫Kafka不是King要分三个环节生产者设acksallBroker设min.insync.replicas2消费者手动提交offset业务幂等谢飞机对对对我背过生产者重试ack机制Broker副本同步消费者关闭自动提交处理成功再提交offset消费端做幂等表老K下单要扣库存、减优惠券、加积分跨服务怎么做分布式事务谢飞机Seata有四种模式就像乐事薯片有四种口味海盐、烧烤、番茄、原味老K怒吼那是XA、AT、TCC、SAGA四种模式不是薯片谢飞机对对对XA是强一致两阶段提交AT是自动补偿适合高并发TCC要手写Try-Confirm-Cancel适合强隔离场景SAGA是长事务编排适合跨服务业务流程我们下单用AT模式配合GlobalTransactional注解老K擦汗勉强算你过了……那注册中心Eureka、Nacos、Consul怎么选谢飞机CAP理论Eureka是AP保证可用性服务端无状态Consul是CP保证一致性Nacos两者都支持可以切换还有配置中心功能我们现在用Nacos老K不错这轮算你及格。第三轮·飞升期WebSocket / 可观测性 / Spring AI RAG老K订单状态变更要实时推送给用户百万用户同时在线WebSocket怎么做谢飞机for循环挨个发老K血压飙升百万连接你for循环服务器直接炸了谢飞机开玩笑的用Netty实现WebSocket服务器用ChannelGroup管理连接Nginx做粘性会话保证同一用户连同一节点跨节点推送用Redis Pub/Sub广播再加心跳检测清理死连接老K可以这波像样。线上怎么排查问题谢飞机可观测性三件套Metrics指标用PrometheusMicrometer采集Logs日志用ELKElasticsearchLogstashKibanaTraces链路用Jaeger或Zipkin做全链路追踪比福尔摩斯还神老K好最后一个方向我们最近在搞AI智能客服用Spring AI怎么接入谢飞机Spring AI的ChatClient跟JdbcTemplate一个味儿链式调用简单粗暴老K用户问“你们的退款政策”大模型瞎编怎么办谢飞机用RAG检索增强生成先搜后答先把商品知识、售后政策、物流说明这些文档用Embedding模型OpenAI或Ollama本地部署向量化存到向量数据库Milvus、Chroma、Redis Stack用户提问时先做语义检索把命中的文档片段塞进提示词再让大模型基于文档回答老K眼睛亮了不错那MCP和A2A是什么谢飞机MCP就是模型上下文协议AI界的USB-C统一了AI和外部工具、数据源的接口标准三大原语是工具、资源、提示词A2A是……Apple to Apple老K……那是Agent to Agent谷歌出的智能体互通信协议谢飞机哦对那Agentic RAG我知道就是让AI当侦探先检索、再推理、再决定要不要调工具查订单、查物流最后综合回答比普通RAG更聪明老K满意点头那你觉得AI幻觉能彻底消除吗谢飞机不能AI幻觉只能缓解不能消除就像你永远无法让杠精闭嘴只能通过RAG提供事实依据、提示词约束、温度调低、知识库兜底、人工审核来降低概率老K沉默三秒……好今天的面试就到这。你回去等通知吧。谢飞机边收拾边嘀咕第七张“等通知”卡片了再集一张就能召唤神龙了……结局彩蛋三个月后谢飞机凭这份答案解析成功入职竞品电商平台「云购优选」工牌上印着三个字等通知侠。而老K默默把谢飞机的简历从碎纸机里捡了回来在背面写下四个字值得再约。 文末答案解析小白学习版考点1JDK 8/11/17特性对比| 版本 | 核心特性 | 定位 | |------|---------|------| | JDK 8 | Lambda、Stream、Optional、新日期API | 经典老干妈存量系统之王 | | JDK 11 | var局部变量、ZGC实验、HTTP Client | 保温杯中规中矩 | | JDK 17 | record、密封类、文本块、ZGC正式、虚拟线程预览 | 折叠屏LTS最新主力 |选型逻辑Spring Boot 3.x强制要求JDK 17且17是LTS安全补丁周期长生产环境选它最稳。考点2JVM内存分区 OOM排查堆对象实例GC主战场虚拟机栈栈帧局部变量表本地方法栈native方法程序计数器字节码行号指示器方法区/元空间类元数据、常量池Metaspace不是Metaverse用本地内存OOM排查四板斧口诀jps查进程 →jmapdump堆 →jstack看线程 →MAT分析。考点3Maven依赖冲突四板斧mvn dependency:tree看依赖树exclusion排除传递依赖BOMBill of Materials统一版本升级/降级冲突依赖版本考点4MyBatis vs JPA N1 HikariCPMyBatisSQL手写灵活适合复杂查询、性能要求高的订单/报表场景JPACRUD快适合后台管理但复杂查询容易“火葬场”N1问题查1条主数据带出N条从数据导致N1次SQL用join fetch、BatchSize、EntityGraph解决HikariCP快在FastList避免扫描ConcurrentBag无锁化连接管理考点5缓存三兄弟| 问题 | 现象 | 解决方案 | |------|------|---------| | 穿透 | 查不存在的key打到DB | 布隆过滤器/缓存空值 | | 击穿 | 热点key过期瞬间打DB | 互斥锁/逻辑过期 | | 雪崩 | 大量key同时过期 | 随机过期时间/多级缓存 |口诀防空、加锁、错峰。考点6Redis分布式锁三大坑 Redisson看门狗// 正确姿势Redisson RLock lock redissonClient.getLock(order: orderId); lock.lock(30, TimeUnit.SECONDS); // 看门狗自动续期 try { // 扣库存业务 } finally { lock.unlock(); // Lua脚本保证判断删除原子性 }三大坑① 无过期时间会死锁② 过期时间短于业务时间锁提前释放③ 删锁时误删别人的锁必须校验UUID。考点7Kafka三环节不丢失生产者acksall 重试机制Brokermin.insync.replicas2 副本同步消费者手动提交offset 业务幂等表考点8分布式事务四方案| 方案 | 一致性 | 适用场景 | |------|--------|---------| | XA/2PC | 强一致 | 金融对账、低并发 | | Seata AT | 最终一致 | 高并发下单、自动补偿 | | TCC | 最终一致 | 强隔离、资金类 | | SAGA | 最终一致 | 长流程编排 |考点9注册中心CAP对比EurekaAP服务端无状态秒级失效ConsulCP一致性优先NacosAP/CP可切换还带配置中心考点10WebSocket百万连接架构Netty ChannelGroup Nginx粘性会话 Redis Pub/Sub跨节点广播 心跳保活。考点11可观测性三件套MetricsPrometheus/Micrometer LogsELK TracesJaeger/Zipkin。考点12Spring AI核心能力ChatClient对话、EmbeddingModel向量化、Function Calling工具调用、ChatMemory会话内存、Advisors提示词填充/增强。考点13RAG全流程离线阶段文档加载 → 分块 → Embedding向量化 → 存入向量数据库Milvus/Chroma/Redis Stack在线阶段用户提问 → 向量化 → 语义检索TopK → 组装提示词 → 大模型基于文档生成回答。考点14MCP A2A Agentic RAGMCP模型上下文协议AI界的USB-C统一工具/资源/提示词三大原语A2AAgent to Agent智能体间互通信协议Agentic RAG检索→推理→调工具→综合回答的ReAct循环像AI侦探考点15AI幻觉本质大模型基于概率生成可能编造不存在的事实。只能缓解不能消除手段RAG提供事实依据、提示词约束、温度调低、知识库兜底、引用溯源、人工审核。面试金句总结防空、加锁、错峰JPA一时爽排查火葬场AI幻觉只能缓解不能消除就像无法让杠精闭嘴。收藏本文祝你下次面试不再是“等通知侠”
返回列表