project-interview-skill 1.2.0 → 1.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -3,7 +3,7 @@
3
3
  <p><a href="https://github.com/Jaxon1216/interview-analyzer-skill/blob/main/README_EN.md">English</a></p>
4
4
  <p><em>把你的项目经历,变成可复述、可追问、可上场的面试战斗手册。</em></p>
5
5
  <p>
6
- <a href="skill/project-interview-skill/SKILL.md"><img alt="License: MIT" src="https://img.shields.io/badge/License-MIT-yellow.svg"></a>
6
+ <a href="LICENSE"><img alt="License: MIT" src="https://img.shields.io/badge/License-MIT-yellow.svg"></a>
7
7
  <img alt="Type: Agent Skill" src="https://img.shields.io/badge/Type-Agent%20Skill-7c3aed">
8
8
  <img alt="Trae Compatible" src="https://img.shields.io/badge/Trae-Compatible-111827">
9
9
  <img alt="Cursor Compatible" src="https://img.shields.io/badge/Cursor-Compatible-00B8D9">
@@ -13,25 +13,50 @@
13
13
  </p>
14
14
  </div>
15
15
 
16
- 把真实项目快速整理成两份可直接用于面试准备的文档(输出到目标项目根目录):
16
+ 把真实项目变成能讲、能追问、能复习的面试材料,输出到目标项目的 `interview-prep/{简称}/` 目录。
17
17
 
18
- - `导学-{简称}.md`:重点亮点、代码阅读路径、学习顺序与必备知识点
19
- - `面经-{简称}.md`:简历可用摘要 + 面试题口播(第一人称 STAR)
18
+ ## 核心能力
20
19
 
21
- ## 效果演示
20
+ - 核心链路探索:追踪入口、关键机制、失败边界与源码证据,再提炼技术支柱
21
+ - 简历 bullet:把代码事实整理成可复用的简历表达
22
+ - STAR 口播:围绕每条 bullet 生成主问、追问和第一人称回答
23
+ - 表达护栏:约束内部名词和实现细节,转换成外部面试官听得懂的说法
24
+ - 学习路径:按优先级安排必备知识、源码阅读和验证任务
25
+ - 前后端样例:内置参考模板,帮助校准表达深度和面试口径
22
26
 
23
- 下面这张合并图展示了触发输入与面经输出示例:
24
-
25
- ![Demo](https://raw.githubusercontent.com/Jaxon1216/interview-analyzer-skill/main/demo.jpg)
26
-
27
- ## 安装方式
28
-
29
- 推荐使用 `npx`,不需要 clone 仓库:
27
+ ## 快速开始
30
28
 
31
29
  ```bash
32
30
  npx project-interview-skill install
33
31
  ```
34
32
 
33
+ 安装完成后,在目标项目根目录开启新对话,直接输入:
34
+
35
+ ```text
36
+ /project-interview-skill 简称:电商;项目描述:......;技术栈:Vue3、Pinia、Vite;求职方向:前端
37
+ ```
38
+
39
+ ## 生成结果
40
+
41
+ 从一次自然语言输入开始,Skill 会把项目拆成三条可执行的准备路径:
42
+
43
+ <p align="center">
44
+ <img src="https://raw.githubusercontent.com/Jaxon1216/interview-analyzer-skill/main/docs/images/bullet-output.png" alt="简历 bullet 与提示词侧栏" width="100%">
45
+ </p>
46
+
47
+ <table>
48
+ <tr>
49
+ <td width="50%" align="center"><strong>面经:按简历支柱展开</strong></td>
50
+ <td width="50%" align="center"><strong>导学:安排学习顺序</strong></td>
51
+ </tr>
52
+ <tr>
53
+ <td><img src="https://raw.githubusercontent.com/Jaxon1216/interview-analyzer-skill/main/docs/images/interview-questions.png" alt="面试问题与口播答案" width="100%"></td>
54
+ <td><img src="https://raw.githubusercontent.com/Jaxon1216/interview-analyzer-skill/main/docs/images/learning-path.png" alt="学习顺序与推荐阅读" width="100%"></td>
55
+ </tr>
56
+ </table>
57
+
58
+ ## 安装方式
59
+
35
60
  默认安装到用户级通用 Agent 目录:
36
61
 
37
62
  ```text
@@ -86,18 +111,14 @@ npx project-interview-skill install --project --trae
86
111
 
87
112
  ## 使用方式
88
113
 
89
- 在被分析项目的工作区开启新对话,例如:
90
-
91
- ```text
92
- /project-interview-skill 简称:电商;项目描述:......(背景/职责/难点/结果);技术栈:Vue3、Pinia、Vite;求职方向:前端
93
- ```
94
-
95
- 随后在该业务项目根目录生成:
114
+ 随后在该业务项目根目录的 `interview-prep/{简称}/` 下生成:
96
115
 
97
116
  | 文件 | 用途 |
98
117
  |------|------|
99
- | `导学-{简称}.md` | 前置知识、必备知识点、推荐阅读(含仓库相对路径)、原理与设计决策;文末可含「量化与验证(含待测)」 |
100
- | `面经-{简称}.md` | 1~2 句简历摘要、架构向 bullets、按简历支柱展开的面试题(主问/追问口播) |
118
+ | `导学.md` | 前置知识、源码阅读路线、核心链路与证据、原理和设计决策;文末可含「量化与验证(含待测)」 |
119
+ | `面经.md` | 1~2 句简历摘要、以 `- **支柱名:**` 开头的 bullet、按简历支柱展开的面试题(主问/追问口播) |
120
+
121
+ 复杂知识点可在 `导学/01-主题.md` 等子文件中展开,由 `导学.md` 链接;默认只生成两份主文件。
101
122
 
102
123
  也可以不写 slash 命令,直接描述“请基于这个项目生成导学和面经”。
103
124
 
@@ -144,36 +165,18 @@ interview-analyzer-skill/
144
165
  | `-- project-interview-skill.js
145
166
  |-- install.sh
146
167
  |-- package.json
168
+ |-- .npmrc
147
169
  |-- README.md
148
170
  |-- README_EN.md
149
- |-- demo.jpg
171
+ |-- docs/
172
+ | |-- images/
173
+ | `-- promo.md
150
174
  |-- LICENSE
151
175
  `-- tests/
152
176
  ```
153
177
 
154
- ## 维护与发布
155
-
156
- 本项目作为 npm CLI 包发布,不需要编译。npm 包会按 `package.json` 的 `files` 白名单打包:
157
-
158
- ```bash
159
- npm pack --dry-run
160
- npm publish --access public
161
- ```
162
-
163
- 本地验证:
164
-
165
- ```bash
166
- npm test
167
- npm run pack:check
168
- node bin/project-interview-skill.js install --trae --dry-run
169
- ```
170
-
171
178
  ## 常见问题
172
179
 
173
- ### `.npmrc` 是必要的吗?
174
-
175
- 不是 npm 包必须文件。它只用于本仓库开发时指定 registry。真正发布到公网 npm 的关键配置是 `package.json` 里的 `publishConfig.registry`。
176
-
177
180
  ### 为什么默认安装到 `.agents/skills`?
178
181
 
179
182
  这是最稳的用户级默认值,不依赖猜测用户正在使用哪个产品。如果你明确使用 Trae、Cursor、VS Code 或 Claude Code,使用对应参数即可。
package/README_EN.md CHANGED
@@ -3,7 +3,7 @@
3
3
  <p><a href="https://github.com/Jaxon1216/interview-analyzer-skill/blob/main/README.md">简体中文</a></p>
4
4
  <p><em>Turn your project experience into interview-ready docs you can actually explain and defend.</em></p>
5
5
  <p>
6
- <a href="skill/project-interview-skill/SKILL.md"><img alt="License: MIT" src="https://img.shields.io/badge/License-MIT-yellow.svg"></a>
6
+ <a href="LICENSE"><img alt="License: MIT" src="https://img.shields.io/badge/License-MIT-yellow.svg"></a>
7
7
  <img alt="Type: Agent Skill" src="https://img.shields.io/badge/Type-Agent%20Skill-7c3aed">
8
8
  <img alt="Trae Compatible" src="https://img.shields.io/badge/Trae-Compatible-111827">
9
9
  <img alt="Cursor Compatible" src="https://img.shields.io/badge/Cursor-Compatible-00B8D9">
@@ -13,25 +13,50 @@
13
13
  </p>
14
14
  </div>
15
15
 
16
- Generate two practical interview-prep docs from a real codebase, written to the target project root:
16
+ Turn a real codebase into interview material you can explain, defend, and study, written under `interview-prep/{short-name}/` in the target project.
17
17
 
18
- - `导学-{short-name}.md`: key highlights, code-reading path, and study checklist
19
- - `面经-{short-name}.md`: resume-ready summary plus first-person STAR speaking answers
18
+ ## Core Capabilities
20
19
 
21
- ## Demo
20
+ - Core-flow investigation: trace entry points, mechanisms, failure boundaries, and source evidence into technical pillars
21
+ - Resume bullets: turn code facts into reusable resume language
22
+ - STAR speaking answers: generate primary questions, follow-ups, and first-person responses
23
+ - Explanation guardrails: translate internal implementation terms into interviewer-friendly language
24
+ - Study path: prioritize concepts, source reading, and verification tasks
25
+ - Frontend and backend examples: provide reference templates for depth and phrasing
22
26
 
23
- This merged screenshot shows both trigger input and interview output:
24
-
25
- ![Demo](https://raw.githubusercontent.com/Jaxon1216/interview-analyzer-skill/main/demo.jpg)
26
-
27
- ## Install
28
-
29
- Use `npx`; cloning is not required:
27
+ ## Quick Start
30
28
 
31
29
  ```bash
32
30
  npx project-interview-skill install
33
31
  ```
34
32
 
33
+ After installation, open the target project root in a new chat and enter:
34
+
35
+ ```text
36
+ /project-interview-skill Short name: ecommerce; project description: ...; stack: Vue3, Pinia, Vite; target role: frontend
37
+ ```
38
+
39
+ ## Generated Output
40
+
41
+ Starting from one natural-language request, the Skill turns a codebase into three practical preparation views:
42
+
43
+ <p align="center">
44
+ <img src="https://raw.githubusercontent.com/Jaxon1216/interview-analyzer-skill/main/docs/images/bullet-output.png" alt="Resume bullets and prompt sidebar" width="100%">
45
+ </p>
46
+
47
+ <table>
48
+ <tr>
49
+ <td width="50%" align="center"><strong>Interview guide: resume-driven questions</strong></td>
50
+ <td width="50%" align="center"><strong>Study guide: an ordered learning path</strong></td>
51
+ </tr>
52
+ <tr>
53
+ <td><img src="https://raw.githubusercontent.com/Jaxon1216/interview-analyzer-skill/main/docs/images/interview-questions.png" alt="Interview questions and spoken answers" width="100%"></td>
54
+ <td><img src="https://raw.githubusercontent.com/Jaxon1216/interview-analyzer-skill/main/docs/images/learning-path.png" alt="Learning order and recommended reading" width="100%"></td>
55
+ </tr>
56
+ </table>
57
+
58
+ ## Install
59
+
35
60
  The default target is the user-level generic Agent directory:
36
61
 
37
62
  ```text
@@ -86,18 +111,14 @@ Restart the target IDE or Agent after installation.
86
111
 
87
112
  ## Usage
88
113
 
89
- Open the target project root in your IDE or Agent, then start a new chat:
90
-
91
- ```text
92
- /project-interview-skill 简称:电商;项目描述:...;技术栈:Vue3、Pinia、Vite;求职方向:前端
93
- ```
94
-
95
114
  The skill creates these files under the target project root:
96
115
 
97
116
  | File | Purpose |
98
117
  |------|---------|
99
- | `导学-{short-name}.md` | Prerequisites, key concepts, repo-relative reading guide, design decisions, and optional measurement notes |
100
- | `面经-{short-name}.md` | 1-2 sentence resume summary, architecture-level bullets, and interview Q&A mapped to those bullets |
118
+ | `interview-prep/{short-name}/导学.md` | Prerequisites, repo-relative reading guide, traced system flows and evidence, design decisions, and optional measurement notes |
119
+ | `interview-prep/{short-name}/面经.md` | 1-2 sentence resume summary, titled architecture bullets, and interview Q&A mapped to those bullets |
120
+
121
+ Complex topics can be expanded in `interview-prep/{short-name}/导学/01-topic.md` and linked from the main study guide. The default output remains two files.
101
122
 
102
123
  You can also invoke it naturally by asking for project interview preparation docs.
103
124
 
@@ -144,36 +165,18 @@ interview-analyzer-skill/
144
165
  | `-- project-interview-skill.js
145
166
  |-- install.sh
146
167
  |-- package.json
168
+ |-- .npmrc
147
169
  |-- README.md
148
170
  |-- README_EN.md
149
- |-- demo.jpg
171
+ |-- docs/
172
+ | |-- images/
173
+ | `-- promo.md
150
174
  |-- LICENSE
151
175
  `-- tests/
152
176
  ```
153
177
 
154
- ## Maintenance and Publishing
155
-
156
- This npm CLI package does not need a build step. The package contents are controlled by the `files` allowlist in `package.json`:
157
-
158
- ```bash
159
- npm pack --dry-run
160
- npm publish --access public
161
- ```
162
-
163
- Local checks:
164
-
165
- ```bash
166
- npm test
167
- npm run pack:check
168
- node bin/project-interview-skill.js install --trae --dry-run
169
- ```
170
-
171
178
  ## FAQ
172
179
 
173
- ### Is `.npmrc` required?
174
-
175
- No. It is only useful for this repository's development registry selection. Public npm publishing is controlled by `publishConfig.registry` in `package.json`.
176
-
177
180
  ### Why does the default install target `.agents/skills`?
178
181
 
179
182
  It is the least surprising user-level default and avoids guessing which product the user wants. Use an explicit flag for Trae, Cursor, VS Code, Claude Code, or Codex.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "project-interview-skill",
3
- "version": "1.2.0",
3
+ "version": "1.3.0",
4
4
  "description": "Install a project interview preparation skill for AI coding agents.",
5
5
  "license": "MIT",
6
6
  "author": "EastonJiang <jiangxu05@outlook.com>",
@@ -14,7 +14,9 @@
14
14
  },
