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智能车主助手谢飞机三轮被虐哭附完整答案解析一、面试场景设定公司车联网独角兽「智驾云」业务智能网联汽车T-Box车机终端、远程控车、OTA升级、故障诊断、车况监测、智能驾驶辅助、AI车主助手规模500万辆智能网联汽车接入每辆车每秒上报20条车况数据车速/油耗/电池/胎压/位置/驾驶行为日上报数据量超百亿条高峰期每秒处理500万条车辆事件覆盖全国30主流车企业务链路车辆注册 → T-Box设备接入 → 实时数据上报 → 远程控车指令 → OTA升级 → 故障诊断 → 车险/维修联动 → AI车主助手贯穿全程二、第一轮筑基期核心语言与构建老K面无表情推了推眼镜谢飞机是吧简历上写着3年Java经验。先说说我们车联网团队新项目立项技术选型你选JDK 8还是11还是17谢飞机选1717嘛谐音“一起发”咱们一起发财老K眉头一皱……你再说一遍谢飞机哦不不正经说JDK 17是LTS长期支持版本Spring Boot 3.x强制要求JDK 17起步性能、安全性都比8强新项目无脑上17没毛病老K微微点头嗯这个倒是说对了。那接着说车辆数据上报服务每天要写入百亿级数据突然有天线上OOM了你怎么排查谢飞机简单重启大法再不行就把服务器内存拉满256G安排上什么OOM都不是事儿老K太阳穴突突跳……咱们是互联网大厂不是修电脑的。你连jmap、jstack都不提谢飞机啊对对对jps看进程jmap看堆内存jstack看线程栈再用MAT分析堆转储文件老K算你蒙对一半。那Maven里两个依赖版本冲突编译报错你怎么办谢飞机谁报错就删谁删到不报错为止删不掉就把同事也删了拉黑。老K深吸一口气下一轮。三、第二轮历劫期数据库、缓存、消息、分布式事务老K车辆维保订单表关联查询多团队里有人想用JPA有人坚持MyBatis你怎么选谢飞机MyBatisJPA一时爽排查火葬场。我们这种复杂SQL、报表统计多的场景MyBatis的XML写SQL看得明明白白JPA自动生成的SQL一出问题就抓瞎。老K难得点头说得不错复杂查询场景MyBatis确实更可控。那连接池你用什么为什么谢飞机HikariCP名字短加载快字节码极致优化FastList代替ArrayListConcurrentBag无锁设计号称“连接池界的博尔特”老K可以。那车辆维保秒杀活动Redis分布式锁怎么实现谢飞机setnx一条命令搞定……嗯……然后……再删掉。老K就这锁过期了怎么办删锁删到别人的锁怎么办谢飞机呃……锁过期就等它自己释放呗……删锁就……反正value是UUID删除前比一下再配合Lua脚本原子操作……还有Redisson的看门狗自动续期哦对了就是楼下那条大黄狗天天帮你看门老K嘴角抽搐……勉强算你过了。那缓存穿透、击穿、雪崩呢谢飞机这个我会背缓存穿透——查询不存在的数据防空用布隆过滤器拦截缓存击穿——热点key过期加锁互斥重建缓存雪崩——大批key同时过期错峰随机过期时间多级缓存防空、加锁、错峰六字真言老K赞许背得挺熟。那Kafka怎么保证消息不丢失谢飞机Kafka是King啊王者怎么可能会丢消息老K血压飙升……生产端acksall、副本min.insync.replicas、消费端手动提交幂等你是一个都不说啊。谢飞机对对对还有重试机制和死信队列老K那车辆维保订单创建、扣减积分、生成工单三个服务跨库操作怎么保证一致性谢飞机Seata撒点海盐数据就一致了哦不是Seata分布式事务AT模式自动生成undo_log回滚日志业务无侵入还有TCC、SAGA、XA好几种模式……海盐味、烧烤味、番茄味、原味四种口味任君选择老K扶额……三轮。四、第三轮飞升期实时通信与AI老K500万辆车的实时车况要推送到车主AppWebSocket长连接怎么扛住百万级并发谢飞机for循环挨个发发不完就多开几个线程发老K想摔杯子……Netty ChannelGroup Nginx粘性会话 Redis Pub/Sub跨节点广播 心跳保活这才是正确姿势你回去好好背。老K最后一个模块我们做了个AI车主助手能回答“我的车胎压多少”“什么时候该保养”。你说说Spring AI怎么用谢飞机这个我会ChatClient跟JdbcTemplate一个味儿fluent API链式调用一问一答舒服老K那车主的个性化问题模型没训练过答错了怎么办谢飞机RAG先搜后答先把车辆手册、维保记录、故障码文档切块向量化存进向量数据库用户提问时先语义检索出相关文档再塞给大模型生成答案又准又新老K眼前一亮可以啊向量数据库选型呢谢飞机Milvus性能猛适合海量向量Chroma轻量级开发快Redis Stack省心直接复用Redis集群Embedding用OpenAI或者本地Ollama部署老K那AI助手要调用车辆远程控制接口怎么让模型“学会”调工具谢飞机Function Calling嘛把工具定义成JSON Schema告诉模型模型返回参数咱们执行这就是Agent再往上就是MCP模型上下文协议AI界的USB-C一套标准打通所有工具还有Google的A2A智能体之间互相通信Apple to Apple老K震惊那什么是Agentic RAG谢飞机普通RAG是“搜一次答一次”Agentic RAG是“AI侦探”——先搜发现信息不够自己决定再搜一次还能调工具查实时车况多轮推理直到找到答案牛不牛老K连连点头那AI幻觉呢怎么彻底消除谢飞机这个我知道只能缓解不能消除本质是模型在编造不存在的事实。缓解手段RAG约束答案来源、提示词要求“不知道就说不知道”、温度调低、输出引用溯源、人工审核兜底、持续评估监控。老K沉默良久……今天面试到这里。你先回去等通知吧。谢飞机熟练地掏出手机第七张“等通知”卡片集齐了召唤神龙三个月后谢飞机靠本文答案解析入职竞品车联网公司工牌上写着——「等通知侠」。五、小白也能看懂的完整答案解析16大考点考点1JDK 8/11/17 怎么选| 版本 | 亮点 | 适合场景 | |------|------|----------| | JDK 8 | 最经典LTSLambda/Stream生态最全 | 存量老项目维护 | | JDK 11 | LTSZGC实验、HttpClient、局部变量var | 过渡版本 | | JDK 17 | LTSSpring Boot 3.x强制要求密封类、ZGC成熟、性能更强 | 新项目首选 |面试结论新项目直接 JDK 17 Spring Boot 3.x老项目评估升级成本。考点2JVM 内存分区与 OOM 排查四板斧内存分区堆对象实例、虚拟机栈方法调用帧、元空间类元数据替代永久代、本地方法栈、程序计数器。排查口诀jps → jmap → jstack → MATjps -l找出Java进程PIDjmap -heap PID看堆内存使用情况判断是堆溢出还是元空间溢出jmap -dump:formatb,fileheap.hprof PID导出堆转储jstack PID看线程栈定位死锁/高CPU线程MATMemory Analyzer分析大对象、内存泄漏嫌疑点考点3Maven/Gradle 依赖冲突四板斧 BOMmvn dependency:tree查看依赖树找到冲突版本exclusions排除传递依赖dependencyManagement统一版本管理BOM升级到兼容版本补充Spring Boot 自带spring-boot-dependenciesBOM统一管理数百个三方库版本。考点4MyBatis vs JPA HikariCPMyBatisSQL手写可控适合复杂查询/报表/多表关联灵活但样板代码多JPA/Hibernate对象映射自动生成SQL开发快但复杂查询SQL不可控容易踩N1查询坑Spring Data JDBC介于两者之间轻量HikariCP 核心原理FastList替代ArrayList优化get/remove性能ConcurrentBag无锁设计借还连接高效字节码极致优化默认连接池首选Spring Boot 2.x默认考点5缓存穿透/击穿/雪崩六字真言防空、加锁、错峰| 问题 | 现象 | 解决方案 | |------|------|----------| | 穿透 | 查不存在的数据每次都打DB | 布隆过滤器 / 缓存空值 | | 击穿 | 热点key过期瞬间高并发打DB | 互斥锁 / 逻辑过期 | | 雪崩 | 大量key同时过期 / Redis宕机 | 过期时间加随机值 / 多级缓存 / 集群高可用 |考点6Redis 分布式锁三大坑 Redisson 看门狗锁过期问题业务没执行完锁就过期别人拿到锁 → Redisson看门狗自动续期默认30s每10s续一次误删别人锁删除前必须校验valueUUID配合Lua脚本保证“判断删除”原子性不可重入同线程重复获取会死锁 → Redisson支持可重入锁RLock lock redissonClient.getLock(vehicle:lock: vin); lock.lock(10, TimeUnit.SECONDS); // 看门狗自动续期 try { // 业务逻辑 } finally { lock.unlock(); }考点7Kafka 消息不丢失三环节保障生产端acksall所有副本确认 重试机制Broker端min.insync.replicas2至少2个副本同步 分区副本机制消费端手动提交offset 业务处理成功后再提交 消费幂等唯一ID去重考点8分布式事务四方案选型| 方案 | 原理 | 适用场景 | 缺点 | |------|------|----------|------| | 2PC/XA | 数据库层面两阶段提交 | 强一致、短事务 | 性能差、有阻塞 | | TCC | Try-Confirm-Cancel 业务补偿 | 金融/扣款 | 侵入性强实现复杂 | | 可靠消息 | 本地消息表 MQ最终一致 | 订单/积分等弱一致 | 有延迟 | | Seata AT | 自动生成undo_log回滚 | 业务无侵入推荐 | 不适合大事务 |考点9注册中心 CAP 对比EurekaNetflix OSSAP保护模式已停更维护NacosCP/AP可切换支持配置中心国内主流ConsulCP支持多数据中心Go语言实现考点10WebSocket 百万连接架构Netty高性能NIO框架单机可扛数十万连接ChannelGroup统一管理连接群发广播Nginx粘性会话同一连接固定打到同一节点Redis Pub/Sub跨节点广播消息房间/车辆事件心跳保活IdleStateHandler 检测空闲连接定时ping/pong限流与背压防止消息洪峰打爆连接考点11可观测性三件套指标 MetricsPrometheus 采集 Grafana 可视化 Micrometer 埋点日志 LoggingLog4j2/Logback ELKElasticsearch Logstash Kibana链路 TracingJaeger/Zipkin Sleuth/Micrometer Tracing全链路追踪考点12JWT 痛点与双 Token 方案痛点无法主动失效、token被盗无法撤销、payload不能太大方案Access Token短时效15min Refresh Token长时效7天 Redis黑名单/版本号实现主动失效更完善OAuth2 Keycloak 统一认证授权中心考点13Spring AI 核心能力表| 能力 | 说明 | |------|------| | ChatClient | 对话模型调用fluent API类似JdbcTemplate | | EmbeddingModel | 文本向量化OpenAI/Ollama本地部署 | | Function Calling | 让模型调用Java方法工具执行框架 | | ChatMemory | 聊天会话内存多轮记忆 | | Advisors | 提示填充、RAG检索增强、日志等横切能力 | | VectorStore | 向量数据库抽象Milvus/Chroma/Redis |考点14RAG 离线/在线双阶段全流程离线阶段文档加载与索引文档加载PDF/Word/网页→ 2. 文本切块chunk→ 3. Embedding向量化 → 4. 存入向量数据库在线阶段问答用户提问 → 2. 问题向量化 → 3. 语义检索TopK相关文档 → 4. 文档问题组装成Prompt → 5. 大模型生成带依据的回答考点15MCP、A2A、Agentic RAGMCP模型上下文协议AI界的USB-C统一工具调用标准客户端-服务器架构Host/Client/Server三大原语一次接入处处复用天然可扩展A2AAgent-to-AgentGoogle提出的智能体间通信协议让多个Agent协作Agentic RAG普通RAG“搜一次答一次”Agentic RAG让Agent自主规划——检索→评估信息是否足够→不够再搜→必要时调工具查实时车况/维保记录→多轮推理直到给出可信答案考点16AI 幻觉本质与6大缓解手段本质大模型基于概率生成会“一本正经地编造”训练数据中不存在或不确定的事实。缓解手段RAG强制答案基于检索到的真实文档提示词约束“只基于给定材料回答不知道就说不知道”降低温度减少随机性输出溯源要求回答附带引用来源人工审核兜底高危场景医疗/金融/车辆控制必须人工复核持续评估监控建立评测集定期检测幻觉率总结本文通过车联网大厂三轮面试覆盖了 Java 核心JDK17/JVM、构建工具Maven、ORM与连接池MyBatis/HikariCP、缓存Redis三兄弟分布式锁、消息队列Kafka、分布式事务Seata、实时通信WebSocket、可观测性Prometheus/ELK、安全JWT/OAuth2以及当下最火的 AI 工程化Spring AI/RAG/MCP/Agentic RAG。建议收藏面试前过一遍
返回列表