This is a job-seeking guide read by real candidates: report only what the source
actually says. Never invent questions, rounds, results, or compensation. Follow the
contribution rules in docs/zhHans/guide/interview-experience-utils/contributing.md:
anonymize the original author, objective tone, no attacks on interviewers.
-
Branch off the current branch before writing anything (never on main):
git checkout -b interview/<company>-<role-kebab>.
-
Fetch/read the source and extract: company, role + level (New Grad / intern /
senior…), round type(s), the questions (link LeetCode problems when identifiable),
the candidate's approach, interviewer interactions, and the outcome. Apply the
hard gates above.
-
Resolve the company folder — kebab-case company name (e.g. capital-one,
bytedance) under both roots. If docs/zhHans/interview-experience/<company>/
doesn't exist, create it with a minimal index.md following
docs/zhHans/interview-experience/google/index.md:
---
title: <Company>
---
# <Company>面试经验
公司介绍页面链接暂无
-
Generate the slug — a random 6-char lowercase alphanumeric ID (existing
examples: y2ti8x, sw9b1u, 12nbu7):
LC_ALL=C tr -dc 'a-z0-9' </dev/urandom | head -c 6
Confirm no file with that name exists in the company's md or json folder.
-
Write the JSON docs/assets/json/interview-experience/<company>/<slug>.json,
following the prevailing shape (see
docs/assets/json/interview-experience/openai/y2ti8x.json):
{
"company": "<Company>",
"position": {
"jobPostUrl": null,
"title": "<Role>",
"level": "<new-grad / senior / '' if unknown>",
"jobType": "full-time"
},
"applicationSource": {
"channel": "<内推 / direct apply / 猎头>",
"referralDetails": "<detail or 'na'>"
},
"candidate": {
"education": "<bachelor / master / phd / na>",
"background": "<e.g. 26ng / 在职跳槽>",
"yearsOfExperience": 0
},
"interview": {
"date": "<YYYY-MM-DD or ''>",
"result": "<pass / rejected / pending>",
"rounds": [
{ "roundType": "<phone screen / technical / onsite / vo>", "rate": 3 }
]
}
}
Use "" / null / "na" for unknowns — never guess. One rounds entry per
round the source describes.
-
Write the markdown docs/zhHans/interview-experience/<company>/<slug>.md,
following docs/zhHans/interview-experience/openai/y2ti8x.md:
- Frontmatter:
title = concise role tag (e.g. SDE, MachineLearningEng 挂经),
description (one zh-Hans sentence, no trailing period), outline: deep.
Omit createdDate/lastUpdated — CI auto-fills them.
# H1 naming company + role, e.g. # 美国Google公司软件工程师面试经验.
<InterviewDetail /> on its own line right after the H1 (globally registered,
no import).
## 基本信息 — bullets from
docs/zhHans/guide/interview-experience-utils/requirement.md, only the ones the
source supports: 面试日期 / 面试岗位 / 学历背景 / 工作类型 / 投递方式 / 面试形式 / 当前状态.
## 面试详情 — subsections as fits the source, typically:
### 面试过程的详细描述 (one #### per round; state the questions, link
LeetCode problems like [LeetCode 124. Binary Tree Maximum Path Sum](https://leetcode.com/problems/binary-tree-maximum-path-sum/)),
### 解决方法, ### 面试流程, ### 和面试官沟通细节, ### 面试结果反馈.
Mark inferences explicitly (e.g. "从行文语气推断") rather than stating them as fact.
- End with
<ReferenceSource> citing the source (globally registered, inline props):
<ReferenceSource
:sources="[
{
title: '<source title>',
link: '<source url>',
site: '<小红书 / 一亩三分地 / …>',
author: '<author handle>',
date: 'YYYY-MM-DD',
category: '<海外面经 / 笔记>'
}
]"
/>
-
Verify (cheap checks only):
python3 -c "import json; json.load(open('<json path>'))" — the
validate-json.yml CI runs jq empty on every changed JSON.
- The JSON path mirrors the md path exactly (company folder and slug).
- The sidebar picks the page up automatically — no config edits.
-
Report the two file paths, the branch name, and anything the source didn't
specify (fields left na/empty). Leave the change on the branch — do not commit,
push, or open a PR unless the user asks.