CalcGuide · 技术博客主页 / 一页纸学习计划
🟠

简历与 GitHub 作品集:STAR 项目叙事与 ATS 关键词

分类:项目与职业能力 · 路径:docs/topics/resume-and-portfolio/README.md

#resume#portfolio#github#ats#star

用 1~2 周打磨 1 页简历(中英)+ GitHub 作品集,让 ATS 关键词匹配 ≥ 80%、6 秒内抓住亮点

父主题

求职与技术面试:从简历到 offer 的工程化准备

子主题(0)

简历与 GitHub 作品集:STAR 项目叙事与 ATS 关键词

0. 元信息

1. 学习路线

自我盘点(项目素材库)
  → STAR 项目叙事改写(3 个强项目)
  → 简历骨架(Summary + Experience + Projects + Skills + Education)
  → ATS 关键词匹配(Jobscan + JD 提取)
  → GitHub 作品集(README 模板 + demo + 文档)
  → 1 页 vs 2 页取舍(资深工程师)

每一步都是下一步的前置:没有素材就写 STAR 是空想;没有 STAR 就改简历是堆动词;没有关键词就投是石沉大海。

2. 阶段周数分配

阶段1 周方案2 周方案备注
1. 项目素材库 + STAR 卡片0.50.5列 8~10 项目,筛 3 个强项目
2. 简历骨架 v1(Summary + Experience + Projects)0.50.5LaTeX / Markdown 双版本
3. ATS 关键词匹配(Jobscan ≥ 80%)00.5JD 高频词嵌入 Skills + Experience
4. GitHub 作品集(≥ 3 个 README 完整 repo)00.5动机 + 技术栈 + 架构图 + demo + 启动
合计12

1 周方案面向已有成熟简历、改写 STAR 与补 GitHub 的工程师;2 周方案面向简历重写 + ATS 调优 + GitHub 冷启动的转岗 / 应届求职者。综合项目(求职 portfolio)作为求职 Sprint 的子模块。

3. 核心知识 / 产出 / 标准表

阶段核心知识实践产出可观察学会标准
1. 项目素材库列 8~10 个项目,按影响力 / 量化 / 技术深度筛 3 个一份项目清单能 60 秒讲清每个项目的 1 句话定位
2. STAR 项目叙事Situation / Task / Action / Result + 量化指标3 个项目的 STAR 卡片每张卡能用 90 秒讲完,Result 含数字
3. 简历骨架Summary 3 行 / Experience 4 段 / Projects 2 段 / Skills / Education1 页简历 v1资深面试官 6 秒内能看出亮点
4. ATS 关键词Jobscan ≥ 80% 匹配 / JD 高频词 / 行业术语关键词清单 + 简历 v2ATS 检查 ≥ 80% 匹配
5. GitHub 作品集3 个 README 完整仓库 / demo 截图 / 文档 / CI3 个有 README 的 repo面试官点开能 5 分钟看懂项目
6. 1 页 vs 2 页取舍资深(8+ 年)可 1.5 页 / 应届严格 1 页 / 转行可 2 页最终简历 v3给 3 个朋友看,能复述亮点

4. 第一周任务

Day 1 约定:本计划以”STAR 项目叙事 + 简历打磨 + ATS 关键词 + GitHub 作品集”为最小循环。所有产出必须有可见证据(STAR 卡片、简历 PDF、ATS 报告、GitHub README)。

任务当天交付
Day 1列 8~10 个项目,按影响力 / 量化 / 技术深度筛 3 个强项目,写每个项目的 1 句话定位项目清单 + 3 个强项目选定
Day 2给 3 个强项目写 STAR 卡片(S/T 各 30 秒,A 2 分钟,R 30 秒 + 量化指标)3 张 STAR 卡片 v1
Day 3搭简历骨架 v1(Summary 3 行 + Experience 4 段 + Projects 2 段 + Skills + Education),格式 LaTeX(moderncv)或 Markdown(jsonresume)简历 v1(中文 + 英文)
Day 4爬 5 个目标 JD,提取高频关键词(python / kubernetes / aws / system design),合并到简历 Skills + Experience 段关键词清单 + 简历 v2
Day 5用 Jobscan / Resume Worded 检查 ATS 关键词匹配(目标 ≥ 80%),补齐缺失关键词ATS 报告 + 简历 v2.1
Day 6建/补 GitHub 公开仓库 interview-prep 与 2 个项目仓库,写 README(标题 + 简介 + 技术栈 + 架构图 + 启动 + demo + 复盘)3 个 GitHub README + 第一个 commit
Day 7步骤 A:跑通简历 v2.1 + 3 张 STAR 卡片 + ≥ 3 个 GitHub README;步骤 B:补齐 4 类边界(简历超 1 页 / GitHub 无 README / Result 无量化 / 关键词不匹配 JD)求职工具包 v0.1 + 4 类问题清单

