Skip to content

第 22 周 · Day 4:项目复盘——用 STAR 法则重写里程碑 ​

对应手册任务:学习「项目复盘:用 STAR 法则重写三个里程碑」,动手为每个项目写 Situation/Task/Action/Result,重点写架构决策和踩坑,当日产出 STAR 文档。本篇只解决一个问题:23 周攒下的代码和文档,你自己讲出来是一串技术名词,面试官抓不到重点。STAR 把项目经验重组成一条叙事线:冲突在哪、你负责什么、做了什么决策、拿到什么结果。

今日目标 ​

  1. 说得清 STAR 和「项目介绍流水账」差在哪,面试官到底在四个格子里找什么
  2. 掌握每个格子的深用法:S 一句话造冲突、T 划职责边界、A 写决策和被否掉的替代方案、R 用压测与评估数据量化
  3. 独立写出四个里程碑的 STAR 文档,配上踩坑素材库和每个 STAR 三条预判追问,形成能直接带进面试的弹药包

概念讲解:为什么 STAR 不是填表,是叙事设计 ​

先看一段典型的流水账:

「我做了三个项目。第一个是全栈 CRUD,前后端都写了;第二个把项目部署上云,加了监控;第三个是多 Agent 客服系统,用 LangGraph 写的 Supervisor,还做了人工审批。」

面试官听完,脑子里只剩一串技术名词。他不知道哪个难、你解决了什么问题、为什么这么做、结果怎样。下一个问题只能是「详细讲讲第二个」,于是你从流水账第一格开始现场组织语言——最该提前准备的部分被留在了考场。

STAR 是 Situation(情境)、Task(任务)、Action(行动)、Result(结果)的缩写。但把它理解成四格填空就废了,四个格子各凑一百字,读起来像分类账。它真正的用法是叙事设计:S 制造冲突,T 把你放到冲突中心,A 展示你怎么打,R 证明你打赢了。一条线下来,面试官不用追问就知道重点在哪;他追问,也只会顺着这条线挖,而这条线上你提前铺好了防线。

你手里的弹药比想象中多。23 周的每周教程末尾都有「常见踩坑」章节,第 16 周有 golden dataset 和 judge 一致率报告,第 21 周有 100 并发压测数据。这些资产此刻兑现:没有生产流量不要紧,压测和评估数据同样是量化结果,而且是真实测出来的。

核心知识 ​

1. S:一句话造冲突 ​

反例:「我们项目是一个客服系统。」

正例:「客服 Agent 要同时处理查订单和退款两类请求,单 Agent 塞下所有工具后提示词膨胀、工具选错率上升,而退款是高危操作,错了直接资损。」

差别就在冲突。冲突从三个维度来:规模(多少请求、多大延迟压力)、约束(几天内上线、没有运维人力、高危操作不能错)、痛点(改一个字段要改三处、挂了没人知道、成本翻倍)。一句话里塞进一到两个,难度立刻立起来。

S 的长度是一到两句。背景铺垫超过三句,面试官已经走神了。

2. T:划清你的职责边界 ​

T 回答「你在冲突里扮演什么角色」。团队项目要写清你负责的切片,个人项目要写清你划定的负责范围。「独立完成部署链路」和「参与部署」是两个完全不同的信号。

学习项目没有团队分工,T 就写范围决策:在什么约束下,我选择把这个做全、把那个砍掉。这本身就是工程判断力。T 还给 A 划了范围,T 里没提的部分,A 里就别写,写了面试官会问「这是你做的吗」。

3. A:最值钱的部分——决策、理由、被否掉的替代方案 ​

A 不是技术清单。「用了 LangGraph、Redis、Docker」一个词都不用写在 A 里,简历上看得见。A 要写的是每个关键节点的决策三件套:做了什么决策、为什么、权衡过什么替代方案。

记住一条:「为什么不用 X」比「用了 Y」值钱。说出「Supervisor 我用硬路由,权衡过软路由但否掉了,因为……」,面试官听到的是判断力;只说「我用了 Supervisor」,他听到的是照教程敲。前者是工程师,后者是实施者。

A 占整个 STAR 的六成篇幅。每个里程碑准备两三个决策点就够,贪多则每个都讲不深。

4. R:量化,压测和评估数据顶上 ​

R 的铁律是有数字。「系统稳定运行」不是结果,「100 并发压测下的延迟和单次对话成本记录在周记里」才是。

没有生产流量,就翻第 16 周和第 21 周的产出:golden dataset 30 条的回归通过率、judge 与人工标注的一致率、100 并发压测的延迟与成本、语义缓存命中率、注入测试从中招到拦截的转变。这些经得起「怎么测的、基线是什么」的追问。

