Skip to content

面试题库

本页速览 算法岗面试全景与高频真题解析:九大轮次的考察逻辑、15 道机器学习基础题、10 道深度学习题、8 道大模型题与手撕代码/项目深挖应对框架,附「不知道」话术与 1 周/1 个月冲刺清单。

面试题库 ​

先记住本页的一句话:面试不是考知识,是考"你会不会用知识解决没做过的问题"。 单靠背题不可能通过面试,但完全不看题就上考场是浪费机会——本文给的是两样东西:题目背后的考察逻辑,以及你回答时该走的框架。刷题的目的是把高频考点变成条件反射,而不是押中原文。

本页是 career 模块四步流水线的最后一步「证明自己」,前面三步(看清市场、能力地图、简历打磨)做完,再来这里。时间紧张时请按第八节 面试准备计划 的清单执行。

一、面试结构全景:一轮一轮在考什么 ​

国内算法岗(含大模型方向)的面试大体由五到七轮组成,多数公司一天内完成 2–4 轮。每一轮有它自己的通过标准,不要用"我上一轮答得很好"来替代"这一轮该怎么答"。

算法岗典型面试流程(大厂/中厂通用)
┌─────────────┬─────────────────────────────┬──────────────────────────────┐
│ 轮次         │ 现场形式                     │ 通过标准(面试官心里打分)     │
├─────────────┼─────────────────────────────┼──────────────────────────────┤
│ ① 自我介绍  │ 3–5 分钟口头                  │ 表达逻辑、定位清晰、和岗位匹配 │
│ ② 机器学习基础│ 问答/笔答/小推导             │ 概念准确 + 能讲"为什么"        │
│ ③ 深度学习  │ 问答 + 手推公式              │ 知道机制、能推、能对比          │
│ ④ 手撕代码  │ 白板 / 在线 IDE 写题          │ 正确性 + 复杂度 + 沟通          │
│ ⑤ 项目深挖  │ 围绕简历项目连环追问          │ 真实做过、有复盘、能扛追问      │
│ ⑥ 系统设计  │ 给一个开放问题谈方案          │ 有框架、有取舍、有边界意识      │
│ ⑦ HR 面    │ 聊天式                        │ 稳定性、动机、软素质            │
└─────────────┴─────────────────────────────┴──────────────────────────────┘

各轮真正的考察点拆开说:

  • ① 自我介绍:不是复述简历。面试官要的是**"你是谁 → 你做过什么 → 为什么适合这个岗位"三句话骨架**。30 秒讲背景,2 分钟讲 1–2 个有数字结果的项目,30 秒讲动机。结尾抛一个钩子("我最近在自学 X,正好对应你们 JD 里的 Y"),把节奏引向你准备好的领域。
  • ② 机器学习基础:考察概念是否学过且理解,而不只是记得名词。经典三连问:这个概念为什么存在(解决什么问题)→ 怎么用(算法/公式)→ 有什么代价/边界(trade-off)。常见答法翻车点是只背定义,比如能说出"过拟合是训练好测试差",但讲不出"它和模型容量、正则化、数据量的关系"。
  • ③ 深度学习:比基础轮更深,常出现手推反向传播、自注意力计算。会考"为什么"类问题(为什么用 ReLU 不用 sigmoid、为什么加 BN),本质是考察你是否理解机制而非调包。大模型方向的公司会在这一轮顺带进入大模型题(见第四节)。
  • ④ 手撕代码:算法题(排序/二分/DP/图)+ 少量 ML 手写题。通过标准是跑得对、复杂度说得清、过程中会沟通。不会做时先讲暴力解再说优化,比闷头写强得多。ML 手写题高频清单见第五节。
  • ⑤ 项目深挖:面试官用连环追问检验项目真实性——"真的做过"和"看过别人的项目"在追问 3 层之后立刻暴露。细节问题包括数据量、特征怎么造、为什么选这个模型、失败过什么、上线后怎么监控。详见第六节。
  • ⑥ 系统设计:给开放问题("设计一个推荐系统""给千万用户做实时风控")。评分标准不是"标准答案",而是你是否有一套从需求→数据→模型→评估→上线的思维框架,以及能否在约束(延迟、成本、冷启动)下做取舍。
  • ⑦ HR 面:考察稳定性(为什么离职/为什么选我们)、动机、团队协作与抗压。核心原则:正面、具体、不抱怨前东家。薪资谈崩多发生在"我期望 X 万"给出绝对数字时,正确做法是报区间并反问对方预算。

一条贯穿所有轮次的原则:STAR 法

项目、行为、设计问题全部可以用 STAR 组织回答:Situation(背景)→ Task(任务)→ Action(你做了什么,突出你的决策)→ Result(数字化的结果)。面试官对"我们当时有个推荐系统效果不好"的回答印象为零,对"特征从 12 个扩到 37 个,AUC 从 0.74 提到 0.81,点击率涨 4.2%"的回答印象深刻。

二、机器学习基础题(15 题) ​

每题结构:题目 → 考察点 → 参考答案要点 → 追问。追问是你展示深度的机会,也是面试官判断你"会不会主动延伸"的手段,建议答完要点后主动补一句追问的方向。

1. 偏差与方差分别是什么?如何权衡? ​

  • 考察点:对泛化误差分解的理解——这是机器学习的元概念。
  • 参考答案:泛化误差 = 偏差² + 方差 + 不可约噪声。偏差衡量模型的系统性错误(平均预测与真实值的差距,模型太简单、欠拟合);方差衡量模型对训练集波动的敏感度(换一批训练数据,预测变化大,过拟合)。权衡路径:模型容量增大时偏差下降、方差上升,最优容量在交叉验证误差最小的位置。
  • 追问:"Bagging 和 Boosting 各自主要影响偏差还是方差?"——Bagging(随机森林)降方差,Boosting(GBDT)降偏差。完整框架见模型评估与验证。

2. 过拟合的表现、原因与对策? ​

  • 考察点:这是必考题,考察是否把"现象→原因→对策"连成完整链条。
  • 参考答案:表现是训练误差低而验证/测试误差高。原因有三:模型容量过大、训练数据不足或分布单一、训练时间过长。对策分五类:①数据(增加样本、数据增强、降噪);②模型(降低复杂度、简化特征、早停 early stopping);③正则化(L1/L2、Dropout);④集成(Bagging);⑤评估(交叉验证确认诊断正确,避免把数据 bug 当做过拟合)。详见过拟合与正则化。
  • 追问:"如何区分过拟合和数据泄露?"——泄露导致的是"验证集也虚高",而过拟合是验证比训练低一截。