Day 7 步骤 A 把简历 + 作品集资产跑通;步骤 B 每类问题先在文档里复现,再讲清补救路径。

5. 阶段通用验收

  1. 不看 STAR 卡 90 秒内讲完任意 1 个项目(S/T/A/R 各段齐全);
  2. 3 个强项目每条 Result 都有量化指标(数字 / 比例 / 速度 / 容量 / 成本);
  3. 简历 1 页(资深 1.5 页)+ Skills 段顺序与目标 JD 关键词顺序一致;
  4. ATS 检查 ≥ 80%(Jobscan / Resume Worded 报告截图存档);
  5. GitHub 至少 3 个有 README 的 repo(动机 + 技术栈 + 架构图 + 启动 + demo + 复盘 6 段齐全);
  6. 找 3 个朋友盲审简历,能在 60 秒内复述出你的 3 个亮点;
  7. 中英文简历各 1 份,动词一致(designed / led / built / shipped / optimized)。

6. 最终验收

7. 综合项目

首选:求职 portfolio 子模块(必做:1 页中文简历 + 1 页英文简历 + ≥ 3 个 GitHub 仓库 README + 3 张 STAR 卡片 + ATS 报告 + 朋友盲审记录)。

备选:dream company 投递包(针对 1 家目标公司:定制简历 v3 + ATS 报告 + GitHub 项目 demo 视频 + 求职信 Cover Letter + 1 份 company-specific STAR 库),适合”已锁定 dream company”的求职者。

任何综合项目都必须包含:

  1. 自我盘点与项目素材库(8~10 项目筛选记录);
  2. STAR 项目卡片(3 个强项目,含 S/T/A/R 与量化 Result);
  3. 简历骨架与打磨记录(v1 → v2 → v3 迭代日志);
  4. ATS 关键词提取与匹配(Jobscan 报告 ≥ 80%);
  5. GitHub 作品集(≥ 3 个 README 完整 repo,6 段齐全);
  6. 中英文简历一致性检查(动词 / 拼写 / 排版 3 项过);
  7. README(含求职 window、目标、产出、ATS 数据);
  8. retrospective.md(含教训、改进、下一轮)。

notes/ 与 README 存放规范

所有”STAR 卡片 / 简历版本 / ATS 报告 / GitHub README / 朋友反馈”类交付物统一存放在项目根目录的 notes/ 子目录或 README 的对应章节;提交时一并带上,避免散落在聊天或临时文件里。综合项目的 notes/ 至少包含:

8. 推荐开源资料

阶段角色资料链接用法
全部经典书Gayle McDowell《The Google Resume》https://www.crackingthepminterview.com/简历事实标准
全部模板Tech Interview Handbook Resumehttps://www.techinterviewhandbook.org/resume-gui程序员简历模板库
1工具LaTeX moderncv(Overleaf)https://www.techinterviewhandbook.org/LaTeX 简历模板
1工具jsonresumehttps://jsonresume.org/Markdown / JSON 简历
2ATSJobscanhttps://www.jobscan.com/ATS 关键词匹配工具
2ATSResume Wordedhttps://resumeworded.com/ATS 评分 + 改进建议
4评估Pramp Resume Reviewhttps://www.pramp.com/免费 mock 简历评估
4GitHubGitHub Pageshttps://pages.github.com/个人作品集站点
5跨行Cultivated Culturehttps://cultivatedculture.com/转行简历(选读)
6模板Canva 简历模板https://www.canva.com/resumes/templates/视觉简历(设计师路径)

默认使用顺序:先读《The Google Resume》第 5-7 章建立简历框架 → 列 8~10 项目素材库筛 3 个 → 写 STAR 卡片 + 简历 v1 → 用 Jobscan 提取关键词 → 用 moderncv / jsonresume 输出 PDF → 找 3 个朋友盲审 → 用 GitHub Pages 搭建 Portfolio → 写复盘到 notes/peer-review.md