15
15
  "files": [
16
16
  "bin/",
17
- "skill/",
17
+ "skill/project-interview-skill/SKILL.md",
18
+ "skill/project-interview-skill/references/",
19
+ "skill/project-interview-skill/scripts/*.py",
18
20
  "README.md",
19
21
  "README_EN.md",
20
22
  "LICENSE"
@@ -1,17 +1,18 @@
1
1
  ---
2
2
  name: project-interview-skill
3
3
  description: >-
4
- 在项目根目录生成导学.md与面经.md;大厂工程向、第一人称口播(每题≥150字完整STAR)、
5
- 简历一句话简介、仓库相对路径阅读指引、量化合并文末(待测+如何测)。触发:面经、导学、
6
- interview analyzer、项目分析、面试准备、STAR、简历亮点。
4
+ 基于项目描述与仓库证据生成导学和面经,含简历 bullet、源码阅读路线与第一人称 STAR 口播。
5
+ 适用于项目分析、面试准备、简历亮点和导学材料。
7
6
  license: MIT
8
7
  activation: /project-interview-skill
9
8
  provenance:
10
9
  maintainer: project-interview-skill
11
- version: 1.2.0
10
+ version: 1.3.0
12
11
  created: 2026-04-20
13
12
  source_references:
14
13
  - references/rules/interview-rubric.md
14
+ - references/rules/repository-investigation.md
15
+ - references/rules/internal-terms.md
15
16
  - references/rules/star-framework.md
16
17
  - references/templates/output-templates.md
17
18
  - references/rules/oral-and-resume-patterns.md
@@ -19,15 +20,15 @@ provenance:
19
20
  - references/excellent-resumes/README.md
20
21
  metadata:
21
22
  author: project-interview-skill
22
- version: 1.2.0
23
+ version: 1.3.0
23
24
  created: 2026-04-20
24
- last_reviewed: 2026-08-28
25
+ last_reviewed: 2026-09-30
25
26
  review_interval_days: 90
26
27
  ---
27
28
 
28
- # /project-interview-skill — 项目经验导学 + 面经(双文件)
29
+ # /project-interview-skill — 项目经验导学 + 面经
29
30
 
30
- 你是**资深大厂面试官与工程导师**。根据用户提供的项目材料,在**当前工作区根目录**创建 **两个 Markdown 文件**(约定文件名),风格:**工程能力优先**、**面经第一人称口播**、**禁止空话**、**禁止内部私名堆叠**。
31
+ 你是**资深大厂面试官与工程导师**。根据用户提供的项目材料与可访问仓库,在目标项目根目录的 `interview-prep/{简称}/` 下创建 `导学.md` 和 `面经.md`。风格:**工程能力优先**、**面经第一人称口播**、**禁止空话**、**禁止内部私名堆叠**。
31
32
 
32
33
  简历 bullet 必须是面试官能 30 秒追问的**架构支柱**(痛点 → 机制 → 约束),不是功能工单清单。面经主问必须围绕这些支柱,题干假设面试官**只看过简历**。
33
34
 
@@ -46,9 +47,11 @@ metadata:
46
47
  写对应产物前必须加载,不要只扫本文件的一行摘要:
47
48
 
48
49
  - [口播与简历抽象(简介 + bullet 四槽 + 出题契约)](references/rules/oral-and-resume-patterns.md) — **写简介和简历 bullet 前必读**
50
+ - [仓库探索与证据归档](references/rules/repository-investigation.md) — **有仓库时先执行;无仓库时标注证据限制**
51
+ - [内部名词与口播抽象规则](references/rules/internal-terms.md) — **写口播前必读**
49
52
  - [领域中立 Bullet few-shot](references/examples/bullet-few-shots.md) — **生成 bullet 时对照正例、反例与改写,不复制样例素材**
50
53
  - [优秀简历样例库](references/excellent-resumes/README.md) — **写 bullet 前至少对照 1 份金样 + 反例调性**
51
- - [STAR、追问与口播要求](references/rules/star-framework.md) — **出题前必读**(先 bullet 后主问,8~12 道)
54
+ - [STAR、追问与口播要求](references/rules/star-framework.md) — **出题前必读**(先 bullet 后主问,题量由证据决定)
52
55
  - [输出骨架与文件名](references/templates/output-templates.md)
53
56
  - [口播抽象层级样例(前端+后端)](references/examples/oral-style-samples.md)
54
57
  - [大厂面试与工程 rubric](references/rules/interview-rubric.md)
@@ -57,102 +60,62 @@ metadata:
57
60
 
58
61
  | 字段 | 必须 | 说明 |
59
62
  |------|------|------|
60
- | 项目描述 | **是** | 背景、职责、难点、结果;越具体越好 |
61
- | **简称** | **强烈建议** | 用于文件名 `导学-{简称}.md`、`面经-{简称}.md`;未给则你提炼并在文首列出 |
63
+ | 项目描述 | 与可访问仓库至少有其一 | 背景、职责、难点、结果;越具体越好 |
64
+ | 目标仓库 | 与项目描述至少有其一 | 可访问的源码项目;只给仓库时先探索,再询问无法从代码确认的个人职责与效果 |
65
+ | **简称** | **强烈建议** | 用于产物目录 `interview-prep/{简称}/`;未给则你提炼并在文首列出 |
62
66
  | 技术栈 | 否 | 语言/框架/中间件/观测与发布 |
63
67
  | 求职方向 | 否 | `前端` / `后端` / `AI` / 未指定。方向只调口播权重,**不得**把系统机制从一级简历里抹掉 |
64
68
  | 职责海拔 | 否 | 核心作者 / owner / 子模块。未给则从描述与仓库推断,并在文首标注假设 |
65
69
 
66
- 信息不足时:先追问 3~5 个高信号问题(所有权、是否有架构演进、有无真实指标);用户未补全时可**标注假设**并说明影响。
70
+ 信息不足时:先完成可独立进行的仓库探索,再集中追问所有权、架构演进、真实指标等高信号问题;用户未补全时**标注待确认**,不把推断写成事实。
67
71
 
68
72
  可选脚本:`python3 scripts/check_inputs.py`;带简称生成提示:`python3 scripts/build_prompt.py --short-name '简称' -d '……'`。
69
73
 
70
74
  ---
71
75
 
72
- ## 面经生成顺序(写死,禁止颠倒)
76
+ ## 先探索项目,再写材料
77
+
78
+ 按 [仓库探索与证据归档](references/rules/repository-investigation.md) 确认目标项目根目录,梳理入口与 2~4 条核心链路,记录问题、机制、边界、结果、职责和相对路径。每个候选简历支柱都要能回查一条事实卡。只有用户描述而没有源码时,在两份产物文首标明证据范围,并将未核实的路径、职责和数字列为待确认。
79
+
80
+ 不要仅凭 README、目录名或金样猜出支柱;也不要把仓库已有能力自动归为用户个人贡献。探索完成后,选最有权衡和失败边界的机制写导学,再抽取简历支柱。
81
+
82
+ ## 面经生成顺序
73
83
 
74
84
  1. **定简历海拔**:架构演进 > 系统机制 > 交互细节。交互细节默认进追问,不进一级 bullet。
75
85
  2. **项目简介**(1~2 句)。
76
- 3. **简历 bullet**(4~6 条一级,可嵌套二级;先抽取架构支柱,再按 few-shot 成稿;四槽见 `references/rules/oral-and-resume-patterns.md`)。
86
+ 3. **简历 bullet**(通常 4~6 条一级,证据不足时少写;可嵌套二级;先抽取架构支柱,再按 few-shot 成稿;四槽见 `references/rules/oral-and-resume-patterns.md`)。
77
87
  4. **简历 → 面试展开**表:每条一级 bullet 对应一道主问。
78
- 5. **主问 + 2 追问 + 口播**(可另加 2~4 道简介级通用题;主问合计 8~12)。
88
+ 5. **主问 + 2 追问 + 口播**(每条支柱 1 道主问,可另加 0~4 道简介级通用题;题量由证据决定)。
79
89
  6. **源码证据索引**。
80
90
 
81
91
  禁止:先按测试文件 / 目录扫出十几道源码题,再把题压缩成「接入 / 开发」bullet。禁止把导学「重点亮点」原样当成简历。
82
92
 
83
93
  ---
84
94
 
85
- ## 硬性交付:工作区根目录两个文件
95
+ ## 交付目录
86
96
 
87
- 你必须使用**写入工具**在**打开的工作区根目录**(repository root)创建(或覆盖更新):
97
+ 你必须使用**写入工具**在目标项目根目录创建(或更新):
88
98
 
89
99
  | 文件 | 内容性质 |
90
100
  |------|----------|
91
- | `导学-{简称}.md` | 导学全文 |
92
- | `面经-{简称}.md` | 面经全文 |
101
+ | `interview-prep/{简称}/导学.md` | 学习地图、链路证据和核心原理 |
102
+ | `interview-prep/{简称}/面经.md` | 简历 bullet、问题和口播 |
93
103
 
94
- - `{简称}`:用户给定或你提炼的短名(建议 2~8 个字符,勿含 `/\\` 等路径非法字符)。
95
- - 若当前环境**无法写入文件**:在对话中输出**两个独立**的 ` ```markdown ` 代码块,块标题注明文件名,并明确提示用户手动保存为上述路径;**仍须**遵守下文结构与口播字数要求。
104
+ - `{简称}`:用户给定或你提炼的短名(建议 2~8 个字符,不含路径分隔符等非法字符)。用户明确指定其他输出路径时遵从用户。
105
+ - 后续某个知识点确需展开时,新增 `interview-prep/{简称}/导学/01-主题.md` 等子文件,并从 `导学.md` 链接;默认仍只交付两份主文件,不创建空目录或重复全文。子文件写清问题、关键调用/数据流、失败边界、取舍、验证和源码相对路径。
106
+ - 若当前环境**无法写入文件**:在对话中输出**两个独立**的 ` ```markdown ` 代码块,块标题注明目标路径,并明确提示用户手动保存;**仍须**遵守下文结构与口播字数要求。
96
107
 
97
108
  **量化(建议项)**:不单独第三个文件。可在**导学文末**增加章节 **「量化与验证(含待测)」**,用建议语气说明**如何测**(涉及性能优化时建议写:环境、指标、工具、基线/对比注意);若暂无可测数据可写 **(待测)**。面经正文不要求单独量化章节。
98
109
 
99
110
  ---
100
111
 
101
- ## 面经"内部名词"硬约束(生成口播前先读,逐题自检)
102
-
103
- **适用范围:口播正文。** 简历简介与 bullet 的名词策略见 [oral-and-resume-patterns.md](references/rules/oral-and-resume-patterns.md):允许外部可检索的范式名;禁止私有函数、路径、枚举。不要用本节黑名单把简历支柱剥成「对接了某某接口」。
104
-
105
- 面经读者是**外部面试官**(不在你团队、不熟悉你项目)。以下**七类名词**属于"内部私名 / 团队黑话",一律禁止在口播正文里直接堆叠,必须先翻译成通用技术抽象。约束按**形态**判定,不锁死到任何具体项目。
106
-
107
- ### 黑名单(按形态识别,禁止在口播里堆叠)
108
-
109
- | 类别 | 识别形态(不是具体名) |
110
- |---|---|
111
- | 1. 私有框架组件 / hook / API | 只在本公司/本项目能搜到的自研标签、自研 hook、自研 runtime 函数 |
112
- | 2. 项目内部函数名 | 团队仓库里定义、外部搜索无结果的私有函数(如 `fetchXxxData` / `updateXxxStore` / `getXxxVersion` / `xxxAssert`) |
113
- | 3. 后端字段与私有枚举值 | 蛇形命名的接口字段(`user_status`、`ext_info` 等)+ 复合大写枚举(`SOME_MODULE_XXX_STATE`) |
114
- | 4. 打点事件名 | 以业务/产品前缀开头的下划线拼接串(`biz_module_stage_event`) |
115
- | 5. 端能力 / 容器私名 | 首字母大写 + 特殊后缀的容器名、私有 JSBridge 命名空间(`x.xxx`、`bridge.xxx`) |
116
- | 6. 动态配置键 / 灰度开关 | 全小写下划线开关名(`enable_xxx_yyy`)、URL query flag(`abc=1`) |
117
- | 7. 上下游业务黑话 | 3~5 字中文缩写、产品代号、内部俗称(只在本团队内部通用的业务名) |
118
-
119
- ### 白名单(通用工程语言,鼓励使用)
120
-
121
- React / Vue / TypeScript / SSR / CSR / Hydration / Streaming SSR / `<Suspense>` / Service Worker / Web Worker / Prefetch / Preload / Fallback / Error Boundary / State Machine / Reducer / Selector / Immutable Update / Single Source of Truth / JSBridge(泛称)/ Feature Toggle / A/B Testing / CDN / Cache Invalidation / Idempotency / Race Condition / Timeout / Circuit Breaker / Rate Limiting / Graceful Degradation / Observability / SLO / SLI / P95 Latency / FMP / CLS / Message Queue / Eventual Consistency / Transaction / Sharding。以及**当前项目领域内、外部可检索**的范式名(不要因为不在本列表就从简历上剥掉)。
112
+ ## 面经内部名词与证据索引
122
113
 
123
- ### 翻译原则(必用)
124
-
125
- | 内部名的形态 | 通用抽象的表达 |
126
- |---|---|
127
- | 私有 hook / action | "store 的 read hook / write action" |
128
- | 分层决策函数 | "一级路由决策 / 二级视图状态机" |
129
- | 后端下划线字段 | 用**语义化描述**代替字段名(如"授信信息"而不是 `xx_auth_info`) |
130
- | 复合枚举 `MODULE_STATE_SUB` | 用中文语义("某模块的 X 状态"),不搬枚举原名 |
131
- | 具体打点事件名 | "水合成功率打点""预取生命周期打点" |
132
- | 私有 JSB namespace | "端内 JSBridge" / "容器 native call" |
133
- | 灰度开关键名 | "配置中心下发的 feature toggle" |
134
- | 业务黑话 | 直接省略,或换成"某营销活动""某信贷子产品"这类中性描述 |
135
-
136
- ### 预算(用于自检 / 质量门禁)
137
-
138
- - 每道**主问口播 ≥ 150 字**,其中黑名单内部名词密度 **≤ 2 次**,且**每次出现必须紧跟一句通用抽象说明**。
139
- - 每道**追问口播 ≥ 150 字**,黑名单内部名词 **≤ 1 次**。
140
- - 违反预算 → 该题重写;不通过则不落盘。
141
-
142
- ### 抽象层级样例(默认目标 = 样例风格 B)
143
-
144
- - 见 `references/examples/oral-style-samples.md`,内含**前端**与**后端**两份完整口播样例(含 STAR + 追问)+ 反例(私名堆叠型)+ **题干正反例**(简历展开型 vs 源码巡检型)。
145
- - 生成面经时**每一道题的口播都要对齐样例风格 B 的抽象层级**:通用工程语言为主 + 极少量内部私名兜底证据。
146
- - 反例(样例中的"私名堆叠型"口播、"源码巡检型"题干)**禁止出现**在最终面经里。
147
-
148
- ### 证据下沉
149
-
150
- - 所有具体函数名、文件路径、私有打点事件名、私有容器名统一收敛到面经文末的「**源码证据索引**」表格。
151
- - 简历 bullet 可保留业界可检索名与设计约束数字;口播只做通用抽象叙述;索引表用于候选人自己复盘、以及被追问细节时的"证据钩子"。
114
+ 写口播前读取 [内部名词与口播抽象规则](references/rules/internal-terms.md)。口播以外部面试官能理解的通用技术语言为主;私有函数、字段、配置键、事件名等集中收在「源码证据索引」。主问与追问的内部名词预算、翻译方式和样例均以该参考为准。简历 bullet 可保留业界可检索的范式名,不能被口播黑名单误删。
152
115
 
153
116
  ---
154
117
 
155
- ## `导学-{简称}.md` 结构(顺序固定)
118
+ ## `导学.md` 结构
156
119
 
157
120
  1. **前置知识(面试高频标注)**
158
121
  表格:知识点 / 为何需要 / 在本项目中的位置 / 高频度(高/中/低)。
@@ -178,7 +141,10 @@ React / Vue / TypeScript / SSR / CSR / Hydration / Streaming SSR / `<Suspense>`
178
141
  8. **关键设计决策**
179
142
  备选 / 取舍 / 风险 / 验证。
180
143
 
181
- 9. **量化与验证(含待测,建议)**(可放在**文末**)
144
+ 9. **链路与证据**
145
+ 对核心链路写明入口→机制→结果、失败边界、关键源码/测试相对路径及证据缺口;把可继续学习的重点链接到 `导学/` 子文件。不得用文件名列表代替机制解释。
146
+
147
+ 10. **量化与验证(含待测,建议)**(可放在**文末**)
182
148
  用建议语气给出测量思路;文内数据可用(待测)占位;性能相关建议写清「怎么测」。
183
149
 
184
150
  **已删除**:不再输出「必备基础(❌/✅ 代码对比)」。
@@ -187,20 +153,19 @@ React / Vue / TypeScript / SSR / CSR / Hydration / Streaming SSR / `<Suspense>`
187
153
 
188
154
  ---
189
155
 
190
- ## `面经-{简称}.md` 结构(顺序固定)
156
+ ## `面经.md` 结构(顺序固定)
191
157
 
192
158
  1. **项目简介(简历可用,1~2 句)**
193
159
  说清楚「做什么 + 关键技术/形态 + 关键能力」,参考 [口播与简历抽象](references/rules/oral-and-resume-patterns.md),可直接用于简历项目描述。**不得堆叠内部私名**;业界可检索的架构名应当保留。
194
160
 
195
- 2. **简历 bullet(4~6 条一级,允许二级嵌套)**
196
- 先从架构演进、核心失败模式和系统机制中抽取支柱,再对照 `references/examples/bullet-few-shots.md` 的正例、反例和改写对照成稿。每条一级必须以 `**通用支柱名:**` 开头,并具备四槽:`痛点或演进` + `机制(业界可检索名)` + `硬约束或数字` + `结果(架构效果或真实指标;无线上数据才(待测))`;至少保证「问题或演进 + 机制 + 结果」。支柱名必须是面试官脱离仓库也能理解的架构/工程能力,不能使用私有类名、函数名、路径、事件名或业务黑话。结果必须紧跟机制,禁止用“提升性能/提高稳定性/优化体验”等空泛句代替。完整配方、动词按职责、反例工单型,见 `references/rules/oral-and-resume-patterns.md`。核心作者可用「主导 / 把 X 从 Y 收到 Z」;实习/参与者用「接入 / 新增 / 主 O 某子模块」。交互细节(单控件、单协议字段、单文件读写)不进一级。禁止复制 few-shot 或优秀简历样例中的项目名、数字、领域名词和指标。
161
+ 2. **简历 bullet(通常 4~6 条一级,允许二级嵌套)**
162
+ 先从已核实的架构演进、核心失败模式和系统机制中抽取支柱,再对照 `references/examples/bullet-few-shots.md` 成稿。**每条一级必须独立成行,采用 `- **支柱名:** 正文`,即先给概括性标题,再写解释;不能只写正文,也不能把标题放进二级 bullet。** 这里的“支柱名”是占位说明,输出时替换为本项目具体的通用工程能力,如 `- **分层容错:** ……`。每条具备四槽:`痛点或演进` + `机制(业界可检索名)` + `硬约束或数字` + `结果(架构效果或真实指标;无线上数据才(待测))`;至少保证「问题或演进 + 机制 + 结果」。支柱名不能使用私有类名、函数名、路径、事件名或业务黑话。结果紧跟机制,禁止用“提升性能/提高稳定性/优化体验”等空泛句代替。完整配方、动词按职责、反例工单型,见 `references/rules/oral-and-resume-patterns.md`。证据不足时少写,不为凑数量编支柱。禁止复制样例里的项目名、数字、领域名词和指标。
197
163
 
198
164
  3. **简历 → 面试展开(必填表)**
199
165
  列:简历一级 bullet 短标题 / 面试官主问 / 对应题号。每一道主问(简介级通用题除外)必须能在本表找到对应支柱。
200
166
 
201
- 4. **面试问题(按简历支柱展开,主问合计 8~12)**
202
- 正文重心放在面试题口播。每个一级 bullet:**1 主问 + 2 追问**;可另加 2~4 道简介级通用题。
203
- 计数口径:**8~12 仅统计主问题数量**,追问不计入该总数。
167
+ 4. **面试问题(按简历支柱展开)**
168
+ 正文重心放在面试题口播。每个一级 bullet:**1 主问 + 2 追问**;可另加 0~4 道简介级通用题。主问题量随支柱证据而定,通常 4~10 道;追问不计入。
204
169
  - **题干**:面试官只看过简介 + bullet。禁止文件路径、私有函数名、issue 号、内部开关。对齐 `oral-style-samples.md` 的「简历展开型」;「源码巡检型」题干禁止出现。
205
170
  - **口播版**:**第一人称**;**主问题口播 ≥150 汉字**;**每个追问口播 ≥150 汉字**;须覆盖完整 STAR(情境—任务—行动—结果),采用「场景(现象)→ 归因 → 动作(可分点)→ 结果/兜底」叙述,关键术语可 **中英括号** 对照。
206
171
  - **抽象层级**:对齐 `references/examples/oral-style-samples.md` 中的"样例风格 B"(通用工程语言为主 + 极少量内部名兜底证据)。反例(私名堆叠型)禁止出现。
@@ -216,14 +181,15 @@ React / Vue / TypeScript / SSR / CSR / Hydration / Streaming SSR / `<Suspense>`
216
181
 
217
182
  ## 质量门禁(自检后再写入)
218
183
 
219
- - [ ] 根目录已生成 `导学-{简称}.md` 与 `面经-{简称}.md`(或已等价输出双文件内容)
184
+ - [ ] 已在目标项目 `interview-prep/{简称}/` 生成 `导学.md` 与 `面经.md`(或遵循用户指定路径)
185
+ - [ ] 已确认分析范围,沿核心链路追踪机制与失败边界;每个一级简历支柱能回查职责和源码/文档证据,未把推断写成事实
220
186
  - [ ] 导学含「重点亮点与学习顺序」+「推荐阅读」且含 **通用技术点** 与 **相对路径** 列
221
187
  - [ ] 导学含「自学提醒」固定短段落(看不懂继续问 AI,skill 不做逐行讲解)
222
188
  - [ ] 面经「项目简介」为 1~2 句简历向描述,且未堆叠内部私名
223
- - [ ] 写 bullet 前已对照 `references/excellent-resumes/` 至少一份金样;每条一级 bullet 四槽齐全(痛点或演进 / 机制 / 约束或数字 / 结果)
189
+ - [ ] 写 bullet 前已对照 `references/excellent-resumes/` 至少一份金样;每条一级 bullet 包含问题或演进、机制、可验证结果,并写出已证实的约束
224
190
  - [ ] 写 bullet 前已对照 `references/examples/bullet-few-shots.md`;每条先完成支柱事实归档,再按正例/反例/改写对照成稿
225
191
  - [ ] 简历一级 bullet **不是**导学亮点的原样粘贴,也不是「接入/开发 + 交互细节 +(待测)」工单型
226
- - [ ] 每条一级 bullet 以 `**通用支柱名:**` 开头;支柱名不是私有类名、函数名、路径、事件名或业务黑话
192
+ - [ ] 每条一级 bullet 都是 `- **具体支柱名:** 正文`;标题没有省略、没有停留在二级 bullet,且不是私有类名、函数名、路径、事件名或业务黑话
227
193
  - [ ] 简历一级 bullet 每条只表达一个支柱,至少具备「问题或演进 + 机制 + 结果」;没有真实证据时未编造数字
228
194
  - [ ] 含「简历 → 面试展开」表;每道主问(简介级通用题除外)能回指一条一级 bullet
229
195
  - [ ] 主问题干为简历展开型:无文件路径、无私有函数名、无 issue 号、无内部开关;未出现源码巡检型反例
@@ -231,12 +197,15 @@ React / Vue / TypeScript / SSR / CSR / Hydration / Streaming SSR / `<Suspense>`
231
197
  - [ ] 面经每道**追问口播** ≥ 150 字,黑名单内部名词 **≤ 1 次**
232
198
  - [ ] 面经每题的抽象层级对齐 `references/examples/oral-style-samples.md` 的"样例风格 B",未出现"私名堆叠型"反例特征
233
199
  - [ ] 面经不含团队内部业务黑话(3~5 字中文代号 / 产品俗称),或已改写为外部可懂表达
234
- - [ ] 主问数量 8~12;每个一级 bullet 至少 1 主问 + 2 追问
200
+ - [ ] 每个一级 bullet 对应 1 主问 + 2 追问;简介级通用题有简历钩子,未为凑题量编造问题
235
201
  - [ ] 面经含**「源码证据索引」**表格,集中收纳内部私名与对应主题
236
202
  - [ ] 面经不含「亮点拆解」独立章节
237
203
  - [ ] (建议)导学可含「量化与验证(含待测)」并说明怎么测;面经不强制该章节
238
204
 
205
+ 落盘后运行本 skill 的 `scripts/validate_output.py`,传入生成的 `面经.md` 路径,检查一级 bullet 标题;若失败,修正后再交付。使用安装后的 skill 目录定位脚本,不能假定脚本在目标项目根目录。无法执行脚本时按同一格式逐条人工检查。
206
+
239
207
  ## 脚本辅助
240
208
 
241
209
  - `python3 scripts/check_inputs.py`
242
210
  - `python3 scripts/build_prompt.py --short-name '简称' -d '项目描述' [--tech …] [--role …]`
211
+ - `python3 <skill目录>/scripts/validate_output.py <目标项目根>/interview-prep/{简称}/面经.md`
@@ -24,7 +24,7 @@ few-shot 只用于对齐表达,不允许替代仓库证据。项目没有真
24
24
 
25
25
  **合格 bullet**
26
26
 
27
- > **分层容错:** 针对异常处理逻辑散落、改动容易波及主流程的问题,将错误处理收敛为分层容错机制:按错误类型区分有限重试、降级与快速失败,并统一输出可观测结果,降低新增场景对主链路的改动面;线上收益需通过基线对比验证。
27
+ > - **分层容错:** 针对异常处理逻辑散落、改动容易波及主流程的问题,将错误处理收敛为分层容错机制:按错误类型区分有限重试、降级与快速失败,并统一输出可观测结果,降低新增场景对主链路的改动面;线上收益需通过基线对比验证。
28
28
 
29
29
  **为什么合格**
30
30
 
@@ -43,7 +43,7 @@ few-shot 只用于对齐表达,不允许替代仓库证据。项目没有真
43
43
 
44
44
  **合格 bullet**
45
45
 
46
- > **可扩展编排:** 主导将固定步骤的处理流程改造成可扩展的编排结构:抽象统一能力接口,将差异化实现下沉到独立扩展点,并保留输入校验、超时和失败隔离边界,使新增实现主要通过扩展点接入而无需改动核心调度逻辑。
46
+ > - **可扩展编排:** 主导将固定步骤的处理流程改造成可扩展的编排结构:抽象统一能力接口,将差异化实现下沉到独立扩展点,并保留输入校验、超时和失败隔离边界,使新增实现主要通过扩展点接入而无需改动核心调度逻辑。
47
47
 
48
48
  **为什么合格**
49
49
 
@@ -76,7 +76,7 @@ few-shot 只用于对齐表达,不允许替代仓库证据。项目没有真
76
76
 
77
77
  **合格改写**
78
78
 
79
- > **请求可靠性治理:** 针对下游接口抖动导致的重复请求和延迟放大问题,引入缓存、超时与有限重试机制:仅对幂等请求重试,并设置最大次数和退避边界,避免故障期间形成重试风暴;非幂等请求走快速失败或降级路径,具体延迟收益需通过基线对比验证。
79
+ > - **请求可靠性治理:** 针对下游接口抖动导致的重复请求和延迟放大问题,引入缓存、超时与有限重试机制:仅对幂等请求重试,并设置最大次数和退避边界,避免故障期间形成重试风暴;非幂等请求走快速失败或降级路径,具体延迟收益需通过基线对比验证。
80
80
 
81
81
  **改写动作**
82
82
 
@@ -87,7 +87,7 @@ few-shot 只用于对齐表达,不允许替代仓库证据。项目没有真
87
87
 
88
88
  ## 生成后硬检查
89
89
 
90
- - [ ] 每条一级 bullet 以 `**通用支柱名:**` 开头;支柱名是面试官可理解的架构/工程能力,不是私有类名或函数名;
90
+ - [ ] 每条一级 bullet 独立成行且以 `- **具体支柱名:** 正文` 开头;标题是面试官可理解的架构/工程能力,不是私有类名或函数名;
91
91
  - [ ] 每条一级 bullet 只表达一个支柱,不把多个功能并列成清单;
92
92
  - [ ] 每条至少有「问题或演进 + 机制 + 结果」;关键支柱尽量补充约束或数字;
93
93
  - [ ] “结果”紧跟机制,能回答“采用它之后系统发生了什么变化”;
@@ -0,0 +1,51 @@
1
+ # 面经内部名词与口播抽象
2
+
3
+ **适用范围:口播正文。** 简历简介与 bullet 的名词策略见 [oral-and-resume-patterns.md](oral-and-resume-patterns.md):允许外部可检索的范式名;禁止私有函数、路径、枚举。不要用本节黑名单把简历支柱剥成「对接了某某接口」。
4
+
5
+ 面经读者是**外部面试官**(不在你团队、不熟悉你项目)。以下**七类名词**属于"内部私名 / 团队黑话",一律禁止在口播正文里直接堆叠,必须先翻译成通用技术抽象。约束按**形态**判定,不锁死到任何具体项目。
6
+
7
+ ### 黑名单(按形态识别,禁止在口播里堆叠)
8
+
9
+ | 类别 | 识别形态(不是具体名) |
10
+ |---|---|
11
+ | 1. 私有框架组件 / hook / API | 只在本公司/本项目能搜到的自研标签、自研 hook、自研 runtime 函数 |
12
+ | 2. 项目内部函数名 | 团队仓库里定义、外部搜索无结果的私有函数(如 `fetchXxxData` / `updateXxxStore` / `getXxxVersion` / `xxxAssert`) |
13
+ | 3. 后端字段与私有枚举值 | 蛇形命名的接口字段(`user_status`、`ext_info` 等)+ 复合大写枚举(`SOME_MODULE_XXX_STATE`) |
14
+ | 4. 打点事件名 | 以业务/产品前缀开头的下划线拼接串(`biz_module_stage_event`) |
15
+ | 5. 端能力 / 容器私名 | 首字母大写 + 特殊后缀的容器名、私有 JSBridge 命名空间(`x.xxx`、`bridge.xxx`) |
16
+ | 6. 动态配置键 / 灰度开关 | 全小写下划线开关名(`enable_xxx_yyy`)、URL query flag(`abc=1`) |
17
+ | 7. 上下游业务黑话 | 3~5 字中文缩写、产品代号、内部俗称(只在本团队内部通用的业务名) |
18
+
19
+ ### 白名单(通用工程语言,鼓励使用)
20
+
21
+ React / Vue / TypeScript / SSR / CSR / Hydration / Streaming SSR / `<Suspense>` / Service Worker / Web Worker / Prefetch / Preload / Fallback / Error Boundary / State Machine / Reducer / Selector / Immutable Update / Single Source of Truth / JSBridge(泛称)/ Feature Toggle / A/B Testing / CDN / Cache Invalidation / Idempotency / Race Condition / Timeout / Circuit Breaker / Rate Limiting / Graceful Degradation / Observability / SLO / SLI / P95 Latency / FMP / CLS / Message Queue / Eventual Consistency / Transaction / Sharding。以及**当前项目领域内、外部可检索**的范式名(不要因为不在本列表就从简历上剥掉)。
22
+
23
+ ### 翻译原则(必用)
24
+
25
+ | 内部名的形态 | 通用抽象的表达 |
26
+ |---|---|
27
+ | 私有 hook / action | "store 的 read hook / write action" |
28
+ | 分层决策函数 | "一级路由决策 / 二级视图状态机" |
29
+ | 后端下划线字段 | 用**语义化描述**代替字段名(如"授信信息"而不是 `xx_auth_info`) |
30
+ | 复合枚举 `MODULE_STATE_SUB` | 用中文语义("某模块的 X 状态"),不搬枚举原名 |
31
+ | 具体打点事件名 | "水合成功率打点""预取生命周期打点" |
32
+ | 私有 JSB namespace | "端内 JSBridge" / "容器 native call" |
33
+ | 灰度开关键名 | "配置中心下发的 feature toggle" |
34
+ | 业务黑话 | 直接省略,或换成"某营销活动""某信贷子产品"这类中性描述 |
35
+
36
+ ### 预算(用于自检 / 质量门禁)
37
+
38
+ - 每道**主问口播 ≥ 150 字**,其中黑名单内部名词密度 **≤ 2 次**,且**每次出现必须紧跟一句通用抽象说明**。
39
+ - 每道**追问口播 ≥ 150 字**,黑名单内部名词 **≤ 1 次**。
40
+ - 违反预算 → 该题重写;不通过则不落盘。
41
+
42
+ ### 抽象层级样例(默认目标 = 样例风格 B)
43
+
44
+ - 见 `../examples/oral-style-samples.md`,内含**前端**与**后端**两份完整口播样例(含 STAR + 追问)+ 反例(私名堆叠型)+ **题干正反例**(简历展开型 vs 源码巡检型)。
45
+ - 生成面经时**每一道题的口播都要对齐样例风格 B 的抽象层级**:通用工程语言为主 + 极少量内部私名兜底证据。
46
+ - 反例(样例中的"私名堆叠型"口播、"源码巡检型"题干)**禁止出现**在最终面经里。
47
+
48
+ ### 证据下沉
49
+
50
+ - 所有具体函数名、文件路径、私有打点事件名、私有容器名统一收敛到面经文末的「**源码证据索引**」表格。
51
+ - 简历 bullet 可保留业界可检索名与设计约束数字;口播只做通用抽象叙述;索引表用于候选人自己复盘、以及被追问细节时的"证据钩子"。
@@ -60,7 +60,7 @@
60
60
 
61
61
  ## 简历 bullet 四槽公式(正例配方)
62
62
 
63
- 一级 4~6 条。每条一级必须能勾选下面四槽(可写在同一句,也可用 2~4 条二级展开):
63
+ 一级通常 4~6 条,证据不足时宁可少写。每条以 `- **具体支柱名:** 正文` 独立成行,先给可概括该机制的标题,再展开四槽(可写在同一句,也可用 2~4 条二级展开):
64
64
 
65
65
  1. **痛点或演进**:以前为什么不行(散落、不可扩展、无预算、失败不可见)。
66
66
  2. **机制**:业界可检索的结构名 + 一句话怎么做。
@@ -82,7 +82,7 @@
82
82
  规则描述“必须满足什么”,few-shot 用于对齐“成稿应该长什么样”。生成时不得直接复述金样或把技术名词堆成简历风格,必须按以下顺序执行:
83
83
 
84
84
  1. **支柱抽取**:从项目演进、核心失败模式、系统机制和关键约束中选 4~6 个候选支柱;局部控件、单个接口和单文件改动默认下沉到追问。
85
- 2. **事实归档**:每个支柱先记录「核心矛盾、我的动作、机制、约束、结果、证据」。没有证据的指标不进入成稿。
85
+ 2. **事实归档**:按 [仓库探索与证据归档](repository-investigation.md) 追踪链路;每个支柱先记录「核心矛盾、我的动作、机制、约束、结果、证据」。没有职责或指标证据的说法不进入肯定口吻的简历。
86
86
  3. **Few-shot 对齐**:对照 [bullet-few-shots.md](../examples/bullet-few-shots.md) 的正例、反例和改写对照,学习因果链,不复制其中的项目名、数字、领域名词或场景。
87
87
  4. **成稿**:首句交代问题/演进与职责;随后说明机制、边界和结果。每条只表达一个支柱,结果必须紧跟机制。
88
88
  5. **逐条质检**:每条至少有「问题或演进 + 机制 + 结果」;关键支柱尽量四槽齐全;能自然导出一个关于动机、权衡、边界或验证方式的主问。
@@ -0,0 +1,26 @@
1
+ # 仓库探索与证据归档
2
+
3
+ 写导学和面经前执行。目标是找出**能由用户职责和项目证据共同支撑**的工程支柱,不是罗列目录、技术栈或测试文件。用户只提供描述而没有仓库时,明确标注「仅据描述」;不得假装看过源码。
4
+
5
+ ## 1. 确定分析边界
6
+
7
+ - 确认目标项目根目录、主要语言和可运行入口;区分业务源码、生成代码、依赖、示例与测试。
8
+ - 从 README、架构说明、配置和入口文件了解产品目标,再对照用户描述确认候选人的实际职责。仓库存在某机制,不代表候选人实现过它。
9
+ - 仓库很大时,按用户职责和主要链路选代表性模块,不要求逐文件扫完。仓库很小或材料不足时,保留实际找到的数量,不为凑亮点扩写。
10
+
11
+ ## 2. 沿链路追踪,而非按目录摘抄
12
+
13
+ 对 2~4 条最能解释项目价值的核心链路,追踪「入口 → 状态/数据变化 → 关键机制 → 对外结果」。每条至少找出:
14
+
15
+ 1. **为何存在**:旧方案、失败模式、需求或约束是什么?没有历史证据就写当前要解决的问题,不编造旧架构。
16
+ 2. **如何工作**:调用关系、状态转换、数据契约,以及跨模块的责任分界。
17
+ 3. **哪里会失败**:超时、并发、一致性、重试、降级、回滚、资源预算、权限或观测;按项目实际选,不机械套全项。
18
+ 4. **如何证明**:实现、测试、配置、文档、运行结果分别能证明什么;结果是代码可见的架构效果,还是需要测量的线上收益。
19
+
20
+ 对每条候选支柱记录一行事实卡:`问题/演进 | 我的动作与职责证据 | 机制 | 硬约束/边界 | 结果 | 源码/测试/文档相对路径 | 可信度与缺口`。路径指向关键实现或测试,能标行号时标行号。事实卡可先放在工作草稿;成稿将有价值的证据写进导学的「链路与证据」及面经的「源码证据索引」。
21
+
22
+ ## 3. 筛选含金量
23
+
24
+ 优先选择能回答「为什么这样设计、与什么方案相比、失败时怎样、怎样验证」的事实;跨模块约束、架构演进和系统机制优先于单点功能。每个一级简历 bullet 应有一条可回查的事实卡;没有职责证据时,用「项目采用」解释项目,不写成「我主导」。没有可验证结果时,说明待验证的指标与测法,不用空泛收益充数。
25
+
26
+ 发现关键事实缺口时,先完成能独立进行的仓库探索,再向用户集中询问所有权、上线效果或旧方案等高信号问题。无法确认的事实保留为待确认,不进入肯定口吻的简历 bullet。
@@ -17,7 +17,7 @@
17
17
 
18
18
  ## 出题顺序(禁止颠倒)
19
19
 
20
- 1. 已写完项目简介与 4~6 条一级简历 bullet(可嵌套)。
20
+ 1. 已写完项目简介与有证据支撑的一级简历 bullet(通常 4~6 条,可嵌套)。
21
21
  2. 填「简历 → 面试展开」表:每条一级 bullet 对应 1 道主问。
22
22
  3. 再写口播。禁止先按仓库目录 / 测试文件巡检出题,再倒挤 bullet。
23
23
 
@@ -33,8 +33,8 @@
33
33
  ## 数量(只统计主问,追问不计入)
34
34
 
35
35
  - **必出**:每个一级简历 bullet → **1 主问 + 2 追问**(约 4~6 道主问)。
36
- - **可加**:2~4 道**简介级通用题**(该领域的基础权衡:一致性、隔离、降级、评估方法)。必须能从简介或 bullet 找到钩子,不要为凑数去扫鉴权样式、包体预算、点击时序等边角。
37
- - **合计主问 8~12**。不要为凑数把导学里的实现细节逐条改成主问。
36
+ - **可加**:0~4 道**简介级通用题**(该领域的基础权衡:一致性、隔离、降级、评估方法)。必须能从简介或 bullet 找到钩子,不要为凑数去扫鉴权样式、包体预算、点击时序等边角。
37
+ - **主问通常 4~10 道**,证据少时更少。不要为凑数把导学里的实现细节逐条改成主问。
38
38
 
39
39
  按主题分组时:建议 **一个一级 bullet 一个主题**;简介级通用题可单独成组或附在最相关支柱后面。
40
40
 
@@ -1,21 +1,23 @@
1
- # 输出骨架(仓库根目录两个文件)
1
+ # 输出骨架(项目根目录下的专用文件夹)
2
2
 
3
- 约定:**工作区根目录**(用户当前打开的项目根)生成:
3
+ 约定:在目标项目根目录生成:
4
4
 
5
- - `导学-{简称}.md`
6
- - `面经-{简称}.md`
5
+ - `interview-prep/{简称}/导学.md`
6
+ - `interview-prep/{简称}/面经.md`
7
7
 
8
- `{简称}` 由用户在输入中给出,或由你从项目描述中提炼(2~8 个字符为宜),并在文首「已确认输入」中写明。
8
+ `{简称}` 由用户在输入中给出,或由你从项目描述中提炼(2~8 个字符为宜),并在文首写明。需要深入讲解的主题可新增 `导学/01-主题.md` 等子文件,主导学用相对链接指向它们;不要预先创建空文件。
9
9
 
10
10
  面经必须按此顺序写完再进入下一节:简介 → 简历 bullet → 简历→面试展开表 → 面试问题 → 源码证据索引。禁止先堆 15+ 道源码题再倒挤 bullet。
11
11
 
12
12
  ---
13
13
 
14
- ## `导学-{简称}.md` 骨架
14
+ ## `导学.md` 骨架
15
15
 
16
16
  ```markdown
17
17
  # 导学:{简称}
18
18
 
19
+ > 证据范围:仓库源码 / 用户描述;待确认:……
20
+
19
21
  ## 1. 前置知识(面试高频标注)
20
22
  | 知识点 | 为何需要 | 在本项目中的位置 | 高频度 |
21
23
 
@@ -43,7 +45,10 @@
43
45
  ## 8. 关键设计决策
44
46
  | 决策点 | 备选 | 取舍 | 风险 | 验证 |
45
47
 
46
- ## 9. 量化与验证(含待测,建议)
48
+ ## 9. 链路与证据
49
+ | 链路 | 入口→机制→结果 | 失败边界 | 源码/测试相对路径 | 证据缺口 |
50
+
51
+ ## 10. 量化与验证(含待测,建议)
47
52
  - 文中涉及优化/性能/错误率等:无实测数据处标注 **(待测)**
48
53
  - **可选放在本文件末尾**:列出与本项目相关的 **如何测**(性能优化场景建议写:环境、指标、工具、基线/对比注意点);无则写「本项目量化点较少,面试诚实说明」。
49
54
  ```
@@ -52,28 +57,31 @@
52
57
 
53
58
  ---
54
59
 
55
- ## `面经-{简称}.md` 骨架
60
+ ## `面经.md` 骨架
56
61
 
57
62
  ```markdown
58
63
  # 面经:{简称}
59
64
 
65
+ > 证据范围:仓库源码 / 用户描述;待确认:……
66
+
60
67
  ## 项目简介(简历可用,1~2 句)
61
68
  > 基于……的……;用户能……;支持……(参见同目录 `oral-and-resume-patterns.md`)
62
69
 
63
- ## 简历 bullet(4~6 条一级,可嵌套二级)
64
- > 每条一级必须以 `**通用支柱名:**` 开头,并含:痛点或演进 + 机制(业界可检索名)+ 硬约束或数字 + 结果(架构效果或指标;无线上数据才待测)。
70
+ ## 简历 bullet(通常 4~6 条一级,可嵌套二级)
71
+ > 每条一级独立成行,格式为 `- **具体支柱名:** 正文`。标题在前、正文紧随其后;不允许省略标题。
72
+ > 内容含:痛点或演进 + 机制(业界可检索名)+ 硬约束或数字 + 结果(架构效果或指标;无线上数据才待测)。
65
73
  > 动词按职责海拔;交互细节不要写进一级。完整公式见 `oral-and-resume-patterns.md`。
66
74
 
67
- - **支柱一:** 痛点/演进;机制与约束;架构结果或真实指标。
75
+ - **分层容错:** 痛点/演进;机制与约束;架构结果或真实指标。
68
76
  - (可选二级:机制 / 约束)
69
- - **支柱二:** 痛点/演进;机制与约束;架构结果或真实指标。
77
+ - **可扩展编排:** 痛点/演进;机制与约束;架构结果或真实指标。
70
78
 
71
79
  ## 简历 → 面试展开
72
80
  | 简历一级 bullet(短标题) | 面试官主问(只看简历能问出口) | 对应题号 |
73
81
  | {支柱短标题} | {该支柱最硬的权衡,不含内部符号} | Q1 |
74
82
 
75
83
  ## 面试问题(按简历支柱展开)
76
- > 每个一级 bullet:1 主问 + 2 追问。可另加 2~4 道简介级通用题。主问合计 8~12。
84
+ > 每个一级 bullet:1 主问 + 2 追问。可另加 0~4 道简介级通用题;主问通常 4~10 道,证据少时更少。
77
85
  > 题干禁止文件路径、私有函数、issue 号、内部开关。不单独输出「亮点拆解」。
78
86
 
79
87
  ### Q1(频率:高)[标签] ← 对应 bullet:……
@@ -23,7 +23,7 @@ def _escape_md(text: str) -> str:
23
23
 
24
24
  def _validate_short_name(short_name: str) -> str:
25
25
  """
26
- Validate filename-safe short name used in 导学-{简称}.md / 面经-{简称}.md.
26
+ Validate directory-safe short name used in interview-prep/{简称}/.
27
27
  """
28
28
  cleaned = short_name.strip()
29
29
  if not cleaned:
@@ -52,19 +52,18 @@ def build_prompt(
52
52
  description: Required project description.
53
53
  tech_stack: Optional stack string.
54
54
  role_focus: Optional frontend/backend/AI.
55
- short_name: Optional short name for `导学-{简称}.md` / `面经-{简称}.md`.
55
+ short_name: Optional short name for `interview-prep/{简称}/`.
56
56
  extra: Optional free-form notes.
57
57
 
58
58
  Returns:
59
59
  Markdown string to paste into a chat or pipe to an LLM.
60
60
  """
61
61
  lines: list[str] = [
62
- "请严格按 `project-interview-skill` 执行:在**工作区根目录**写入两个文件:",
63
- "`导学-{简称}.md` 与 `面经-{简称}.md`;量化与验证仅作为导学中的可选建议项。",
62
+ "请严格按 `project-interview-skill` 执行:在目标项目根目录的 `interview-prep/{简称}/` 写入 `导学.md` 与 `面经.md`;量化与验证仅作为导学中的可选建议项。",
64
63
  "",
65
64
  "## 已确认输入",
66
65
  "",
67
- "### 项目简称(用于文件名)",
66
+ "### 项目简称(用于目录名)",
68
67
  "",
69
68
  ]
70
69
  if short_name and short_name.strip():
@@ -101,12 +100,13 @@ def build_prompt(
101
100
  [
102
101
  "## 输出要求(摘要)",
103
102
  "",
104
- "- 面经:先抽取 4~6 个架构支柱,再写简介与 bullet;每条一级 bullet 必须以 `**通用支柱名:**` 开头,随后交代问题/演进和职责,再写机制、约束/边界、结果,最后填「简历 → 面试展开」表并按表出题。",
103
+ "- 先探索仓库:确认入口与职责范围,追踪 2~4 条核心链路,逐条记录问题/演进、我的动作、机制、失败边界、结果、源码/测试相对路径与证据缺口;只有用户描述时标明证据限制,不编造职责、指标或旧架构。",
104
+ "- 面经:从事实卡抽取有证据的架构支柱,再写简介与 bullet;每条一级 bullet 独立成行,格式为 `- **具体支柱名:** 正文`,先给标题,再交代问题/演进和职责、机制、约束/边界与结果,最后填「简历 → 面试展开」表并按表出题。证据不足时少写。",
105
105
  "- 面经 bullet:对照领域中立 few-shot 的正例、反例和改写对照,只学习表达结构;禁止复制样例的项目名、数字、领域名词或指标。",
106
106
  "",
107
107
  "## Bullet few-shot(仅学习结构,不复制素材)",
108
108
  "",
109
- "**合格**:**分层容错:** 针对异常处理逻辑散落、改动容易波及主流程的问题,将错误处理收敛为分层容错机制:按错误类型区分有限重试、降级与快速失败,并统一输出可观测结果,降低新增场景对主链路的改动面;线上收益需通过基线对比验证。",
109
+ "**合格**:- **分层容错:** 针对异常处理逻辑散落、改动容易波及主流程的问题,将错误处理收敛为分层容错机制:按错误类型区分有限重试、降级与快速失败,并统一输出可观测结果,降低新增场景对主链路的改动面;线上收益需通过基线对比验证。",
110
110
  "",
111
111
  "**不合格**:接入缓存和重试,优化接口请求。",
112
112
  "",
@@ -115,10 +115,11 @@ def build_prompt(
115
115
  "- 面经 bullet 质检:每条只表达一个支柱,至少包含「问题或演进 + 机制 + 结果」;关键支柱尽量补充约束或数字。",
116
116
  "- 面经 bullet 质检:删除“提升性能/提高稳定性/优化体验”等不可验证结果;私有函数、路径、内部枚举只进入源码证据索引。",
117
117
  "- 面经 bullet 质检:支柱名必须是通用架构/工程能力;`RunManager`、`Stream Bridge`、`execution id` 等项目实现名改写为通用表达或下沉到源码证据索引。",
118
- "- 面经:每个一级 bullet 1 主问 + 2 追问;可另加 2~4 道简介级通用题;主问合计 8~12,追问不计入总数。题干须简历可读,禁止源码巡检型。",
118
+ "- 面经:每个一级 bullet 1 主问 + 2 追问;可另加 0~4 道简介级通用题;主问通常 4~10 道,证据少时更少,追问不计入总数。题干须简历可读,禁止源码巡检型。",
119
119
  "- 面经:正文重心放在面试题口播,不单独输出「亮点拆解」章节。",
120
120
  "- 口播:第一人称;主问与每个追问口播均 **≥150 字**,完整 STAR(场景→归因→动作→结果/兜底)。",
121
121
  "- 导学:必须包含「重点亮点与学习顺序」和「推荐阅读」表,含 **仓库相对路径**。",
122
+ "- 导学:写「链路与证据」,说明入口→机制→结果、失败边界和证据缺口;复杂主题可在 `导学/01-主题.md` 中展开并从主导学链接。",
122
123
  "- 导学:加一条固定自学提醒——看不懂继续问 AI,本 skill 不做逐行讲解。",
123
124
  "- 量化与验证:仅导学可选添加(建议语气);面经不强制该章节。",
124
125
  "",
@@ -149,7 +150,7 @@ def main(argv: list[str] | None = None) -> int:
149
150
  "--short-name",
150
151
  "-s",
151
152
  default="",
152
- help="Short name for filenames: 导学-{简称}.md / 面经-{简称}.md",
153
+ help="Short name for output directory: interview-prep/{简称}/",
153
154
  )
154
155
  parser.add_argument("--tech", default="", help="Technology stack string.")
155
156
  parser.add_argument(
@@ -0,0 +1,55 @@
1
+ #!/usr/bin/env python3
2
+ """Check that every top-level resume bullet has a visible title prefix."""
3
+
4
+ from __future__ import annotations
5
+
6
+ import argparse
7
+ import re
8
+ from pathlib import Path
9
+
10
+
11
+ TITLE_PATTERN = re.compile(r"^- \*\*[^*:\s][^*:]*:\*\*\s+\S")
12
+
13
+
14
+ def check_resume_bullets(markdown: str) -> list[str]:
15
+ in_section = False
16
+ found = 0
17
+ errors: list[str] = []
18
+
19
+ for number, line in enumerate(markdown.splitlines(), 1):
20
+ if line.startswith("## 简历 bullet"):
21
+ in_section = True
22
+ continue
23
+ if in_section and line.startswith("## "):
24
+ break
25
+ if in_section and line.startswith("- "):
26
+ found += 1
27
+ if not TITLE_PATTERN.match(line):
28
+ errors.append(f"line {number}: use '- **具体支柱名:** 正文'")
29
+
30
+ if not in_section:
31
+ errors.append("missing '## 简历 bullet' section")
32
+ elif not found:
33
+ errors.append("no top-level resume bullets found")
34
+ return errors
35
+
36
+
37
+ def main() -> int:
38
+ parser = argparse.ArgumentParser(description=__doc__)
39
+ parser.add_argument("path", type=Path, help="Path to generated 面经.md")
40
+ args = parser.parse_args()
41
+ try:
42
+ markdown = args.path.read_text(encoding="utf-8")
43
+ except OSError as exc:
44
+ parser.error(str(exc))
45
+ errors = check_resume_bullets(markdown)
46
+ if errors:
47
+ for error in errors:
48
+ print(error)
49
+ return 1
50
+ print("Resume bullet titles: OK")
51
+ return 0
52
+
53
+
54
+ if __name__ == "__main__":
55
+ raise SystemExit(main())