阿里巴巴 · 淘天

AI 全栈开发工程师一面面经

完整信息

31 条问法 · 34 道题

本篇目录
淘天一面业务 + 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
本篇目录
  1. 01
    面试官问题一、岗位背景与实习确认看你是在两段实习公司都实习过,前一段实习两个月,本段实习现在还在实习?(背景确认)
  2. 02
    项目追问
    从本段实习这个先交流,你这个项目做了一个类似 RAG 的系统,核心功能是整理文档、从客户端发起问题、检索文档、加工语料回答是吧?
  3. 03
    项目追问
    二、RAG 项目深挖权限控制这一块你是怎么控制的?(追问)权限控制指的是我只能查看我自己的语料吗?一个人归属一个 team 一个组织,组织只能读某几个知识库的文档是这样控制的吗?
  4. 04
  5. 05
    项目追问
    这个文档的阅读者主要是你们内部人员还是外部的?运营商对于你们来说是一个外部用户还是你们内部的运营岗位?
  6. 06
  7. 07
    项目追问
    文档管理指的是他们会通过链接上传某些文档给你们,还是把一些文档内容直接贴到你这个里面?你自己有一个平台是吧?
  8. 08
    上传文档以后到检索之前,应该有一个切分或者向量的过程,这个过程是上传后自动触发的?是基于 Dify 的 RAG flow 做了二开?
  9. 09
    如果让你自己基于 LangChain 或 Spring AI 去做一个 RAG,文档切分这一块有哪些策略你有了解过吗?(追问)你自己自定义了一个切分策略,把 Markdown 多级标题合并、内容合并是吧?(追问)如果不是 Markdown 格式的话,你还了解其他切分策略吗?
  10. 10
    项目追问
    切完以后,检索过程中,如果是做 RAG 系统的话,一般会检索多少条出来?top k 等于 6 或 8 是吧?(追问)这个 6 和 8 的数字你是怎么定出来的?为什么不用 3 或者 1 或者 5?(追问)为什么在你的评测里面 8 或 6 会比 3 好?8 难道不会给他更多干扰项、不会产生幻觉吗?比 3 好的原因是什么?(追问)设置小的时候召回效果不好,你觉得可能是哪几个方面做得不好?
  11. 11
    你觉得 RAG 还有哪些优化的思路?(追问)根据问题有什么优化的办法吗?(追问)你把一个问题转化成三个问题,每个问题都是 top 6,相当于三乘六有 18 组语料文档,再一起喂给大模型是吧?(追问)还有其他一些尝试或想法吗?
  12. 12
    项目追问
    针对你的文档,切分之后有没有做一些扩增之类的动作?还是原文档?
  13. 13
    项目追问
    这个文档的质量是怎么把控的?运营商可能是任何格式吗?还是给一些规范说文档都是 QA 这样的结构?(追问)你们对文档本身的质量没有做优化或管理是吧?不知道是什么文档,可能是乱七八糟的标题、内容、非结构性的,解析出来效果应该也不好是吧?
  14. 14
    项目追问
    你做完这些以后是怎么去评测的呢?怎么认为这个 RAG 效果一定是好的?评测方式是什么?(追问)你对比的方式是什么?怎么证明它是提升的?系统中是如何对比的?(追问)你后来还是通过工程这种规则的方式去评估是吧?
  15. 15
    上线以后,用户可能问的一个问题文档里没有的,但走了 RAG 以后可能也会有一个回答给他(大模型自己发挥回答),那你怎么去评测他回答的效果?(追问)从算法或其他角度有这种评测的机制吗?(追问)你认为打分的维度可能是什么?
  16. 16
  17. 17
  18. 18
    项目追问
    你说用到的 ReAct 模式,工具调用是怎么做的?是基于 Spring AI 还是 LangChain 还是某些框架实现的?
  19. 19
  20. 20
  21. 21
  22. 22
    项目追问
    你直接用这种去写完整项目或完整需求的时候,是怎么让他理解并执行你的项目编程规范的?
  23. 23
    写的时候,一个需求可能涉及你系统里很多业务知识和上下文,你怎么把这个告诉他?怎么让他知道在哪个模块写,哪个模块有现成方法,哪个模块先加方法,这个功能属于哪个包底下?(追问)你是帮他已经细分好了吗?告诉他怎么写、写哪些,跟他写是吧?(追问)通过提示词的方式告诉他?(追问)你每个需求都会有一个提示词把上下文告诉他?
  24. 24
  25. 25
    你俩都用了,我就问一些通用的。如果现在有个消息队列要去接消息处理一些业务逻辑,怎么保证业务的幂等性?(追问·业务幂等)业务上怎么做幂等的?(下单发短信场景)(追问)你两个消息同时去查这个 task,task 不都是在执行中吗?怎么防这个判断?并发?(追问)用 JUC 的一些变量、CAS 这种?(追问)分布式场景用 Redis?(追问)完整流程是什么?先用 Redis 锁住,然后执行业务,执行完释放锁?一锁二判三更新是吧?
  26. 26
    项目追问
    怎么限流?假设短信平台受不了这么大的量,希望按恒定速率,比如只能承受 100 QPS,你消息生产速度是 1 万 QPS,中间怎么做限量?(追问)怎么跟 MQ 的消费结合起来?消费入口获取令牌获取不到会怎样处理?完整流程是什么?(追问)获取不到就把消息丢回消息队列?这样不会频繁丢吗?不会给 broker 带来很大压力吗?(追问)你说的都是推的模式,MQ 如果是拉的模式,你有什么别的思路吗?
  27. 27
    项目追问
    五、深分页与卖家账单查询深分页和卖家账单查询的场景,你觉得有哪些要优化的?给订单系统做商家纬度账单查询,order 表分库分表,用卖家来查,近三个月或近六个月,很多条件。首先有深分页问题,深分页怎么优化?第二是这种卖家纬度的查询怎么去支持?(追问·深分页·游标)游标跳页的查询也支持吗?从第一页跳到第五页。(追问·深分页·跳页)账单查询并不像刷抖音一样,有一到十可以选择中间任何一页,你觉得这个方法能用吗?(追问·深分页)跳页怎么办呢?(追问·卖家表)你说卖家表,下单时把买家表落了以后,单独搞一个卖家表落买卖家 id 和买家表业务单号,查的时候查那个卖家表?(追问·卖家表)分页时每页查 200 条,卖家表查 200 个 id,再散到买家库查 n 个库,查 200 次,再聚合?(追问·卖家表)买家的所有字段你都落吗?相当于镜像表一模一样的字段,分表键换了一个?(追问·卖家表)两张表是双写吗?下达时都写上是吧?(追问·卖家表)写入开销小的话,怎么保证事务?A 成功 B 失败怎么办?(分布式事务)
  28. 28
    反问
    反问您前面简单介绍了部门业务,您提到一方面做业务、一方面做 Agent,平时主要用的技术栈大概哪些?
  29. 29
  30. 30
    反问
    您提到比较多的 vibe coding 工具,想请教一下您在拿到一个比较新的需求时,大概的工作流程是怎样的?
  31. 31
    反问
    整个开发流程感觉自动化比较强,我们程序员 / 开发者对比于他们,您认为我们的一些比较核心的优势大概是什么方面?

相关公司