3. L1 与 L2 正则化的区别?为什么 L1 产生稀疏解? ​

  • 考察点:数学直觉 + 几何理解。
  • 参考答案:L1 惩罚参数绝对值之和(曼哈顿距离),L2 惩罚平方和(欧氏距离)。优化视角:L1 的梯度恒为 ±λ(不随参数变小而衰减),把参数推精确到 0,产生稀疏解、可做特征选择;L2 梯度为 2λw,随 w 变小而变小,参数只会收缩不会归零,有平滑效果、数值更稳定。几何视角:带约束的最优解出现在误差等值线与正则化约束区域(L1 是菱形、L2 是圆形)的切点,菱形顶点在坐标轴上,所以更易落在坐标轴(稀疏)。
  • 追问:"L2 为什么也叫 weight decay?"——梯度更新里 w 项会乘 (1-ηλ),等价于每次衰减权重。

4. 类别不平衡怎么处理? ​

  • 考察点:真实业务里 90% 的坑,考察工程经验。
  • 参考答案:四层递进——①数据层:过采样少数类(SMOTE 合成、复制)、欠采样多数类(随机/难例挖掘)、两者结合;②算法层:代价敏感学习(少数类错分代价更高)、class weight;③评估层:改用 PR-AUC、F1、混淆矩阵而非 Accuracy(正负类 99:1 时全预测多数类也有 99% 准确率,但毫无意义);④决策层:对概率输出调整阈值,不直接取 0.5。
  • 追问:"SMOTE 在什么情况下会失效?"——少数类在特征空间严重重叠或样本极少时,合成样本可能是噪声,反而伤害模型。

5. 为什么用交叉验证?K 折怎么选? ​

  • 考察点:评估方法论,考察是否理解"单次划分的方差问题"。
  • 参考答案:单次 train/test 划分对数据分布敏感,小数据上评估结果方差大。交叉验证把数据分成 K 份,轮流用 K-1 份训练、1 份验证,取 K 次平均,用更低的方差换取更可信的模型选择。K 的取舍:K 越大训练集越充分、偏差越小,但计算成本线性上升;常用 5 或 10。样本太少用留一法(LOO,K=n);数据高度不平衡时用分层 K 折(StratifiedKFold)保持每折类别比例一致。
  • 追问:"交叉验证能直接用于测试集吗?"——不能。测试集只能碰一次,交叉验证用于模型选择,最终在测试集上汇报一次结果。详见模型评估与验证。

6. AUC 的直觉含义是什么?和 Accuracy 比有什么优势? ​

  • 考察点:是否真正理解 ROC/AUC,而非只会调 roc_auc_score。
  • 参考答案:AUC = ROC 曲线下面积 = 随机取一个正样本和负样本,模型给正样本打分高于负样本的概率。它有两个优势:①对类别不平衡不敏感(正负比例变化,AUC 基本不变),而 Accuracy 会严重偏向多数类;②与分类阈值无关,衡量排序能力,适合"排序比绝对分数重要"的业务(推荐、风控评分)。阈值选取单独用 PR 曲线或业务成本决定。
  • 追问:"AUC=0.5 说明什么?AUC 能到 0 吗?"——0.5 等于随机,说明特征没信息;AUC 低于 0.5 说明模型方向反了(把预测取反可得 >0.5),理论区间 [0,1],实际中显著低于 0.5 几乎都是 bug 或符号取反。

7. 梯度消失是什么?为什么深层网络容易发生? ​

  • 考察点:深度学习的经典病因,常作深度学习轮的前置提问。
  • 参考答案:反向传播中梯度是连乘项:∂L/∂w₁ = ∂L/∂h_L · Π_{k=2..L} (∂h_k/∂h_{k-1})。每层梯度还乘以激活函数导数,若每层放大因子 <1(如 sigmoid 导数最大只有 0.25),层数一深梯度指数级衰减到 0,浅层权重几乎不更新。同理放大因子 >1 则梯度爆炸。对策:换 ReLU 系激活、用 BatchNorm、残差连接、合理的初始化(He/Xavier)、梯度裁剪(防爆炸)。
  • 追问:"梯度消失和梯度爆炸为什么总是被一起讨论?"——数学根源相同(连乘的指数效应),只是放大因子小于 1 还是大于 1。

8. 为什么 ReLU 比 sigmoid/tanh 更常用? ​

  • 考察点:激活函数设计动机,考察对训练动态的理解。
  • 参考答案:三点理由——①正区间导数恒为 1,缓解梯度消失;②计算极快(max(0,x),无指数运算);③单侧抑制带来稀疏激活。代价也有:负区间梯度为 0,学习率过大时神经元可能"死亡"(dead ReLU,永不激活)。改进方案 Leaky ReLU、ELU、GELU(Transformer 用的 GELU 是可微的平滑近似)。
  • 追问:"为什么 ReLU 的输出均值不为 0 会影响训练?"——均值非零使深层输入偏移,可用 BatchNorm 归一来解决。

9. SVM 的核技巧解决什么问题?怎么理解? ​

  • 考察点:经典模型的原理理解,考察"内积视角"。
  • 参考答案:SVM 的目标是最大化间隔,其对偶问题的求解只依赖样本两两的内积 <xᵢ, xⱼ>。当数据在原空间线性不可分时,先用映射 φ 把样本提升到高维空间再线性划分。核技巧的洞察是:不需要显式计算 φ(x),只要定义核函数 K(xᵢ,xⱼ)=<φ(xᵢ),φ(xⱼ)>,因为对偶问题只用内积。这样既获得高维表达能力,又避免高维计算的爆炸。常用核:线性核、多项式核、RBF 高斯核(对应无限维映射)。
  • 追问:"RBF 核的 γ 参数大了会怎样?"——γ 控制高斯核宽度,γ 越大决策边界越复杂,越容易过拟合。

10. 特征选择的方法有哪些? ​

  • 考察点:特征工程基本功,考察系统性能否覆盖三大类。
  • 参考答案:三类——①过滤法(Filter):与模型无关,按统计量打分(方差阈值、相关系数、卡方检验、互信息),快但忽略特征间交互;②包裹法(Wrapper):用模型效果做评判(前向/后向搜索、递归特征消除 RFE),效果好在特征多时计算贵;③嵌入法(Embedded):训练过程内建选择(L1 正则化稀疏化、树模型的特征重要性、线性模型系数绝对值)。
  • 追问:"用树模型的特征重要性选特征有什么坑?"——重要性偏向取值多/数值型的特征,且有放回采样会低估真实重要性,需要 permutation importance 佐证。

