大厂真题文章生成技能

SkillDev tools

Organize 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.

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-20260328algo-20260415backend-20260328

岗位缩写对照表:

岗位缩写
研发岗dev
算法岗algo
后端开发岗backend
前端开发岗frontend
测试开发岗test
数据开发岗data
AI/大模型ai
通用/未注明general

2. 一级标题

# <公司> <日期> 笔试真题 - <岗位>

标题与索引命名一致性(强制)

写作前先确定唯一的“公司 + 岗位 + 日期”展示名称,并检查同公司最近一篇文章的命名方式。以下位置必须使用同一岗位名称,不得一处写“研发岗”、另一处写“国内研发岗”:

  1. frontmatter 的 titledescription
  2. 文章一级标题和“考试岗位”
  3. _data/nav.yml 中的 title
  4. 04_real_interviews/index.md 中的岗位列

除非原题明确区分且项目已有相同命名惯例,否则不要擅自增加“国内”“海外”“正式批”等限定词。文件名、permalink、导航 slug 和索引链接也必须逐字对应。

3. 本场考试概述

## 本场考试概述

**考试时间**:<年>年<月>月<日>日
**考试岗位**:<岗位名>
**难度评级**:<简单 / 中等 / 中等偏难 / 困难>

**考点分析**:

- 第一题:<算法/数据结构名>(难度<简单/中等/困难>)
- 第二题:<算法/数据结构名>(难度<简单/中等/困难>)
- 第三题:<算法/数据结构名>(难度<简单/中等/困难>)

**建议策略**:

- <针对本场考试的做题建议,2-3条>

4. 每道题的结构(重复 N 次)

每道题包含以下小节。注意:严格遵循下面的 Markdown 格式,acm-bridge.js 会自动为每个 Python 代码块注入"在 ACM IDE 中运行"按钮。按钮的自动识别依赖以下结构:

  1. **输入****输出** 必须是 <p><strong> 标签(独立段落,加粗)
  2. 输入/输出数据必须紧跟在标签后面的无语言标记代码块中(三反引号,不加 python
  3. 题解代码必须在 ```python 代码块中(带语言标记)
  4. 输入/输出和题解代码必须在同一个 ## 第 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 统计",代码里却用 dmp

5. ACM / Pyodide 运行兼容性(强制)

ACM IDE 在 Pyodide 中用 try/except Exception 包装用户代码。SystemExit 继承自 BaseException,不会被该包装层捕获,会被页面显示为“运行错误”。因此:

  • 禁止在题解代码中使用 raise SystemExitsys.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.md
  • 04_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/) |

完整工作流程

当用户提供真题内容时,按以下步骤执行:

  1. 解析题目信息:从用户提供的内容中提取公司、岗位、日期、每道题的题意和解法
  2. 确认信息:如果关键信息缺失(公司名、日期等),向用户确认
  3. 编写文章:按模板结构生成完整 Markdown 文章,重点打磨思路分析
  4. 保存文件:写入 04_real_interviews/<company>/<slug>.md
  5. 更新导航:修改 _data/nav.yml 添加文章条目
  6. 更新首页:修改 04_real_interviews/index.md 添加文章链接
  7. 执行发布前验证:运行全部样例、算法对拍、ACM 包装检查、Jekyll 构建和生成 HTML 检查
  8. 告知用户:输出文件路径,提示 ACM IDE 按钮会自动注入(无需手动添加)

处理不同输入源

来自微信文章(crawl-wechat 抓取结果)

微信题解文章通常包含题目描述和代码,但:

  • 代码可能是 Java/C++,需要转换为 Python
  • 思路分析可能很简略,需要补充详细思路
  • 格式不统一,需要按模板重新组织

来自用户口述/截图

  • 补全题目描述(用户可能只说了大意)
  • 根据算法类型编写完整解法
  • 如果信息不足以写出正确解法,明确告知用户缺少什么

来自 OJ 平台截图

  • 提取题目描述、输入输出格式、样例
  • 编写解法并验证样例正确性

发布前验证(强制,不得跳过)

1. 代码与算法

  • 提取文章中的每个 python 代码块,逐一运行同一题区块内的全部样例并严格比较 stdout。
  • 中等及困难算法必须用独立暴力解或另一种算法做随机对拍,不能只验证公众号原样例。
  • 除普通 CPython 运行外,还要按 ACM IDE 的包装语义执行一次,确认没有 SystemExitBaseException 逃逸,且 stderr 为空。
  • 样例执行不是安全沙箱:校验器会继承当前用户的文件系统、网络和进程权限。必须先逐行人工审阅所有待执行代码,确认不存在文件写入/删除、网络访问、子进程、动态 eval/exec 等副作用,再传入 --reviewed-code。不得直接执行未经审阅的抓取原文代码。

2. Markdown 与公式

  • 执行裸竖线扫描和进程退出扫描,两个命令都必须无输出。
  • 检查 **输入** / **输出** 是独立段落,样例块无语言标记,题解块使用 python 标记。
  • 禁止用 Markdown 行尾空格维持关键布局;优先使用空行、列表或明确的 HTML 换行,保证 git diff --check 通过。
  • 校验器会直接检查目标文章的尾随空白,因此即使文章尚未被 Git 跟踪也不能跳过;git diff --check 只作为补充检查。

3. 导航与构建产物

  1. 逐项核对 frontmatter、H1、考试岗位、导航标题、索引岗位和 URL slug。
  2. 运行 jekyll build,构建失败不得交付。
  3. 打开 _site/<permalink>/index.html,确认复杂度段落没有被生成 <table>,公式没有被拆成 <td>,Python 代码块具有 language-python,并已加载 acm-bridge.js
  4. 对新增文章 URL、真题索引和静态资源执行 HTTP 检查;可用浏览器时再检查桌面和移动端实际渲染。
  5. 最后执行 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 题解代码中使用 SystemExitsys.exit()exit()quit()

质量标准

一篇合格的真题文章应该让读者:

  1. 读完概述就知道这场考试考了什么、值不值得花时间看
  2. 读完思路分析就明白为什么用这个算法、核心转化是什么
  3. 读完代码就能自己写出来或至少能逐行理解
  4. 读完小结就能带走每道题最关键的知识点

Signals

GitHub stars
125
Forks
10
Last commit
Sep 2026
Advanced
Catalog kind
skill
Gateway key
interview-article-writer
Source
github.com/ranxi2001/zero2leetcode