9. 学习资料汇聚(v0.3 自包含)

9.1 背景与动机

简历是工程师的 6 秒电梯演讲。HR 平均 6 秒决定一份简历去留;ATS 系统先用关键词筛掉 70% 简历;GitHub 作品集是面试官评估动手能力的入口。Gayle McDowell 在《The Google Resume》中明确”简历不是简历,是营销文档”;今天每个 senior 工程师都把简历当 product 来迭代。

9.2 概念地图

flowchart LR
  Projects[项目素材库 8-10] --> Star[STAR 卡片 3]
  Star --> Resume[简历骨架]
  Resume --> Keywords[关键词 ATS]
  Keywords --> ATS[ATS 匹配 ≥ 80%]
  Resume --> Polish[打磨 v3]
  Portfolio[GitHub 作品集] --> Polish
  Polish --> Apply[投递]

关系说明:项目素材是基础,STAR 是叙事单元,简历是产品包装,ATS 决定是否被看见,GitHub 决定能否进入面试。

9.3 基础知识讲解

9.3.1 简历经典

资料影响用法
Gayle McDowell, The Google Resume简历事实标准必读第 5-7 章
Resume WordedATS 关键词工具投简历前必跑
JobscanATS 匹配度投简历前必跑
Tech Interview Handbook Resume Guide程序员简历模板模板库
Pramp Resume Review免费 mock 简历评估每周 1 次
Cultivated Culture转行简历转行者选读

9.3.2 STAR 项目叙事法

Situation(30 秒):背景、问题、规模
  例:电商平台每秒 10k 订单,原系统用同步调用导致 P99 = 5s
Task(30 秒):你的角色、目标
  例:作为 Tech Lead,重构订单服务,目标 P99 < 200ms
Action(2 分钟):你做了什么、技术选型、团队协作
  例:引入 Kafka 异步化 + Outbox 模式 + 缓存预热
Result(30 秒):量化结果、业务影响
  例:P99 从 5s 降到 180ms,订单处理容量 10x,节省 $200k/年服务器成本

9.3.3 简历 bullet 写法(“动词 + 对象 + 量化”)

差:负责订单服务开发
好:设计并实现订单异步化架构,将 P99 延迟从 5s 降至 180ms

差:参与数据库迁移
好:主导 1.2TB MySQL → TiDB 迁移,零停机,QPS 提升 3x

差:改进 CI/CD 流程
好:将 CI 流水线从 25 分钟降至 6 分钟,每天节省 100 次构建 × 19 分钟 = 31 工程师小时

差:管理 3 人团队
好:带领 3 人小组交付 A/B 实验平台,支持 50+ 实验并行,转化率 +12%

9.3.4 ATS 关键词提取流程

1. 收集 5~10 个目标 JD(每个目标公司 2~3 个)
2. 用工具统计高频词(python、kubernetes、aws、system design...)
3. 把关键词分为:技术栈 / 框架 / 概念 / 软技能
4. 在简历中合理嵌入:
   - Skills 段直接列
   - Experience 段嵌入动作中
   - Projects 段强调相关性
5. 用 Jobscan 检查匹配度 ≥ 80%

9.4 经典问题与经典案例

#问题重要性最简答案
1简历该 1 页还是 2 页?决定阅读体验应届严格 1 页;3-7 年 1 页;8+ 年可 1.5 页
2没有量化指标怎么办?决定可信度用比例 / 速度 / 容量 / 成本 / 用户数
3跨行业求职怎么写?决定跨行通过率用 transferrable skills + 重新包装
4项目经历超过 5 个?决定密度选 3 个强项目 + 1-2 个并列项
5GitHub 没有 star 的项目?决定作品集写 README + demo + 文档;展示思路
6应届没有工作经验?决定应届简历课程项目 + 实习 + 开源 + 比赛
7频繁跳槽简历怎么写?决定可信度用主题聚合(项目 / 技术栈)而非时间线
8简历要不要放照片?决定合规美国不放;国内可放;欧洲看国家
9Skills 段顺序怎么排?决定 ATS与目标 JD 关键词顺序一致
10简历要不要写”精通”?决定可信度慎用”精通”;用”深入使用”
11GitHub README 模板?决定作品集第一印象动机 + 技术栈 + 架构图 + demo + 启动步骤 + 复盘
12简历 PDF vs Word?决定格式投 ATS 用 PDF;面试官看 Word 也行
13英文简历怎么写动词?决定 native 感用 STAR 动词表(designed / led / built / shipped / optimized)
14简历要不要写期望薪资?决定谈判空间默认不写;HR 问到时再给范围
15推荐信 / LinkedIn 推荐怎么要?决定背书项目结束后 2 周内找 manager + mentor 求推荐