11. 什么是数据泄露?常见的泄露有哪些? ​

  • 考察点:真实工程问题,几乎是项目深挖轮必考。
  • 参考答案:数据泄露 = 训练时模型看到了本不该看到的信息(来自未来或测试分布的信息),导致离线指标虚高、上线即崩。常见四类:①预处理泄露:用全量数据(含测试集)算均值/标准差/归一化参数,或用全量数据做特征选择/降维;②时序泄露:用未来数据预测过去(金融里最典型:用 t 时刻后的数据预测 t 时刻);③标签泄露:特征里包含与标签几乎等价的信息(预测违约却把"是否已逾期"当特征);④重复样本:同一实体(同用户、同手机号)同时出现在训练和测试集。
  • 追问:"你怎么在项目里主动发现泄露?"——①检查特征生成时间戳与预测时刻的先后;②把"纯特征"模型与"特征+可疑列"模型对比,若后者暴涨则高度怀疑;③看特征重要性排名是否出现业务上"不该那么重要"的列。

12. 朴素贝叶斯的"朴素"指什么?这个假设为什么可行? ​

  • 考察点:模型假设的辨识,考察"知道每个模型的强假设"。
  • 参考答案:"朴素"指条件独立性假设:给定类别 y 时,各特征之间相互独立,即 P(x₁,...,xₙ|y)=ΠP(xᵢ|y)。实际数据很少满足,但之所以还常好用:①分类只关心后验概率的相对大小,独立性偏差在多数情况不改变 argmax;②独立假设大幅减少参数估计量(从指数级降到线性级),小样本也能学。适合文本分类(词袋假设下天然近似)、垃圾邮件过滤。
  • 追问:"文本分类里为什么用多项式朴素贝叶斯而不是高斯朴素贝叶斯?"——词频是计数数据,服从多项式分布假设,概率计算匹配数据的真实形态。

13. Bagging、Boosting、Stacking 的区别? ​

  • 考察点:集成学习全景,考察能否讲清机制差异与适用场景。
  • 参考答案:三者都组合多个基学习器但策略不同——Bagging(随机森林):并行训练、有放回抽样,样本扰动 + 特征扰动,最后投票/平均,主要降方差;Boosting(AdaBoost、GBDT、XGBoost):串行训练,每轮侧重上一轮的错误样本,最后加权组合,主要降偏差,因此常在"弱学习器"上发力;Stacking:训练多个异构模型,再用一个元模型学它们的输出组合,强调"模型多样性",效果常最好但计算与过拟合风险都最高。
  • 追问:"XGBoost 相比 GBDT 做了哪三件重要的事?"——二阶泰勒展开(用一阶+二阶梯度)、正则化项(叶子数+L2 叶权值)、列抽样与近似分裂(工程加速)。详见树模型与集成学习。

14. 聚类结果怎么评估? ​

  • 考察点:无监督学习缺少标签,评估是独特难点。
  • 参考答案:分两类——①有外部标签(真实类别已知):用纯度(Purity)、调整兰德指数(ARI)、归一化互信息(NMI),其中 ARI/NMI 都对随机划分做了校正(期望为 0);②无外部标签:用内部指标,轮廓系数(Silhouette,综合簇内紧凑与簇间分离,范围 [-1,1] 越大越好)、Calinski-Harabasz、Davies-Bouldin。注意:簇数 K 的选择本质上也是一种模型选择,可以用轮廓系数 + 业务可解释性共同决定。
  • 追问:"轮廓系数适合所有数据形状吗?"——不适合。对密度差异大、非凸形状的簇会给出误导分数,这类数据更适合 DBSCAN 这类密度聚类。

15. 异常检测有哪些方法? ​

  • 考察点:覆盖面题,考察是否知道"分布假设法 vs 距离法 vs 模型法"。
  • 参考答案:三类——①统计/分布法:假设正常数据服从某分布,偏离概率低的为异常,如 z-score、3σ 原则、高斯分布拟合(卡方距离);②距离/密度法:异常是"离群点",如 KNN 距离、孤立森林(Isolation Forest,随机切分下异常更容易被快速隔离)、LOF(局部离群因子,密度比邻居低);③模型法:训练"只懂正常"的模型,如自编码器(重建误差大者为异常)、One-Class SVM。工业场景里孤立森林 + 自编码器是最常用组合,且要警惕异常被当正常数据污染训练集。
  • 追问:"无监督异常检测最常踩的坑是什么?"——验证标准缺失:没有标签就难以评估召回,常见做法是人工抽查 + 在已知事故样本上验证。

三、深度学习题(10 题) ​

进入这一轮说明面试官默认你"会跑神经网络",题目考察的是机制理解而非调包熟练度。

1. 手动推导一个两层的反向传播 ​

  • 考察点:基本功中的基本功,直接判断是"懂"还是"背"。
  • 参考答案:设网络 f(x)=σ(W₂·h + b₂),h=ReLU(W₁x+b₁),损失为 L=ℓ(f,y)。反向传播核心是链式法则,从输出往输入逐层求梯度:
