SWE / MLE / Applied Scientist · ML / System Design

Amazon 招聘网站:简历上传与关键词/语义检索

设计异步简历解析、混合检索、候选权限和版本更新,避免索引泄露已删除简历。

题目重点:设计异步简历解析、混合检索、候选权限和版本更新,避免索引泄露已删除简历。

题意与假设

这道练习题保留了面经中值得训练的核心约束,并将需要澄清的条件单独列出。现场拿到变体时,先和面试官确认这些条件。

  • 明确功能是上传简历、猎头关键词和语义检索;未给格式、语言、规模和权限。练习支持PDF/文本简历、多租户招聘者与候选人可见性设置。
  • 招聘者必须具备查看资格,候选人可撤回授权。排序相关性不等于候选人的能力或录用决定,不从简历推断无证据的敏感属性。

解题路线

  1. 上传API先给短期上传地址,提交后校验对象、限制大小、解析文件并提取结构化技能/经历与文本。状态uploaded→parsing→indexed/failed,异步job按documentId/version幂等;用户知道未成功解析不会以“搜索没找到”代替错误。
  2. 对象存原件,DB存owner/tenant/accessPolicy/currentVersion。倒排支持词与过滤,向量索引支持语义;混合召回去重后rerank,展示匹配证据段而非未经验证的模型总结。
  3. 更新简历创建新版本,索引事件携带version,旧解析结果不得覆盖新文本。删除先在权威授权层撤销,再异步清理对象和索引;检索返回前回查可见性,防迟到索引或缓存泄漏。
  4. 关键字匹配如Python并不能理解“无Python经验”;保留文本上下文、否定和时间范围。语义相似也不证明真实技能,评测用招聘任务相关标签和召回/排序指标,不仅embedding距离。
  5. 租户隔离和招聘者访问范围尽早进入召回过滤,最后再做权威复核。审计查询与下载,防大量遍历抓取简历;下载链接短期、按当前权限发放。

手动走一遍

候选人上传v2后v1解析晚到,版本检查拒绝旧索引更新。招聘者搜数据平台,倒排召回精确技能、语义召回相近项目,再以可见候选为限排序;候选人撤回授权后旧向量候选仍不能返回正文。

规模与取舍

练习100万简历×20KB解析文本约20GB原文本,768维FP32向量约3.072GB裸向量,索引/元数据/副本另计。查询成本包括倒排候选、ANN搜索、rerank批量及权限复核,不宣称固定O(log N)。

易错点与追问

容易失分的边界

  • 索引ACL过期就直接返回隐私正文。
  • 只保存最新文本却让旧解析作业覆盖。
  • 语义相关性当真实性或录用分数。

继续深挖

  • 撤回简历时备份和审计保留如何定义?
  • 多语言技能别名如何兼顾精确词与语义匹配?
✓已复制微信号!