第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 步)
- 需求: 100 万视频库,推 10 个给用户
- 指标: CTR / 完播率 / 留存
- 离线: AUC;在线: CTR + 长期留存
- 一致性: 特征对齐 + 实时特征
- 数据流: 用户行为日志 → Kafka → Flink → 特征仓库
- 特征: 用户(历史/兴趣) + 视频(类目/标签) + 上下文(时间/位置)
- 模型: 召回(双塔/协同过滤) → 精排(DLRM/DIN) → 重排(多样性/规则)
- 监控: 实时 CTR + 特征分布 + A/B 测试
3.2 企业 RAG 知识库
- 需求: 100 GB 文档库,答员工问题
- 指标: Faithfulness / Answer Relevance / Citation 准确率
- 离线: RAGAS 评测集
- 一致性: 文档版本 + 权限
- 数据流: PDF/Confluence → Loader → Splitter(512 token 重叠 50)→ Embedder(BGE)→ Vector DB(Milvus)
- 特征: BM25 + 向量 混合检索
- 模型: Claude 4.5 + System Prompt(引用源)+ Re-ranker
- 监控: 引用率 + 用户反馈 + 文档更新
3.3 LLM 推理服务
- 需求: 100 QPS,p99 < 2s
- 指标: 延迟 / 吞吐 / 成本(QPS/$)
- 离线: throughput benchmark
- 一致性: 训练-推理差异
- 数据流: HTTP → Load Balancer → API Gateway → Inference Cluster
- 特征: 文本 + prompt cache
- 模型: vLLM / SGLang / TensorRT-LLM,PagedAttention,KV Cache,连续批处理
- 监控: 延迟 / GPU 利用率 / 队列长度
3.4 离线-在线不一致 3 大原因
- 特征不一致: 离线用历史快照,在线用实时特征 → 特征平台(Feast) 统一
- 分布漂移: 用户/数据变化 → PSI 监控 + 周期性重训
- 反馈延迟: 用户行为延迟 → 实时反馈 + 离线-在线一致性检查
3.5 Offer 谈判 3 大关键
- 手里有竞争: 拿 1-2 个其他 offer 当谈判筹码
- 用数据说话: 引用市场(levels.fyi / 猎聘)+ 个人贡献(涨收 X%)
- 不只谈 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 题 |