
爱奇艺2018秋季校招算法工程师第三场——这个标题放在今天看可能不少同学会觉得是考古现场但如果你把那一年当作国内视频行业算法岗选拔的一个切片它其实非常典型。我当时完整走完了这一轮的笔试和面试后来也帮学弟学妹做过好几轮模拟复盘。实话说这一场考题的难度分布和考察风格基本代表了当时一线视频平台对算法工程师的核心预期既要你能手推公式也要你能在白板上把代码写对还要你对视频业务场景有基本的体感。这篇文章我不打算写成面经流水账而是把这一场校招背后的考察逻辑拆开讲。先是岗位方向与流程定位然后重点盘笔试高频考点和解题思路再讲机器学习与深度学习的必答细节接着是手撕代码和项目深挖两个面试现场的实战技巧最后附上一份避坑清单。无论你是正在准备算法岗校招还是想了解视频公司算法团队怎么选人这篇都能给你一个比较完整的参照系。1. 爱奇艺算法岗校招全景这一场到底在考什么1.1 第三场笔试在系列场次中的定位爱奇艺的秋招笔试通常分多场进行第三场并不是简单地把题库换一批题重发一遍而是有明确的筛选节奏。前两场往往承担了“广撒网”的任务题目相对基础覆盖面和通过率都会宽松一些到了第三场候选人的基本盘已经被过滤过一轮题目会明显向“区分度”倾斜——也就是说光会背八股不够还得会灵活组合知识点。我当时拿到的试卷结构大致分三块第一部分是数据结构与算法选择题第二部分是机器学习基础题第三部分是两道编程大题。这里有个比较有意思的细节单选多选里会混入一些视频业务相关的场景题比如视频推荐里的特征选择、视频转码任务的复杂度估算这类题目不直接考公式而是考你把理论迁移到实际问题的能力。所以如果你准备的是后续年度的校招也可以拿这个作为参照当一个公司把笔试安排在系列场次的中后段时请务必把重心从“我会不会背概念”转移到“我能不能在限定时间内解决一个具体问题”上。1.2 算法工程师的岗位细分方向与考核权重算法工程师听起来是一个岗位但在爱奇艺这种体量的公司里内部至少分为推荐算法、搜索算法、视频理解、NLP、风控和基础算法等方向。2018年这个时间点深度学习已经在工业界全面铺开但笔试和面试并不会直接按方向出题而是考察公共基础再到面试环节才针对你的目标组深挖。从实际考核权重来看数据结构与算法大约占笔试的一半机器学习基础和深度学习基础合起来占三成左右剩下两成是工程能力与业务场景题。这个权重分配很值得注意它意味着哪怕你说的研究方向是视频理解手撕代码不过关也一样会被刷。反过来说如果你代码能力很强机器学习的理论深度稍微弱一点笔试阶段依然有比较大的容错空间。面试环节则相反项目深挖的权重会显著上升。我当时被问到最多的不是你写了多少行代码而是你能否把项目里的数据、指标、模型选择讲清楚尤其是“为什么选A不选B”这类决策性问题。这提醒我们校招准备要两条腿走路一条是刷题一条是把项目经验打磨成能经得起追问的完整故事。2. 笔试高频考点盘点与实战思路复盘2.1 经典算法题的出题方式与破解思路在爱奇艺这场笔试里出现了不少经典算法的变体题目。当时的命题人很喜欢把基础算法包装成交互式问题或者优化类问题而不是直接问你“快速排序的时间复杂度是多少”。比如有一道题是要求实现一个支持动态插入和查询第k小的数据结构这实际上就是在考你对平衡树或树状数组的理解深度。这里我强烈建议准备时把以下几类算法做透KMP算法字符串匹配、快速幂数值计算、堆排序和优先队列TopK问题、二分图匹配关系类问题以及Dijkstra图的最短路径。为什么是这几类因为它们既是笔试直接出题的重灾区也是面试中将业务问题抽象成算法模型时最常用的工具箱。以KMP为例笔试中不只会考模板默写还可能让你计算给定模式串的next数组。我记得热词里就有一条“对于模式串pabacaba其next数组定义为...”这其实是一个陷阱题next数组的定义有“最长公共前后缀长度”和“失配时跳转位置”两种标准不同教材定义差1答案也会不一样。如果题目没明确定义一定要先跟出题人确认边界否则很容易在细节上翻车。2.2 排序与查找的进阶问法从冒泡到快速排序的复杂度陷阱排序算法算是校招笔试和面试的常青树但爱奇艺这场考得并不低幼。选择填空里有一道冒泡排序C实现的复杂度分析看似基础实际上埋了“最优情况下的提前退出优化”这个知识点。如果你只知道冒泡排序的最坏时间复杂度是O(n²)而忽略了优化后最好情况是O(n)这道题就答错了。快速排序同样是高频考点但考法往往落在“最坏情况退化为O(n²)的条件”和“如何通过随机化选主元避免退化”上。这两个问题你在面经里可能见过很多次但真正在笔试现场写出一个正确且稳定的快排实现仍然有不少人会卡在左右指针移动的边界条件上。我给一个比较稳妥的模板策略平时刷题时不要把排序算法只当背诵题而是把每个排序的“稳定性”“最好/最坏/平均复杂度”“是否原地排序”三项列成一张表反复默写。同时一定要动手实现一遍堆排序、归并排序和快速排序面试官极有可能让你现场手写其中任意一个写不出来的话前面的基础分就全丢了。2.3 字符串处理与图论算法笔试里的“拦路虎”字符串和图论是第三场笔试里区分度最高的两类题目。字符串方向除了KMP还考了类似循环节判断和最小表示法的问题这类题目的套路性很强你不熟悉相关算法就只能暴力求解大概率在时间上跑不过大数据用例。图论方向则出现了二分图匹配的题目热词里的“二分图HK算法”指的就是Hopcroft-Karp算法它是对朴素匈牙利算法在稠密图上的优化笔试不会直接要求你写出HK的完整代码但理解它的核心思想分层匹配增广路会有助于你答对选择题。我的建议是不要只看算法名称就以为懂了要把每类算法的“适用条件”和“不适用条件”同时搞清楚。比如Dijkstra无法处理负权边遇到负权图要改用SPFA或Bellman-Ford二分图匹配能不能用贪心解决取决于图是否满足某种特殊结构。这些细节才是选择题的送分点与送命点之间的分界线。2.4 动态规划与贪心算法从经典背包到区间DP的真题场景动态规划几乎是算法岗笔试里必考的题型爱奇艺这场也不例外。笔试中出现了一道变种背包问题不是标准的0-1背包而是加入了“体积有条件限制”和“物品有分类互斥关系”两个额外约束。如果你只是背过标准背包的转移方程没有理解状态设计的基本原则遇到这类变形题就会很吃力。贪心算法在笔试中的考察则更隐蔽常以一个“看似动态规划实则贪心即可”的形式出现。判断一道题到底应该用贪心还是动态规划最核心的检验标准是看它是否满足最优子结构和贪心选择性质。如果当前选择会限制未来选择那多半要用DP如果每一步局部最优都能推到全局最优那就可以放心用贪心。平时刷题可以刻意做这种“用两种思路分别思考同一道题”的训练这对笔试现场的判断速度提升非常明显。区间DP也是当时热词里出现过的方向。它有一个比较典型的记忆方法先枚举区间长度再枚举区间起点然后枚举分割点进行状态转移。大部分区间DP都能套这个框架剩下的就靠你熟练度了。3. 机器学习与深度学习核心问答准备3.1 经典机器学习模型必须答到位的细节在第三场笔试的机器学习部分线性回归、逻辑回归、SVM、KNN、决策树和贝叶斯等经典模型都有涉及。考察点并不仅仅是“模型是什么”而是更细分的细节。比如逻辑回归的损失函数为什么要用交叉熵而不用均方误差答案在于均方误差会导致非凸优化容易陷入局部最优而交叉熵在逻辑回归中对应的是凸函数可以通过梯度下降稳定收敛。决策树那一块考了特征选择准则的对比信息增益、信息增益比和基尼指数的区别与适用场景。这里容易被忽略的是ID3用信息增益容易偏向取值多的特征C4.5用信息增益比来纠正CART用基尼指数来简化计算——如果只是背结论说不清楚背后的原因面试追问时就会露馅。KNN也是一个高频考点热词里那条“KNN算法的应用能力包括哪三个方面”算是一个很典型的问法。答案可以从“分类”“回归”“异常检测基于距离的离群点判断”三个维度展开。为了体现深度你还可以补充说明KNN是一种基于实例的懒惰学习算法训练阶段只是存储数据预测阶段才真正计算距离这个特性决定了它非常依赖特征缩放和距离度量方式。3.2 聚类、降维与强化学习边缘考点也要有基本概念相比上面那几个“必考模型”聚类和降维在笔试中更常以概念辨析题出现。K-Means的优缺点、K值选择方法、与层次聚类和高斯混合模型的差异这些都是选择题和简答题的常见素材。降维方面主要围绕PCA和LDA展开PCA是无监督的使投影后方差最大保留的是数据的主要变化方向LDA是有监督的使投影后类间距离与类内距离之比最大目标是增强类别可分性。热词里还出现了一些更进阶的方向比如强化学习算法、粒子群算法、模拟退火算法、卡尔曼滤波等。说实话在2018年那场笔试里直接考这些的概率不大但面试官在聊未来研究方向时可能会顺带问你是否了解这些概念。我当时就被问到“如果要在推荐系统中用强化学习最大的难点是什么”这本质上不是考你会不会实现某个算法而是考你有没有能力把复杂算法的优势与业务约束条件结合起来思考。3.3 损失函数、优化器与正则化的考点清单深度学习基础部分损失函数和优化器是理论考察的重心。损失函数那一块要能说清楚分类任务中的交叉熵、回归任务中的均方误差和平均绝对误差各自适用的场景和优缺点。优化器方向SGD、Momentum、RMSProp和Adam的演化逻辑是常考问题——你要能表达出它们分别解决了什么问题而不是只背名字。正则化部分L1和L2范数的区别是必考。我的记忆方法是L1会把参数压缩到0天然具有特征选择能力L2只会让参数变小但不会归零适合处理数值稳定性问题。Dropout和BatchNorm也是高频考点面试官经常会追问两者的适用场景和背后的原理所以在准备时不能只停留在“防止过拟合”和“加速收敛”这种一句话层面。关于SMO算法和XGBoost这类热词它们在2018年可能更多出现在面试追问环节。SMO是SVM求解的高效算法其核心思想是把大优化问题拆成一系列最小规模的子问题来迭代求解XGBoost则是在GBDT基础上加入了正则项和二阶导数信息在工业界大放异彩。如果你简历里写了相关项目这些细节就一定要准备扎实。4. 手撕代码环节的实战技巧与两道典型题目4.1 白板编程的正确打开方式先设计再动手手撕代码是算法岗面试中让很多人最紧张的环节但也是可以通过训练大幅提升的环节。我当时总结出的一个重要心得是拿到题目后不要立刻开始写代码先花两三分钟把思路完整过一遍确认边界条件和复杂度再动手。这样做的好处有两个一是降低写到一半推翻重来的概率二是给面试官一个“你是在解决问题而不是在背代码”的印象。思路阶段最好做这几件事先把已知信息转化成具体的数据结构和算法选择然后举一个小规模例子手动模拟一遍验证思路的可行性最后用自然语言把思路讲给面试官听顺便观察他的反馈。如果面试官中途有纠正或提示一定要快速吸收并进行调整这比“硬着头皮写完再改”要更容易获得高分。4.2 真题一基于快排思想的TopK选择问题当时现场有一道题是“在一个无序数组中找到第K大的元素”。最直观的做法是完整排序后取下标时间复杂度O(nlogn)但面试官明确要求时间复杂度低于这个标准这就把答案引向了基于快速排序的partition思想。利用每次partition后基准元素的最终位置来判断第K大元素落在哪个区间平均时间复杂度可以做到O(n)也就是快速选择算法。这道题的边界条件非常多K从0开始计还是从1开始计、数组里有没有重复元素、K是否越界这些都会影响代码的正确性。我的建议是把partition函数单独抽出来写主函数里通过循环或递归缩小区间并且每一步都要确保左右指针的移动逻辑和基准值交换逻辑是配对的。这道题吃透之后类似“求前K小”“求中位数”“求出现频率最高的前K个元素”等变形题也会变得容易很多。4.3 真题二KMP算法现场推导爱奇艺面试现场确实出现过模式串next数组的推导题。我当时的经验是不要一上来就背代码先把next数组的含义在纸上写清楚。如果采用的是“next[i]表示模式串下标i之前的子串的最长公共前后缀长度”这一版定义那么对于模式串“abacaba”逐个位置推导时需要注意边界案例next[0]通常定义为-1或0next[1]在没有公共前后缀时为0后续位置则要看前一个位置的next值如何延续。代码实现时KMP匹配的过程也要格外注意失配后模式的跳转j next[j]这一步如果写错了结果就会差之千里而在匹配成功时要记得模式串指针会跳到next[j]而不是清零这样才能处理重叠匹配的场景。KMP的时间复杂度是O(mn)空间复杂度是O(m)这个分析也是面试官常追的问题。只要把next数组的语义和匹配跳转逻辑理解透了手写KMP并没有想象的那么可怕。5. 面试现场项目深挖与业务场景题5.1 项目经验如何讲述才经得起追问爱奇艺的面试官在项目环节问问题非常细不是简单的“介绍一下你的项目”就结束了。我当时被追问了几个高频方向数据集是怎么构建的、样本不均衡怎么处理、A/B测试中评估指标怎么选、模型上线后效果变差如何排查。这些问题没有一个是可以靠背答案过关的必须结合你的真实实践来回答。我的一个实用建议是准备项目介绍时采用“决策点清单”的方式。也就是把项目里你遇到的每一个关键选择——比如“为什么选择XGBoost而不是逻辑回归”“为什么用F1而不是准确率做评估”——都单独列出来为每个决策准备一个能说明缘由的答案。这样无论面试官从哪个角度切入你都有话可说而且说得有深度。如果项目里确实存在你没有做好的部分也不要用套话掩盖坦诚地说出当时的局限和后期的优化思考反而印象分更高。5.2 视频场景下的系统设计题答题框架在爱奇艺的面试中业务场景题往往会落到视频推荐、视频搜索、视频审核或视频去重等具体场景。我当时被问到的一个高频题目是“如果要为视频推荐系统设计一个召回策略你会怎么做”。这类问题的答题框架可以总结为“明确目标-拆解流程-技术选型-评估迭代”四步。明确目标阶段要搞清楚优化指标是播放时长、点击率还是留存不同的指标对应不同的模型设计和特征侧重。拆解流程阶段要把推荐系统拆成召回、粗排、精排和重排四个环节其中召回环节通常会提到多路召回包括协同过滤、向量召回、热门兜底等策略。技术选型阶段可以结合热词里的BM25算法来谈文本召回结合双塔模型来谈向量召回这样能体现你既有理论基础又有工程视野。评估迭代阶段则要落到离线指标如AUC、GAUC和在线指标如人均播放时长的联动分析上。5.3 开放题与智力题考察的是思维习惯除开技术题爱奇艺的面试里还会出现一些开放题和智力题考察面试者的逻辑思维和临场反应。比如“如何估算一个视频的热度”“如何判断两个视频是否属于同一部剧的不同集数”这类问题。这类题目的评价标准不是你有没有答出唯一正确答案而是你的推理过程是否清晰、是否有边界意识、是否能通过合理假设把问题拆解到可计算的程度。以“判断两个视频是否属于同一部剧”为例比较理想的思路是先定义特征画面帧指纹、音频指纹、片头片尾的相似度、字幕文本、发布时间等再设计一个多路特征融合的判定方案最后讨论阈值怎么定、误判的代价怎么控制。这其实是一个完整的算法问题解决流程面试官从你的回答里能看出你平时是怎么思考问题的。6. 避坑清单与针对性准备建议6.1 我见过的三个典型失误基础不牢、套路不清、心态失衡复盘这场校招我发现很多人挂在笔试或面试上并不是因为题目太难而是犯了一些非常典型的失误。第一个是数据结构的基础不牢比如排序算法只记了时间复杂度却不清楚稳定性和空间复杂度笔试时遇到对比题就靠猜。第二个是套路不清看到题目没有先识别题型而是拿起代码就写写一半发现思路不对才回头白白浪费了宝贵的考试时间。第三个是心态失衡遇到一道不熟悉的题就慌导致后续简单的题也做错。针对这三个失误我的建议很直接基础题要系统过一遍尤其是复杂度分析、排序对比、链表树图的基本操作这些是绝对不能丢分的点刷题时养成“先讲思路再写代码”的习惯写完之后主动分析时空复杂度面试前通过模拟面试来降低紧张感让自己习惯在压力下依然能够有条不紊地思考。6.2 一个月高效准备计划表结合当时的准备经验和后来辅导学弟学妹的效果我整理了一个为期四周的准备计划供你参考。第一周主攻数据结构与经典算法每天刷三到五道LeetCode中等题覆盖数组、链表、树、图、动态规划、字符串等核心类型。第二周集中梳理机器学习与深度学习理论整理一份自己的“核心知识点速查笔记”把每个模型的核心公式、适用场景和常见面试追问写下来。第三周进入模拟冲刺阶段每天限定时间完成一套模拟题重点训练时间分配和题型识别能力。第四周查漏补缺把前几周做错的题和不懂的知识点重新过一遍同时练习项目讲述确保能流利而深度地介绍自己参与过的每一个项目。这个计划不是固定的节奏你可以根据自己的基础调整每一周的强度但核心原则是“两手抓”不能只看书不刷题也不能只刷题不梳理理论。校招是一个系统性工程临时抱佛脚能发挥的作用其实很有限。6.3 关于热词背后的“算法图谱”机会留给会整理的人在整理这篇文章时我也顺便浏览了与“算法”相关的一批高频热词发现它们基本覆盖了从KMP到粒子群、从排序算法到强化学习、从规则引擎到PID控制的完整技术图谱。你可以把这些词当作一个自测清单逐个问自己这个算法解决什么问题它的核心思想是什么它的优缺点和适用场景是什么能不能手写实现或推导核心公式如果你能对其中八成以上的条目给出比较清晰的回答那么不管面对哪个公司、哪个方向的算法岗位你都已经有了比较扎实的准备基础。我自己的体会是面试官其实并不期待你什么都会但非常在意你有没有把学过的东西“内化”成自己的知识体系。与其背一百个算法的名字不如把三十个核心算法彻底吃透。这既是应对爱奇艺这类大厂算法岗校招的基本策略也是未来在真实工作中遇到复杂算法问题时能够从容应对的根本方法。