汽车之家 Java 后端二面面经|27届校招 10.22

# 汽车之家 Java 后端二面面经|27届校招(项目 + Java基础 + AI Agent) 分享一下今天的汽车之家 Java 后端二面,整体感觉比较偏向项目深挖和技术交流,除了传统 Java 后端技术,也聊了不少 AI Coding、Agent 开发和未来技术趋势。 我是 27 届本科生,人工智能专业,有两段 Java 后端实习经历,分别涉及智能驾培系统和保险理算系统开发。此外,简历上还有一个 Spring Cloud Alibaba 微服务项目,以及一个 AI Agent 全栈项目。 下面按照面试内容整理,部分问题根据记忆还原,可能与原话略有出入。 ## 一、自我介绍及实习项目 **1. 自我介绍** 主要介绍了技术栈、两段实习经历、微服务项目和 Agent 项目,以及个人职业规划。 **2. 介绍一下目前实习的业务和负责的模块。** 目前主要负责智能驾培中控系统的后端开发,涉及预警接口、随机上呼、Agent 接入及鉴权审计等功能。 **3. 介绍一下车辆频繁刹车预警的业务背景,以及具体如何实现。** 业务场景是监控车辆因车门打开、进入特定电子围栏等原因产生的非手动紧急刹车事件。 聊到了方案的演进过程: - 初版在接口查询时直接统计近五分钟的刹车次数,性能不太理想。 - 后来改为通过定时任务统计并判断预警阈值。 - 满足条件后写入预警事件表,前端查询接口直接读取预警结果,减少实时重复计算。 ## 二、分布式内容资讯平台项目 **4. 介绍一下你的微服务项目,主要有哪些业务?** 项目基于 Spring Cloud Alibaba,涉及文章发布、内容审核、定时发布、全文检索等业务。 **5. 为什么要自己实现延迟队列?具体怎么实现?** 主要用于文章定时发布。 - MySQL 持久化任务数据及执行状态。 - Redis ZSet 按执行时间戳排序,维护即将到期的任务。 - Redis List 存储已经到期、等待消费的任务。 - 消费者从 List 中获取任务并执行对应业务。 - 通过 MySQL 持久化记录和补偿机制处理任务未完成的情况。 **6. 延迟任务重复执行,如何保证业务幂等?** 讨论了两个不同业务环节: - 自媒体端通过条件更新控制状态流转,避免同一个状态变更被重复执行。 - App 端保存文章时,通过数据库唯一索引避免重复插入。 这部分主要围绕业务状态、条件更新及数据库约束展开。 ## 三、Java 基础与并发编程 **7. 进程和线程有什么区别?** 主要从资源分配、CPU 调度、内存共享以及上下文切换开销等方面回答。 **8. Runnable 和 Callable 有什么区别?** 重点讨论任务是否需要返回值,以及如何获取异步任务的执行结果。 ## 四、MySQL 事务与 MVCC **9. MySQL 有哪些事务隔离级别?默认是什么?** 聊到了 MySQL InnoDB 默认的可重复读(RR)隔离级别。 **10. MySQL 的 MVCC 是怎么实现的?** 重点包括: - Undo Log 版本链。 - Read View。 - 快照读。 - RR 隔离级别下如何实现可重复读。 **11. 幻读如何处理?快照读和当前读有什么区别?** 讨论了 MVCC 下的快照读,以及 `SELECT ... FOR UPDATE` 等当前读场景中的加锁机制,包括间隙锁和临键锁。 ## 五、SSE 与 WebSocket **12. 你的 Agent 是如何实现流式输出的?** 使用 SSE 实现大模型文本的流式推送,让用户能够逐步看到生成结果。 **13. 为什么选择 SSE,而不是 WebSocket?** 主要从通信方向和业务场景回答: - SSE 基于 HTTP,适合服务端持续向客户端推送内容。 - WebSocket 支持全双工通信,适合双方需要频繁双向交互的场景。 - 大模型文本流式输出通常以服务端推送为主,因此 SSE 比较符合需求。 ## 六、AI Coding 实践 **14. 平时如何使用 AI 辅助开发?** 我主要把精力放在需求理解、方案设计、任务拆解和最终验收上。 对于比较简单的需求,可以直接让 AI 完成实现,之后审查代码并测试。 对于复杂需求,会按照软件工程的思路先拆解任务,明确模块边界、依赖关系和验收标准,再分阶段让 AI 实施,避免一次性修改过多代码。 **15. 你觉得 AI 给软件开发带来了哪些实际变化?** 聊到了 AI Coding 对编码效率和技术学习成本的影响。 个人感觉 AI 已经显著降低了技术实现门槛,但企业研发中还有不少沟通、需求确认和跨团队协作成本。 **16. 如果希望进一步提高端到端研发效率,你会怎么做?** 讨论了通过标准化流程,将需求分析、开发、代码审查、测试等环节尽可能串联起来。 理想情况下,人主要负责明确需求、决策和验收,AI 承担更多具体执行工作,但仍然需要必要的质量控制。 ## 七、Agent 原理、工具选型与技术趋势 **17. Agent 是如何调用工具的?Function Calling 的原理是什么?** 主要回答了模型根据工具定义生成结构化调用请求,再由 Agent Runtime 解析参数、执行工具,并将执行结果返回给模型的流程。 **18. 平时使用哪些 AI Coding 工具?有什么区别?** 聊到了 Claude Code 和 Pi Agent。 - Claude Code 的工具调用、权限管理和整体开发体验比较完整。 - Pi Agent 的设计相对精简,更强调通过插件和扩展实现自定义能力。 也讨论了 Agent 执行代码时的权限控制、沙箱隔离等安全问题。 **19. 你怎么看 Agent 接下来的发展?** 这是比较开放的交流题。 我谈到 Agent 正在从程序员使用的开发工具,逐渐向办公自动化和个人助手等更多场景扩展。 同时也讨论了移动端 Agent 的生态问题,比如应用之间的协作、系统权限和第三方服务接入等。 **20. 最近有没有关注或者研究什么新的 AI 项目?** 分享了近期接触的一个逆向工具相关开源项目,主要思路是把已有工具能力封装成 MCP 接口,使 Agent 能够调用这些能力完成实际任务。 ## 八、职业规划与公司 AI 方向 **21. 未来的职业规划是什么?** 我的回答是: 短期还是希望深耕 Java 后端,提升业务理解、系统设计和工程实践能力。 长期希望结合 AI 技术扩展自己的能力边界,逐步掌握前端、移动端等技术,成为能够独立完成复杂应用开发的工程师。 **22. 关于公司目前的 AI 应用方向** 面试官也分享了一些公司内部推进 AI 应用的思路。 主要包括: - 研发侧利用 AI 提升从需求到交付的整体效率。 - 业务侧探索使用 Agent 改造现有工作流程。 - 通过 AI 技术提高效率、降低业务成本。 这一部分更偏向技术趋势和业务交流。