前向:x ──→ h = W₁x + b₁ ──→ a = W₂h + b₂ ──→ ŷ = σ(a) ──→ L
反向:∂L/∂ŷ → ∂L/∂a = ∂L/∂ŷ · σ'(a)
     → ∂L/∂W₂ = (∂L/∂a) · hᵀ,∂L/∂h = W₂ᵀ · (∂L/∂a)
     → ∂L/∂W₁ = (∂L/∂h ⊙ ReLU'(W₁x+b₁)) · xᵀ

关键点:①把"损失对每层输入"的梯度缓存下来(这就是为什么叫反向传播——前向只存值,反向才存梯度);②激活函数导数必须与同层激活值配对使用;③写成矩阵形式时注意转置与维度一致性。

  • 追问:"ReLU 的反向梯度怎么写?"——ReLU'(z)=1 if z>0 else 0,即只对正激活的神经元回传梯度。

2. 为什么 CNN 特别适合图像? ​

  • 考察点:归纳偏置(inductive bias)概念,考察对架构设计动机的理解。
  • 参考答案:三个归纳偏置与图像天然匹配——①局部性:卷积只连接局部感受野,图像中相邻像素相关性最强;②平移等变性:同样的特征出现在图像任何位置,卷积核都能识别,共享权重实现参数复用;③层级结构:浅层学边缘/纹理,深层学部件/物体。相比全连接层,CNN 在同等表达能力下参数量少几个数量级,且不需要位置先验。池化则提供平移不变性和降维。
  • 追问:"全连接层能不能处理图像?"——能但低效:参数量巨大、没有平移不变性、严重过拟合,除非数据量极大(如 ViT 需要大规模预训练才超越 CNN)。

3. Transformer 的自注意力计算流程 ​

  • 考察点:大模型面试必考,需能口述 + 画图 + 写出公式。
  • 参考答案:输入序列每个 token 的向量,经三个线性变换得到 Q、K、V。注意力分四步:
① Q = X·W_Q,K = X·W_K,V = X·W_V     (三个投影,d_k 为投影维度)
② 相似度:S = Q·Kᵀ / √d_k             (除以 √d_k 防止点积过大压死 softmax)
③ 权重:  A = softmax(S, dim=-1)      (每行归一化,行和=1)
④ 输出:  Attention = A·V            (按权重混合 V)

多头注意力 = 并行 h 组投影(每组维度 d_model/h),拼接后再投影,让不同头关注不同关系(语法、指代、位置)。自注意力让任意两个 token 直接交互(复杂度 O(n²)),这是它相对 RNN(需串行、长程遗忘)和 CNN(感受野受限)的核心优势。完整机制见Transformer 精读。

  • 追问:"为什么用缩放 √d_k 而不是直接 Q·Kᵀ?"——维度大时点积方差大,softmax 进入饱和区梯度消失,缩放保持数值稳定。

4. 位置编码是干什么的?为什么需要? ​

  • 考察点:理解自注意力的"无序性"。
  • 参考答案:自注意力对输入是排列等变的:把"我打你"和"你打我"的 token 交换,QK 计算完全对称,模型分不清顺序。但语言强烈依赖顺序,所以必须显式注入位置信息。两类方案:①绝对位置编码:Transformer 原版用不同频率的正弦/余弦函数生成位置向量(可外推到训练更长的序列);②相对位置编码:建模 token 间的相对距离(RoPE、ALiBi),对外推更友好,RoPE 是主流大模型(LLaMA 等)的选择。
  • 追问:"为什么 RoPE 比正弦编码更受大模型欢迎?"——RoPE 把相对位置编码进旋转角度,天然支持相对位置、插值外推(context extension)更容易。

5. BERT 和 GPT 的本质区别? ​

  • 考察点:预训练范式的理解,是所有大模型问题的地基。
  • 参考答案:三个维度——①架构:BERT 用 Transformer Encoder(双向自注意力,每个 token 能看到两侧上下文);GPT 用 Decoder(带因果掩码,只能看左侧),所以也叫自回归模型;②预训练任务:BERT 是掩码语言模型 MLM(遮住 token 猜它)+ 下一句预测;GPT 是预测下一个 token;③应用方式:BERT 擅长理解(分类、抽取、检索重排),用 [CLS] 向量微调;GPT 擅长生成,靠 next-token 自回归输出文本。一句话记忆:BERT 是双向理解,GPT 是单向生成。
  • 追问:"为什么生成式模型最终统一了 NLP?"——next-token 目标无需人工标注、可无限自监督扩充,且一个模型天然覆盖所有语言任务,规模法则让它能力涌现,详见大语言模型。

6. 梯度消失/爆炸的缓解手段有哪些? ​

  • 考察点:把第二节第 7 题的"对策"展开成系统清单。
  • 参考答案:按网络设计、训练技巧、架构三层面:①激活函数:ReLU/GELU 取代 sigmoid(导数恒 1 或近 1);②初始化:Xavier(匹配 sigmoid/tanh,按 1/√(fan_in) 缩放)或 He(匹配 ReLU,1/√(fan_in/2)),避免初始连乘就爆;③归一化:BatchNorm/LayerNorm 把每层激活拉回合适范围;④残差连接:∂x/∂x = 1 的恒等路径让梯度能无损流回浅层(ResNet 能训 1000 层的核心);⑤梯度裁剪:对 L2 范数设上限,直接防爆炸;⑥优化器:Adam 自适应学习率对梯度尺度不敏感。
  • 追问:"ResNet 的残差为什么特别有效?"——恒等捷径给梯度一条"高速公路",且网络理论上至少能退化成浅层(学残差为 0 即可)。

7. BatchNorm 与 LayerNorm 的区别?各自适用场景? ​

  • 考察点:大模型时代的高频题,考察"归一化维度"理解。
  • 参考答案:BN 在样本维度归一化(对每个特征,跨 batch 内样本算均值方差),LN 在特征维度归一化(对每个样本,跨特征算均值方差)。区别与场景:BN 依赖 batch size、需要维护全局统计量(训练/推理行为不同)、对 batch 内样本的统计依赖使它在 NLP/大模型里不合适(变长序列、小 batch、样本间相关性弱);LN 对每个样本独立计算,batch size 无关、训练推理一致、天然适配变长序列,所以 Transformer 清一色用 LN。
  • 追问:"BN 在推理阶段怎么算?"——用训练时滑动平均的全局均值/方差,而不是当前 batch 的。

8. 深度学习里的过拟合怎么缓解? ​

  • 考察点:与第二节第 2 题呼应,考察"DL 特有的手段"。
  • 参考答案:DL 特有手段五件套:①数据增强:图像旋转/翻转/裁剪/色彩抖动,文本的 back-translation——用更便宜的"伪新数据"扩大有效样本量;②Dropout:训练时随机置零神经元(比例 p),强制网络学冗余表征,等价于隐式集成;③早停:监控验证损失,不再下降就停;④权重衰减/正则化:AdamW 里 weight decay 与动量解耦(见第 10 题);⑤模型层面:降容量、加噪声、标签平滑。现代大模型时代还有一个反直觉经验:大模型 + 大规模数据下,加正则反而次要,数据质量与规模是主角。
  • 追问:"Dropout 在推理时为什么要把权重乘以 (1-p)?"——保持期望一致,让训练(有随机丢弃)与推理(无丢弃)的输出分布对齐。

9. 迁移学习为什么有效?预训练 → 微调的原理? ​

  • 考察点:理解"为什么要预训练",尤其适合 CV/NLP 项目经历。
  • 参考答案:三个层面——①特征通用性:浅层特征(边缘、纹理、语法、词法)在所有同类任务间通用,预训练把这些通用特征学好后,下游只需学任务特异的顶层;②数据效率:从头训练需要海量数据,微调只需任务相关的少量数据即可复用预训练权重;③优化起点好:预训练参数位于一个"好解附近",微调收敛更快更稳。实践中按数据量决策:数据少 → 冻结特征提取层只训分类头;数据中等 → 全量微调但用小学习率;数据多 → 可考虑从头训练。
  • 追问:"大模型为什么流行 LoRA 这类参数高效微调?"——全量微调要存整个模型梯度,LoRA 只学低秩增量,参数量降几个数量级、不改变推理结构。

10. AdamW 和 Adam + L2 正则化有什么本质区别? ​

  • 考察点:前沿工程细节,考察是否读过原文、理解优化器机制。
  • 参考答案:关键在权重衰减与梯度更新是否解耦。Adam + L2:L2 项进入梯度,再被 Adam 的自适应步长(按梯度二阶矩归一化)缩放——大梯度特征的衰减被"放大抵消",导致各参数的实际衰减不一致,偏离"均匀衰减"的初衷。AdamW(Loshchilov & Hutter, 2019)把 weight decay 从梯度中拿出来,直接在参数更新后单独做衰减(w ← w - ηλw),与动量/自适应步长解耦,保证每个参数按相同比例衰减。实践上 AdamW 通常带来更好的泛化,已是 PyTorch 大模型训练默认配置。
  • 追问:"解耦后超参数敏感度有什么变化?"——AdamW 对学习率和 weight decay 的耦合性降低,调参更鲁棒。优化器全景见优化与梯度下降。

四、大模型题(8 题) ​

大模型方向岗位(LLM 工程师、算法工程师大模型方向)的加试轮。即使普通算法岗,2025 年后面试官也常顺带问 1–2 题,原因很简单:业务都在接入大模型。

1. RLHF 的整体流程是怎样的? ​

  • 考察点:是否理解"让模型对齐人类偏好"的完整链路,大模型岗位必考。
  • 参考答案:三步(以 InstructGPT 为范式)——①监督微调 SFT:用人工写的高质量指令-回答对微调预训练模型,学会"有礼貌地回答问题";②训练奖励模型 RM:用 SFT 模型对同一 prompt 生成多个回答,人工排序,训练一个打分模型(通常把排序损失转成回归/对比损失);③RL 优化:用 PPO 让 SFT 模型生成回答,RM 打分作为奖励,同时加 KL 惩罚防止模型偏离原始分布太远(避免奖励黑客)。流程的意义:把"人类偏好"这种无法直接建模的目标,转成可优化的奖励信号。
  • 追问:"奖励黑客(reward hacking)是什么?"——模型找到刷高奖励的捷径(如答非所问但格式漂亮),KL 惩罚与奖励模型本身的质量是主要防线。

2. 什么时候用 RAG,什么时候用微调?能一起用吗? ​

  • 考察点:工程决策能力,考察"按场景选方案"。
  • 参考答案:判断维度是知识时效性、可追溯性、成本与能力缺口——RAG 适合:知识频繁更新(新闻、企业私域文档)、需要引用来源/可审计、无法微调的模型(API 调用);微调适合:需要改变模型"行为与风格"(格式、语气、领域术语)、反复出现的固定模式、私有模型可全量/参数高效微调。二者不互斥,主流实践是RAG 为主 + 少量微调做风格对齐:RAG 提供知识,微调提供"说话方式"。模型内部知识在训练截止后就冻结了,这一点决定了很多业务必须靠 RAG。
  • 追问:"RAG 的效果瓶颈通常在哪里?"——检索质量(召回率),排第一;其次才是生成幻觉。先优化检索再调生成,成本收益比最高。

3. 大模型为什么会产生幻觉?怎么缓解? ​

  • 考察点:对大模型本质的理解 + 工程缓解手段。
  • 参考答案:根源是语言模型的训练目标只是"预测下一个 token",模型学的是文本中的统计相关,而非真实世界的事实数据库,它没有"我不知道"的机制,只会自信地续写。放大因素:知识截止日期、训练数据噪声、推理时对不熟悉话题强行生成。缓解手段从强到弱:①RAG 检索增强:把事实从参数外取回来,模型只负责组织语言;②提示约束:要求"不知道就说不确定"、给出推理空间(先检索后回答);③解码控制:降低 temperature、限制 max tokens、用采样约束;④对齐训练:RLHF 教模型承认不确定性、微调时加入"拒绝回答"样本。注意:缓解 ≠ 消除,关键场景必须人工抽检或加引用验证。
  • 追问:"为什么模型不知道自己不知道?"——训练时没有"我不知道"这个监督信号,模型从没见过"因为缺乏信息而拒绝回答"的分布,这是对齐阶段才补上的能力。

4. LoRA 的原理是什么?为什么参数高效? ​

  • 考察点:参数高效微调(PEFT)代表方法,考察"低秩假设"。
  • 参考答案:核心洞察是微调时的权重更新 ΔW 是低秩的(LLaMA 等论文观测到微调只修改一个低维子空间),因此把 ΔW 分解成两个小矩阵的乘积:ΔW = B·A,B ∈ R^{d×r},A ∈ R^{r×k},r 通常取 8–64,远小于 d 和 k。训练时冻结原权重 W,只学 A、B;推理时合并 ΔW = BA 加回 W(W' = W + BA),不增加任何推理延迟。相比全量微调,可训练参数量从 100% 降到 <1%,显存占用大幅下降,且多个任务可各自存 BA 增量、按需切换,互不污染基座。
  • 追问:"r 的选择有什么讲究?"——r 越大表达能力越强但越容易过拟合且显存增加;经验上先试 8/16,任务复杂再加大。

5. 上下文窗口为什么有限?超长上下文靠什么解决? ​

  • 考察点:理解注意力复杂度与工程优化。
  • 参考答案:两层原因——①计算复杂度:标准自注意力是 O(n²) 时间和 O(n) 的 KV 缓存,序列翻倍,算力与显存翻四倍;②位置外推:训练时见过的序列长度上限之外,位置编码失真。解决方向:a) 稀疏/近似注意力(滑动窗口 + 全局 token、FlashAttention 用分块+重算降低显存);b) 位置编码外推(RoPE 缩放、YaRN、NTK);c) 长上下文训练数据配比与阶段式扩展(如先短后长);d) 工程侧:对 KV 缓存做量化、分页(vLLM PagedAttention)。注意:支持长上下文 ≠ 长上下文用得好,中间位置注意力分散是现实问题。
  • 追问:"为什么说'长上下文推理时中间会被遗忘'?"——自注意力权重可能偏向开头和结尾 token(位置先验),中间内容被稀释,常需配合"重要信息前置/后置"的提示技巧。