绝对不编数字。面试官顺着任何一个数字往下挖两层,编的当场穿帮。

动手任务:四个里程碑的 STAR 一步一步 ​

手册说「重写三个里程碑」,我建议四个全写,再从中挑三个最能打的。投 Agent 岗带 v3、v4,投全栈岗带 v1、v2,弹药齐了才有得换。全程约 60 分钟。

第 1 步:建文件。 在本周的产出目录新建 star.md,四个里程碑各起一个二级标题,每个标题下写 S/T/A/R 四段,末尾留一节「预判追问」。

第 2 步:v1 全栈 CRUD——主打 monorepo 工程决策。 范文:

S:全栈项目前后端各写一套类型定义,接口字段一改两边手动同步,漏一处就运行时才爆。 T:独立完成实体 CRUD 全链路,工程结构自己定。 A:选 monorepo 而不是两个独立仓库,把接口类型抽成共享包,前后端同时引用,改一处字段、两端编译期同步报错;一条命令拉起全部服务。权衡过拆成两个仓库(部署独立),但当时没有独立部署需求,跨仓同步类型的成本更高。 R:字段变更从「改两处、漏一处运行时炸」变成「改一处、编译器两处把关」;这套共享类型在第 20 周接 BFF 时还在直接复用。

第 3 步:v2 上线监控——主打单机到云的部署链路。 范文:

S:应用只能 localhost 跑,没 HTTPS、没日志,进程挂了没人知道。 T:独立完成从单机到公网可访问的完整部署链路。 A:Docker Compose 统一运行环境;Nginx 反向代理,Certbot 申请 Let's Encrypt 证书上 HTTPS;GitHub Actions 走 SSH 自动部署,push 即上线;pino 输出结构化日志,prom-client 暴露 /metrics,Prometheus 抓取、Grafana 画面板;补上 /health 健康检查和优雅关闭。权衡过托管平台,但它的部署链路是黑盒,我要的是看得见每一跳。 R:公网 HTTPS 可访问,push 到 main 自动部署;面板能看到接口指标,服务异常时健康检查先于用户发现。

第 4 步:v3 多 Agent——主打硬路由决策和 HITL。 范文:

S:客服场景有查订单、退款两类请求,单 Agent 塞所有工具后提示词膨胀、工具选错率上升,退款又属高危操作,无人兜底。 T:设计并实现多 Agent 协作架构,含人工审批链路。 A:Supervisor 模式拆出客服、订单、退款三个 Worker。关键决策是硬路由:Supervisor 用结构化输出一次性决定路由给哪个 Worker,图的边是确定的;权衡过软路由(把 Worker 列表交给 LLM 每步自选),自由度更高但不可控、出错难定位。退款前用 interrupt() 中断等待人工批准,前端审批后恢复 Graph;工具调用统一加超时与重试。 R:高危操作 100% 经人工审批;每条请求的路由决策在图里看得见,出错能归因到具体节点。

第 5 步:v4 安全评估——主打评估驱动和纵深防御。 范文:

S:Agent 接了工具、读外部文档,注入攻击面变大;prompt 一改,好一处坏两处,没有回归手段。 T:独立建立评估基线与安全防线。 A:评估先行——从对话记录挑 30 条人工标注成败,建 golden dataset;judge 从打分改成二元判定,迭代 rubric 把与人工一致率做到 80% 以上;promptfoo 接进 CI,通过率跌幅超 3% 自动阻断合并。安全上纵深防御——在知识库 PDF 里藏注入指令实测中招后,对照 OWASP Agentic AI Top 10 自查标出 3 个高风险项逐一修复;guardrail 中间件做输入过滤、输出脱敏、高危工具二次确认,多层设防而不是赌单点。 R:prompt 变更有了回归门禁;注入测试从「中招」到「被拦截」;judge 一致率达标,评估链路可复跑。

范文里的数字(30 条、80%、3%)是手册定的目标和量,直接用没问题;其余效果描述换成你的实测记录再背熟。

第 6 步:建踩坑素材库。 新建 pitfalls.md,把 23 周每周的「常见踩坑」过一遍,每条压成一行:现象 → 根因 → 修复 → 出自第几周。比如空数组让泛型推断成 never[]、MCP 新规范改成无状态、RAG 文档被投毒。挑十条最痛的背熟。坑是最好的故事素材:有冲突(现象)、有侦查(根因)、有解法(修复),面试官问「遇到过什么难题」时,你张口就是结构化的三段。

