跳转至

第25章 · AI 系统实战面试指南 · 阶段测试题答案

章节: AI 系统实战面试指南 题量: 单选 × 8 + 多选 × 4 + 简答 × 5 + 算法 × 2 = 19 题 关联: 阶段测试题/第25章.md


一 · 单选题答案 (8 题)

题号 答案 解析要点
1.1 B Situation/Task/Action/Result
1.2 B 100 万/1000/10(召回 → 精排 → 重排)
1.3 B Retriever/Generator/Index
1.4 B 小模型草拟 + 大模型并行验证
1.5 C 哈希 + 双向链表 O(1)
1.6 C 假阳率 + 无删除
1.7 B 最小堆 O(n log k)
1.8 B 漏报优先(资损 > 用户体验)

二 · 多选题答案 (4 题)

题号 答案 解析要点
2.1 ABCD 8 步: 需求/指标/数据流/特征/模型/部署/监控 等
2.2 ABC 固定大小/按段/语义分块;随机非策略
2.3 ABCD KV Cache/Speculative/Prompt Caching/Quantization
2.4 ABCD Base/签字费/RSUs/假期+远程

三 · 简答题答案 (5 题)

3.1 抖音推荐系统 (8 步)

  1. 需求: 100 万视频库,推 10 个给用户
  2. 指标: CTR / 完播率 / 留存
  3. 离线: AUC;在线: CTR + 长期留存
  4. 一致性: 特征对齐 + 实时特征
  5. 数据流: 用户行为日志 → Kafka → Flink → 特征仓库
  6. 特征: 用户(历史/兴趣) + 视频(类目/标签) + 上下文(时间/位置)
  7. 模型: 召回(双塔/协同过滤) → 精排(DLRM/DIN) → 重排(多样性/规则)
  8. 监控: 实时 CTR + 特征分布 + A/B 测试

3.2 企业 RAG 知识库

  1. 需求: 100 GB 文档库,答员工问题
  2. 指标: Faithfulness / Answer Relevance / Citation 准确率
  3. 离线: RAGAS 评测集
  4. 一致性: 文档版本 + 权限
  5. 数据流: PDF/Confluence → Loader → Splitter(512 token 重叠 50)→ Embedder(BGE)→ Vector DB(Milvus)
  6. 特征: BM25 + 向量 混合检索
  7. 模型: Claude 4.5 + System Prompt(引用源)+ Re-ranker
  8. 监控: 引用率 + 用户反馈 + 文档更新

3.3 LLM 推理服务

  1. 需求: 100 QPS,p99 < 2s
  2. 指标: 延迟 / 吞吐 / 成本(QPS/$)
  3. 离线: throughput benchmark
  4. 一致性: 训练-推理差异
  5. 数据流: HTTP → Load Balancer → API Gateway → Inference Cluster
  6. 特征: 文本 + prompt cache
  7. 模型: vLLM / SGLang / TensorRT-LLM,PagedAttention,KV Cache,连续批处理
  8. 监控: 延迟 / GPU 利用率 / 队列长度

3.4 离线-在线不一致 3 大原因

  1. 特征不一致: 离线用历史快照,在线用实时特征 → 特征平台(Feast) 统一
  2. 分布漂移: 用户/数据变化 → PSI 监控 + 周期性重训
  3. 反馈延迟: 用户行为延迟 → 实时反馈 + 离线-在线一致性检查

3.5 Offer 谈判 3 大关键

  1. 手里有竞争: 拿 1-2 个其他 offer 当谈判筹码
  2. 用数据说话: 引用市场(levels.fyi / 猎聘)+ 个人贡献(涨收 X%)
  3. 不只谈 base: 谈签字费 + RSUs + 假期,总包可能比 base 涨 30%

四 · 算法题答案 (2 题)

4.1 Top-K Frequent Elements

from collections import Counter
import heapq

def topKFrequent(nums, k):
    count = Counter(nums)
    return heapq.nlargest(k, count.keys(), key=count.get)
复杂度: O(n log k),优于排序 O(n log n)。

4.2 LRU Cache

from collections import OrderedDict

class LRUCache(OrderedDict):
    def __init__(self, capacity):
        self.capacity = capacity

    def get(self, key):
        if key not in self:
            return -1
        self.move_to_end(key)
        return self[key]

    def put(self, key, value):
        if key in self:
            self.move_to_end(key)
        self[key] = value
        if len(self) > self.capacity:
            self.popitem(last=False)
复杂度: get/put 都是 O(1)。


五 · 评分标准

  • 单选每题 5 分,共 40 分
  • 多选每题 5 分(少选/错选 0 分),共 20 分
  • 简答每题 8 分(8 步完整 + 工程细节),共 40 分
  • 算法每题 10 分(正确性 5 + 复杂度 3 + 边界 2),共 20 分

总分 120。


六 · 通过门槛

等级 分数 含义
优秀 ≥ 100 系统设计 + 算法双优,可面大厂 P7+
合格 80-99 基础扎实,可面 P6
需重学 < 80 建议重读 Ch25 + LeetCode 100 题