ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

网易算法岗笔试复盘:题型拆解与备战攻略

网易算法岗笔试复盘:题型拆解与备战攻略 网易的笔试尤其是热门岗位的正式批次向来以“题量大、范围广、时间紧”著称算法工程师更是重灾区。我参加的是2023届正式第二批整体感受是这场考试不是单纯考你会不会写代码而是在短时间内检验你的算法基本功、机器学习理论深度、以及临场的问题拆解能力。这篇文章就把我那次笔试的完整复盘、核心考点拆解、以及我平时积累的备战思路整理出来对准备互联网大厂算法岗校招的同学应该很有参考价值。先说结论网易算法笔试的题型分布大致是“2到3道编程题 若干道选择题/问答题”编程题难度有明显梯度前三题属于“LeetCode中等偏下”的水平会有一道拉开差距的综合题涉及复杂数据结构或动态规划优化。选择题的范围非常宽从概率论、线性代数、机器学习基础到深度学习最新进展都有时间分配不好很容易翻车。1. 笔试整体画像与备战思路1.1 网易算法岗笔试的定位一场“筛选潜力”的综合性压力测试在聊具体题目之前得先搞清楚网易这场笔试想筛选什么样的人。算法工程师岗位和普通后端开发岗位的笔试有着本质区别后端更看重代码能力、工程规范、系统设计而算法岗笔试除了编程题更会大量考察数学基础、机器学习/深度学习理论、以及对经典模型的推导能力。我印象最深的是选择题里有好几道涉及条件概率和贝叶斯公式的应用题还有一道关于SVM对偶问题推导的选择题这种题如果平时只是调包而不去理解数学原理基本很难快速做出来。网易的笔试时间通常是两个小时左右题目设计有明显梯度。编程题部分一般有3道左右前两道属于“热身题”难度基本在LeetCode简单到中等之间第三道会上升到中等偏上甚至有些批次会出现困难级别的动态规划或图论题。选择题则分布在各个知识点包括但不限于高等数学极限、导数、积分、线性代数特征值、矩阵分解、概率统计分布、期望、假设检验、机器学习模型原理、损失函数、优化方法、深度学习CNN、RNN、Transformer结构。1.2 从“会做题”到“会考试”算法笔试的四个核心能力维度参加过几次大厂笔试之后我意识到算法笔试本质上是在考察四个维度的能力而这四个维度恰好对应着四种备战策略。第一个维度是编程基本功。这不只是会写代码而是能在高压环境下快速写出无bug的代码。网易的在线编程环境通常支持C、Java、Python我个人强烈建议用Python参加笔试因为笔试的时间瓶颈往往不是代码量而是思路的转化速度Python的简洁语法能替你在实现层面省下大量时间。但要注意Python的高阶数据结构如字典、集合的底层实现必须理解清楚比如字典的哈希冲突处理、集合去重的复杂度这些在选择题里经常出现。第二个维度是算法思维。这不是靠刷题量堆出来的而是靠“专题总结”练出来的。我自己的做法是把LeetCode的题目分成动态规划、贪心、二分查找、图论、字符串处理等几个大专题每个专题集中攻破。刷题的时候不追求每道题都完整写完但要追求“每道题都确认思路是对的”看到题目能立刻反应出这题属于哪个专题、大概用什么方法解这个反应速度在笔试中极其关键。第三个维度是数学与统计基础。这是算法工程师和普通程序员最大的区别所在。网易的选择题里经常出现求期望、贝叶斯后验概率、最大似然估计这类题这些知识看似基础但遗忘率很高。我的建议是考前系统过一遍概率论和数理统计的教材笔记重点复习条件概率、全概率公式、常见分布的性质、大数定律和中心极限定理这些是最高频的考点。第四个维度是机器学习理论。网易对算法工程师的机器学习基本功考察得很细而且出题角度很刁钻。比如不会直接问你“什么是过拟合”而是给你一个实际场景让你判断当前模型是欠拟合还是过拟合以及应该怎么调整。这就要求你不只是背概念而是真正理解模型在不同数据规模、不同正则化参数下的行为表现。2. 核心细节解析与实操要点2.1 编程题从输入输出处理到复杂度优化的全流程经验编程题是笔试的硬骨头也是拉开分数差距的关键。网易的编程题不像LeetCode那样给好了函数签名而是需要你自己写main函数处理输入输出这个细节很容易被忽视但一旦处理不好就是灾难。先说输入输出。网易的在线评测系统通常支持标准输入和标准输出用Python的话input()和print()就够用了。但有几个坑要注意一是读入一行包含多个整数时要习惯用map(int, input().split())来转换二是读取多行数据时要注意循环次数三是输出浮点数时要注意精度要求通常要求保留两位小数或六位小数用format或者f-string来控制。再说什么样的题是必拿分的。第一道题基本是送分题比如数组操作、字符串处理、简单模拟这些题没有技术难度纯粹考察编码速度和细心程度。我当时的策略是拿到题先看数据范围如果n只有10^3量级那O(n^2)的暴力算法也可以接受没必要一上来就优化如果n到了10^5甚至10^6就一定要用O(n log n)或O(n)的算法。第二道题通常是基础算法题可能涉及排序、哈希表、双指针、前缀和。这类题的核心考点是“你是否能快速识别出题人的真实意图”。举个例子如果题目描述里出现“连续子数组”和“和为目标值”那大概率要用前缀和加哈希表如果出现“区间查询”和“修改”那可能是树状数组或线段树。平时刷题要有意识地去总结这些“出题意图模式”考试时才能条件反射。第三道题是拉开差距的压轴题常见类型包括复杂动态规划、图论最短路/最小生成树的变种、以及一些需要巧妙思维构造的题。对于这些题我的经验是不要死磕。如果5分钟内没有任何思路果断先跳过把能拿的分都拿到最后有时间再回来看。这个大招保命的策略在我多次笔试中都实测有效。2.2 选择与问答题机器学习理论高频考点的梳理与攻防网易选择题的考察范围从往届经验和我那次笔试的情况来看可以归纳为几个高频模块。第一个高频模块是概率统计。这个部分最爱考的是条件概率、贝叶斯公式、随机变量的期望与方差、常见分布正态、泊松、伯努利的性质。题干通常包装成一个业务场景比如“在推荐场景中用户点击A商品的概率是0.3点击B商品的概率是0.4同时点击的概率是0.1求点击A或B的概率”。这类题本质很简单但要在有限时间内准确列式并算出正确的数值还是需要平时多练几道类似的题。第二个高频模块是矩阵和线性代数。特征值、特征向量、正定矩阵、矩阵的秩是重灾区。我记得有一道题给了一个2x2矩阵要求判断它是否是正定矩阵还让选它的最大特征值。这类题考察的是你对线性代数概念的直觉考前最好把课本上的基本定理都过一遍重点关注特征值和迹、行列式之间的关系。第三个高频模块是机器学习经典模型。逻辑回归、决策树、SVM、朴素贝叶斯、K-means是必考的几个。考点一般是损失函数的形式、优化方法的选择、正则化项的作用、模型复杂度与控制过拟合的手段。网易很爱出那种“下列哪种方法不能解决过拟合”的选择题四个选项分别是“增加训练数据量”“降低模型复杂度”“增大正则化系数”“减少正则化系数”答案当然是最后一个但很多人会在紧张时看错。第四个高频模块是深度学习基础。包括反向传播的基本原理、梯度消失和梯度爆炸的原因与缓解方法、常见激活函数的性质、CNN的感受野计算、RNN的长期依赖问题。2023年以后Transformer相关的内容出得越来越多比如自注意力机制的时间复杂度、位置编码的作用等这些都是基于最新技术演进的出题趋势。2.3 时间分配策略两个小时内如何保住基本盘时间分配是整个笔试中最重要也最容易被忽视的环节。我见过太多同学在前面的选择题上花费过多时间导致后面的编程题连题目都没看完就交卷了。我的经验是开考后先花两分钟左右快速浏览全部题目大致判断一下每道题的难度和自己的熟悉程度然后制定简单的策略。如果一套试卷里有比如3道编程题和10道选择题我的标准时间分配是前40分钟集中搞定前两道编程题中间40分钟做选择题每分钟一到两道最后30分钟留给压轴编程题剩下10分钟检查输入输出格式和边界条件。选择题遇到不会的不要空着也不要在单题上超过三分钟。网易笔试通常是按点给分答题总比空着强。有些选择题的选项有明显逻辑关系比如四个选项里有两个是互相排斥的正确答案大概率在这两个里面这种“做题直觉”虽然不如扎实的基础可靠但在高压环境下确实能救命。3. 实操过程与核心环节实现3.1 实战模拟以两道高频题型为例演示完整解题流程这里我不去回忆网易的具体原题毕竟题目有保密要求而是用我在多次笔试中见到的两种高频题型来演示完整的解题推演过程这将直接影响你的临场发挥。先看一道“字符串解码”类的题。这类题目通常描述是给定一个编码字符串如“3[a2[c]]”要求解码成“accaccacc”。拿到题的瞬间不是写代码而是先用几秒钟确认它的考点内部是嵌套结构这提示我们使用栈或者递归。栈的解体思路是遍历字符串遇到数字记录倍数遇到“入栈”遇到“”出栈并拼接。这个题的易错点在于数字可能是多位数比如“12[a]”如果只取个位就全错了所以遇到连续数字要循环取完。再看一道“连续子数组最大和变种”的题。经典最大子数组和用Kadane算法就是O(n)但网易笔试常把“最多可以删除一个元素”或者“乘积最大子数组”这种条件加进去。如果是“最多删一个元素”的变种比较稳妥的做法是维护两个DP数组一个表示以i结尾未删除元素的最大和另一个表示以i结尾已删除一个元素的最大和状态转移方程是精心设计的这样可以在O(n)时间解决代价是完全可控的。写之前先在心里把状态转移方程过一遍再动手敲代码比边敲边想快得多。3.2 核心代码模板考试前必须背熟的几个高频算法结构在笔试实战中有些代码结构是反反复复出现的考前先写好模板、练成熟练度能显著节省考试时的思考时间。这里分享几个我考前反复默写的模板。第一个是二分查找的边界模板。很多算法题的最终步骤都退化成一个二分查找比如“找到一个有序数组中第一个大于等于目标值的位置”。Python标准库的bisect能处理大部分场景但如果题目要求自定义边界条件还是要能手写。我的习惯写法是维护left和right两个指针while left right中间值mid (left right) // 2根据条件更新left mid 1或right mid注意边界更新时是否要加1这个细节是二分查找最常见的bug来源。第二个是深度优先搜索/回溯模板。全排列、组合总和、岛屿数量这些经典题共用一套框架。核心是一个backtrack(path, choices)函数先判断是否满足终止条件并加入结果集然后遍历选择列表做选择、递归、撤销选择。这个模板熟练之后笔试遇到搜索类题目直接套用框架能省去大量思考框架的时间。第三个是单调栈模板。求“下一个更大元素”是经典题模板也很固定用一个栈存数组下标遍历数组当当前元素大于栈顶下标对应的元素时弹出栈顶并记录结果。单调栈的时间复杂度是O(n)空间复杂度是O(n)很多看似复杂的题比如柱状图中最大矩形面积最终都能用单调栈优雅解决。第四个是并查集模板。图论题中经常要判断两个节点是否连通并查集是效率最高的选择。模板包括find路径压缩、union按秩合并、以及初始化三个部分。笔试时直接默写这个模板能保证不出低级错误。3.3 机器学习推导题手推逻辑回归损失函数梯度与贝叶斯后验计算网易笔试里除了标准选择题有时还会有简答题或推导题其中手推逻辑回归、朴素贝叶斯分类器的后验概率计算是高频中的高频。手推题的核心不是结果正确而是展示思路的完整性尽量写出每一步推导依据就算最终结果不对也能拿过程分。以逻辑回归为例标准推导流程如下首先写出模型假设形式即预测概率等于sigmoid函数作用在线性组合上。然后在二分类假设下写出单个样本的似然函数为了计算方便通常是对数似然。接着对参数求偏导用链式法则从sigmoid函数的导数开始逐层展开。这里有个关键技巧sigmoid函数的导数恰好可以写成该函数自身乘1减自身的简洁形式这个化简能让推导过程变得极其干净。最终梯度就是输入向量乘以预测残差的累积和。整个推导过程如果平时练习过五遍以上考试时五分钟内就能完整写出来。贝叶斯后验计算的典型题是“某疾病在人群中的患病率是1%检测准确率为99%患病者99%检出阳性健康者99%检出阴性现有一人检测为阳性求实际患病的概率。”这类题看起来简单但很多人会在计算中绕晕。正确思路是先计算检测为阳性的总概率它等于患病且检出阳性加健康且误检为阳性然后用患病且检出阳性的概率除以总概率得到后验概率约为50%。这个经典结果经常颠覆第一直觉所以考试时务必自己动手算一遍不要脑补。3.4 手写实现试题解答的关键细节通过代码展示实际应用方案笔试编程题中“手写实现XX”是非常常见的设问方式例如手写一个带过期时间的LRU缓存、手写一个快速排序、手写一个K-means聚类。这类题考察的是你还记得经典算法最原始的样子而非现成调库能力。以手写LRU缓存为例。核心要求是get和put操作均为O(1)时间复杂度这决定了必须用哈希表加双向链表的结构。哈希表负责快速定位节点双向链表负责维护访问顺序。get时把节点从链表当前位置移动到头部put时先判断key是否存在存在则更新值并移到头部不存在则新建节点并插入头部如果容量超限还要删除尾部节点。这个实现最容易被忽略的细节是双向链表的节点删除和插入操作要处理好前驱后继指针使用哑结点dummy node可以大幅简化边界判断。以手写K-means为例。流程是初始化k个中心点迭代地给每个样本分配最近的中心更新中心点为簇内所有样本的均值直到中心点变化小于阈值或达到最大迭代次数。笔试时一般不会让你跑通完整数据而是考察初始化、分配、更新这三个核心步骤是否完备。注意要处理空簇的情况一种简单做法是重新随机选取一个样本作为中心这属于细节加分项。4. 常见问题与实战复盘网易算法岗笔试避坑指南4.1 编程题易错点为什么样例过了却只能拿部分分数“样例通过但提交后只拿部分分数”是笔试中最痛苦的情况没有之一。我自己踩过无数次坑总结下来主要有几个原因。第一个是边界条件处理不完整。比如题目说数组长度n满足1 ≤ n ≤ 10^5但并没有保证元素都是正数你可能在求最大值时把初始值设为0结果全负数的情况全部算错。这类边界问题靠样例测不出来必须自己在编码时主动考虑数组为空怎么办输入只有一行怎么办数值很大超过int范围怎么办。第二个是时间复杂度不达标导致的超时。笔试题通常有几组大规模测试数据如果陷入超时可能是你的解法在最坏数据下退化成O(n^2)。比如用Python的list做插入删除操作时insert和pop(0)都是O(n)的在10^5量级数据下会很卡。这时候要换成更合适的数据结构比如用deque或自己维护索引。第三个是题意理解偏差。有时候题目描述的“子序列”和“子数组”差之毫厘谬以千里。子数组必须连续子序列可以不连续解法完全不同。建议做题时先把题目里的关键限定词用笔圈出来再动手写代码。第四个是多组数据输入的情况没有用循环包起来。有些题目会要求处理T组数据输出T行结果如果你只处理了一组数据就return自然只能拿部分分数。这种失误可以通过考前背熟一个“多组数据模板”来避免。4.2 选择题盲区盘点这些考点最容易丢分选择题看似简单但实际失分率很高。我复盘了自己和身边同学的错题发现集中失分的知识点有以下几类。第一类是损失函数与评价指标的选择。比如“对于类别不平衡的分类问题下列哪个评价指标更合适”答案是F1值而不是准确率。这类题要求你对每个指标的定义和适用场景都有清晰认知。考前我专门整理过一个表格把准确率、精确率、召回率、F1、AUC放到一起对比记忆考场上真的帮了大忙。第二类是正则化方法的细节。L1和L2正则化的区别是常考题目除了“L1产生稀疏解、L2防止过拟合”这种大路货还会深入研究为什么L1能产生稀疏解。最佳答案是L1正则化在零点处有一个不可导的尖角梯度下降过程中参数更容易被压缩到0。如果能答到这个层面分数就到手了。第三类是优化算法的迭代公式与特性。SGD、Momentum、RMSProp、Adam的区别是选择题热门。Adam结合了动量思想一阶矩估计和自适应学习率二阶矩估计在很多情况下收敛更快但也可能不收敛需要配合学习率衰减。这种细节题每场笔试都会出现建议考前把这个对比表完整过一遍。第四类是偏差与方差的Trade-off。模型在训练集上误差很低在测试集上误差很高属于高方差过拟合问题。正确解法是增加训练数据、降低模型复杂度、增加正则化。选择“在训练集上继续迭代更多轮数”绝对不可取但紧张状态下很容易选错。4.3 时间不够怎么办放弃压轴题的正确姿势我在笔试中还总结出一个残酷但有效的时间策略如果还剩30分钟时你连压轴题的题意都还没理清楚那就要果断放弃完整解题转为“骗分模式”。“骗分模式”不是瞎写而是有策略地拿部分分。第一如果题目有子任务比如数据量小的那部分测试点就为子任务写一个暴力解法先保证小数据能跑对拿分。第二如果暴力都写不出来尝试写一个最朴素的“输出0”或“输出-1”的代码有些测试点专门处理无解情况也有一两分。第三把注释写清楚说明你的思路到了哪一步即使不能运行某些人工评分场景下也能得到少量的过程分。这种做法看似功利但笔试本质是竞争性考试分数最大化才是第一目标。我认识的一位拿到了网易算法岗offer的朋友他当时的策略就是“保二争三”确保前两道编程题满分第三道尽量拿部分分选择题正确率保住80%以上最终笔试成绩相当靠前。4.4 从笔试到面试笔试复盘如何变成面试谈资笔试结束并不是终点而是面试备战的新起点。网易的面试官很多会翻看你的笔试答卷尤其是编程题的代码风格和解题思路所以考后第一时间复盘显得格外重要。编程题方面建议把每道题的思路重新整理成文档写下最优解的时间复杂度、空间复杂度以及你当时为什么选了这种解法。如果笔试时有题没做出来考后务必把正确解法搞懂并思考如果面试官问这题你能答出哪些扩展内容比如原题是动态规划你可以顺带讲出状态压缩、空间优化、滚动数组等进阶技巧。选择题和简答题也是一个巨大的面试素材库。笔试中那道贝叶斯的题面试时可能变形为“在推荐系统里用户先点击了一个商品然后再点击另一个商品的概率是多少”如果笔试时的计算过程记得清楚面试时就能轻松应对。再强调一点网易的面试风格通常非常关注“项目背后的为什么”而笔试中暴露的薄弱知识点往往就是你项目里真正需要补强的环节。比如你笔试中深度学习部分的题做得不好面试前就一定要系统梳理项目里用的每个网络结构、每个损失函数的来龙去脉。把笔试当作一次免费的模拟面试用它来校准自己的备战方向。5. 方向拓展从校招笔试看算法工程师的行业能力热力图5.1 大模型时代算法岗笔试题目演变趋势2023年之后参加算法岗笔试的同学一定会明显感觉到大模型相关考点的占比在提升。网易这几年的笔试虽然核心算法题仍然以数据结构和机器学习为主但在选择题和问答题层面已经开始涉及Transformer架构、自注意力机制、推理加速方法等新内容。我注意到“ai算法工程师必知必会 入门llama.cpp”这类内容在社区里很受关注这也能反映到笔试题的趋势上。倒不是说笔试会让你手写llama.cpp的量化代码而是会考察相关的知识框架大模型的推理瓶颈在哪里、kv cache的作用是什么、量化对显存和精度的影响、为什么多头注意力比单头注意力更适合长文本。这些内容在2023年以前极少进入校招笔试范围现在却成了区分候选人的重要考点。对正在准备校招的同学我的建议是不要只啃西瓜书和《统计学习方法》也要花时间了解大模型的基础技术脉络。比如看懂Transformer原文的核心公式了解张量并行的基本原理知道推理阶段和训练阶段的内存差异。这些知识不需要达到工程实现水平但在选择题里能帮你稳拿分数。5.2 图像算法与运筹优化不同方向算法岗的笔试侧重点网易的算法工程师岗位并非只有一个方向不同业务线的笔试侧重点不完全相同。结合行业来看主要有几类方向值得注意计算机视觉/图像算法方向、自然语言处理方向、推荐系统/广告算法方向、以及运筹优化方向。图像算法方向的笔试会额外加重CNN、图像处理基础、目标检测框架的考察比重。选择题可能出现感受野计算、不同卷积核尺寸对参数量和计算量的影响、非极大值抑制的作用等题目。我建议准备CV方向的同学考前专门复习一遍经典目标检测模型的发展脉络从R-CNN到Fast R-CNN再到Faster R-CNN再到YOLO系列弄清每个模型的核心改进点。运筹优化方向的笔试难度主要在数学建模和算法思维。常见考点包括线性规划、整数规划、动态规划、贪心算法在资源调度上的应用。题目通常包装成一个“网约车派单系统如何优化空驶率”或“仓库拣货路径如何最短”这样的业务场景考察你能否把一个实际问题抽象成数学模型然后选择合适的求解算法。这类岗位对数学功底要求极高建议主攻运筹方向的同学提前复习线性规划对偶理论、单纯形法原理并熟悉常见组合优化问题的模型和常用求解器。5.3 校招之外的视角笔试考点如何映射到日常工作能力在复盘这场笔试的时候我反复在想一个问题这些看似应试的知识点到底和算法工程师的日常工作有什么关联后来在实习和工作中逐渐想明白了。编程题考察的“在压力下写出正确且高效的代码”对应的是算法工程师日常最核心的能力——把研究想法转化为可运行的实验代码。真实的业务中没有人等你慢慢调参你需要快速写出一个baseline然后迭代优化这和笔试的两个小时本质上是同一种思维模式。机器学习理论题考察的“对模型原理的机理理解”对应的是调参和模型诊断能力。线上模型效果变差了你需要根据现象判断是数据分布变了还是模型过拟合了还是特征存在问题。如果你不理解偏差方差分解不理解正则化的作用机制排查起来就只能瞎猜。概率统计题考察的“对不确定性信息的量化分析”对应的是业务指标设计与AB实验分析。算法工程师做的任何优化最终都要靠数据说话如何设计实验、如何判断实验结果是否显著、如何用贝叶斯方法做先验更新这些能力都会直接影响你在团队中的产出可信度。这样一想笔试其实是一个很好的能力体检它不仅在帮你争取一份offer也在帮你梳理自己距离一名合格的算法工程师还有多远。6. 复盘总结与个人经验彩蛋6.1 最后再分享一个“考前24小时”的高效准备节奏很多同学在笔试前一天还在疯狂刷题其实这时候刷新题不仅效率低还会增加焦虑。我建议把考前24小时用更科学的方式度过。考前一天白天停止做新题改成回顾错题和整理笔记。把之前刷题过程中的经典解法、易错点、代码模板再过一遍尤其是二分查找、滑动窗口、动态规划这几个高频专题。晚间可以按照考试时间完整模拟一套往年真题目的不是看分数而是提前适应考试节奏和注意力集中时长。模拟完快速对答案不纠结错题早点休息。考试当天开考前半小时不要再大量刷题了可以看几道简单的算法题热身读一读自己整理的机器学习公式笔记让大脑进入战斗状态。进入笔试系统后第一件事是深呼吸把心态放平记住一个核心原则这场考试不是要你拿满分而是要比同一批竞争者多做对几道题。6.2 复盘不是终点笔试结果出来之后应该做什么笔试结束几天后成绩就会出来无论结果如何我建议都做一次深度复盘。如果通过了恭喜你拿到了面试的入场券这时候要把笔试中的错题全部搞懂因为面试官极有可能追问。如果没通过也别灰心大厂的校招批次很多网易每年也有多轮笔试机会这次失利只是说明当前准备还不够充分。我的经验是每参加完一场笔试就更新一次自己的复习笔记和错题本把新遇到的题型和解题思路补充进去。经过多场笔试的积累你的笔记就会成为一份极具个人特色的“算法岗笔试红宝书”这才是真正属于自己的核心竞争力。最后送大家一句话校招是一场持久战笔试只是第一道关口。一场笔试失利不代表什么重要的是在每一次实战中都比昨天的自己进步一点。祝正在备考的同学都能拿到心仪的offer。
返回列表