第 7 步:给每个 STAR 预判 3 个追问,写下答案。 这是深挖防线。面试官一定顺着 A 往下挖,大概率是三类问题:为什么不是另一条路、极端情况怎么办、细节经不经得起查。示范:

  • v1:共享类型包会不会循环依赖?后端换语言,共享类型怎么办(答案方向:类型契约转代码生成)?
  • v2:证书过期怎么处理(Certbot 自动续期)?发布出问题怎么回滚?HTTPS 在 Nginx 终止后,到后端这段是明文吗?
  • v3:为什么不用一个大 Agent 全干?多 Agent 死循环怎么防(第 21 周的 recursion_limit 在这里兑现)?interrupt 之后会话状态存在哪(checkpointer)?
  • v4:judge 自己不准怎么办(校准集、二元判定、一致性抽检)?注入永远防不完怎么办(假设会被攻破,纵深防御加高危操作兜底)?

每个追问写两三句话的答案进 star.md,答不上来的回对应周教程补。

时间分配

四个 STAR 各 10 分钟,初稿允许糙,先求结构完整;素材库和追问各 10 分钟。Day 5 写简历时每个 bullet 都从这份文档压缩而来,今天多花一分钟,明天省十分钟。

常见踩坑 ​

坑 1:把 STAR 写成填表。 四格各自凑字数、互相不连贯。STAR 是一条叙事线,检验标准是朗读:四段连起来读一遍,像分类账就推倒重写,像在讲一个有起伏的故事才合格。

坑 2:A 写成技术栈清单。 「用了 LangGraph、Redis、Docker」这种句子一个字都不值。A 里每个技术名词都必须跟着「为什么是它、不是别的」。写完自查:技术名词出现几次,「权衡」「否掉」「因为」就该出现几次。

坑 3:R 里没数字,或者数字是编的。 两个极端都致命。没数字等于没结果;编数字等于埋雷,面试官顺口一句「这个 80% 怎么测的」就穿帮。回去翻第 21 周的压测报告和第 16 周的评估记录,那里面有真数字。

坑 4:S 铺三段背景。 从项目由来讲到技术选型史,讲到冲突时面试官早没耐心了。S 只有一到两句,冲突要落在规模、约束或痛点上。写完数句子,超过两句就删。

坑 5:只备正叙,不备追问。 STAR 背得滚瓜烂熟,一句「为什么不用 X」当场卡壳,前面攒的好印象全部还回去。每个 STAR 至少预判 3 个追问并写下答案,防线和正叙同等重要,因为面试官的水平就体现在追问里。

自测问题 ​

先自己答,再展开对照。答不上来的,回对应小节看一遍。

  1. 为什么「为什么不用 X」比「用了 Y」更值钱?
参考答案

「用了 Y」只能证明照着做过;说出否掉了 X 以及否掉的理由,证明你面前摆过多条路,有自己的判断标准和取舍依据。前者是实施者信号,后者是工程师信号,面试官为后者付钱。

  1. 没有生产流量,R 还能写什么?
参考答案

写压测和评估数据:第 21 周 100 并发压测的延迟与成本、第 16 周 golden dataset 的通过率与 judge 一致率、语义缓存命中率、注入攻防的前后对比。真实测出的数字,经得起「怎么测的、基线是什么」的追问。

  1. S 的冲突从哪三个维度来?为什么必须造冲突?
参考答案

规模、约束、痛点。因为面试官评估的是解决难度:没有冲突的项目,结果再好也显不出你的作用。冲突把「做了个项目」变成「解决了个问题」。

  1. 四个里程碑各主打什么?被问「讲一个最有挑战的项目」怎么选?
参考答案

v1 主打 monorepo 工程决策,v2 主打单机到云的部署链路,v3 主打 Supervisor 硬路由决策和 HITL,v4 主打评估驱动与纵深防御。按 JD 选:Agent 岗优先 v3、v4,全栈岗优先 v1、v2;拿不准就选冲突最具体、数字最硬的那个。

  1. 踩坑素材为什么要单独建库,而不是塞进 STAR?
参考答案

STAR 篇幅有限,塞进去会稀释主线。踩坑故事单独存档,被问「遇到过什么难题」时按「现象 → 根因 → 修复」三段输出,和 STAR 形成两套互补弹药:一个讲项目主线,一个讲问题排查。

延伸阅读 ​

今天的产出 star.md 和 pitfalls.md 留好,明天的简历初稿,每一句都要能从这两份文档里找到出处。