--- id: plan.week15 title: "第 15 周:阶段 4(上)——作品集、简历、STAR 经历、口述稿" type: week domain: plan stack: [git] week: [15] est_hours: 12 order: 15 --- # 第 15 周:阶段 4(上)——作品集、简历、STAR 经历、口述稿 > 第四段的第 2 周。上周 `week14-backend-extend-deploy.md`,下周 `week16-interview.md`。 **本周目标**:把前 14 周的成果变成招聘方能快速看懂的材料:1~2 个重点展示的代表项目(共 3 个公开仓库)+ 1 份简历 + 3 条 STAR 工作经历 + 1 个“从问题到上线”的完整案例 + 1 个“AI 编程 + 验证方法”案例 + 1 份口述稿(含演示视频)。 **应聘材料清单(对照 BOSS直聘 2026-10-23 调研)** 调研中多个岗位在 JD 里直接写了应聘时要提供的材料:1~2 个代表项目(产品链接 / 仓库 / 截图 / 演示视频)、独立负责的范围、从问题定义到上线迭代的完整案例、AI 编程开发案例和质量控制方式,有的还要求提交 AI 会话记录;开源 / 技术博客加分(原始记录见 [research/boss-2026-10-23.md](../research/boss-2026-10-23.md))。本周的产出逐项对应: | 招聘方要的 | 你交付的文件 | 怎么准备 | | --- | --- | --- | | 1~2 个代表项目(链接 / 仓库 / 截图 / 视频) | `career/portfolio.md` | 从 3 个仓库中选 1~2 个重点展示(建议 RAG 客服问答 + Agent 项目),每个给出:仓库地址、在线演示地址(没有就写本地一键启动命令)、3~5 张截图、1~3 分钟演示视频(第 1、6 天) | | 独立负责的范围 | `career/portfolio.md` 每个项目的“我负责的部分” | 写清哪些是自己从零设计和实现的,哪些用了框架 / 开源组件;学习项目就如实写“独立完成” | | 从问题定义到上线迭代的完整案例 | `career/cases/problem-to-launch.md` | 按“问题和指标 → 方案和取舍 → 实现 → 上线 / 部署 → 数据 → 下一轮改进”写;素材来自第 5~6 周 RAG 评测(召回率从基线到改进后的变化)或第 12~13 周 Agent 的崩溃恢复和评测;可以参考[跨技术栈场景](../scenarios/index.md)的结构 | | AI 编程案例 + 质量控制方式 | `career/cases/ai-coding.md` + `career/session-logs/` | 选一个用 AI 编程工具完成的功能:需求和规则(AGENTS.md / rules / Skills)、AI 产出了什么、你发现并修正了什么、怎么验证(测试、故意破坏后测试失败、代码审查、真实环境验证);附**脱敏后**的会话记录。方法见 [AI 编程专题](../topics/ai/ai-coding/index.md) | | 开源 / 技术博客(加分) | `career/portfolio.md` 的“文章”部分 | 可选:把 1~2 个踩坑经历写成文章(例如“SSE 流式输出经过 Nginx 被缓冲”“LangGraph 检查点续跑”) | > 会话记录和截图在公开前必须脱敏:去掉公司名、内部地址、密钥、真实客户数据,提交前运行脱敏检查脚本(第 8 周第 2 天)。 **原则** - **只写做过的、能演示的**:简历上每一条都要能当场打开代码或演示讲清楚。 - **数字必须是自己跑出来的**:评测指标、耗时等都来自 `evals/reports/` 或自己的记录;没有数字就写现象和做法,不编。 - **脱敏**:公司经历只写机制和自己的贡献,不写公司内部的项目名、接口、数据(总纲第 10 节)。 ## 本周最终目录 ```text career/ ├── resume.md # 简历(Markdown 写,导出 PDF) ├── resume-variants/ # 针对不同岗位微调的版本 ├── star.md # 3 条 STAR 工作经历 ├── pitch.md # 口述稿:3 分钟架构 + 1 分钟踩坑 ├── portfolio.md # 作品清单:1~2 个代表项目的仓库、演示链接、截图、视频、我负责的部分 ├── cases/ │ ├── problem-to-launch.md # 从问题定义到上线迭代的完整案例 │ └── ai-coding.md # AI 编程案例:规则、产出、修正、验证方法 ├── session-logs/ # 脱敏后的 AI 编程会话记录(配合 cases/ai-coding.md) ├── screenshots/ # 代表项目截图 ├── jd/ # 收集的岗位描述(纯文本,一个岗位一个文件) ├── keyword_check.py # 简历和岗位描述的关键词对照 └── tests/test_keyword_check.py ``` --- ## 第 1 天:整理作品集(3 个公开仓库) ### 学习内容 - 说明:招聘方看作品通常只花几分钟:先看 README 顶部(一句话介绍 + 演示动图 + 快速开始),再看目录结构和一两个核心文件。所以每个项目要单独一个公开仓库(GitHub 或其他公开平台),而不是让人在学习仓库里翻。 - 说明:**不要直接公开学习仓库的历史**:历史里可能有早期误提交的内容。最稳妥的做法是把项目目录复制到一个新仓库,作为第一次提交,再做一遍脱敏检查。 - 案例:每个仓库 README 顶部的结构 ```markdown # agent-mini:可崩溃恢复的多 Agent 编排(LangGraph + FastAPI) ![演示](docs/demo.gif) 多个 Agent(提议者、审查者、协调者)协作完成方案讨论;任务在后台执行,进程被杀后自动续跑; 需要澄清时暂停等用户回答;全过程可通过 SSE 实时查看,并生成过程报告。 **亮点**:LangGraph 检查点续跑 · interrupt 人机协作 · 租约防重复执行 · MCP 工具服务 · 评测集 + 回归测试 ## 快速开始(不需要模型密钥) docker compose up -d && open http://localhost:8100 ``` - 动图:用录屏工具录 20~30 秒的关键流程(创建任务 → 流式输出 → 杀进程 → 恢复),转成 GIF 或放视频链接。 ### 易错点 / 面试常问 - 易错点:公开前在新仓库里再跑一次 `python3 tools/check_sensitive.py`(第 8 周的脚本,复制过去)并人工看一遍 `git diff --cached`;`.env`、数据目录、`*.db` 都要在 `.gitignore` 里。 - 易错点:README 里的命令要在一台干净的电脑(或新目录)上从头跑一遍,常见问题是漏了依赖、端口冲突、缺示例数据。 - 面试常问:“介绍一下你的项目”——先一句话说清解决什么问题,再说架构,最后说你做的最难的一个点(第 6 天的口述稿就是答案)。 ### 要建的文件 - 3 个公开仓库:`task-board`(含 `web/board-vue` 前端)、`rag-qa`(含 `web/rag-react`)、`agent-mini`;`career/portfolio.md` 记录地址和演示链接 - `career/portfolio.md` 中选出 1~2 个代表项目(建议 `rag-qa` 和 `agent-mini`),每个写:一句话介绍、仓库地址、演示地址或一键启动命令、3~5 张截图(放 `career/screenshots/`)、演示视频链接、**我负责的部分**、可以被追问的技术点 - `career/cases/problem-to-launch.md`(模板见下)和 `career/cases/ai-coding.md`(第 6 天前完成) ```markdown # 从问题到上线:<项目名> 1. 问题和目标:谁遇到了什么问题?用什么指标衡量(例如召回率@5、首 token 延迟、崩溃后能否续跑)?基线是多少? 2. 方案和取舍:考虑过哪几种方案,为什么选这个(引用 scenarios/ 中对应场景的取舍表) 3. 实现:我负责的模块、关键设计(2~3 条) 4. 上线 / 部署:怎么部署、怎么回滚、怎么监控 5. 结果:指标变化(只写自己测出来的数字,注明测试集和方法) 6. 下一轮迭代:发现了什么 Bad Case,怎么改的,改完的数据 ``` ### 运行方式 ```bash mkdir ~/pub && cp -r ~/zhuangang/agent-mini ~/pub/agent-mini && cd ~/pub/agent-mini rm -rf .venv data && git init && git add -A && git diff --cached --stat # 检查要提交的文件 python3 ~/zhuangang/tools/check_sensitive.py && git commit -m "agent-mini 初始版本" ``` ### 完成标准 - 3 个仓库公开;每个 README 顶部有一句话介绍、动图或视频、快速开始;脱敏检查通过。 - `portfolio.md` 中 1~2 个代表项目的截图、视频、负责范围齐全;`problem-to-launch.md` 每一节都有内容。 --- ## 第 2 天:简历结构、学历和技能栏 ### 学习内容 - 说明:简历一到两页,招聘方一般先扫 10 秒:**目标岗位、核心技能、最近的经历、项目亮点**。所以顺序是: ```markdown # 王士奎 · AI 应用 / Agent 开发工程师 电话 · 邮箱 · GitHub · 作品集链接 ## 个人优势(3 行以内) - 7 年 Web 开发经验,参与公司多 Agent 产品的前端和网关联调,熟悉多 Agent 编排、流式输出、长任务的工程问题 - 独立完成 3 个可演示项目:LangGraph 多 Agent(崩溃续跑、人机协作)、RAG 知识库问答(混合检索、评测)、Go 全栈任务看板 - 熟练使用 AI 编程工具(Cursor 等),负责设计、审查和调试 ## 专业技能 - Python:FastAPI、asyncio、pydantic、pytest - AI 应用:LangChain、LangGraph、RAG(Chroma、BM25 混合检索、重排)、MCP、Function Calling、Agent 评测 - 前端:Vue 3、React、TypeScript、Vite、Pinia、pnpm monorepo、Vitest - 后端:Go(Gin)、PostgreSQL / MySQL、Redis、RabbitMQ、gRPC 基础 - 工程:Docker、Compose、Nginx、Linux、CI/CD、Git ## 工作经历 (第 4 天写) ## 项目经历 (第 3 天写,项目三放第一) ## 教育经历 本科 · 学校名 · 专业 · 起止年月 ``` - 说明:**学历**:写“本科”,加上学校、专业、起止时间即可。标注了“统招”的岗位也可以投递试试,结果以对方的反馈为准;准备的重点放在项目和经验上——这次调研里绝大多数岗位写的是“本科”,没看到要求 985 / 211 的。 - 说明:**技能栏**按岗位关键词排序(总纲第 4 节的表),每一项都要有项目里的对应代码;“了解”的放后面或不写,免得被追问答不上。 ### 易错点 / 面试常问 - 易错点:技能栏写“精通”要谨慎,面试官会按“精通”的标准追问;一般用“熟练 / 熟悉 / 了解”区分。 - 易错点:不要把所有学过的技术都堆上去,和目标岗位无关的(比如很老的框架)删掉,突出主线。 - 易错点:简历导出 PDF 发送,文件名写“姓名-岗位-电话.pdf”;Markdown 原文留在仓库,方便修改。 ### 要建的文件 - `career/resume.md`:头部、个人优势、技能栏、教育经历 ### 运行方式 - 用编辑器的 Markdown 预览或 `pandoc resume.md -o resume.pdf` 导出(排版不满意就粘到简历模板里)。 ### 完成标准 - 头部、个人优势、技能栏、教育经历写完;技能栏每项都能说出对应的项目文件。 --- ## 第 3 天:项目经历怎么写 ### 学习内容 - 说明:每个项目 4~6 行,格式“**背景 / 目标 → 我的设计(带关键词)→ 结果(可验证)**”。关键词就是岗位要求里的词,招聘方和筛选系统都会搜这些词。结果写可验证的东西:评测数字(来自报告)、演示链接、测试覆盖的场景。 - 案例(方括号里填你自己的真实数据,没有就删掉那半句): ```markdown ### agent-mini · 可崩溃恢复的多 Agent 编排系统(个人项目) GitHub 链接 技术栈:Python、LangGraph、FastAPI、SQLite、MCP、SSE、Docker - 用 LangGraph 实现“协调者—提议者—审查者”多 Agent 编排,共识条件 + 最大轮数兜底,路由规则可单元测试 - 编排状态用检查点持久化,任务表 + 租约保证同一任务只被一个进程执行;演示中 kill -9 后重启可自动续跑 - 用 interrupt 实现“需要澄清时暂停等用户回答”,支持换模型后从检查点恢复 - 用 MCP 实现知识库工具服务,可同时被 Cursor 和自己的 Agent 调用 - 建立 [N] 条用例的评测集(规则检查 + 模型评分),调整提示词后通过率从 [x] 提升到 [y](见仓库 evals/reports) ### rag-qa · 带引用的知识库问答(个人项目) GitHub 链接 技术栈:Python、FastAPI、Chroma、BM25、Redis、LangChain、React - 手写加载—切分—向量化—检索—带引用生成全流程,检索不到时直接拒答,减少编造 - 实现 BM25 + 向量混合检索(RRF 融合)和重排,用 [N] 题评测集对比:Hit@K [x] → [y] - Redis 实现会话记忆、嵌入缓存和答案缓存(按知识库版本失效);SSE 流式输出 ### task-board · 团队任务看板(个人项目) GitHub 链接 技术栈:Go、Gin、PostgreSQL、Redis、Redis Streams、Vue 3、Docker、Nginx - 多人看板 + 成员角色权限,拖动排序用事务保证位置一致 - Redis 实现缓存、限流、分布式锁;Redis Streams 异步处理通知,消费者幂等 - Docker Compose + Nginx 部署,CI 自动测试 ``` ### 易错点 / 面试常问 - 易错点:写“负责 / 参与了 XX”看不出能力,改成“用 A 实现了 B,解决了 C”。 - 易错点:评测数字一定要能在仓库里找到出处(报告文件、提交记录),面试官可能会问“怎么测的、测了多少题”。 - 面试常问:每一行都可能被追问“为什么这样做、有没有别的方案、遇到什么问题”——写完后对每一行准备一句追问的回答,记到下周的面试笔记里。 ### 要建的文件 - `career/resume.md` 的“项目经历”部分 ### 完成标准 - 3 个项目都写完;方括号里的数字全部替换成真实数据或删除。 --- ## 第 4 天:工作经历——3 条 STAR ### 学习内容 - 说明:STAR = **情境(Situation)、任务(Task)、行动(Action)、结果(Result)**。面试官问“讲一个你解决过的难题”时,就按这个顺序讲。素材来自第 9 周的案例卡(已脱敏),三条分别对应:编排可靠性、状态权威源、业务落地。 - 说明:工作经历里写你**实际做过的部分**。如果某个问题你是发现者和分析者、方案是团队一起定的,就如实写“定位根因并提出方案”;你在学习项目里做了“若重做的设计”,可以写成“在个人项目中验证了改进方案”。 - 案例(结构示例,内容按你自己的案例卡改写): ```markdown ### 情境 公司的多 Agent 研讨功能由前端驱动多轮调用,用户关掉页面后研讨就中断,进度无法恢复。 ### 任务 定位中断原因,提出让长任务不依赖浏览器的方案。 ### 行动 - 梳理前端和 Agent 网关之间的调用链,画出时序图,确认循环跑在浏览器里、服务端只做单轮调用 - 对比“前端循环”和“后台作业”两种模式,整理出状态权威源、断线续传、防重复执行三个关键问题 - 在个人项目 agent-mini 中实现了后台作业 + 检查点续跑 + 事件回放,验证方案可行 ### 结果 形成了可落地的改进方案和演示;[如果方案在公司被采纳或部分实施,写实际结果;没有就不写] ``` ### 易错点 / 面试常问 - 易错点:STAR 讲成流水账。行动部分只讲 2~3 个关键动作,每个动作说清“为什么这么做”。 - 易错点:脱敏——不说公司内部的系统名、接口名、表名,用通用说法(“Agent 网关”“任务表”)。 - 面试常问:“你在这个项目里具体做了什么?”“如果重来一次你会怎么做?”“最大的困难是什么?”——三条 STAR 都要能回答这三个追问。 ### 要建的文件 - `career/star.md`(3 条,每条口述不超过 2 分钟);简历的“工作经历”部分写每条的一句话版本 ### 完成标准 - 3 条 STAR 写完并各口述计时一次;全部通过脱敏检查。 --- ## 第 5 天:针对岗位调整简历(关键词对照) ### 学习内容 - 说明:不同岗位侧重点不同(偏 RAG、偏 Agent、偏全栈)。投递前把岗位描述(JD)保存成文本,和简历对照关键词:岗位要求里有、你也会、但简历里没写的,补上;你不会的,不要硬写,记下来作为面试准备。 - 案例:写一个小脚本做关键词对照。 ```python # 文件:career/keyword_check.py """用法:python keyword_check.py jd/某公司.txt resume.md""" import re import sys from pathlib import Path # 关键词表:同一组里任一写法出现就算命中(按需要自己补充) KEYWORDS: dict[str, list[str]] = { "Python": ["python"], "FastAPI": ["fastapi"], "Flask": ["flask"], "LangChain": ["langchain"], "LangGraph": ["langgraph"], "LlamaIndex": ["llamaindex", "llama-index"], "RAG": ["rag", "检索增强"], "向量数据库": ["向量数据库", "向量库", "milvus", "chroma", "pgvector", "faiss"], "MCP": ["mcp"], "Function Calling": ["function calling", "tool calling", "工具调用", "函数调用"], "Agent": ["agent", "智能体"], "多 Agent": ["多 agent", "多agent", "multi-agent", "多智能体"], "评测": ["评测", "评估", "evaluation", "eval"], "Prompt": ["prompt", "提示词"], "Dify / Coze": ["dify", "coze", "扣子", "ragflow", "fastgpt"], "Vue": ["vue"], "React": ["react"], "TypeScript": ["typescript", "ts"], "Go": ["go", "golang"], "MySQL": ["mysql"], "PostgreSQL": ["postgresql", "postgres", "pgsql"], "Redis": ["redis"], "消息队列": ["消息队列", "rabbitmq", "kafka", "mq"], "微服务": ["微服务", "grpc"], "Docker": ["docker", "容器"], "Linux": ["linux"], "CI/CD": ["ci/cd", "cicd", "持续集成"], } def _has(text: str, word: str) -> bool: # 纯英文短词按“单词边界”匹配,避免 ts 命中 tests、go 命中 google if re.fullmatch(r"[a-z0-9/.\- ]+", word): return re.search(rf"(? set[str]: t = text.lower() return {name for name, words in KEYWORDS.items() if any(_has(t, w) for w in words)} def compare(jd: str, resume: str) -> dict[str, list[str]]: need, have = found(jd), found(resume) return {"covered": sorted(need & have), "missing": sorted(need - have), "extra": sorted(have - need)} def main() -> None: jd_path, resume_path = sys.argv[1], sys.argv[2] r = compare(Path(jd_path).read_text(encoding="utf-8"), Path(resume_path).read_text(encoding="utf-8")) print("岗位要求、简历已覆盖:", "、".join(r["covered"]) or "无") print("岗位要求、简历未提到:", "、".join(r["missing"]) or "无") print("(未提到的:会就补进简历;不会就记进面试准备,不要硬写)") if __name__ == "__main__" and len(sys.argv) == 3: main() ``` ```python # 文件:career/tests/test_keyword_check.py from keyword_check import compare, found def test_found_uses_word_boundaries(): assert found("熟悉 Go 和 TypeScript") >= {"Go", "TypeScript"} assert "Go" not in found("google tests") # 不误判 assert "TypeScript" not in found("pytest tests") def test_compare(): jd = "要求:熟悉 Python、FastAPI,有 RAG 和向量数据库(Milvus)经验,了解 Kafka。" resume = "Python / FastAPI;RAG(Chroma、BM25 混合检索);Redis" r = compare(jd, resume) assert r["covered"] == ["FastAPI", "Python", "RAG", "向量数据库"] assert r["missing"] == ["消息队列"] assert r["extra"] == ["Redis"] ``` ### 易错点 / 面试常问 - 易错点:关键词对上了只是第一步,简历里每个关键词都要有对应的项目描述,不能只出现在技能栏。 - 易错点:不同岗位只调整“个人优势”和项目里的侧重点,不要为了迎合岗位编造经历。 ### 要建的文件 - `career/jd/`(至少收集 10 个目标岗位的描述)、`keyword_check.py`、`tests/test_keyword_check.py`;`career/resume-variants/`:偏 Agent、偏 RAG、偏全栈三个版本 ### 运行方式 ```bash cd career && uv run --with pytest python -m pytest -q tests # 用 python -m 才能导入同目录的 keyword_check python keyword_check.py jd/某公司.txt resume.md ``` ### 完成标准 - 10 个岗位都对照过一次;把多次出现、你又没准备的关键词列进下周的面试笔记。 --- ## 第 6 天:口述稿和演示视频 ### 学习内容 - 说明:面试里最常见的开场是“自我介绍 + 介绍一个项目”。准备两段: - **自我介绍(1 分钟)**:方向 + 经验 + 3 个项目一句话 + 为什么想做 AI 应用。 - **项目讲解(3 分钟架构 + 1 分钟踩坑)**:总长不超过 4 分钟,覆盖重点 A(编排)、B(状态权威)、C(流式与长任务)中至少两项。 - 案例:项目讲解的骨架(`career/pitch.md`) ```markdown 1. 问题(30 秒):多 Agent 任务时间长、步骤多,跑在浏览器里关页面就断,状态也说不清在哪。 2. 架构(90 秒):对着架构图讲——API 创建任务 → 后台执行器领取租约 → LangGraph 按图执行, 每步写检查点和事件 → 前端用 SSE 订阅事件,断线按 Last-Event-ID 补齐 → 结束写结论和报告。 两层状态:检查点是编排草稿,任务表是对外权威。 3. 演示(60 秒):创建任务 → 看流式输出 → 杀进程 → 重启后自动续跑 → 查看报告。 4. 踩坑(60 秒):崩溃时正在执行的节点会重跑一次,所以有副作用的操作要幂等; 一开始用“先查再改”领取任务,并发时两个进程都抢到了,改成带条件的 UPDATE 看影响行数。 ``` - 说明:录一个 2~3 分钟的演示视频放进作品集(有些面试是线上的,可以直接共享屏幕或发链接)。 ### 易错点 / 面试常问 - 易错点:讲解时一直念代码细节,面试官会失去耐心;先讲整体,细节等对方追问。 - 易错点:没有计时练习,实际讲起来会超时。至少完整讲 3 遍并录音回听。 - 面试常问:“这个项目和直接用 Dify / Coze 搭有什么区别?”(第 13 周的对比笔记)“如果用户量变大,哪里先出问题?”(SQLite 换 PostgreSQL、执行器多实例、事件推送改用消息队列) ### 要建的文件 - `career/pitch.md`(自我介绍 + 项目讲解),演示视频链接写进 `career/portfolio.md` - `career/cases/ai-coding.md`:从第 1~14 周每周的 AI 编程练习中选 1 个最完整的功能,按下面的结构写,并把对应会话记录脱敏后放进 `career/session-logs/` ```markdown # AI 编程案例:<功能名> 1. 任务:要实现什么,验收标准是什么 2. 给 AI 的上下文:AGENTS.md / rules / Skills 里写了什么约束(贴片段) 3. AI 的产出:生成了哪些文件;哪些直接可用 4. 我发现并修正的问题:例如边界条件遗漏、竞态、越权、测试是假的(断言为空) 5. 验证方法:单元 / 集成测试、故意破坏关键逻辑后测试变红、类型检查、代码审查、真实环境冒烟;贴命令和输出 6. 结论:AI 节省了哪些时间(如实描述),哪些部分必须自己把关 7. 会话记录:session-logs/<文件名>(已脱敏) ``` ### 完成标准 - 自我介绍 ≤ 1 分钟、项目讲解 ≤ 4 分钟,各计时 3 遍;视频已录好。 - `cases/ai-coding.md` 的“验证方法”一节有可复现的命令和输出;会话记录已脱敏并通过检查脚本。 --- ## 第 7 天:自查、请人审阅、阶段 4(上)验收 ### 学习内容 - 说明:简历写完后最好请一位做后端或 AI 应用的朋友看一遍,问他三个问题:10 秒内看出我想找什么岗位吗?哪一条最想追问?哪一条看起来不可信?按反馈修改。 - 自查清单: ```text [ ] 目标岗位和简历标题一致 [ ] 技能栏每一项都有项目对应 [ ] 项目经历每一行都是“做了什么 + 怎么做 + 结果”,数字都能找到出处 [ ] 工作经历已脱敏,没有公司内部名称、接口、数据 [ ] 仓库、演示链接都能打开(用手机和别人的电脑试一次) [ ] 1~2 个代表项目都有截图和演示视频,写清“我负责的部分” [ ] “从问题到上线”案例有问题、指标、取舍、上线和迭代数据 [ ] “AI 编程”案例写清验证方法,附脱敏后的会话记录 [ ] 简历 PDF 两页以内,没有错别字,联系方式正确 ``` ### 要建的文件 - 根据反馈修改 `resume.md`、`star.md`、`pitch.md` ### 完成标准(阶段 4 上半验收) - [ ] 3 个公开仓库 + 演示视频;其中 1~2 个代表项目有截图、视频和负责范围说明(`portfolio.md`) - [ ] `cases/problem-to-launch.md`、`cases/ai-coding.md` 写完,`session-logs/` 已脱敏 - [ ] 简历(主版本 + 3 个岗位方向版本) - [ ] 3 条 STAR、口述稿计时达标 - [ ] 至少 1 位他人审阅过并完成修改 - [ ] 在总纲进度表勾掉第 15 周 ## 本周相关专题 > 本节由 `tools/gen_week_topics.py` 根据专题文件的 `week` 字段自动生成,请勿手改;想调整就修改对应专题文件的 frontmatter 后重新生成。 | 技术栈 | 课程 / 场景 / 面试题 | | --- | --- | | [AI 编程工具与验证](../topics/ai/ai-coding/index.md) | 课程:[验证 AI 产出](../topics/ai/ai-coding/02-verify-evidence.md);场景:[团队引入 AI 编程](../topics/ai/ai-coding/scenarios/ai-assisted-feature.md);[面试题](../topics/ai/ai-coding/interview.md) | | [CI/CD](../topics/devops/cicd/index.md) | 场景:[多语言仓库的流水线](../topics/devops/cicd/scenarios/multi-lang-pipeline.md) | | [Git](../topics/devops/git/index.md) | 课程:[合并、变基和撤销](../topics/devops/git/02-merge-rebase-recovery.md);场景:[线上紧急修复和密钥误提交](../topics/devops/git/scenarios/hotfix-and-leaked-secret.md);[面试题](../topics/devops/git/interview.md) | **跨技术栈场景**:[客服知识库问答](../scenarios/customer-service-kb.md)