上周和一位做后端转型的工程师聊面试。他简历里写了 RAG、Agent、向量检索、LoRA 微调,项目看起来很“满”,结果到了现场,面试官只追问了三个问题:为什么 Self-Attention 是瓶颈?RAG 为什么有时越检索越差?如果让你设计一个写周报的 Agent,失败链路在哪里?他每个词都见过,却始终答不成一个完整闭环。真正难的,从来不是“看过多少名词”,而是你能不能把概念、工程取舍和自己的项目经验连起来。题库的价值,也不该只是给你一份背诵清单,而是帮你长出一套“能讲明白”的表达骨架。
面试真正考的,不是记忆力,而是表达结构
很多人刷题时有一个误区:把题库当作标准答案仓库,试图找到“一句最正确的话”。可 AI 岗位的面试,尤其是大模型、Agent、RAG 方向,越来越少考纯定义,更多是在看你有没有形成稳定的回答结构。
比如面试官问:“Transformer 的 Self-Attention 复杂度是多少?”这不是一道只要说出 O(n²·d) 就结束的题。说完复杂度,下一步往往会追问:瓶颈在哪里?为什么长上下文贵?工程上怎么缓解?如果你只能停留在公式层,面试官会默认你只是背过。
更高质量的回答,通常有四层:
- 先给结论
- 再解释推导
- 再补工程影响
- 最后给优化路径
你可以这样组织:
- 结论:Self-Attention 核心计算量通常写作
O(n²·d) - 原因:
QK^T会得到一个n×n的注意力矩阵,序列越长,增长越快 - 影响:长文本推理时,计算和显存都会成为瓶颈
- 优化:可从 FlashAttention、稀疏注意力、线性注意力等方向缓解
金句:面试里的好答案,不是“答对”,而是“答出层次”。
这也是很多工程师在 AI 面试里被拉开差距的地方。基础题回答得像搜索引擎,系统设计题回答得像项目复盘,给人的判断完全不同。前者说明你知道概念,后者说明你理解技术。
所以,刷题时不要只盯着“答案是什么”,而要多问自己三件事:
- 面试官为什么会问这题?
- 这题在考定义、推理还是取舍?
- 我能不能接上自己的项目经历?
如果你把题库当成“表达训练集”,它的价值会比背 100 道题更大。
从基础题入手,要学会把“定义”讲成“问题”
AI 面试里最常见的失分,不是不会,而是答得太平。像 LayerNorm 和 BatchNorm 的区别、LLaMA 做了哪些改进、什么是 KV Cache,这些题几乎每个候选人都见过。但优秀回答和普通回答的差别,在于有没有把“定义”翻译成“工程问题”。
先看一个高频基础题:LayerNorm 和 BatchNorm 的区别。
很多人的回答是表格式的:
- BatchNorm 沿 batch 维度归一化
- LayerNorm 沿特征维度归一化
- Transformer 常用 LayerNorm
这当然没错,但还不够。更完整的讲法应该加上“为什么 Transformer 不偏爱 BatchNorm”。
因为 NLP、LLM 场景里,batch size 往往变化大,序列长度也不稳定,推理阶段还常常是单条请求。BatchNorm 依赖 batch 统计量,这会让训练和推理的一致性更复杂;而 LayerNorm 只看单个样本自身特征,因此在序列建模里更稳定。
下面这段代码很适合在面试时辅助解释差异:
import torch
x = torch.randn(4, 16, 64) # [batch, seq_len, hidden]
# BatchNorm 风格:跨 batch 统计
bn_mean = x.mean(dim=0) # [16, 64]
bn_var = x.var(dim=0, unbiased=False)
# LayerNorm 风格:对每个 token 的特征维度统计
ln_mean = x.mean(dim=-1, keepdim=True) # [4, 16, 1]
ln_var = x.var(dim=-1, keepdim=True, unbiased=False)
print("BatchNorm mean shape:", bn_mean.shape)
print("LayerNorm mean shape:", ln_mean.shape)
你不一定非要手写代码,但如果你能借代码说明归一化维度差异,面试官会很容易判断你是真懂。
再看另一个常见题:什么是 KV Cache?
只回答“缓存历史 token 的 K/V,避免重复计算”还不够。更进一步,你需要讲它的价值和代价:
- 价值:减少自回归生成中的重复计算,显著提升推理速度
- 代价:上下文越长,KV Cache 占用显存越大
- 工程权衡:吞吐、延迟、显存三者往往不能同时最优
面试官真正想听的,不只是名词解释,而是你有没有把“一个机制”看成“一组约束”。
金句:基础题不是低级题,基础题往往最能暴露你理解是否扎实。
别把 Agent 题答成流程图,要答成一个可落地系统
Agent 是最近最容易“简历很丰富,回答很空泛”的方向。很多人说自己做过 Agent,但一到设计题,就开始画一个经典链路:用户输入 → LLM 思考 → 工具调用 → 返回结果。这个流程并不算错,只是没有信息量。
真正有区分度的 Agent 回答,要包含至少四部分:
- 任务目标是什么
- 需要哪些工具
- 决策流程怎么跑
- 失败时如何兜底
以“设计一个写周报的 Agent”为例,很多人只会说:“接入日历、Git、文档模板,然后让模型生成周报。”这句话最大的问题是,它没有体现你是否真正考虑过真实使用场景。
更完整的设计,应该像这样拆:
1)输入源设计
周报不是凭空来的,通常至少有三类数据源:
- 日历和会议纪要:补齐沟通类工作
- Git 提交与合并记录:补齐开发动作
- 文档/IM 记录:补齐方案讨论与排障过程
2)中间结构化层
不要让模型直接面对脏数据,而是先做一层标准化:
- 时间范围统一
- 工作项去重
- 提交记录聚类
- 会议主题映射到项目模块
3)生成策略
不是“一次性写完”,而是分步骤:
- 先归类本周事项
- 再提炼成果与问题
- 最后套入团队模板
4)失败链路
这一步最容易体现工程经验。比如:
- Git commit 太碎,无法直接映射成果
- 日历信息不完整,导致工作缺失
- 多项目并行时,模型容易混淆归属
- 周报措辞可能过度泛化,缺乏“可验证细节”
下面给一个更接近工程实现的示意代码:
from typing import List, Dict
def collect_calendar_events(start_date: str, end_date: str) -> List[Dict]:
return [
{"title": "RAG 召回优化讨论", "project": "search-ai", "date": "2026-03-18"},
{"title": "Agent 工具链评审", "project": "ops-agent", "date": "2026-03-20"},
]
def collect_git_commits(start_date: str, end_date: str) -> List[Dict]:
return [
{"msg": "优化向量召回过滤逻辑", "project": "search-ai"},
{"msg": "增加工具调用超时重试", "project": "ops-agent"},
{"msg": "修复周报模板字段缺失", "project": "ops-agent"},
]
def categorize_work(events: List[Dict], commits: List[Dict]) -> Dict:
result = {"成果": [], "问题": [], "下周计划": []}
for e in events:
result["成果"].append(f"参与会议:{e['title']}({e['project']})")
for c in commits:
if "优化" in c["msg"] or "增加" in c["msg"] or "修复" in c["msg"]:
result["成果"].append(f"代码工作:{c['msg']}({c['project']})")
result["问题"].append("部分工作项缺少统一标签,跨系统归档成本较高")
result["下周计划"].append("继续完善 RAG 召回评估与 Agent 工具稳定性")
return result
def render_weekly_report(structured_data: Dict) -> str:
return f"""
【本周成果】
- """ + "\n- ".join(structured_data["成果"]) + f"""
【遇到问题】
- """ + "\n- ".join(structured_data["问题"]) + f"""
【下周计划】
- """ + "\n- ".join(structured_data["下周计划"])
if __name__ == "__main__":
events = collect_calendar_events("2026-03-17", "2026-03-22")
commits = collect_git_commits("2026-03-17", "2026-03-22")
structured = categorize_work(events, commits)
report = render_weekly_report(structured)
print(report)
这段代码并不复杂,但它至少说明了一件事:你知道 Agent 不是一句“调模型+接工具”就能落地,而是一个“采集—整理—生成—校验”的系统。
金句:Agent 的难点从来不在会不会调用工具,而在出了错以后系统还是否可信。
RAG 和系统设计题,最容易拉开真实差距
如果说基础题考的是认知,Agent 题考的是流程,那 RAG 和系统设计题考的就是“你有没有踩过坑”。
很多面试官会问:为什么 RAG 有时加了检索,效果反而更差?这类问题非常适合用“原因分层”的方式回答。
第一层,召回错了。
检索回来的内容和问题不相关,模型被噪音带偏。
第二层,切片错了。
文档 chunk 太短,语义不完整;chunk 太长,又会混入无关内容。
第三层,排序错了。
向量召回拿到了“差不多”的内容,但真正关键的信息没排到前面。
第四层,拼接错了。
上下文组织杂乱,证据之间冲突,模型无法稳定使用。
第五层,评估错了。
团队只看最终回答好不好,却没有拆开看召回、重排、生成分别出了什么问题。
这时候,一个好的回答不该停在“可能是召回问题”,而是要继续讲:如果让我排查,我会怎么做?
例如:
- 先抽样看 TopK 召回结果是否真的相关
- 再检查 chunk 策略是否破坏语义边界
- 再看是否需要 rerank
- 最后把生成结果和检索证据对齐,判断模型到底有没有“读懂”检索内容
你甚至可以举一个真实场景案例:
某企业知识库项目里,FAQ 类问题效果很好,但一涉及制度条款和版本差异,回答就开始飘。后来排查发现,不是模型不行,而是文档切片按固定长度切开,把“适用范围”和“例外条件”拆到了两个 chunk。用户问题命中了前者,没命中后者,模型就会给出看似合理但其实不完整的回答。
这个案例的价值在于,它能体现你的判断不是抽象的,而是和数据处理、检索链路、提示词策略都有关。
系统设计题也是同理。面试官问你“设计一个企业内部知识问答系统”,很多人一上来就是:
- 文档入库
- 向量化
- 检索
- LLM 生成
这样的回答过于平。真正有经验的回答,会补齐这些关键点:
- 数据更新机制怎么做,增量还是全量?
- 权限隔离怎么做,不同部门能否看到不同文档?
- 命中率和准确率怎么评估?
- 幻觉出现时如何追溯引用来源?
- 大并发场景下,检索与生成如何限流和缓存?
金句:系统设计题不怕你讲不全,怕的是你只讲主链路,不讲约束条件。
新技术题的关键,不是追热点,而是判断边界
这两年的 AI 面试,还有一类题越来越常见:你怎么看某个新框架?某种新范式值不值得用?比如 GraphRAG、长上下文方案、MCP、Multi-Agent 协作、推理模型、工作流框架。这类题表面像“聊趋势”,本质上在考你的判断能力。
一个常见错误是,只会说“这个技术很新、很强、很有前景”。这种回答信息密度几乎为零。面试官更想看的是,你能不能把“价值”和“边界”同时说出来。
比如问你:“GraphRAG 适合什么场景?”
你可以这样答:
- 它的价值在于能显式建模实体关系,适合多跳查询、复杂知识关联、企业知识图谱增强场景
- 它的代价在于构图、更新、维护成本高,冷启动比普通向量检索更重
- 如果数据经常变化、结构不稳定,或者问题本身以局部事实查找为主,未必比传统 RAG 更划算
这类回答有三个好处:
- 不是盲目吹新技术
- 体现了成本意识
- 说明你会按场景做技术选择
同样,问到 Multi-Agent,也不要只说“多个 Agent 分工协作更强大”。你要继续讲:
- 适合任务可拆解、角色边界清晰的场景
- 会带来通信成本、状态同步、错误传播问题
- 对很多中小团队来说,单 Agent + 明确工作流,可能更稳、更可控
这类题最容易暴露候选人是不是“只刷了几篇推文”。因为真正做过工程的人,通常不会只谈能力上限,还会谈维护成本、监控难度和稳定性。
金句:判断一个新框架值不值得用,不看演示有多惊艳,要看它是否真的改善了你的约束条件。
用题库准备面试,别追求刷完,要追求形成自己的答案库
很多人准备 AI 面试时,会给自己定一个很危险的目标:一周刷完 200 题。结果往往是,题看了很多,真正能讲出来的没几道。更有效的方法,不是“题海战术”,而是建立自己的答案库。
如果你时间很紧,可以先抓三类:
- 高频基础题
- Agent / RAG 相关题
- 新技术判断题
这些题覆盖率高,且最容易被追问。先把每道题都练到“能回答 2 分钟”,比泛泛看完一堆答案更有效。
如果你想系统准备,可以按四步走:
第一步:先只看问题,不看答案
判断自己是否真的会,而不是看了答案后产生“我会了”的错觉。
第二步:对照参考答案,补盲区
重点找自己缺的不是“知识点”,而是“表达层次”。
第三步:回到正文补上下文
比如看到 KV Cache,就回去看推理优化;看到 RAG 排查,就回去补检索评估;看到 Agent 设计,就回去补工具编排与失败处理。
第四步:重新组织成自己的版本
最关键的一步,不要复述参考内容,而要变成你自己的语言。最好每道题都能接一个项目例子,哪怕只是实验经历。
你可以给自己设计一个答题模板:
- 一句话定义
- 背后的核心问题
- 工程上的影响
- 常见优化或取舍
- 一个自己的案例
这个模板非常适合大模型、RAG、Agent 类岗位,因为它天然贴合面试官的追问路径。
如果你已经有项目经验,那更应该重点练:
- 系统设计题
- 实战排障题
- 新范式判断题
因为决定 offer 上限的,往往不是你会不会解释 Transformer,而是你能不能把“为什么这样设计、出了问题怎么定位、为什么不用另一套方案”讲清楚。
面试准备不是把自己训练成题库播放器,而是把零散知识、项目经验和表达能力揉成一套稳定输出。题库的意义,也恰恰在这里:它不是替你回答,而是帮你建立回答的骨架。
很多工程师在转向 AI 岗位时,焦虑都来自一个错觉:总觉得自己还没看够、还没准备全。可真正进入面试,你会发现,面试官更在意你能否把有限的知识讲出结构,把做过的事情讲出判断,把没做过的方向讲出边界。如果你正在准备 AIGC、LLM、Agent、RAG 相关岗位,不妨把题库当成一次“表达训练”,先练出 20 道真正能打的题,再慢慢扩展到系统设计和趋势判断。AgentInterview 这类成长型知识库最适合做这件事:不只是帮你查漏补缺,更重要的是,帮你把“知道”变成“会讲”。