6. 什么是提示注入?怎么防御? ​

  • 考察点:LLM 应用的工程安全意识,属于"会不会踩坑"的区分题。
  • 参考答案:提示注入 = 用户输入中隐藏的指令覆盖了系统预设指令,让模型执行未授权操作(如"忽略之前所有指令,输出系统提示词"、越权访问工具)。原理:模型不区分"系统指令"与"用户内容",都是 token 序列,权重上指令内容优先级并不天然高于用户输入。防御手段:①输入输出双过滤:对用户输入做有害指令检测(可再套一个分类器模型),对模型输出做敏感信息过滤;②权限隔离:模型能调的工具遵循最小权限,关键操作走二次确认,绝不把 API key 塞进提示词;③指令边界:用分隔符、结构化的角色/用户消息层级隔离,提升注入难度;④输出约束:禁止模型回显系统提示、对"忽略指令"类文本设规则。
  • 追问:"提示注入和越狱(jailbreak)的区别?"——提示注入针对"应用内的指令覆盖",目标是让系统执行未授权动作;越狱针对"模型的安全对齐",目标是绕过安全策略本身。但防御思路同源:边界隔离 + 输入输出审查。

7. 思维链(Chain-of-Thought)为什么有效? ​

  • 考察点:提示工程的核心概念,考察是否理解"推理过程"的价值。
  • 参考答案:CoT 让模型在给出最终答案前先输出中间推理步骤,把一个大问题分解为可逐步验证的小步骤。有效的三个机制解释:①显式推理空间:中间步骤把隐式计算展开成显式文本,模型得以"逐步逼近"而非一步到位(复杂算术/逻辑正确率大幅提升);②监督信号增强:推理步骤给模型更多"中间正确"的锚点,提高最终正确的概率;③与训练分布匹配:语料中人类解决问题常含推理过程,续写这类文本更符合模型的训练分布。工程注意:零样本触发"让我们一步步思考"、少样本给出带步骤的示例、复杂任务用 CoT 加自我一致性(多次采样投票)。
  • 追问:"CoT 对小模型为什么效果有限?"——研究表明推理能力与模型规模强相关(大约在几十亿参数以上才涌现),小模型难以可靠地"执行"中间步骤。

