准备面试像收拾行李:箱子就那么大。
你可以把整个衣柜塞进去,但到了地方既打不开也找不到。要回答的问题不是「还有什么没复习」,而是「哪些东西不带会死」。
这篇是我给自己排的 AI 应用 / Agent 岗复习清单。排序原则只有一条:投入产出比。
一、先搞清:考什么由 JD 正文决定,不由公司决定
同一个公司,不同岗位问的东西可以完全不一样。
真实例子:有赞。「agent 开发」岗问的是 AI 概念,「后端 AI 开发」岗问的是后端八股。
所以别按公司背题,按 JD 关键词分:
| JD 里出现 | 面试在考什么 | 你该用哪套 |
|---|---|---|
| agent / llm / mcp / rag | AI 概念 + 你的项目 | 本文的 P0 + P1 |
| 后端 / 高并发 / 中间件 | 后端八股 | 不是本文的战场 |
JD 里出现 agent / llm / mcp / rag,就是你的主场。
二、🔴 P0:不补必挂(占 80% 时间)
七条,每条都要能用大白话讲出来:
| # | 主题 | 必须能讲出来的东西 |
|---|---|---|
| 1 | ReAct 循环 | Thought→Action→Observation;Agent = LLM + Memory + Tools + Planning;Agent 与 Workflow 的区别和各自适用场景 |
| 2 | MCP 全貌 | Host / Client / Server 三个角色;Tools / Resources / Prompts 三类能力;基于 JSON-RPC 2.0;stdio、HTTP+SSE、Streamable HTTP 三种传输;工具发现走 tools/list |
| 3 | MCP vs Function Calling | 核心一句:LLM 不执行函数,它只输出 tool_calls,实际执行的是应用 |
| 4 | RAG 全流程 | Chunking 策略、Embedding 选型、向量 vs 关键词检索、混合检索 + RRF、Rerank 解决什么问题、Query Rewrite |
| 5 | 你怎么验证效果 | 离线评测集、LLM-as-judge、人工抽检、A/B |
| 6 | 长会话 / 上下文管理 | 摘要压缩、滑动窗口、关键信息提取、分层存储(短期 Redis / 长期向量库 / 工作记忆里的任务状态) |
| 7 | 算法 | Hot 100 里最高频的 30 题(下一节展开) |
第 1 条要能默写出这个循环,面试时经常让你「口述一下 ReAct 怎么跑的」:
Thought: 我需要知道用户有没有 Python 经验
Action: search_resume(query="Python")
Observation: 第 3 段提到「3 年 Python 后端」
Thought: 够了,可以回答第 5 条最容易被忽略,但它其实是面试官区分「做过 demo」和「做过产品」的分界线。你答不出验证方法,前面讲得再花哨也像抄的。
三、关于算法:网上那句话是错的
网上流传「初级 AI 应用岗不考算法题」。
这是错的。
实证:群核、阿里、字节、小红书、携程的一面、二面都有手撕算法,其中群核有因算法挂掉的真实记录。
实际见到的题目:
- LRU Cache(字节)
- 合并区间(阿里)
- 第 K 大元素
- 环形链表(小红书)
- 三数之和
- 水果成篮
- 岛屿数量
- LeetCode 81
- 多维 DP(群核)
- 有效的括号(群核)
注意上面这些没有一道是竞赛题,全是 Hot 100 量级的。
做法:Hot 100 里挑最高频的 30 题,每道都能在 20 分钟内手写出来、能一次跑对。不要刷 300 题,要刷 30 题刷到闭眼能写。
四、🟡 P1:补了加分(占 20% 时间)
按性价比排:
| 主题 | 一句话重点 |
|---|---|
| 工具调用失败的分层处理 | 瞬时错误指数退避 / 参数错误返回给 Agent 自修正 / 业务错误让 Agent 决策 / 安全拦截。错误信息要作为 Observation 回传给模型 |
| 工具数量爆炸 | 30 个工具时准确率掉到七八十 → 分组路由、动态注册,每轮只给 5–8 个 |
| Prompt 注入防御与越狱 | 输入隔离、指令与数据分离、输出检查 |
| 稳定性四件套 | 模型路由 / 三态熔断器 / Token 成本优化 / 可观测性 |
| SSE 流式 | 为什么用 SSE 不用 WebSocket;EventSource 为什么不支持 POST 和自定义 Header |
| 前端八股 | 事件循环、闭包、this、原型链;手写深拷贝 / 防抖节流 / Promise.all |
| Vue3 响应式 vs React Fiber | 依赖追踪 vs 可中断的调度 |
| 构建工具 | Vite 为什么快(原生 ESM + esbuild 预构建)、pnpm 为什么更优(硬链接 + 内容寻址) |
| HTTP 缓存与 CORS | 强缓存 / 协商缓存、简单请求与预检 |
| 手写 SQL | 多表 JOIN、GROUP BY + HAVING、窗口函数 |
| Skill vs System Prompt vs MCP | 三者分别在什么层次解决「给模型知识」这件事 |
五、🚫 P2:明确放弃
不看,不留遗憾:
- 操作系统:调度、内存、死锁、页表
- 后端深水区:线程池、JVM、AQS、分布式事务、分库分表、MQ
- 数据库进阶:索引优化、执行计划、MVCC、范式
- AI 底层:Transformer 原理、Attention 公式、KV Cache、LoRA、RLHF、DPO
- 算法竞赛:动态规划优化、图论、数据结构设计
理由很直接:这些是「后端 AI 开发」岗的题。
同一家公司(还是那两个岗位),「agent 开发」问 AI 概念,「后端 AI 开发」问后端八股。你在后者身上花的时间,在前者的面试里一分都换不回来。
五之二、但「放弃」有一个危险的副作用
P0 要求你会讲 RAG 全流程和 Embedding 选型,P2 又放弃 Transformer 原理。
于是面试官追问「embedding 为什么能表示语义」的时候,"P2 放弃了" 不是一个能说出口的答案。
要准备一句边界话术,把"不懂公式"和"不懂概念"分开:
我不推 attention 公式,但我理解核心直觉:模型是在「预测上下文」这个任务里训练的,经常出现在相似上下文中的词,会被迫得到相近的表示。 所以「毛玻璃」和「frosted glass」字面完全不重合,在这个空间里却离得很近——这是向量检索能跨语言召回的原因。 这个理解足够让我做检索选型,但不够让我改模型结构。
这段话的结构值得记住:先说你不懂什么(公式),再说你懂什么(直觉),最后划清边界(选型 vs 改结构)。
它之所以成立,是因为第三条是真的——你不是在谦虚,你是在准确描述自己的能力边界。面试官分得出来这两者的区别。
六、不会的时候怎么答
有一条被面经反复验证过的答法:
「这块我没深入接触过,我主要做的是 XX。」
不要硬编。面试官对「基础一般,但诚实、而且能自己推导」的评价是「可培养」,不是淘汰。
反过来,硬编被戳穿的代价远大于承认不会——后者只损失一个知识点,前者损失的是整场面试的可信度。
七、一句话版本
按 JD 正文里的关键词而不是公司名准备;P0 的七条(含算法)一条都不能省,P2 的那些是「后端 AI 开发」岗的题。
八、自测
- 为什么说「考什么由 JD 正文决定」?举出文中的例子。
- P0 里第 5 条(怎么验证效果)为什么是分界线?你打算怎么讲你自己的项目?
- 「初级 AI 应用岗不考算法」这句话错在哪?你会怎么反驳?
- 下面哪些属于 P2:MQ、MCP、MVCC、LoRA、CORS?
- 被问到完全不会的东西时,标准答法的两个组成部分是什么?