初级机器学习/算法工程师面试题
初级机器学习/算法工程师面试的考察重点、常见题目,以及如何用即时 AI 反馈练习。
初级阶段的考察重点
考察编程加上核心 ML 概念和指标,并在引导下完成建模任务。
机器学习/算法工程师常见面试题示例
- 技术面解释偏差—方差权衡,以及正则化如何影响它。好回答应覆盖
- 偏差方差分解
- 欠拟合vs过拟合
- L1/L2正则化作用
- 正则化增加偏差降低方差
查看范例答案
偏差-方差权衡描述了模型复杂度与泛化误差的关系:高偏差导致欠拟合(模型过于简单),高方差导致过拟合(对训练数据噪声敏感)。正则化通过惩罚模型复杂度来降低方差,但会增加偏差。例如L2正则化(岭回归)将权重缩小,减小模型对特征变化的敏感度;L1正则化(Lasso)使部分权重为零,实现特征选择。选择合适的正则化强度可以找到偏差方差平衡点,通常通过交叉验证调整λ。需要注意的是,过强的正则化会导致严重欠拟合。
- 技术面你会如何检测和防止训练流水线中的数据泄漏?好回答应覆盖
- 数据泄漏定义
- 常见来源:时间穿越、特征泄漏
- 检测方法:时间分割、特征重要性检查
- 防止措施:管道隔离、严格划分
查看范例答案
数据泄漏指训练数据中包含了未来信息或不应可见的信息,导致模型泛化能力虚假高。常见来源包括:时间序列中使用未来数据做特征、目标编码时用全数据集统计量、数据预处理时未按fold分离。检测方法:比较线上和线下性能差异、检查特征与目标的时间相关性、使用特征重要性排查。防止措施:在交叉验证中,数据预处理(如标准化、缺失填充)必须在每个fold内单独进行;对时间序列使用滑窗验证;始终将测试集完全隔离直到最终评估。漏掉任何一步都可能导致上线后性能暴跌。
- 技术面面对类别不平衡的分类问题,你会优化哪个指标?为什么?好回答应覆盖
- 准确率的陷阱
- 优先指标:PR-AUC、F1、召回率
- 具体业务目标决定
- 重采样/成本敏感学习
查看范例答案
类别不平衡时准确率会因多数类主导而产生误导,应优化与业务目标一致的指标。若关注少数类的正确识别,选用召回率或F1-score;若需要对所有类别整体评估,用宏平均F1或AUC-PR(PR曲线下面积),因为PR曲线对不平衡更敏感。例如在欺诈检测中,漏判的代价远高于误判,因此优先优化召回率或自定义成本函数。同时可结合重采样(SMOTE)、类别权重、阈值移动等方法。但注意:指标选择必须反映实际业务成本,否则模型即使指标高也可能无价值。
- 编程从零实现 k-means 聚类。好回答应覆盖
- K-means初始化
- 迭代更新中心
- 收敛条件
- 时间复杂度
- K值选择
查看范例答案
上述代码实现了标准k-means聚类。算法步骤:随机初始化k个中心点;重复分配每个样本到最近中心,并按簇均值更新中心;直到中心变化小于阈值或达到最大迭代。时间复杂度为O(n*k*d*iter),其中n样本数、d特征维度。常见陷阱:K值选择困难(可用肘部法)、对初始中心敏感(可多次运行取最优)、只能发现球形簇。
参考代码python import numpy as np def kmeans(X, k, max_iters=100, tol=1e-4): """ 从零实现k-means聚类 参数: X: 形状为(n_samples, n_features)的ndarray k: 聚类个数 max_iters: 最大迭代次数 tol: 中心点变化阈值 返回: centroids: 最终中心点坐标 (k, n_features) labels: 每个样本的簇标签 (n_samples,) """ # 随机初始化k个中心点(从样本中选k个) indices = np.random.choice(X.shape[0], k, replace=False) centroids = X[indices] for _ in range(max_iters): # 计算每个样本到各中心的距离并分配簇 distances = np.linalg.norm(X[:, np.newaxis] - centroids, axis=2) # (n, k) labels = np.argmin(distances, axis=1) # 更新中心点 new_centroids = np.array([X[labels == i].mean(axis=0) for i in range(k)]) # 检查收敛:中心点变化是否小于阈值 if np.linalg.norm(new_centroids - centroids) < tol: break centroids = new_centroids return centroids, labels # 示例用法 if __name__ == '__main__': X = np.random.rand(100, 2) centroids, labels = kmeans(X, k=3) print('质心:', centroids) print('标签:', labels[:10]) - 编程解一道动态规划题并分析其复杂度。好回答应覆盖
- 最优子结构
- 状态定义
- 转移方程
- 边界条件
- 时空复杂度
查看范例答案
以找零钱问题为例:定义dp[i]为凑出金额i的最少硬币数,转移方程为dp[i] = min(dp[i-coin] + 1)对所有coin≤i。时间复杂度O(n*m),空间O(n),其中n为amount,m为硬币种类。需要注意初始化dp[0]=0,且硬币面额需为正整数。该题也可用贪心但仅对规范硬币有效,动态规划保证全局最优。
参考代码python def coin_change(coins, amount): """ 找零钱最少硬币数(动态规划) 参数: coins: 硬币面额列表,假设正整数且无重复 amount: 总金额 返回: 最少硬币数,若无法凑出则返回-1 时间: O(amount * len(coins)) 空间: O(amount) """ # dp[i] 表示凑出金额i所需的最少硬币数,初始化为一个大数 dp = [float('inf')] * (amount + 1) dp[0] = 0 for i in range(1, amount + 1): for coin in coins: if coin <= i: dp[i] = min(dp[i], dp[i - coin] + 1) return dp[amount] if dp[amount] != float('inf') else -1 # 示例 if __name__ == '__main__': print(coin_change([1, 2, 5], 11)) # 输出3 (5+5+1) - 系统设计为一个视频平台设计推荐系统。好回答应覆盖
- 需求分析:个性化、实时性
- 离线召回+在线排序架构
- 多路召回:协同过滤、内容、热门
- 排序模型:Wide&Deep或深度学习
- 冷启动与反馈闭环
查看范例答案
设计视频推荐系统分四步:1)需求:为用户推荐感兴趣视频,要求高点击率、长观看时长、低延迟。2)架构:分为离线层(数据ETL、特征工程、模型训练)和在线层(召回+排序+重排)。3)召回:多路并行(协同过滤、基于内容的向量检索、热门视频、新视频补偿),每路返回上百个候选。4)排序:使用Wide&Deep或双塔模型,特征包括用户画像、视频属性、上下文(时间、设备)、实时行为。排序后通过业务规则(去重、多样性)重排。5)瓶颈:冷启动用户/视频缺乏交互,可用属性特征和探索策略;实时性依赖近线更新和低延迟推理。最后通过A/B测试评估。
- 行为面讲一个在生产环境失效的模型,以及你从中学到了什么。好回答应覆盖
- 具体案例:特征工程问题
- 线上与线下指标偏离
- 调试过程
- 学到的教训:数据验证、监控
查看范例答案
有一次我负责的广告点击率预估模型在离线评估时AUC达0.85,但上线后CTR反而下降。排查发现:训练数据中的点击特征用了未来信息——在样本生成时,特征包含了用户点击后的行为。修复方法是重建特征管道,确保所有特征来自点击发生前的时间点。教训:必须严格分离时间,对特征做时间戳验证;同时上线初期要设置灰度监控,对比线上指标与回放预测分布。此后团队将所有特征计算封装在统一的时间隔离框架中。
- 行为面你如何判断一个模型已经足够好、可以上线?好回答应覆盖
- 评估指标:线下指标(AUC, 损失)
- 业务指标:上线A/B测试结果
- 基准对比
- 风险考量
- 监控与回滚机制
查看范例答案
判断模型能否上线需综合多个维度:首先看线下指标是否优于当前线上模型,且差距显著(如AUC提升>0.01);然后在小流量A/B测试中验证业务指标(如CTR、GMV)是否正向,同时观察有无负向影响(如推荐多样性下降)。还需考虑风险:是否引入新特征导致过拟合?推理延迟是否可接受?最后建立监控仪表盘,设定核心指标的报警阈值。通常采用分阶段上线:先1%流量,逐步扩大,一旦异常立即回滚。
面试官重点考察什么
算法
复杂度、动态规划、图论与优化。
ML 基础
偏差/方差、正则化、评估指标与过拟合。
数学基础
概率论、线性代数与基于梯度的优化。
建模判断
特征工程、数据泄漏与模型选择。
ML 系统
训练/服务流水线、监控,以及离线/在线的差距。
如何准备
- 把每一个建模选择都和指标及业务目标联系起来。
- 准备好讨论各种失效模式:数据泄漏、漂移,以及离线/在线不一致。
- 保持编程手感——算法轮仍是常见的筛选关卡。
常见问题
ML 面试还会有编程轮吗?
会——大多数会在 ML 专项题之外,安排数据结构和算法编程,高级岗位还会有 ML 系统设计。
常见的 ML 系统设计题有哪些?
推荐系统、搜索排序、欺诈检测和信息流排序很常见,重点在特征、训练/服务和监控。
如何准备 ML 工程师面试?
在算法练习、ML 基础复习和口头设计练习之间取得平衡——模拟面试能帮你把各种取舍讲清楚。
用即时 AI 反馈刷机器学习/算法工程师面试题
Offersly 会根据你的简历和目标岗位定制一场模拟面试,并从相关性、深度、清晰度和正确性四个维度为每个回答打分。