9.5 学习难点

9.6 技术标准与接口

Entity

简历模板(Markdown / LaTeX / PDF)、Jobscan 报告、ATS 关键词清单、GitHub repo README、项目 STAR 卡片。

Scope

简历与作品集不替代面试表现,只解决”HR 是否给面试机会”与”面试官是否愿意深入”两个问题。

Structure

Ecosystem

Depth Tiers

本子主题要求:L3

Source

9.7 关键代码

9.7.1 简历项目 STAR 数据结构

# 9.7.1 简历项目 STAR 数据结构 + 量化检查
from dataclasses import dataclass

@dataclass
class ProjectStar:
    name: str
    situation: str     # 背景
    task: str          # 角色 + 目标
    action: str        # 做了什么
    result: str        # 量化结果
    tech_stack: list[str]

def has_quantified_result(star: ProjectStar) -> bool:
    """检查 result 是否含量化指标"""
    keywords = ["%", "x", "ms", "s", "$", "k", "M", "B",
                "users", "QPS", "RPS", "GB", "TB"]
    return any(k.lower() in star.result.lower() for k in keywords)

def star_one_liner(star: ProjectStar) -> str:
    """给面试官讲的 1 句话版本"""
    return f"{star.name}: {star.action.split(',')[0]}{star.result}"

if __name__ == "__main__":
    p = ProjectStar(
        name="订单服务异步化",
        situation="电商每秒 10k 订单,原同步调用 P99=5s",
        task="Tech Lead 重构订单,目标 P99 < 200ms",
        action="引入 Kafka 异步化 + Outbox + 缓存预热",
        result="P99 从 5s 降至 180ms,订单容量 10x,节省 $200k/年",
        tech_stack=["kafka", "java", "redis", "mysql"],
    )
    print(has_quantified_result(p))   # True
    print(star_one_liner(p))

9.7.2 GitHub README 模板(Mermaid 渲染)

%% 9.7.2 GitHub README 结构图
flowchart LR
  Title[项目标题 + 简介 2 行] --> Stack[技术栈]
  Stack --> Arch[架构图]
  Arch --> QuickStart[快速启动]
  QuickStart --> Test[测试]
  Test --> Demo[Demo 截图 / 链接]
  Demo --> Retro[复盘 / 后续]

9.7.3 ATS 关键词提取脚本

# 9.7.3 从 JD 提取高频关键词,与简历对比
import re
from collections import Counter

STOP_WORDS = {
    "the", "a", "an", "and", "or", "with", "for", "to", "of",
    "in", "on", "is", "are", "be", "as", "at", "by",
}

def tokenize(text: str) -> list[str]:
    text = text.lower()
    words = re.findall(r"[a-z][a-z0-9+#.-]{1,}", text)
    return [w for w in words if w not in STOP_WORDS and len(w) > 1]

def top_keywords(jd_text: str, k: int = 20) -> list[tuple[str, int]]:
    return Counter(tokenize(jd_text)).most_common(k)

def ats_match(jd_text: str, resume_text: str, k: int = 20) -> float:
    """返回 0~1 的关键词覆盖率"""
    jd_kw = {w for w, _ in top_keywords(jd_text, k)}
    resume_kw = set(tokenize(resume_text))
    if not jd_kw:
        return 0.0
    return len(jd_kw & resume_kw) / len(jd_kw)

if __name__ == "__main__":
    jd = "We are looking for a senior backend engineer with Python, AWS, Kubernetes, PostgreSQL, system design experience."
    resume = "Senior engineer. Built distributed systems with Python on AWS. Used Kubernetes, PostgreSQL, Redis."
    print(f"ATS match: {ats_match(jd, resume):.0%}")

10. 常见误区

11. 所有知识点分类(统一规则)

  1. 编程语言
  2. 数据结构与算法
  3. 计算机基础
  4. 工程技术
  5. Web 与后端
  6. 前端与客户端
  7. 数据与人工智能
  8. 项目与职业能力

本计划归属:项目与职业能力 主。


本主题贡献

直接依赖(0)

查看知识图谱