面向 AI / LLM / Agent 开发工程师 与 AI 产品经理 的面试题库。 每道题会用头部的大模型的回答作为default回答。 持续迭代、不断新增题目,欢迎补充。
本项目收集并整理 AI / LLM / Agent 方向在面试中真实遇到的问题,包括但不限于:
- 工程师视角:模型原理、训练与推理、Prompt 工程、RAG、Agent 架构、工程化与部署、性能与成本优化等。
- 产品经理视角:AI 产品定义、需求拆解、评估指标、数据飞轮、合规与伦理、商业化与落地等。
对于每个问题会用头部大模型回答面试问题作为"Defualt Answer"。 每个问题一个markdown文件,包含元数据,目录包含所有问题方便检索。
📖 题目目录:index.md —— 按分类 + 序号排列,点击即可跳转到对应题目。
未来目标:当题量与质量达到一定程度后,基于这些结构化数据用 GitHub Pages 构建一个可检索、可分类浏览的静态站点。
所有题目 Markdown在 questions/ 根目录下;分类与检索能力由仓库根目录的单一索引文件 index.json 承载,根目录 index.md 是面向用户的可点击目录页。
AI-Interview-CheatSheet/
├── README.md # 项目说明(本文件)
├── LICENSE
├── index.json # 检索索引 + category registry(唯一索引来源,仓库根目录)
├── index.md # 目录页:按分类 + 序号排列,点击跳转到对应题目
├── questions/ # 题库主目录,所有 Q&A Markdown 存放于此
│ ├── llm-0001-attention-mechanism.md # 中文题目
│ ├── llm-0001-attention-mechanism.en.md # 对应英文翻译
│ ├── agent-0001-react-vs-plan-execute.md
│ └── rag-0001-chunking-strategies.md
├── assets/ # 图片、图表等静态资源
└── docs/ # 未来 GitHub Pages 站点的构建产物 / 配置
约定说明:
- 一题一文件、根目录平铺:每道题目独立成
.md文件,直接放在questions/根目录下。 - 文件命名:
questions/<id>-<slug>.md。<id>为方向-四位序号(如rag-0003);<slug>使用英文小写短横线命名(lowercase ASCII kebab-case),语义清晰、URL 友好,如llm-0001-attention-mechanism.md。 - 分类来自索引而非目录:题目的主分类由 frontmatter 的
category字段显式承载,并在根目录index.json中重复登记;index.json的categories是分类的权威 registry(含中文 label 与排序),不靠文件夹路径表达category。 - 归类原则:技术题一律按技术方向归类(
llm/agent/rag/engineering),即使role: pm也按技术方向归类,再用role字段标注视角(engineer/pm/both);product分类只放纯产品方法论题(如需求拆解、商业化、指标体系),避免与role: pm语义重叠。更细粒度先用tags,暂不引入subcategory。 - 语言区分:语言由文件后缀区分——中文原文为
questions/<id>-<slug>.md,英文翻译为同 basename 加.en.md,同样平铺在questions/根目录,如llm-0001-attention-mechanism.en.md。
index.json(位于仓库根目录)是题库的唯一检索索引与 category registry,必须是合法 JSON。分类 registry 预置五个固定分类:
{
"schema_version": 1,
"categories": [
{"id": "llm", "label": "大模型基础与原理", "sort": 10},
{"id": "agent", "label": "Agent 架构与编排", "sort": 20},
{"id": "rag", "label": "检索增强生成", "sort": 30},
{"id": "engineering", "label": "工程化、部署、性能、成本", "sort": 40},
{"id": "product", "label": "AI 产品经理方向", "sort": 50}
],
"questions": []
}每个 questions[] entry 的字段约定:
| 字段 | 必填 | 说明 |
|---|---|---|
id |
✅ | 全局唯一 ID,方向-四位序号,与文件名前缀一致 |
title |
✅ | 题目标题 |
file |
✅ | 中文源文件名(root-level,如 llm-0001-attention-mechanism.md) |
language |
✅ | 源文件语言,通常为 zh |
category |
✅ | 主分类,须匹配 id 前缀与 categories 中某个 id |
category_label |
✅ | 分类中文 label,与 categories 中对应项一致 |
tags |
✅ | 标签数组 |
difficulty |
✅ | easy / medium / hard |
role |
✅ | engineer / pm / both |
status |
✅ | draft / published |
contributor |
✅ | 题目提供人,默认 佚名 |
updated |
✅ | 题目条目最后变更日期,YYYY-MM-DD |
answers_count |
✅ | 答案条数 |
source |
⬜ | 可选,题目来源(公司 / 渠道) |
translations |
⬜ | 可选,翻译映射,如 {"en": "llm-0001-attention-mechanism.en.md"} |
索引不复制完整题干或答案正文——Markdown 文件始终是内容的 source of truth,
index.json只承载用于检索/分类/排序的元数据。 一致性约束:每个 root-levelquestions/*.md都必须有对应的 index entry,且每个 index entry 的file都必须指向真实存在的 root-level 文件。
每道题是一个独立的 Markdown 文件,由 YAML frontmatter(元数据) + 正文(问题 / 各条答案) 两部分组成。
一道题可以挂多条答案:录入时默认带一条 AI 答案(author 署回答模型名),之后任何人都可以追加署名的人类答案或新的 AI 答案。每条答案的元数据(署名、类型、日期等)写在 frontmatter 的 answers 列表里,答案正文写在正文区对应的 ## 答案 · <author> 小节中,二者通过 author 对应。
可直接复制下面的模板新增题目:
---
id: llm-0001 # 全局唯一 ID,"方向-四位序号",与文件名前缀一致
title: 简述 Transformer 中的自注意力机制 # 题目标题
category: llm # 主分类,须匹配 id 前缀和 index.json 中的某个 category
tags: [transformer, attention, 原理] # 细粒度标签,便于检索
difficulty: medium # easy | medium | hard
role: engineer # engineer | pm | both
contributor: 佚名 # 题目提供人,默认「佚名」
source: 字节跳动一面 # 可选,题目来源
status: published # draft | published
updated: 2026-06-17 # 题目条目最后变更日期(题干/元数据/任一答案,YYYY-MM-DD)
answers: # 多答案列表,至少一条
- author: Claude-Opus-4.8 # 署名:AI 答案填模型名,人类答案填自取的名字
type: ai # ai | human
model: Claude-Opus-4.8 # 仅 AI 答案填,便于按模型检索/统计;人类答案省略
answered: 2026-06-17 # 该答案的回答日期(YYYY-MM-DD)
updated: 2026-06-17 # 该答案的更新日期(YYYY-MM-DD)
- author: 老王
type: human
answered: 2026-06-18
updated: 2026-06-18
---
## 问题
简述 Transformer 中的自注意力(Self-Attention)机制,并说明为什么需要多头注意力。
## 答案 · Claude-Opus-4.8
> 🤖 AI 答案 · 模型:Claude-Opus-4.8 · 回答 2026-06-17
自注意力机制通过 Query、Key、Value 三组向量计算 token 之间的相关性……
> **要点**
> - Scaled Dot-Product Attention 的计算流程
> - 多头注意力如何捕捉不同子空间的特征
> - 复杂度与长序列的局限
## 答案 · 老王
> 🙋 人类答案 · 老王 · 回答 2026-06-18
面试时我会先讲清楚「为什么要 attention」,再展开计算细节……
## 延伸 / 追问
- 与传统 RNN / CNN 相比的优势?
- 如何缓解自注意力的 O(n²) 复杂度?
## 参考
- Vaswani et al., *Attention Is All You Need*, 2017元数据字段说明
| 字段 | 必填 | 说明 |
|---|---|---|
id |
✅ | 全局唯一标识,方向-四位序号(如 agent-0007),前缀与文件名/category 一致 |
title |
✅ | 题目标题,用于索引与站点展示 |
category |
✅ | 主分类,须匹配 id 前缀和 index.json 中的某个 category,不再与所在目录绑定 |
tags |
✅ | 标签数组,支撑多维检索 |
difficulty |
✅ | 难度:easy / medium / hard |
role |
✅ | 适配岗位:engineer / pm / both |
contributor |
✅ | 题目提供人(谁录入/提供了这道题),默认 佚名;注意与答案的 author 区分 |
source |
⬜ | 题目来源(公司 / 渠道),可留空 |
status |
✅ | draft(草稿)/ published(已发布) |
updated |
✅ | 题目条目最后变更日期(题干、元数据或任一答案有改动即更新),YYYY-MM-DD |
answers |
✅ | 答案列表,至少一条;每个元素的字段见下 |
answers[].author |
✅ | 答案署名:AI 答案填回答模型名(如 Claude-Opus-4.8),人类答案填自取的名字 |
answers[].type |
✅ | 答案类型:ai 或 human |
answers[].model |
条件 | 仅 AI 答案填,回答所用模型名;保留独立字段方便按模型检索/统计(人类答案省略) |
answers[].answered |
✅ | 该条答案的回答日期,YYYY-MM-DD |
answers[].updated |
✅ | 该条答案的更新日期,YYYY-MM-DD |
updated的两个层级:题目级updated是「整条题目最后一次变更」,用于站点排序与「最近更新」;每条答案的answers[].updated是「这条答案自身最后一次修订」。改动某条答案时,同时更新该答案的updated和题目级updated。
统一的 frontmatter 是后续维护索引、检索过滤、GitHub Pages 展示的基础,请新增题目时务必填写完整,并在
index.json中同步登记对应 entry。
- 阶段一 · 中文题库:搭建扁平目录结构与单题模板,持续录入中文 Q&A。
- 阶段二 · 英文翻译:为已发布题目补充
*.en.md英文版本,形成双语题库。 - 阶段三 · 检索 / 分类完善:基于
index.json与元数据完善分类索引、标签云与全文检索。 - 阶段四 · GitHub Pages 静态站:将结构化题库渲染为可检索、可分类浏览的静态站点对外展示。
欢迎一起完善这份题库!新增一条 Q&A 的流程:
- 确定分类:选定题目的主分类(
llm/agent/rag/engineering/product之一,须是index.json中已登记的 category;技术题按技术方向归类,纯产品方法论题归product)。 - 新建文件:复制上文「单题格式约定」中的模板,在
questions/根目录下新建文件,文件名为<id>-<slug>.md,<slug>用英文 kebab-case,如agent-0007-tool-calling-design.md。不要创建分类子目录。 - 填写元数据:完整填写 frontmatter(
id/category/tags/difficulty/role/contributor/status/updated以及answers列表),id不要与已有题目冲突,且category须匹配id前缀与某个 index category;不填contributor时按佚名处理。 - 撰写内容:问题描述清晰;至少提供一条答案,默认带一条署名模型名的 AI 答案,每条答案在正文区写成
## 答案 · <author>小节,并在 frontmatteranswers中补齐该答案的author/type/model/answered/updated。 - 新增/修订答案:在
answers列表追加或修改对应条目,更新该答案的updated,并同步刷新题目级updated。 - 登记索引:在
index.json的questions数组中新增/更新对应 entry(字段见上文「索引文件」),确保file指向新建的 Markdown 文件。 - 提交 PR:遵循下方命名与提交规范。
命名规范
- 文件名:
questions/<id>-<slug>.md,<slug>用英文小写 + 短横线(kebab-case),语义清晰,例如llm-0002-kv-cache-explained.md。 - 题目
id:方向-四位序号,前缀与文件名/category一致,如rag-0003、product-0012。 - 答案署名
author:AI 答案统一填回答模型名(如GPT-5.5、Claude-Opus-4.8),人类答案填自取的名字。 - 英文版:同 basename 加
.en.md后缀,同样平铺在questions/根目录,如llm-0002-kv-cache-explained.en.md。
提交(Commit / PR)规范
- 提交信息建议遵循 Conventional Commits:
docs: add llm question about kv-cache(新增题目)docs: fix answer in agent-0001-react-vs-plan-execute(修正内容)chore: update index.json(索引调整)
- 一个 PR 聚焦一类改动,便于 review。
- 提交前请自检:frontmatter 字段完整、
id唯一、index.json已同步登记且能被 JSON parser 解析、Markdown 渲染正常。
本项目基于 MIT License 开源。