AI 全栈开发工程师一面面经
完整信息
本篇目录
淘天一面
业务 + AI 全栈工程师
流程:实习背景确认 → RAG 系统深挖(权限/文档/切分/检索/优化/评测)→ Agent 与 AI Coding 工具 → 消息队列幂等与限流 → 深分页与卖家账单查询 → 反问。
面试官问题
一、岗位背景与实习确认
- 看你是在两段实习公司都实习过,前一段实习两个月,本段实习现在还在实习?(背景确认)
- 从本段实习这个先交流,你这个项目做了一个类似 RAG 的系统,核心功能是整理文档、从客户端发起问题、检索文档、加工语料回答是吧?
二、RAG 项目深挖
- 权限控制这一块你是怎么控制的?(追问)权限控制指的是我只能查看我自己的语料吗?一个人归属一个 team 一个组织,组织只能读某几个知识库的文档是这样控制的吗?
- 文档主要是什么样的文档?是产品的业务文档还是?
- 这个文档的阅读者主要是你们内部人员还是外部的?运营商对于你们来说是一个外部用户还是你们内部的运营岗位?
- 你是一种 SaaS 服务是吧?提供给外部大的运营商使用,提供各种功能给他?
- 文档管理指的是他们会通过链接上传某些文档给你们,还是把一些文档内容直接贴到你这个里面?你自己有一个平台是吧?
- 上传文档以后到检索之前,应该有一个切分或者向量的过程,这个过程是上传后自动触发的?是基于 Dify 的 RAG flow 做了二开?
- 如果让你自己基于 LangChain 或 Spring AI 去做一个 RAG,文档切分这一块有哪些策略你有了解过吗?(追问)你自己自定义了一个切分策略,把 Markdown 多级标题合并、内容合并是吧?(追问)如果不是 Markdown 格式的话,你还了解其他切分策略吗?
- 切完以后,检索过程中,如果是做 RAG 系统的话,一般会检索多少条出来?top k 等于 6 或 8 是吧?(追问)这个 6 和 8 的数字你是怎么定出来的?为什么不用 3 或者 1 或者 5?(追问)为什么在你的评测里面 8 或 6 会比 3 好?8 难道不会给他更多干扰项、不会产生幻觉吗?比 3 好的原因是什么?(追问)设置小的时候召回效果不好,你觉得可能是哪几个方面做得不好?
- 你觉得 RAG 还有哪些优化的思路?(追问)根据问题有什么优化的办法吗?(追问)你把一个问题转化成三个问题,每个问题都是 top 6,相当于三乘六有 18 组语料文档,再一起喂给大模型是吧?(追问)还有其他一些尝试或想法吗?
- 针对你的文档,切分之后有没有做一些扩增之类的动作?还是原文档?
- 这个文档的质量是怎么把控的?运营商可能是任何格式吗?还是给一些规范说文档都是 QA 这样的结构?(追问)你们对文档本身的质量没有做优化或管理是吧?不知道是什么文档,可能是乱七八糟的标题、内容、非结构性的,解析出来效果应该也不好是吧?
- 你做完这些以后是怎么去评测的呢?怎么认为这个 RAG 效果一定是好的?评测方式是什么?(追问)你对比的方式是什么?怎么证明它是提升的?系统中是如何对比的?(追问)你后来还是通过工程这种规则的方式去评估是吧?
- 上线以后,用户可能问的一个问题文档里没有的,但走了 RAG 以后可能也会有一个回答给他(大模型自己发挥回答),那你怎么去评测他回答的效果?(追问)从算法或其他角度有这种评测的机制吗?(追问)你认为打分的维度可能是什么?
- 有接触过 RAGAS 吗?(基于 pytest 写的评测框架)
三、Agent 与 AI Coding 工具
- 你自己在 Agent 里有接触过一些 ReAct 的模式吗?
- 你说用到的 ReAct 模式,工具调用是怎么做的?是基于 Spring AI 还是 LangChain 还是某些框架实现的?
- 你用的 AI 整架式是什么?Spring AI 吗?(追问)Spring AI 的工具调用和 MCP 的注册你都用过?
- 大模型相关最新的一些应用你有接触了解吗?
- 自己有用过一些 web coding 工具吗?用 AI 去写代码。
- 你直接用这种去写完整项目或完整需求的时候,是怎么让他理解并执行你的项目编程规范的?
- 写的时候,一个需求可能涉及你系统里很多业务知识和上下文,你怎么把这个告诉他?怎么让他知道在哪个模块写,哪个模块有现成方法,哪个模块先加方法,这个功能属于哪个包底下?(追问)你是帮他已经细分好了吗?告诉他怎么写、写哪些,跟他写是吧?(追问)通过提示词的方式告诉他?(追问)你每个需求都会有一个提示词把上下文告诉他?
四、Java 基础与消息队列
- 其他实习经历主要语言是 Java 还是 Python?用 Java 是吧?
- 你俩都用了,我就问一些通用的。如果现在有个消息队列要去接消息处理一些业务逻辑,怎么保证业务的幂等性?(追问·业务幂等)业务上怎么做幂等的?(下单发短信场景)(追问)你两个消息同时去查这个 task,task 不都是在执行中吗?怎么防这个判断?并发?(追问)用 JUC 的一些变量、CAS 这种?(追问)分布式场景用 Redis?(追问)完整流程是什么?先用 Redis 锁住,然后执行业务,执行完释放锁?一锁二判三更新是吧?
- 怎么限流?假设短信平台受不了这么大的量,希望按恒定速率,比如只能承受 100 QPS,你消息生产速度是 1 万 QPS,中间怎么做限量?(追问)怎么跟 MQ 的消费结合起来?消费入口获取令牌获取不到会怎样处理?完整流程是什么?(追问)获取不到就把消息丢回消息队列?这样不会频繁丢吗?不会给 broker 带来很大压力吗?(追问)你说的都是推的模式,MQ 如果是拉的模式,你有什么别的思路吗?
五、深分页与卖家账单查询
- 深分页和卖家账单查询的场景,你觉得有哪些要优化的?给订单系统做商家纬度账单查询,order 表分库分表,用卖家来查,近三个月或近六个月,很多条件。首先有深分页问题,深分页怎么优化?第二是这种卖家纬度的查询怎么去支持?(追问·深分页·游标)游标跳页的查询也支持吗?从第一页跳到第五页。(追问·深分页·跳页)账单查询并不像刷抖音一样,有一到十可以选择中间任何一页,你觉得这个方法能用吗?(追问·深分页)跳页怎么办呢?(追问·卖家表)你说卖家表,下单时把买家表落了以后,单独搞一个卖家表落买卖家 id 和买家表业务单号,查的时候查那个卖家表?(追问·卖家表)分页时每页查 200 条,卖家表查 200 个 id,再散到买家库查 n 个库,查 200 次,再聚合?(追问·卖家表)买家的所有字段你都落吗?相当于镜像表一模一样的字段,分表键换了一个?(追问·卖家表)两张表是双写吗?下达时都写上是吧?(追问·卖家表)写入开销小的话,怎么保证事务?A 成功 B 失败怎么办?(分布式事务)
反问
- 您前面简单介绍了部门业务,您提到一方面做业务、一方面做 Agent,平时主要用的技术栈大概哪些?(面试官回答)语言 Java / Python,前端用 vibe coding 生成也会看一看,主语言是 Java,围绕 Java 的中间件阿里内源都有;存储层 MySQL、Redis、PolarDB、ES 之类,离线有 ODPS;AI 方面有各种 vibe coding 工具和框架,也有平台,前端有自然语言写前端、设计类,Copilot / Cursor 都有,还有自己内部的插件和平台,OpenAI 类(内部)、阿里出的 Copilot、QorderWork 等大模型类也用了很多。
- 商家插表是不是也可以基于 ES 去做一些加速?(面试官回答)ES 可以,但引入成本比较大(技术成本、复杂度、存储成本、学习成本),一般会用更低成本存储,比如 PolarDB 或其他内部存储,PolarDB 与 MySQL 基本无缝切换(仅引擎层换成 PolarDB,调用方式、MyBatis 等没有差别),切换没有新成本;还会做一些限制(比如只查三个月)、覆盖索引、原生 limit 转自连接 / 子查询减少回表;PolarDB 对 limit 已经做了索引下推,底层自动做覆盖索引不回表,原理跟 MySQL 差不多。
- 您提到比较多的 vibe coding 工具,想请教一下您在拿到一个比较新的需求时,大概的工作流程是怎样的?(面试官回答)先去 PRD 里提取核心需求点;针对核心需求点自己拟链推理一个核心改动的主要设计点(比较抽象的标准);整合成提示词喂给工具;提前把项目 wiki 整理好(分层、特殊逻辑、整体业务流程,业务限定的高精地图版本的上下文);把上下文和提示词一起喂给模型,模型从代码结构里整合提示词和语料,知道哪里改哪里,不需要再赘述;开发完让它生成测试用例和集成单元测试(Spring Boot + 框架,Groovy 写的集成测试),用集成测试去做 debug 联调;再 code review,合并前把这次改动补充到 wrapper wiki 里;最后用一些 skill 辅助排查(查日志、查配置文件)。仅限服务端;前端还要去其他平台做:设计交互(自然语言描述或给图 / UED 稿),把交互里涉及的接口文档让服务端 AI 生成 API 文档,再喂给前端 AI,前端 AI 结合设计图基本能穿起来,只需加个域名,其他自己拆。
- 整个开发流程感觉自动化比较强,我们程序员 / 开发者对比于他们,您认为我们的一些比较核心的优势大概是什么方面?(面试官回答)AI 还是不太可能完全取代人类,更多做执行有精确指令的事,对一些黑话、业务知识、很边界的事情无法推理,容易犯错误。程序员懂产品流程、交付流程、整个交付过程、边界 case 经验,比其他岗位 / 普通人强;第二,本身有软件工程基础素养,学任何东西比别人快;第三,能比别人更善于在此基础上做二次开发 / 二次阵营,别人了解一个东西就是 Hello World,你第二天就能演变成另一个东西(如 Open WebUI 出来两三天就有人做了纯页面);从 PRD 提取设计文档这件事程序员还是更专业,PRD 是上帝视角,不是蚂蚁视角,要转成蚂蚁视角必须很懂业务的架构师 / 工程师去提炼、分组、拆成不同任务,拆任务的过程目前是人最大的价值,vibe coding 80% 工作量就是这一块,AI 给一个 PRD 不可能整理出很细的需求;人机协同、需求整合、架构 review 和审阅、避免坑、不断喂给他让他以后少踩坑,这些也很重要。
阿里校招内推码:2T4VR26T
本篇目录
当前问题0133
- 01
面试官问题一、岗位背景与实习确认看你是在两段实习公司都实习过,前一段实习两个月,本段实习现在还在实习?(背景确认)
- 02
从本段实习这个先交流,你这个项目做了一个类似 RAG 的系统,核心功能是整理文档、从客户端发起问题、检索文档、加工语料回答是吧?
- 03
RAG 项目深挖权限控制这一块你是怎么控制的?(追问)权限控制指的是我只能查看我自己的语料吗?一个人归属一个 team 一个组织,组织只能读某几个知识库的文档是这样控制的吗?
- 04
文档主要是什么样的文档?是产品的业务文档还是?
- 05
这个文档的阅读者主要是你们内部人员还是外部的?运营商对于你们来说是一个外部用户还是你们内部的运营岗位?
- 06
你是一种 SaaS 服务是吧?提供给外部大的运营商使用,提供各种功能给他?
- 07
文档管理指的是他们会通过链接上传某些文档给你们,还是把一些文档内容直接贴到你这个里面?你自己有一个平台是吧?
- 08
上传文档以后到检索之前,应该有一个切分或者向量的过程,这个过程是上传后自动触发的?是基于 Dify 的 RAG flow 做了二开?
- 09
如果让你自己基于 LangChain 或 Spring AI 去做一个 RAG,文档切分这一块有哪些策略你有了解过吗?(追问)你自己自定义了一个切分策略,把 Markdown 多级标题合并、内容合并是吧?(追问)如果不是 Markdown 格式的话,你还了解其他切分策略吗?
- 10
切完以后,检索过程中,如果是做 RAG 系统的话,一般会检索多少条出来?top k 等于 6 或 8 是吧?(追问)这个 6 和 8 的数字你是怎么定出来的?为什么不用 3 或者 1 或者 5?(追问)为什么在你的评测里面 8 或 6 会比 3 好?8 难道不会给他更多干扰项、不会产生幻觉吗?比 3 好的原因是什么?(追问)设置小的时候召回效果不好,你觉得可能是哪几个方面做得不好?
- 11
你觉得 RAG 还有哪些优化的思路?(追问)根据问题有什么优化的办法吗?(追问)你把一个问题转化成三个问题,每个问题都是 top 6,相当于三乘六有 18 组语料文档,再一起喂给大模型是吧?(追问)还有其他一些尝试或想法吗?
- 12
针对你的文档,切分之后有没有做一些扩增之类的动作?还是原文档?
- 13
这个文档的质量是怎么把控的?运营商可能是任何格式吗?还是给一些规范说文档都是 QA 这样的结构?(追问)你们对文档本身的质量没有做优化或管理是吧?不知道是什么文档,可能是乱七八糟的标题、内容、非结构性的,解析出来效果应该也不好是吧?
- 14
你做完这些以后是怎么去评测的呢?怎么认为这个 RAG 效果一定是好的?评测方式是什么?(追问)你对比的方式是什么?怎么证明它是提升的?系统中是如何对比的?(追问)你后来还是通过工程这种规则的方式去评估是吧?
- 15
上线以后,用户可能问的一个问题文档里没有的,但走了 RAG 以后可能也会有一个回答给他(大模型自己发挥回答),那你怎么去评测他回答的效果?(追问)从算法或其他角度有这种评测的机制吗?(追问)你认为打分的维度可能是什么?
- 16
有接触过 RAGAS 吗?(基于 pytest 写的评测框架)
- 17
Agent 与 AI Coding 工具你自己在 Agent 里有接触过一些 ReAct 的模式吗?
- 18
你说用到的 ReAct 模式,工具调用是怎么做的?是基于 Spring AI 还是 LangChain 还是某些框架实现的?
- 19
你用的 AI 整架式是什么?Spring AI 吗?(追问)Spring AI 的工具调用和 MCP 的注册你都用过?
- 20
大模型相关最新的一些应用你有接触了解吗?
- 21
自己有用过一些 web coding 工具吗?用 AI 去写代码。
- 22
你直接用这种去写完整项目或完整需求的时候,是怎么让他理解并执行你的项目编程规范的?
- 23
写的时候,一个需求可能涉及你系统里很多业务知识和上下文,你怎么把这个告诉他?怎么让他知道在哪个模块写,哪个模块有现成方法,哪个模块先加方法,这个功能属于哪个包底下?(追问)你是帮他已经细分好了吗?告诉他怎么写、写哪些,跟他写是吧?(追问)通过提示词的方式告诉他?(追问)你每个需求都会有一个提示词把上下文告诉他?
- 24
Java 基础与消息队列其他实习经历主要语言是 Java 还是 Python?用 Java 是吧?
- 25
你俩都用了,我就问一些通用的。如果现在有个消息队列要去接消息处理一些业务逻辑,怎么保证业务的幂等性?(追问·业务幂等)业务上怎么做幂等的?(下单发短信场景)(追问)你两个消息同时去查这个 task,task 不都是在执行中吗?怎么防这个判断?并发?(追问)用 JUC 的一些变量、CAS 这种?(追问)分布式场景用 Redis?(追问)完整流程是什么?先用 Redis 锁住,然后执行业务,执行完释放锁?一锁二判三更新是吧?
- 26
怎么限流?假设短信平台受不了这么大的量,希望按恒定速率,比如只能承受 100 QPS,你消息生产速度是 1 万 QPS,中间怎么做限量?(追问)怎么跟 MQ 的消费结合起来?消费入口获取令牌获取不到会怎样处理?完整流程是什么?(追问)获取不到就把消息丢回消息队列?这样不会频繁丢吗?不会给 broker 带来很大压力吗?(追问)你说的都是推的模式,MQ 如果是拉的模式,你有什么别的思路吗?
- 27
深分页与卖家账单查询深分页和卖家账单查询的场景,你觉得有哪些要优化的?给订单系统做商家纬度账单查询,order 表分库分表,用卖家来查,近三个月或近六个月,很多条件。首先有深分页问题,深分页怎么优化?第二是这种卖家纬度的查询怎么去支持?(追问·深分页·游标)游标跳页的查询也支持吗?从第一页跳到第五页。(追问·深分页·跳页)账单查询并不像刷抖音一样,有一到十可以选择中间任何一页,你觉得这个方法能用吗?(追问·深分页)跳页怎么办呢?(追问·卖家表)你说卖家表,下单时把买家表落了以后,单独搞一个卖家表落买卖家 id 和买家表业务单号,查的时候查那个卖家表?(追问·卖家表)分页时每页查 200 条,卖家表查 200 个 id,再散到买家库查 n 个库,查 200 次,再聚合?(追问·卖家表)买家的所有字段你都落吗?相当于镜像表一模一样的字段,分表键换了一个?(追问·卖家表)两张表是双写吗?下达时都写上是吧?(追问·卖家表)写入开销小的话,怎么保证事务?A 成功 B 失败怎么办?(分布式事务)
- 28
深分页与卖家账单查询深分页和卖家账单查询的场景,你觉得有哪些要优化的?给订单系统做商家纬度账单查询,order 表分库分表,用卖家来查,近三个月或近六个月,很多条件。首先有深分页问题,深分页怎么优化?第二是这种卖家纬度的查询怎么去支持?(追问·深分页·游标)游标跳页的查询也支持吗?从第一页跳到第五页。(追问·深分页·跳页)账单查询并不像刷抖音一样,有一到十可以选择中间任何一页,你觉得这个方法能用吗?(追问·深分页)跳页怎么办呢?(追问·卖家表)你说卖家表,下单时把买家表落了以后,单独搞一个卖家表落买卖家 id 和买家表业务单号,查的时候查那个卖家表?(追问·卖家表)分页时每页查 200 条,卖家表查 200 个 id,再散到买家库查 n 个库,查 200 次,再聚合?(追问·卖家表)买家的所有字段你都落吗?相当于镜像表一模一样的字段,分表键换了一个?(追问·卖家表)两张表是双写吗?下达时都写上是吧?(追问·卖家表)写入开销小的话,怎么保证事务?A 成功 B 失败怎么办?(分布式事务)
- 29
深分页与卖家账单查询深分页和卖家账单查询的场景,你觉得有哪些要优化的?给订单系统做商家纬度账单查询,order 表分库分表,用卖家来查,近三个月或近六个月,很多条件。首先有深分页问题,深分页怎么优化?第二是这种卖家纬度的查询怎么去支持?(追问·深分页·游标)游标跳页的查询也支持吗?从第一页跳到第五页。(追问·深分页·跳页)账单查询并不像刷抖音一样,有一到十可以选择中间任何一页,你觉得这个方法能用吗?(追问·深分页)跳页怎么办呢?(追问·卖家表)你说卖家表,下单时把买家表落了以后,单独搞一个卖家表落买卖家 id 和买家表业务单号,查的时候查那个卖家表?(追问·卖家表)分页时每页查 200 条,卖家表查 200 个 id,再散到买家库查 n 个库,查 200 次,再聚合?(追问·卖家表)买家的所有字段你都落吗?相当于镜像表一模一样的字段,分表键换了一个?(追问·卖家表)两张表是双写吗?下达时都写上是吧?(追问·卖家表)写入开销小的话,怎么保证事务?A 成功 B 失败怎么办?(分布式事务)
- 30
反问您前面简单介绍了部门业务,您提到一方面做业务、一方面做 Agent,平时主要用的技术栈大概哪些?
- 31
商家插表是不是也可以基于 ES 去做一些加速?
- 32
您提到比较多的 vibe coding 工具,想请教一下您在拿到一个比较新的需求时,大概的工作流程是怎样的?
- 33
整个开发流程感觉自动化比较强,我们程序员 / 开发者对比于他们,您认为我们的一些比较核心的优势大概是什么方面?