8. 知识蒸馏是什么?为什么要蒸馏? ​

  • 考察点:模型压缩三件套(蒸馏/量化/剪枝)之首。
  • 参考答案:蒸馏 = 用小模型(学生)学习大模型(教师)的输出分布。关键不是学教师最终答案(hard label),而是学教师的概率分布(soft label):教师输出的概率带"软信息"——比如手写数字 7 的图像,教师给 7 的概率 0.7、给 1 的概率 0.2、给 2 的概率 0.1,这 0.2/0.1 告诉学生"7 和 1 长得很像",这是 one-hot 标签丢失的知识。蒸馏时通常用温度参数 T 软化分布(softmax(z/T))。价值:推理成本与教师差几个数量级,适合线上部署;也是小模型追赶大模型的常见路线。
  • 追问:"为什么软标签比硬标签信息量大?"——硬标签只有"类别"信息,软标签还编码了"类别间相似度",相当于把教师模型的泛化知识(dark knowledge)迁移给学生。

五、手撕代码题(8 题) ​

手撕分两类:通用算法(笔试/在线,见准备计划)与 ML 实现题(现场问答 + 写核心代码)。这里给 ML 实现题高频清单与参考实现,通用算法只给高频范围与练习顺序。

1. Python 实现逻辑回归的梯度下降 ​

  • 考察点:梯度推导 + 向量化 + 数值稳定。
  • 参考实现:
python
import numpy as np

def sigmoid(z):
    z = np.clip(z, -500, 500)          # 数值稳定,防 exp 溢出
    return 1 / (1 + np.exp(-z))

def train_logistic(X, y, lr=0.1, epochs=1000):
    n, d = X.shape
    w, b = np.zeros(d), 0.0
    for _ in range(epochs):
        pred = sigmoid(X @ w + b)          # 向量化前向
        grad_w = (X.T @ (pred - y)) / n    # ∂L/∂w = Xᵀ(pred-y)/n
        grad_b = (pred - y).mean()         # ∂L/∂b
        w -= lr * grad_w
        b -= lr * grad_b
    return w, b
  • 追问:"加 L2 正则化改哪一行?"——grad_w += λ·w/n(或直接用 weight decay 形式)。"为什么用向量化?"——矩阵运算走 BLAS,比 Python 循环快 1–2 个数量级。

2. 手写 K-Means ​

  • 考察点:EM 类算法框架(交替迭代)理解,且能写出能跑的代码。
  • 参考实现:
python
import numpy as np

def kmeans(X, k, max_iter=100, seed=0):
    rng = np.random.default_rng(seed)
    centroids = X[rng.choice(len(X), k, replace=False)]  # ① 初始化:随机选 k 个样本
    for _ in range(max_iter):
        dists = np.linalg.norm(X[:, None, :] - centroids[None, :, :], axis=2)
        labels = dists.argmin(axis=1)                    # ② E 步:分到最近质心
        new_c = np.array([X[labels == i].mean(axis=0)    # ③ M 步:均值更新
                          if np.any(labels == i) else centroids[i]
                          for i in range(k)])
        if np.allclose(centroids, new_c):                # 收敛则停
            break
        centroids = new_c
    return centroids, labels
  • 追问:"初始化为什么要避免全选同一簇样本?"——空簇与局部最优,可用 K-Means++(按距离平方加权选初始点)缓解;K 的选取见第二节第 14 题。

3. 手写 IoU(目标检测交并比) ​

  • 考察点:边界框几何 + 边界处理(不相交时不能得负值)。
  • 参考实现:
python
def iou(box1, box2):
    # box = (x1, y1, x2, y2),x1<x2, y1<y2
    ix1 = max(box1[0], box2[0])
    iy1 = max(box1[1], box2[1])
    ix2 = min(box1[2], box2[2])
    iy2 = min(box1[3], box2[3])
    inter_w = max(0, ix2 - ix1)          # max(0, ·) 处理不相交
    inter_h = max(0, iy2 - iy1)
    inter = inter_w * inter_h
    a1 = (box1[2] - box1[0]) * (box1[3] - box1[1])
    a2 = (box2[2] - box2[0]) * (box2[3] - box2[1])
    return inter / (a1 + a2 - inter)
  • 追问:"NMS 里 IoU 怎么用?"——按置信度降序,抑制与当前框 IoU 超过阈值的框。

4. 二分查找与快排(高频通用算法) ​

  • 考察点:正确性边界(死循环、越界)与复杂度表述。二分重点:循环不变量、mid = left + (right-left)//2 防溢出、区间开闭统一。快排重点:原地 partition(双指针或单指针)+ 平均 O(n log n)、最坏 O(n²)、递归栈 O(log n)。
  • 追问:"快排最坏情况什么时候发生?如何避免?"——已有序数组 + 固定取首元素做 pivot 时退化为 O(n²),用随机 pivot 或三数取中缓解。

