题目重点:可读面经给 Kaggle tweet、校验模型、本地库、Grok 分类 worker、入口/消费者限流与 Docker;按最小闭环安排实现和验证。
题意与假设
这道练习题保留了面经中值得训练的核心约束,并将需要澄清的条件单独列出。现场拿到变体时,先和面试官确认这些条件。
- 训练版 tweet 有外部唯一 ID、文本、时间戳,导入文件可能有缺行与重复;校验 schema 是训练接口,实际题面以收到的 prompt 为准。
- API 入口最多 100 请求/秒、推理 consumer 最多 10 请求/秒取自一篇 backend 面经;具体窗口/突发规则未公开,训练版分别用容量 100 与 10、每秒补满相应速率的 token bucket。
- 推理模型响应含分类标签、分数和版本,失败可以重试但同一 tweet/版本不重复落结果;外部 API 的实际配额、收费和隐私限制应按发给候选人的环境。
- Demo 是可观察的功能演示,不推断某帖被拒因为 demo 未打开或使用 AI 工具。
解题路线
- 先挑 backend 题而不是把七个主题混为同一个 prompt;读本人的任务文本、评分项目与交付要求,列出数据导入→落库→异步推理→查询结果的最小闭环。
- 导入时按 tweet ID 幂等 upsert,保存 raw 与校验状态;坏行记录错误原因,不能因一行坏数据丢整批。用任务表或队列记录 pending/running/succeeded/failed,worker 以幂等键 (tweetId,modelVersion) 调模型并写结果。
- 在入口放 100 req/s 独立桶,consumer 出站模型调用放 10 req/s 桶;突发流量入队并设队列上限/背压,不能让入口速率长期超过处理速率而无限累积。
- 对外提供最小查询接口:导入进度、按 tweet ID 看结果、按分类/分数筛选。若任务要求 validation,展示输入缺失、响应 schema 错误和结果版本处理。
- 四小时训练分配:先确认 prompt 与数据约束,优先实现一个端到端成功路径,再补幂等/错误/限流与最小测试,最后运行 Docker 并录可重放 demo;提交后留出题目给的 demo 窗口。
手动走一遍
训练例:一次导入 12 条不同 tweet,入口速率上限为 100/s,consumer 最多处理 10/s,首秒仍至少有 2 条排队;若其中 1 条模型调用超时,worker 只重试该任务并用相同幂等键防双写。Demo 可展示导入、已处理/排队状态、坏行错误及重试后的最终分类。
规模与取舍
M 条 tweet 导入 O(M) 时间和存储;每条推理至少一次外部网络调用,吞吐上限近 10/s(训练限制,未计并发/外部 latency),完成 M 条的理想下界约 M/10 秒。查询按 ID 有索引时平均 O(1) 或 O(log M),分类筛选需相应索引。
易错点与追问
容易失分的边界
- 只做漂亮前端,数据导入、推理状态和失败恢复没有跑通。
- 把 API 100/s 当作出站 Grok 100/s,违反 consumer 10/s。
- worker 失败重试给同一 tweet 写多份互相冲突结果。
- 仅录成功页面,不展示实际 Docker 启动、输入数据、错误处理和可观察状态。
- 把面经作者未过 take-home 归因于 demo 是否被打开或使用 AI 工具,题目没有证据。
继续深挖
- 外部推理 API 配额临时下降,队列如何背压?
- 模型版本升级时旧结果如何重算而不覆盖审计记录?
- 如果 tweet 含个人信息,导入/日志/发送外部模型如何最小化暴露?
- 四小时内哪些功能先不做,如何在 demo 中诚实说明?
