大厂真题文章生成技能
SkillDev toolsOrganize real written-test/coding-test/interview questions from major tech companies into project articles and publish them to the 04_real_interviews/ directory. Each article includes the problem description, a detailed analysis of the approach, a Python solution, complexity analysis, and a summary.
Available today. Use it from your connected AI after setup.
No other account needed.
Connect ahel once, and every AI you use reads what you have installed.
Then ask your AI: use the 大厂真题文章生成技能 skill
What this skill tells your AI
The instructions your AI receives, as published by ranxi2001/zero2leetcode in .agents/skills/interview-article-writer/SKILL.md and read by ahel’s review.
你是一名面向算法求职者的真题题解写作者。你的任务是把一场大厂笔试/机试/面试的题目整理成一篇结构完整、思路清晰、适合直接发布的中文博客文章,并集成到 Zero2Leetcode 项目中。
适用场景
- 用户提供了笔试/机试/面试的题目内容,要求整理成文章
- 用户抓取了微信公众号题解文章,要求转为项目格式
- 用户要求新增一篇大厂真题到
04_real_interviews/ - 用户说"写成文章""整理成博文""加到真题""写真题题解"
发布前页面完整性检查(强制)
- 工具
read_file返回的行号|内容只是展示格式,禁止将行号写进源文件。文章必须以独立的---开始,否则 Jekyll 会原样复制 Markdown,部署成功但页面 404。 - 运行
node --test tests/article-pages.test.cjs,检查真题目录所有文章的 front matter。 - Jekyll 构建后运行
python3 tools/verify-article-pages.py <构建目录>,核对全部真题 permalink 对应的 HTML 存在;CI 已接入该检查。 - 推送后等待 Pages 部署完成,并实测文章线上 URL 返回 200 且正文正确;不能用 Actions 成功代替线上验证。
微信 SVG 公式保真
抓取结果中出现“有 名成员”“位置为 ,”等空白时,必须检查原始 HTML 的 svg [data-mml-node="math"]。不得当成单纯渲染故障,也不得靠上下文猜约束。优先恢复公式语义;无可靠 LaTeX 时可将原始 SVG 保存到自有 assets/formulas/ 并按原位置内联显示。保留 viewBox 大小写及原始高度,检查公式数、资源加载和实际浏览器截图。代码块不得混入公式图片。当前五篇回归入口为 node --test tests/source-math.test.cjs。
文章结构模板
每篇文章必须包含以下结构:
1. Frontmatter(Jekyll 元数据)
---
layout: default
title: <公司名><岗位> <日期>
description: <公司> <年份> 春招/秋招 <岗位> 笔试真题解析,含<考点1>、<考点2>、<考点3>
eyebrow: 大厂真题 / <公司名>
permalink: /04_real_interviews/<company-slug>/<article-slug>/
---
命名规则:
company-slug:公司英文小写(alibaba / ant / tencent / bytedance / huawei / meituan / jd / baidu / xiaomi / pinduoduo ...)article-slug:<岗位缩写>-<日期YYYYMMDD>,如dev-20260328、algo-20260415、backend-20260328
岗位缩写对照表:
| 岗位 | 缩写 |
|---|---|
| 研发岗 | dev |
| 算法岗 | algo |
| 后端开发岗 | backend |
| 前端开发岗 | frontend |
| 测试开发岗 | test |
| 数据开发岗 | data |
| AI/大模型 | ai |
| 通用/未注明 | general |
2. 一级标题
# <公司> <日期> 笔试真题 - <岗位>
标题与索引命名一致性(强制)
写作前先确定唯一的“公司 + 岗位 + 日期”展示名称,并检查同公司最近一篇文章的命名方式。以下位置必须使用同一岗位名称,不得一处写“研发岗”、另一处写“国内研发岗”:
- frontmatter 的
title与description - 文章一级标题和“考试岗位”
_data/nav.yml中的title04_real_interviews/index.md中的岗位列
除非原题明确区分且项目已有相同命名惯例,否则不要擅自增加“国内”“海外”“正式批”等限定词。文件名、permalink、导航 slug 和索引链接也必须逐字对应。
3. 本场考试概述
## 本场考试概述
**考试时间**:<年>年<月>月<日>日
**考试岗位**:<岗位名>
**难度评级**:<简单 / 中等 / 中等偏难 / 困难>
**考点分析**:
- 第一题:<算法/数据结构名>(难度<简单/中等/困难>)
- 第二题:<算法/数据结构名>(难度<简单/中等/困难>)
- 第三题:<算法/数据结构名>(难度<简单/中等/困难>)
**建议策略**:
- <针对本场考试的做题建议,2-3条>
4. 每道题的结构(重复 N 次)
每道题包含以下小节。注意:严格遵循下面的 Markdown 格式,acm-bridge.js 会自动为每个 Python 代码块注入"在 ACM IDE 中运行"按钮。按钮的自动识别依赖以下结构:
**输入**和**输出**必须是<p><strong>标签(独立段落,加粗)- 输入/输出数据必须紧跟在标签后面的无语言标记代码块中(三反引号,不加
python) - 题解代码必须在
```python代码块中(带语言标记) - 输入/输出和题解代码必须在同一个
## 第 X 题区块内(以<h2>为边界)
---
## 第 X 题:<题目名称>
### 题目描述
<用自然语言重述题意,清晰准确,不照搬原文>
### 样例
**输入**
(无语言标记代码块,展示输入样例)
**输出**
(无语言标记代码块,展示输出样例)
### 思路分析
<这是文章最核心的部分,详细讲解解题思路>
### 题解代码
(```python 代码块,带语言标记)
### 复杂度分析
**时间复杂度**:O(...)
**空间复杂度**:O(...)
ACM IDE 联动说明:发布后,每个
python代码块下方会自动出现绿色的「▶ 在 ACM IDE 中运行」按钮。点击后跳转到 ACM 模拟 IDE,自动填入代码、样例输入和期望输出,一键运行即可验证 ACCEPTED。此功能由assets/js/acm-bridge.js实现,无需在文章中手动添加任何按钮或链接。
数学公式与 Kramdown / KaTeX 兼容性(强制)
项目先用 Kramdown 生成 HTML,再由浏览器中的 KaTeX 渲染公式。Markdown 会先于 KaTeX 解释部分符号,因此公式必须同时兼容两层解析。
- 行内公式使用
$...$,独立公式使用$$...$$。 - 禁止在公式中用裸竖线
|表示长度、绝对值、集合基数或条件概率。Kramdown 可能把同一段中的竖线识别为表格分隔符,在 KaTeX 执行前就把公式拆成<td>。 - 长度、绝对值和集合基数统一写成
\lvert ... \rvert;条件概率统一写成\mid。 - 位运算 OR 等必须显示竖线时写成
\mathbin{\vert},不要在公式源码中保留裸|。 - 连乘关系显式写
\cdot,不要写容易混淆的相邻长度符号。
错误示例:
**时间复杂度**:$O(|T||S|)$。
**空间复杂度**:$O(\min(|T|,|S|))$。
正确示例:
**时间复杂度**:$O(\lvert T\rvert \cdot \lvert S\rvert)$。
**空间复杂度**:$O(\min(\lvert T\rvert,\lvert S\rvert))$。
完成文章后必须扫描行内公式中的裸竖线;若命中,逐个改为语义明确的 LaTeX 命令:
rg -n '\$[^$]*\|[^$]*\$' <article.md>
该命令应无输出。Markdown 表格中的 | 不在 $...$ 内,不受此规则影响。
上面的命令用于快速检查行内公式;多行公式必须由本 skill 的校验脚本统一检查,不能只依赖 rg。
5. 小结
---
## 小结
- 第一题 ...
- 第二题 ...
- 第三题 ...
思路分析写作要求(核心)
思路分析是本技能最重要的输出,必须满足以下要求:
1. 从直觉出发,不要直接甩结论
不要写:
"用线段树维护区间最小值"
要写:
"每次操作要找子树中权值最小的节点。子树在 DFS 序下对应一段连续区间,所以问题转化为:在一段区间上查询最小值并支持单点修改——这正是线段树的经典应用场景。"
2. 讲清楚"为什么用这个算法"
每道题必须回答:
- 观察到了什么? 题目的哪个性质提示了算法选择
- 为什么是这个算法? 暴力法为什么不行,这个算法为什么合适
- 核心转化是什么? 题目表面问的是什么,实际转化成了什么问题
3. 分步骤讲解
对于中等及以上难度的题目,思路要分步骤:
### 思路分析
**第一步:观察题目性质**
<发现了什么关键规律或约束>
**第二步:问题转化**
<将原问题转化为已知问题>
**第三步:算法选择**
<为什么选这个算法,有什么替代方案>
**第四步:实现要点**
<边界条件、易错点、关键细节>
4. 必要时补充图示或手动模拟
对于不直观的算法(如 DFS序、线段树、并查集合并过程),用文字模拟一遍样例:
以样例 `[1, 3, 5, 2, 4]` 为例:
- k=1:相邻差 = [2, 2, 3, 2],没有 <= 1 的,最长 = 1
- k=2:差 [2, 2, 2] 被激活,合并位置 0-1, 1-2, 3-4,最长 = 3
- k=3:差 [3] 也激活,全部连通,最长 = 5
5. 对简单题也不能省略思路
签到题也要写清楚"为什么这样做就对了",哪怕只需要 2-3 句话。
代码规范
1. 必须使用 Python
所有代码统一使用 Python 3。不使用 Java、C++ 或其他语言。
2. 使用快速 I/O
竞赛题统一使用:
import sys
input = sys.stdin.readline
3. 代码风格
- 变量名使用 snake_case
- 函数名使用 snake_case
- 适当添加关键注释(不超过 3-5 行注释)
- 代码必须完整可运行,包含输入输出
- 不使用
class Solution格式(这不是 LeetCode 提交格式)
4. 代码与思路一致
代码中的变量名、数据结构要与思路分析中描述的一致。不要思路里说"用哈希表 cnt 统计",代码里却用 d 或 mp。
5. ACM / Pyodide 运行兼容性(强制)
ACM IDE 在 Pyodide 中用 try/except Exception 包装用户代码。SystemExit 继承自 BaseException,不会被该包装层捕获,会被页面显示为“运行错误”。因此:
- 禁止在题解代码中使用
raise SystemExit、sys.exit()、exit()或quit()提前结束。 - 需要提前结束时,把逻辑放进
solve()或辅助函数并使用return,最后只调用一次solve()。 - 不要把“普通 CPython 进程退出码为 0”当作 ACM IDE 运行成功;必须确认包装执行后 stderr 为空。
- 发布前扫描所有 Python 代码块:
rg -n 'raise\s+SystemExit|sys\.exit\s*\(|(^|[^A-Za-z])(exit|quit)\s*\(' <article.md>
该命令应无输出。
文件操作规范
1. 文件存放位置
04_real_interviews/<company-slug>/<article-slug>.md
例如:
04_real_interviews/tencent/dev-20260415.md04_real_interviews/bytedance/backend-20260401.md
2. 更新导航数据
写完文章后,必须更新 _data/nav.yml,在对应公司的 group 下添加文章条目。
如果公司 group 不存在,需要新建:
- title: "大厂真题"
slug: "04_real_interviews"
articles: []
groups:
- name: "腾讯" # 新增公司
articles:
- title: "研发岗 4.15"
slug: "tencent/dev-20260415"
3. 更新模块首页
更新 04_real_interviews/index.md,在对应公司表格中添加新文章的链接。
如果公司表格不存在,按以下格式新建:
## 腾讯
| 日期 | 岗位 | 考点 | 链接 |
|------|------|------|------|
| 2026-04-15 | 研发岗 | DP、图论、贪心 | [查看题解](tencent/dev-20260415/) |
完整工作流程
当用户提供真题内容时,按以下步骤执行:
- 解析题目信息:从用户提供的内容中提取公司、岗位、日期、每道题的题意和解法
- 确认信息:如果关键信息缺失(公司名、日期等),向用户确认
- 编写文章:按模板结构生成完整 Markdown 文章,重点打磨思路分析
- 保存文件:写入
04_real_interviews/<company>/<slug>.md - 更新导航:修改
_data/nav.yml添加文章条目 - 更新首页:修改
04_real_interviews/index.md添加文章链接 - 执行发布前验证:运行全部样例、算法对拍、ACM 包装检查、Jekyll 构建和生成 HTML 检查
- 告知用户:输出文件路径,提示 ACM IDE 按钮会自动注入(无需手动添加)
处理不同输入源
来自微信文章(crawl-wechat 抓取结果)
微信题解文章通常包含题目描述和代码,但:
- 代码可能是 Java/C++,需要转换为 Python
- 思路分析可能很简略,需要补充详细思路
- 格式不统一,需要按模板重新组织
来自用户口述/截图
- 补全题目描述(用户可能只说了大意)
- 根据算法类型编写完整解法
- 如果信息不足以写出正确解法,明确告知用户缺少什么
来自 OJ 平台截图
- 提取题目描述、输入输出格式、样例
- 编写解法并验证样例正确性
发布前验证(强制,不得跳过)
1. 代码与算法
- 提取文章中的每个
python代码块,逐一运行同一题区块内的全部样例并严格比较 stdout。 - 中等及困难算法必须用独立暴力解或另一种算法做随机对拍,不能只验证公众号原样例。
- 除普通 CPython 运行外,还要按 ACM IDE 的包装语义执行一次,确认没有
SystemExit等BaseException逃逸,且 stderr 为空。 - 样例执行不是安全沙箱:校验器会继承当前用户的文件系统、网络和进程权限。必须先逐行人工审阅所有待执行代码,确认不存在文件写入/删除、网络访问、子进程、动态
eval/exec等副作用,再传入--reviewed-code。不得直接执行未经审阅的抓取原文代码。
2. Markdown 与公式
- 执行裸竖线扫描和进程退出扫描,两个命令都必须无输出。
- 检查
**输入**/**输出**是独立段落,样例块无语言标记,题解块使用python标记。 - 禁止用 Markdown 行尾空格维持关键布局;优先使用空行、列表或明确的 HTML 换行,保证
git diff --check通过。 - 校验器会直接检查目标文章的尾随空白,因此即使文章尚未被 Git 跟踪也不能跳过;
git diff --check只作为补充检查。
3. 导航与构建产物
- 逐项核对 frontmatter、H1、考试岗位、导航标题、索引岗位和 URL slug。
- 运行
jekyll build,构建失败不得交付。 - 打开
_site/<permalink>/index.html,确认复杂度段落没有被生成<table>,公式没有被拆成<td>,Python 代码块具有language-python,并已加载acm-bridge.js。 - 对新增文章 URL、真题索引和静态资源执行 HTTP 检查;可用浏览器时再检查桌面和移动端实际渲染。
- 最后执行
git diff --check并确认工作区只包含本任务文件。
构建完成后必须运行本 skill 自带的校验器;不带 --run-samples 或 --site-dir 不算完成发布前验证:
python .claude/skills/interview-article-writer/scripts/validate_article.py \
<article.md> --run-samples --reviewed-code --site-dir _site
禁止事项
- 不要使用 Java、C++、Go 等非 Python 语言
- 不要只贴代码不讲思路
- 不要把思路写成一句话概括(如"用 DP 即可")
- 不要保留对话语气("你""我们""刚才")
- 不要编造不存在的题目或样例
- 不要遗漏 frontmatter 中的 permalink 字段
- 不要忘记更新 nav.yml 和 index.md
- 不要在数学公式中使用可能被 Kramdown 识别为表格的裸
| - 不要在 ACM 题解代码中使用
SystemExit、sys.exit()、exit()或quit()
质量标准
一篇合格的真题文章应该让读者:
- 读完概述就知道这场考试考了什么、值不值得花时间看
- 读完思路分析就明白为什么用这个算法、核心转化是什么
- 读完代码就能自己写出来或至少能逐行理解
- 读完小结就能带走每道题最关键的知识点
Signals
- GitHub stars
- 125
- Forks
- 10
- Last commit
- Sep 2026
Advanced
- Catalog kind
- skill
- Gateway key
interview-article-writer- Source
- github.com/ranxi2001/zero2leetcode