翻了 30 份 ATS 系统文档之后,我才发现简历卡掉的真正原因 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
如果想在 V2EX 获得更好的推广效果,欢迎了解 PRO 会员机制:
pro/about
sawcer7

翻了 30 份 ATS 系统文档之后,我才发现简历卡掉的真正原因

  •  
  •   sawcer7 7 days ago 898 views

    platform: v2ex node: career title: 翻了 30 份 ATS 系统文档之后,我才发现简历卡掉的真正原因 status: READY

    翻了 30 份 ATS 系统文档之后,我才发现简历卡掉的真正原因

    最近帮朋友看简历,越看越觉得「为什么投了 50 份连面试电话都没有」这件事,几乎从来不是内容写得不好。

    我顺手做了一件可能没什么人会去做的事把 Greenhouse 、Workday 、iCIMS 、SmartRecruiters 、Lever 、Taleo 这几家在国内外都很常见的 ATS ( Applicant Tracking System )公开开发文档全翻了一遍,然后扒了网上 30 份阅读量比较高的简历模板(来自超级简历、五百丁、掘金、知乎专栏、小红书),用我自己写的一个开源 ATS 解析模拟器跑了一遍。

    结论让我挺意外的绝大多数简历不是死在内容,而是死在格式。HR 那边看到的版本,和你自己 PDF 里看到的,根本不是同一份。


    ATS 到底在干什么

    先稍微解释一下,省得后面看起来像玄学。

    ATS 是几乎所有正规公司在用的简历管理系统。你投递时上传的那份 PDF ,进系统第一步是被一个叫 resume parser 的模块切碎、抽字段、入库。HR 之后在系统里看到的「候选人卡片」,是 parser 解析出来之后重新拼的。

    也就是说:你 PDF 里看到的不等于 HR 看到的

    如果你简历里把「教育经历」写成「我的求学之路」,主流 parser 会直接把这段当 unclassified content 丢掉。HR 那边的「教育」字段就是空的。HR 用关键词搜「 985 」「计算机」之类的词筛人时,你压根不在结果里。

    这事儿听起来很离谱,但 Greenhouse 自家 Resume Parser API 文档 写得明明白白:parser 依赖的是 standard section headings,遇到非标准 heading 就 fallback 到机器学习猜测,准确率一下从 95% 掉到 50% 出头。

    我跑那 30 份简历的时候,13 份因为模块命名问题,至少有一个核心字段(教育、工作、技能其中之一)是 parser 抓不到的。


    5 个共性问题

    1. 模块名起得太「有创意」

    最常见。设计感越强的模板越严重,几乎每份小红书模板都中招。

    bad case:

    • 「我的故事」←「自我评价」
    • 「在路上」←「工作经历」
    • 「不打烊的好奇心」←「兴趣爱好」
    • 「关于我」←「个人简介」

    ATS 的 parser 大多数是基于 keyword pattern + 规则,匹配的词表非常有限:教育经历 / 教育背景 / 学历 / 工作经历 / 工作经验 / 项目经验 / 项目经历 / 技能特长 / 自我评价。这一类的同义词。

    「我的故事」「在路上」这种,parser 一律识别为 custom_section,content 整段被打入冷宫,HR 在系统里搜不到。你在 PDF 上看着精彩,到了 HR 系统里面就是一段透明文本。

    怎么改:标题写得无聊一点。审美上可能不如那些花活,但这是工程问题不是审美问题。

    2. 工作描述只有职位 + 公司,没有量化

    第二常见。30 份里 22 份的工作经历是这种结构:

    2022.06 - 2023.05 字节跳动 - 后端开发工程师 - 负责短视频推荐系统的开发与维护 - 参与多个核心模块的优化 - 配合产品和算法团队完成迭代 

    ATS 不光做 keyword extract ,主流系统都接了 LLM 做 summary scoring 。这种文本进 LLM 的输出基本就是「无具体可量化产出」「描述抽象」,scoring 直接低分。HR 那边的候选人卡片上你可能就是个三星,被排在五星候选人后面。

    我自己跑测试时,把上面那段改成:

    - 主导短视频推荐召回链路重构,QPS 从 8w 提升到 23w ,P99 延迟降低 41% - 优化离线特征生产 Pipeline ,将日批耗时从 6.5h 降到 2.1h - 推动从 PHP 迁移到 Go ,相关服务内存占用减半,节约约 40 台服务器 

    LLM scoring 直接从 2.8 分上到 4.6 分(满分 5 )。

    怎么改:每条 bullet 至少一个数字。不会写就用 STAR:Situation - Task - Action - Result 。结果那一项不能省。没数字编一个「显著」「明显」之类的副词都比没有强,但有真数字最好。

    3. 联系方式塞进自定义字段

    这个比较细但杀伤力大。

    很多模板把头像 + 姓名 + 联系方式做成一整张图(或者塞到 header 里 absolute 定位的 div )。Parser 抽取联系方式时跑的是 field detection,需要明确的 label:邮箱、电话、Email 、Phone 、E-mail 、Tel 这种。如果你联系方式只是一行 +86 138-xxxx-xxxx | [email protected] 没有 label ,主流 parser 大概有 30% 的概率漏抓。

    更糟的是有些设计师爱把联系方式写在侧栏,正文是单栏 + 侧栏的两栏布局。Parser 大多按 reading order 抽文本(即把多栏当成一栏从上到下读),结果你的「邮箱」 label 跑到了「教育经历」的内容里,整段错位。

    我跑的 30 份,6 份的联系方式 parser 没抓全,HR 系统里要么只有手机没邮箱,要么反过来。

    怎么改:联系方式放在第一页顶部,单栏,一行一个,每行带明确 label (手机:xxx / 邮箱:xxx )。视觉上可能没那么漂亮但保证 parse 得到。

    4. 头像没分场景

    国内简历加头像几乎是默认的,但你如果投外企( Google 、微软、Meta 、Stripe 、字节海外仓 等),含照片的简历会被 ATS 自动 flag欧美就业反歧视法规要求 HR 不能基于照片做筛选决定,所以正规外企的 ATS 会直接把含照片的简历 routing 到一个特殊队列,加人工审核之后才放到 HR 桌面,多一道流程意味着竞争对手已经先收到 offer 了。

    国企、事业单位、国内大厂民企走相反路子没头像反而显得不正式,特别是应届生。

    怎么改:投国内 → 标准证件照;投外企 → 一份不带头像的副本。一份模板不可能两边通吃。

    5. PDF 里夹图片化的字段

    最隐蔽也最致命。我见过一份小红书爆款模板,把整个「技能特长」做成了一张 SVG 图,五个能力雷达图 + 标签云的样式,PDF 里看上去非常炫。

    但 parser 对图片基本不处理(除非接了 OCR 全链路,国内大多数 ATS 不接,外资公司接的也不一定走 OCR 通道)。结果 HR 用 ATS 搜 「 Python 」「 React 」时,你那份「技能」全是 SVG ,关键词一个都搜不到,相当于你写了等于没写。

    我跑的 30 份里 4 份有大段图片化内容,里面的字 parser 一个都没抓到。

    怎么改:所有需要被搜索的内容都用纯文本。视觉效果可以靠排版(颜色、间距、icon font )做,绝对不要用图片。


    一个反直觉的结论

    我反复跑这些 case ,最后总结出来一个挺反直觉的规律:

    简历的 ATS 友好度和它的视觉精美度大概率成反比

    那种看上去最普通最朴素的单栏、宋体或微软雅黑、标题就叫「教育经历」「工作经历」、联系方式整齐排列在顶部、每个工作经历至少 3 条带数字 bullet这种简历 parser 抓得最准,HR 系统里展示得最完整。

    很多设计感强的模板(侧栏、两栏布局、图片化技能、创意标题),看着是对你简历的加分,到了 ATS 那一关其实是负分。

    如果你简历投出去几十份没回响,先别急着怀疑自己内容不好把简历另存成 .txt 看一眼。如果 .txt 里读起来字段错位、内容缺失、标题不通,那 HR 系统里看到的就是这个。


    顺便聊一下我做的工具

    聊到这里大概也猜到了,我做了个免费在线 ATS 检查器,叫棱镜简历

    地址:https://xukz.cn

    核心是这两个功能:

    1. ATS 体检上传你现有的简历或在站内编辑,30 秒出一份报告:拿了多少分(满分 100 )、哪些字段 parser 抓不到、模块名是否标准、内容饱满度够不够,每条 issue 都告诉你怎么改。
    2. JD 匹配诊断把目标岗位 JD 贴进去,跟你的简历比对,告诉你缺哪些关键词、匹配度多少、技能 gap 在哪。

    这两个功能都不收费。完全离线在浏览器里跑( ATS 检查纯前端逻辑,不上传简历内容到服务器),代码我开源了核心规则在 frontend/src/utils/atsEngine.ts,有兴趣可以去 GitHub 看具体规则。

    PDF 导出 / AI 润色这些是收费的,FREE 用户每月 5 次免费导出,第一次注册送 8 次 AI 额度,新用户首购 1 解锁 7 天 Pro 。

    我做这个的初衷是自己求职那阵被 ATS 卡过几次,本来想找现成工具结果没找到合适的中文工具,外文工具( Jobscan / Resume Worded )一年订阅 $200+ 太贵,于是自己写了一个,做着做着就成了完整的简历编辑器。

    如果你正在改简历,去跑一下试试,5 分钟知道自己有多少 ATS 问题。即便不用我这个工具,至少把上面 5 个共性问题对照看一遍,应该能让面试电话明显增多。


    补充一下,欢迎拍砖,特别是如果你做过 HR 或者亲手用过 Greenhouse / Workday 这些系统的,我描述里有不准的地方麻烦指出来。


    [利益相关] 棱镜简历是我自己做的独立项目,挂在 xukz.cn

    4 replies    2026-05-04 05:30:37 +08:00
    chantaksum
        1
    chantaksum  
       7 days ago via Android
    原来如此,受教了
    laminux29
        2
    laminux29  
       7 days ago   2
    本末倒置了。

    简历被卡的真正原因是人力资源市场的供求关系是供远大于求,所以用人方为了节约时间才搞出各种黑科技来进行黑盒筛选。就算你破解了一个黑盒,用人单位可以再搞另一个黑盒出来卡简历。

    解决这个问题的唯一方式是把人力资源市场的供求关系进行倒置。到那时你看看会不会卡简历。
    ryd994
        3
    ryd994  
       7 days ago via Android   1
    “这种文本进 LLM 的输出基本就是「无具体可量化产出」「描述抽象」,scoring 直接低分。”
    其实不仅是简历如此,每年写述职报告的时候也是一样的。想想怎么找角度,能让数字大一点,好看一点。不仅是对 AI ,对人也是一样的。HR 不懂技术,你写个特别牛逼的专业名词,他也看不懂。但是你写个特别大的数字,那在外行眼里这多少有点东西。

    简历是功能性的文档,真没必要特别好看。我当年找工作就是一份 Word 手打的白纸黑字简历而已。我面试别人的时候也不会因为简历花花绿绿就高看一眼。我只看我关注的信息,能让我快速定位信息的排版就是好排版。

    不要留白,用小字体塞关键字。比如你用过的技术、框架,这些都可以提一嘴。我的简历就因为关键字被定向投放到某核心组。我的同学都是去集团统招的大房间,乌央乌央的排队面试。我直接到这个组的办公室,和组员一对一面试。效果完全不一样。

    外道邪法,后果自负:
    我曾经还设想过用微缩字体做分隔线。或者用背景色嵌入透明文字。不指望人看到,就用来糊弄 ATS 。当然,只对上传 PDF 的情况有用。而且最好放在末尾,以免弄乱排版造成反效果。
    osilinka
        4
    osilinka  
       7 days ago
    不知道你是在国内还是国外,北美有很多修改简历的服务

    就是教你用经历匹配 JD ,当然,做的过分的,就是印度人的作假

    相当于美化简历,为什么大家都觉得 linkedin 上面东西太浮夸了,就是美化的太厉害了
    About     Help     Advertise     Blog     API     FAQ     Solana     4781 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 73ms UTC 10:02 PVG 18:02 LAX 03:02 JFK 06:02
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86