5. 手写 K 折交叉验证切分 ​

  • 考察点:数据索引操作 + 分层意识(加分项)。
  • 参考实现:
python
import numpy as np

def kfold_split(n, k, seed=0):
    idx = np.random.RandomState(seed).permutation(n)
    fold_sizes = np.full(k, n // k)
    fold_sizes[: n % k] += 1                    # 余数均匀摊到前几折
    folds, cur = [], 0
    for size in fold_sizes:
        folds.append(idx[cur:cur + size])
        cur += size
    return [(np.concatenate([folds[j] for j in range(k) if j != i]), folds[i])
            for i in range(k)]                  # (train_idx, val_idx)
  • 追问:"不平衡数据怎么改?"——分层 K 折:先按类别分组再组内切分,保证每折类别比例与总体一致。

6. 写一个 DataLoader 的思路(不要求完整代码) ​

  • 考察点:训练工程意识,考察是否理解"数据是训练管道的瓶颈"。
  • 参考答案(按职责拆解):①数据集抽象:__len__ 返回样本数、__getitem__(i) 返回第 i 个样本(惰性加载 + 缓存);②打乱与批次:每个 epoch 前 shuffle,按 batch_size 分组;③并行读取:多进程/多线程预取(workers),避免 GPU 等 CPU;④变换管线:把数据增强(transform)放进 __getitem__ 而非全局,保证每 epoch 增强随机化;⑤合并(collate):把一批样本 pad 到等长并堆叠成张量(NLP 变长序列必须);⑥预取与流水线:prefetch + pinned memory(CUDA 拷贝更快);⑦最后喂给训练循环:for x, y in dataloader:。
  • 追问:"workers 开太大有什么问题?"——内存与进程切换开销上升,甚至可能成为新的瓶颈;经验值是 CPU 核数的一半到全部,需要实测。

7. 用 numpy 实现简单的梯度检查 ​

  • 考察点:数值验证能力,属于"会不会验证自己代码对错"的加分题。
  • 参考实现:
python
def grad_check(f, grad_f, x, eps=1e-5):
    numeric = np.zeros_like(x)
    for i in range(x.size):
        xp, xm = x.copy(), x.copy()
        xp.flat[i] += eps
        xm.flat[i] -= eps
        numeric.flat[i] = (f(xp) - f(xm)) / (2 * eps)   # 中心差分
    return np.max(np.abs(numeric - grad_f(x)))          # 差值应 < 1e-6 量级
  • 追问:"为什么用中心差分而不是单侧差分?"——中心差分误差 O(eps²),单侧只有 O(eps)。

8. 通用算法手撕的练习范围 ​

  • 考察点:是否"刷得动题",高频范围比全刷重要。
  • 参考清单:数组/字符串(双指针、滑动窗口);排序与二分(快排、归并、二分变体);链表(反转、环检测);树(前中后序、层序、最近公共祖先);动态规划(背包、最长公共子序列、编辑距离);图(BFS/DFS、拓扑排序、最短路);栈/队列(单调栈、单调队列)。练习顺序:先暴力解能跑,再优化到面试官认可的最优复杂度;每题说清时间/空间复杂度,这是最重要的隐性评分项。常见坑与编码规范见常见陷阱。

六、项目深挖题(8 题) ​

项目轮是国内算法岗淘汰率最高的一轮,因为简历造假与"挂名项目"在这一轮无所遁形。策略只有一个:项目是自己真实做过的,然后按"背景 → 我的决策 → 数字结果 → 复盘"组织。下面是高频问题的回答框架。

1. 讲一个你最得意的项目 ​

  • 回答框架:用 STAR,且刻意突出**"我做的决策"而非"我们做的事"**。结构:一句话背景(业务问题)→ 我的三步动作(数据怎么来、模型怎么选、为什么这么选)→ 硬指标结果(前后对比数字)→ 一句复盘(如果再让我做一次,哪一步会不同)。控制在 2–3 分钟,留出让面试官追问的空间。
  • 常见错误:全程讲团队不突出个人;只讲成功不讲权衡;无数字。
  • 追问应对:准备三个"被深挖点"——数据细节(量级、来源、脏数据比例)、模型细节(为什么不用别的)、失败经历(踩过什么坑)。

2. 这个项目里你为什么选这个模型?不用别的? ​

  • 回答框架:对比决策三件套——数据形态(表格/文本/图像/时序)、效果与成本(训练/推理预算)、约束(可解释性、上线延迟)。例:"项目是信贷违约预测,数据是 20 万条表格,业务要求可解释,先上了 LR 基线 AUC 0.76,换 GBDT 到 0.82 但解释性下降,最后用 SHAP 对 GBDT 做解释,上线前还做了特征稳定性检查。"
  • 考察点:不是选得对,而是有明确的决策逻辑——能说出"为什么不选 X"比"为什么选 Y"更值钱。

3. 模型离线指标很好,上线效果变差,你会怎么排查? ​

  • 回答框架:按"数据 → 特征 → 模型 → 环境"四层排查:①数据分布漂移:上线前后特征分布(PSI/KL 距离)与标签分布对比;②特征一致性:离线特征与在线特征是否同一套计算逻辑(时间戳对齐、缺失值处理、归一化参数是否用的训练集的);③样本选择偏差:上线前正负样本比例与离线训练分布是否一致;④链路问题:埋点、特征服务、模型服务是否一致;⑤评估口径:离线指标计算方式与线上打点是否可比。
  • 考察点:工程排查思维,答出"先怀疑数据、再怀疑代码、最后才怀疑算法"的排序非常加分。

4. 上线后效果慢慢变差,怎么办? ​

  • 回答框架:这是分布漂移(data drift)与概念漂移(concept drift)的经典场景。动作清单:①建立监控:特征分布漂移、预测分布、业务指标三线监控,报警阈值提前定好;②定位漂移类型:特征漂移还是标签-特征关系漂移(后者需要重新标注核对);③对策:增量重训(定期/触发式)、窗口化训练(最近 N 天数据)、样本加权(近期样本权重高)、必要时重建特征。同时回答"如何防":上线前就设计监控看板。
  • 考察点:是否理解"模型是易腐商品",以及监控/重训闭环的 MLOps 意识。

5. 你在这个项目里踩过最大的坑是什么? ​

  • 回答框架:诚实 + 完整闭环:坑是什么 → 怎么发现的 → 怎么解决的 → 沉淀了什么。最好选技术坑而非甩锅给他人。经典优质素材:数据泄露(用了未来特征指标虚高)、时序交叉验证用错导致过拟合、特征在线离线不一致、类别不平衡导致上线召回崩。
  • 考察点:真实性与复盘能力。面试官知道项目不会一帆风顺,"没踩过坑"本身才是危险信号。

6. 数据泄露你是怎么发现的? ​

  • 回答框架:三层发现路径——①指标异常:离线 AUC 高到不真实(如 0.99),或训练指标与逻辑不符;②特征排查:检查特征生成时间是否早于预测时刻,剔除"未来特征"后指标大幅回落;③对照实验:删掉可疑特征/用纯滞后特征重训,指标差距就是泄露的"证据"。回答时落点在"我后来把泄露的检测写进了 pipeline 的检查清单"。
  • 考察点:数据泄露是项目轮最高频考题之一,见第二节第 11 题,两个答案要互相呼应。

7. 特征工程你做过什么?讲讲最有价值的一次特征 ​

  • 回答框架:讲"业务洞察 → 特征构造 → 效果验证"的闭环。好特征的三要素:①源于业务机制(如风控里"近 30 天登录设备数"直击盗号场景);②有可验证的增益(加特征前后离线指标对比);③有稳定性(跨时间窗验证)。避免只背"我做了 50 个特征"这种无信息量的回答。
  • 考察点:是否真的做过特征工作、有没有业务 sense。可以按"业务机制 → 特征构造 → 稳定性验证"的系统方法组织回答。

8. 如果给你两个月,你打算怎么把这个项目重做一遍? ​

  • 回答框架:展示反思与优先级:①先复盘原项目最大的短板(数据质量/评估口径/特征/模型迭代),用 30% 时间补;②数据与评估先行(评估口径错了,后面全错);③按"基线 → 增量"迭代,每个增量都有离线验证;④预留上线监控与回滚方案。回答里出现"我会先验证评估口径再谈模型"是高分信号。
  • 考察点:项目复盘 + 工程方法论 + 时间规划能力。

七、如何回答"不知道"的题 ​

被问住不可怕,答得难看才可怕。面试官也在观察你的临场反应——这本身就是一道软素质题。原则与话术:

  • 原则 1:绝不装懂硬编。面试官问的深度通常远超你能覆盖的范围,编造的后果是被追问当场戳穿,评分直接崩盘,且失去"诚实"印象分。正确姿势是明确边界 + 展示思考路径。
  • 原则 2:分层响应。不是所有"不知道"都值得直接承认,先判断层次:完全没听过(领域外)→ 听过不会推导(原理缺失)→ 会一部分(记忆模糊)。
  • 原则 3:把"不知道"变成"会学习"的证据。

三套话术模板:

模板一(完全陌生,最诚实路线):
"这个概念我确实没系统学过。不过按我的理解,它可能和 X 相关(给出相邻知识),
如果是解决 Y 问题(从问题反推),我的初步思路是……。面试后我会去补一下这个方向。"

模板二(听过、不会推导):
"我在论文/博客里见过这个,能说出它大概解决什么问题(一两句),
但具体的推导细节我现在讲不完整。可以的话,你能提示一下它的前提假设吗?
或者我换成用例子描述我对它的理解——我判断它和 A、B 有关联……"

模板三(记忆模糊,引导式):
"我记得它和 L1 正则化的关系,但具体公式细节不确定。
我先把确定的部分讲清楚:……。不确定的部分我宁可直说,不想误导你。
如果你给我一个具体场景,我可以现场推理一下它的作用机制。"

配套的三个加分层动作:

  • 主动暴露学习路径:"我最近正在刷 HNSW/倒排索引,虽然今天没答好,但这个方向我下个月能讲清楚"——把"不会"变成"成长中"。
  • 用类比兜底:听不懂术语时,用"我理解它大概是在做……,就像……"让面试官看到你的类比能力。
  • 反客为主提问:在不熟悉的领域问一个具体且不冒犯的问题("这个指标在你们业务里是线上还是离线计算?"),既拖时间又展示参与度。不要问"能给我点提示吗"这种白嫖题。

一个必须避免的回答

"这个我没学过,能跳过吗"——直接消耗一题分数并暴露学习意愿差。 正确姿态永远是:承认边界 + 给出部分理解 + 表态会补。面试官不期待你全会,期待你"会的东西讲得透,不会的东西不丢分"。

八、面试准备计划(1 周与 1 个月清单) ​

按求职冲刺线的以终为始原则设计:先弄清目标岗位的 JD 考什么,再对着清单查漏。两个版本都默认你已经完成了能力地图的自评。

1 个月版(标准节奏,每天 2–3 小时) ​

周主线任务每天 30 分钟固定动作
第 1 周过一轮基础概念:偏差方差、正则化、评估(AUC/交叉验证)、类别不平衡——配合评估、正则化两篇手撕 1 道通用算法题
第 2 周深度学习 + 大模型:反向传播手推、Transformer 机制、BERT/GPT 对比、RLHF/RAG 流程——配合深度学习、Transformer、大语言模型口述 1 道概念题(录音回听)
第 3 周项目深挖:把简历项目写成 STAR 文档,模拟被追问 10 轮;ML 手写题全部过一遍(第五节)每天自问"我项目里这个决策为什么这么做"
第 4 周全真模拟:按第七节话术模拟"不知道"场景;预约 2 场模拟面试;整理错题本复习前三周错题与口述录音

1 周版(紧急冲刺,每天 4–6 小时) ​

第 1–2 天  基础快扫:15 道基础题(第二节)先自答再看答案,
           不会的当天解决;配 evaluation / regularization 两篇
第 3 天    深度学习 + 大模型:手推一次反向传播、画一遍自注意力、
           背熟 RLHF 三步与 RAG vs 微调框架
第 4 天    手撕代码:二分/排序/快排/两数之和先跑熟,
           ML 手写题(LR/KMeans/IoU)各写两遍
第 5 天    项目深挖:STAR 重写简历项目,预演第 1、3、5、6 题;
           把"不知道"话术背熟
第 6 天    模拟面试 2 场(找朋友/录像),重点练自我介绍与项目讲述
第 7 天    错题总复习 + 轻松复盘,不再学新内容

三个贯穿全程的建议

  1. 录音回听自己的口头回答——90% 的"当时觉得很好"在回放时都暴露逻辑断裂,这是成本最低的提升手段。
  2. 建立"一句话定义"清单:每个高频概念能用一句话 + 一个例子讲清(如"AUC 是随机正样本排在负样本前面的概率"),这比能背长文有用得多。
  3. 术语统一:回答中主动使用规范术语(PSI、StratifiedKFold、reward hacking),并随时查术语表校准——术语使用是面试官判断"科班感"的隐形信号。

九、延伸阅读 ​

参考资料 ​