尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

网易2020校招算法岗笔试复盘:考点、真题与避坑指南

网易2020校招算法岗笔试复盘:考点、真题与避坑指南 网易2020校招笔试这道坎过了的人觉得没什么没过的往往挂在一些莫名其妙的地方。作为一个当年在牛客网上被算法通用正式批这套卷子“毒打”过的过来人最近后台好几个学弟学妹问我这套题到底考什么、怎么准备我干脆把记忆里还能拼出来的真题片段、考点分析和踩坑记录整理成文。这篇文章不是让你背答案而是帮你搞清楚网易这套笔试卷的筛选逻辑和出题偏好以及你该在哪些知识点上花力气。无论你是明年参加校招的应届生还是想转行算法岗的社招新人甚至是单纯想检验自己算法功底的程序员这篇复盘都值得你花十分钟看完。先说结论网易算法通用这套卷子风格非常“网易”——不追求偏题怪题但很看重基础扎实度和代码落地能力。选择题覆盖数据结构、机器学习、概率统计、智力题范围广但深度适中编程题基本是LeetCode中等偏下难度但题目描述绕弯子输入输出有坑心态不稳很容易翻车。我当年就是选择题做得太嗨编程题第一题被输入格式卡了二十分钟最后只能含泪交卷。后来和几个进了网易的朋友复盘发现这套卷子的核心逻辑就一句话拉高下限考察你“能不能干活”而不是“是不是天才”。1. 网易2020校招笔试的整体格局与考察逻辑1.1 这份卷子长什么样网易校招笔试一般是在牛客网平台上进行的算法通用岗位使用的是一套统一试卷无论你之后想投的是网易游戏、网易云音乐、考拉还是有道笔试阶段基本都是同一张卷子。当你选择了“算法通用”这个岗位类别试卷的主要内容围绕基础算法、数据结构、机器学习基础展开而不是针对具体业务的定制化考题。这意味着它的覆盖面非常广你无法靠押题来突击。我印象里正式批的这套卷子在题型上分了两大块选择题和编程题。选择题大概在20道到25道之间分值占比接近一半题型不仅有单选还有不定项选择。不定项选题的计分规则很坑多选、错选都不得分少选还可能拿部分分具体规则每次考试会变但整体思路就是让你不敢瞎蒙。编程题一般是三到四道分值从15分到30分不等难度呈阶梯式递增第一道通常是“送分题”中的战斗机最后一道则是用来区分高分段选手的。时间方面整场考试在90到120分钟之间题量说起来不算特别大但如果你选择题犹豫太久编程题一道卡住半小时时间就会非常紧张。我看到不少人在讨论区吐槽“选择题做了四十分钟编程题全空”这就是典型的节奏崩盘。说实话这类笔试平均通过率不高核心原因不见得是题有多难而是很多人根本不适应这种“既要广度又要有速度”的考察方式。1.2 网易到底想通过笔试筛选什么样的人我当年考完之后认真对照过网易的岗位JD和面经慢慢琢磨出这套笔试的真实目的。首先互联网大厂的算法岗笔试本质上不是为了选拔“最强大脑”而是为了在一大堆简历看起来都不错的候选人里快速筛掉“基础不牢”和“代码能力不过关”的人。华东地区某985高校的硕士学历、顶会论文、大厂实习经历这些简历上光鲜的东西在笔试面前完全不起作用你算法题写不出来就是写不出来没有讨价还价的余地。其次网易这套卷子有明显的“通用属性”。因为考的是算法通用岗位不是某个具体方向所以题目不会深挖NLP的BERT原理也不会盯着CV的YOLO不放。它考察的是所有算法工程师都必须具备的底层能力数据结构理解、经典算法套路、机器学习基础概念、概率统计直觉以及最基本的代码实现能力。也就是说它更像是一个“从业资格测试”而不是“选拔奥赛选手”。最后也很关键的一点是网易特别看重编程题的AC率。我印象中身边有同学选择题答得不错但四道编程题只AC了一道最终还是被刷了。因为选择题反映的是知识储备编程题反映的才是你能不能把想法落地成代码而后者才是实际工作中真正需要的核心能力。网易的管理风格一贯务实笔试这个环节也一样宁可要一个能把简单题做对的人也不要一个纸上谈兵但代码跑不通的人。2. 核心考点深度拆解选择题里的高频陷阱2.1 数据结构与基础算法考察的从来不是背诵选择题的第一大块就是数据结构和基础算法。网易在这部分的题量大概占三分之一考得最多的集中在这些点二叉树遍历、KMP算法的next数组、堆排序建堆过程、哈希表冲突处理、最短路径算法适用条件、快排的最坏时间复杂度场景。说实话题目本身并不难但陷阱非常隐蔽因为很多概念你觉得自己会但一做题就发现理解得模棱两可。举个例子关于KMP算法最近搜索热词里出现了这么一句话“在KMP算法中对于模式串pabacaba其next数组next[i]定义为...”。这很可能就是网易笔试题的一个原型或变体。考场上它不会直接问你KMP的思想是什么而是给你一个具体的模式串让你算next数组某一位的值。如果你平时只在IDE里用过KMP模板从没手算过next数组这道题十有八九会翻车。这个细节我在后面的真题分析里会专门展开。另外排序算法这块也特别爱考“手撕细节”。快速排序在什么情况下时间复杂度退化为O(n^2)如果只是背过“平均O(nlogn)最坏O(n^2)”的人可能选不出来因为题目会给出一堆具体序列比如“已经有序的序列”“所有元素相同”“完全逆序”等选项你得真正理解快排的分区逻辑才能做对。堆排序的建堆过程也常考但不考时间复杂度而是给你一个数组让你选出“建堆完成后数组的样子”这需要你现场模拟整个过程非常考验基本功。2.2 机器学习与概率统计送分题还是送命题选择题的第二大块是机器学习基础加概率统计。机器学习的考点非常集中过拟合的解决方法正则化、交叉验证、增加数据量、降低模型复杂度、决策树的分裂准则信息增益和Gini系数的区别、SVM核函数的选择、K-Means聚类的优缺点、梯度下降和随机梯度下降的异同。这些如果上过网课或者看过周志华的《机器学习》基本都能拿分但问题是有些选项描述得模棱两可比如“增加训练数据量一定可以解决过拟合”这个“一定”就是典型的陷阱你得果断判断它是错的。概率统计也比较基础考查条件概率、贝叶斯公式、期望方差、常见分布。网易特别喜欢考“三门问题”这类思维题也会让你算一个简单的蒙特卡洛估计。说实话这部分只要大学概率论没丢光问题不大。但有一条血泪教训必须说千万不要在概率题上花太多时间纠结因为编程题才是大头为了一道期望计算题磨五分钟非常不值得。至于热词里出现的粒子群算法、模拟退火、卡尔曼滤波、PID算法、MPPT算法、FOC算法这些我在网易这套笔试题里几乎没有见过它们更可能是你之前在实习或者项目里用到的技术点。如果只是想应对网易2020校招笔试这类通用型算法试卷这些偏应用层面的算法优先级并不高了解概念即可。但如果是面试特定岗位比如自动驾驶或者硬件相关的算法岗这些就有可能是加分项了。2.3 智力题和数学题保持头脑清醒的试炼网易笔试的选择题里总会夹杂几道智力题或者基础数学题比如“用两个8和两个3通过加减乘除得到24”“爬上N级台阶每次可以跨1级或2级一共有多少种方法”“给定一个不透明的箱子里面是黑球白球摸到白球的概率是多少”这类。说实话这些题难度不大只要你脑子没有短路一般都能做出来。但网上一直流传一个说法网易的智力题是“压力测试”不是考你的数学能力而是考察你在时间压力下能不能保持逻辑清晰。我的看法比较实际这几道题的正确率往往决定了你选择题总分是“良好”还是“优秀”。因为它们真的一点都不难做错纯粹是心态问题。我当年就栽过一道题题干极长看着像阅读理解我越读越慌最后蒙了一个错误选项交卷后和同学对答案才发现题目本质只是“一个简单的排列组合”。所以遇到长题干的智力题千万别慌先深呼吸把关键条件提取出来你会发现它就是纸老虎。3. 典型真题思路还原高频算法题应该怎么做3.1 KMP的next数组手算才是王道前面提到了KMP算法的next数组是高频考点而且热词里还专门点名了模式串pabacaba。这里我得先说明一下不同教材对next数组的定义是有差别的有的用“最长公共前后缀长度”直接作为next值有的从0开始有的从-1开始还有的是“失配时跳转的位置”。网易出题的时候题干会明确告诉你采用哪种定义所以读题时千万别想当然。以最常见的定义为例假设next[i]表示模式串前i个字符组成的子串中最长相同前后缀的长度注意这里前缀和后缀不能是整个子串本身我们来手算pabacaba。i1子串是a前缀和后缀集合里都没有非空的公共部分所以next[1]0。i2子串是ab前缀可以是a后缀可以是b没有公共部分next[2]0。i3子串是aba前缀a和后缀a相同长度为1再长的前后缀没有所以next[3]1。i4子串是abac前缀a与后缀c不同前缀ab与后缀ac也不同所以next[4]0。i5子串是abaca前缀a与后缀a相同长度1前缀ab与后缀ca不同所以next[5]1。i6子串是abacab前缀ab与后缀ab相同长度2前缀aba与后缀cab不同所以next[6]2。i7子串是abacaba前缀aba与后缀aba相同长度3前缀abac与后缀caba不同所以next[7]3。按这种定义next数组依次是[0,0,1,0,1,2,3]。如果你采用的是“next[0]-1next[i]表示模式串中第i个字符失配时跳转的位置”这套定义最终结果会略有不同所以一定要看清题目给的定义。这道题在选择题里的正确率据我所知不算高原因是很多人只会套模板而不会手算。备考的时候强烈建议把“手算next数组”作为基本功练熟这比背十遍模板都有用。顺便说一句笔试里不仅考手算有时还会让你在纸上模拟匹配过程这就要你把“暴力匹配”和“KMP匹配”的区别理解透彻。3.2 背包类动态规划笔试编程题的半壁江山网易的编程题几乎没跑过动态规划这个考点而背包类DP更是常客。热词里“贪心算法”“堆排序算法”“快速幂算法”“二分图HK算法”这些都是别的题目但在网易这套卷子里编程题考DP的概率是最高的。我记得当时最后一道压轴题本质上是一个“带体积限制和收益限制的物品选择”问题看起来像0-1背包实则还加了一个“分组限制”的条件你只背一维滚动数组的模板肯定不够。这里我把0-1背包的核心逻辑再帮大家过一遍假设dp[j]表示容量为j的背包能装下的最大价值对于每件物品体积为w价值为v状态转移方程是dp[j] max(dp[j], dp[j-w] v)。关键点在于内层循环必须从大到小遍历j确保每个物品只被选一次。如果改成从小到大同一件物品可能被选多次那就变成了完全背包。这个区别是笔试和面试的高频考点你要是只记结论不记原因遇到变种题很容易翻车。对于网易这道压轴题正确的做法是先对物品做分组预处理然后在外层枚举组别内层先枚举容量再枚举组内物品。换句话说它不是简单的0-1背包而是“分组背包”的变种。如果你没有专门刷过背包九讲考场上大概率写不出来。所以备考时不能只刷LeetCode热题背包类DP的经典模型0-1、完全、多重、分组、二维费用、依赖型每一类都要至少手写一遍理解它们之间的状态转移差异。3.3 快速幂与二分答案看似简单实则坑多快速幂算法也是笔试常客热词里“快速幂算法c”说明很多人都在搜这个。网易的编程题里有一道题如果你老老实实用循环做幂运算肯定会超时必须用到快速幂。快速幂的核心思想是把指数按二进制拆分比如计算a^1313的二进制是1101意思是a^13 a^8 * a^4 * a^1通过不断平方底数、按位判断指数来累乘结果时间复杂度从O(n)降到O(logn)。这个原理听起来不复杂但很多人写的时候会忽略取模的细节导致中间结果溢出白丢AC。二分答案这类题目往往和贪心配对出现尤其是“最大化最小值”或“最小化最大值”问题。网易某年考过一道分装货物的题本质上就是二分每批货物的最大重量然后判断能否在限定批次数内装完。这类题思路固定你需要先找出答案的上下界然后在这个范围内做二分每次二分后用贪心法检查当前答案是否可行。这里关键在于“判断可行”的贪心过程不能写错否则二分再溜也没用。我建议你在备考时专门整理一个“二分答案模板”把check函数单独封装考场上可以直接套。3.4 图论与数据结构不一定难但一定会考图论相关的编程题在网易这套卷子里出现的频率也很高尤其是拓扑排序、最短路径、最小生成树偶尔也会有并查集。热词里的“二分图HK算法”和“Dijkstra算法”都是这个方向。但说实话网易的图论题不会考到“匈牙利算法求最大匹配”这种偏竞赛的级别更多的是“给定一个有向无环图输出一个拓扑序”这种基础题。应用场景可能是任务调度、课程表安排、依赖关系处理你需要把图构建好然后用Kahn算法或者DFSBFS实现拓扑排序。Kahn算法的原理很简单统计每个节点的入度先把入度为0的节点加入队列然后逐个弹出更新邻接节点的入度再入队新的入度为0的节点。最后如果出队节点数不等于总节点数说明图里有环。这个算法实现起来不到二十行但非常考察你对队列的熟练度。笔试时有个细节坑了我题目输入可能给出的是边的关系而不是现成的邻接表你得自己建图同时处理节点编号从0开始还是从1开始的问题这个细节一旦搞错后面全乱。再来说说并查集。它考察频率在网易笔试中不高但一旦出现就是“路径压缩”和“按秩合并”这两个优化点的考察。比如经典的“朋友圈”问题给一堆朋友关系问有多少个独立的连通块。如果你只是简单合并而不做路径压缩在数据量大时就会超时。所以备考时把并查集的模板背熟尤其是“带路径压缩的find函数”这属于必须拿到手的基础分。4. 实操过程与核心环节实现编程题怎么做到不丢分4.1 读懂题目是第一步也是最关键的一步网易的编程题比较喜欢用“故事化”的包装题干可能是一段商场促销、浏览器缓存调度、游戏副本掉落之类的背景乍一看一大堆文字其实抽象出来就是一个经典问题。不要被故事本身带偏先提取“N”“M”“数组长度”“限制条件”这些数值明确输入和输出格式再转头去做问题归类这题是贪心、DP、图论还是模拟一旦归类正确解题思路基本就呼之欲出了。我踩过最大的坑是“题目需要多组输入直到EOF为止”。我当年做题时只处理了一组数据还以为自己AC了结果本地示例通过提交后一个用例都没跑过。牛客网平台和LeetCode不一样输入输出部分需要你自己写而且很多题目明确写着“输入包含多组测试数据每组占一行处理到文件末尾”。所以你写代码时最外层一定要用while(cin n)或者while(scanf(%d, n) ! EOF)包起来。这个知识点太重要了但平时刷LeetCode根本不会遇到因为LeetCode的输入输出都是封装好的。4.2 输入输出优化时间超限和答案错误的分水岭网易这套笔试题的数据范围经常开出10^5甚至10^6的规模如果你在代码里用了cin/cout且没有关闭同步超时的概率非常高。建议直接在代码开头加上ios::sync_with_stdio(false); cin.tie(0);或者干脆用scanf和printf。虽然这看起来是个很小的优化但在笔试场景下可能就是AC和TLE的区别。输出格式方面也要小心每行输出一个结果行末不能多一个空格个别的还要你保留两位小数用printf(%.2f)这种格式化输出。如果你用cout setprecision(2) fixed这种方式记得包含头文件iomanip同时注意变量类型是double而不是float否则精度不够会WA。这些细节都是我真实踩过的坑分享出来就是希望大家不要在莫名其妙的地方丢分。4.3 设计出可测试的代码结构考场上写编程题强烈建议别用那种“一坨屎山”式的写法直接把全部逻辑怼在main函数里。哪怕时间再紧也要把核心算法封装成一个独立的函数比如solve()或者check()然后在main里只做输入和输出相关的事。这样做有几个实际好处第一你的逻辑会更清晰不容易写乱第二如果程序出了问题你可以更快定位是输入解析的bug还是核心算法的bug第三万一你写完还有一个多小时想补几组测试用例验证的话独立函数更方便你写测试调用。平时的训练中也要养成“先写思路注释再写代码”的习惯。考试时题目难度不大时间紧人容易紧张如果直接在代码里边想边写很容易写到一半思路断了。而如果先在注释里把“我准备用贪心先把数组排序然后用双指针从两端往中间靠拢”这类思路写出来再一行行把代码补上整个实现的成功率会高很多。5. 常见卡壳问题与考场自救指南5.1 选择题卡壳怎么办遇到一道选择题卡住超过两分钟最优解就是“标记后跳过”。做题顺序上建议先快速扫一遍所有选择题把明显会的先做掉不会的、犹豫的、题干特别长的全部跳过。这样一来后续选择题在你脑子里会保持“待处理状态”等你把简单的题做完心态稳了回来再看那些难题往往会发现“刚才我为什么不会这不就是个简单的条件概率嘛”。绝对不要在一道题上死磕因为时间在流逝编程题才是大头选择题选不上来顶多丢几分编程题做不出来丢的是二十分三十分。另外遇到不会做的选择题千万不要空着。不定项选择在没有把握时可以尝试“保守策略”选择你一百个确定正确的项不选不确定的项。如果规则是少选得部分分那能拿一分是一分如果规则是少选不得分那这道题再纠结也没意义因为你蒙对正确答案的概率其实极低干脆凭第一感觉选完就走。5.2 编程题提交不过的常见原因与排查思路考场上提交编程题经常出现“本地运行没问题一提交就错”的灵异事件。我根据自己和身边人的经验整理了一个高频问题排查清单先看是不是多组输入的问题你只读了一次输入而题目要求读到EOF。再看变量类型够不够大数据范围10^9以上就要用long long或int64很多“答案错误”其实是溢出导致的。然后检查数组有没有开到足够大越界访问不一定崩但可能会让答案变成随机值。接着看边界情况n0、n1、数组长度极小的时候你的代码能不能正确处理。很多人栽在边界条件上因为只测了常规数据。最后确认输出格式有没有问题有没有多余空格、缺少换行、保留位数不对。如果你已经提交了并且明确看到某个测试点超时优先检查是否是算法复杂度问题然后看看层循环里有没有能提前break的情况。如果你用的是C的cin/cout试试加sync_with_stdio(false)。如果是递归写法检查是不是爆栈了。5.3 考场心态与时间分配策略整个笔试只有90到120分钟我建议的分段时间比例是这样选择题压缩在四十分钟以内其余时间全部留给编程题。编程题如果第一题就卡壳最简单的做法是“先拿部分分”。很多网易的编程题不是全有或全无的可能你只能想到暴力解法但暴力解法能通过一部分小范围数据这个时候千万别犹豫先把暴力版写出来提交能拿多少分是多少分。等后面的题写完了再回来优化这个暴力算法。我当年最亏的一刻是在压轴题上钻牛角尖结果第二题明明很简单的DP却因为时间不够只写了思路没写代码。后来复盘才意识到笔试看的是总分排名你压轴题写一半还不如第二题完整AC。所以考场上一定要学会“合理地放弃”一道题超过二十分钟还没有任何突破性思路立刻转战下一题不要和题目谈恋爱。还有一个建议是开考后先花三分钟把所有编程题都读一遍。不用急着写就用这三百秒大概判断每道题的难度和题型归属然后决定做题顺序。通常做法是从最简单的开始做把最难的放最后。但有时候第二题可能比第一题简单别被题目顺序骗了你先读题就是为了发现这个“倒挂”。这样安排后你心里就有了一整场考试的战术地图而不是被题目牵着鼻子走。6. 备考路径与底层能力提升建议6.1 刷题到底应该怎么刷很多学弟学妹问我“学长网易笔试要刷多少题才够”我一般不会给一个具体的数字因为刷题最重要的是质量而不是数量。但如果你真心想要一个参考我建议在笔试前至少把LeetCode的“热题100”和“剑指Offer”过一遍然后在牛客网上把网易近三年的真题做一遍再针对自己的薄弱点做专题训练。动态规划弱的就把背包九讲加LeetCode的DP标签题集中刷两周树和图论弱的就把二叉树遍历、拓扑排序、并查集、Dijkstra这些专题挨个过。刷题时有两点非常重要的原则第一一定要自己动手在编辑器里写完整代码并跑通不要只“想一想”就浪费了一道题。第二每道题做完后要复盘想想这道题用了什么算法为什么用这个算法时间复杂度和空间复杂度是多少如果改一改约束条件这个解法还成立吗。这个“复盘”的收益远超闭眼刷三倍数量的题。6.2 机器学习基础不要只背概念网易的算法岗笔试有一半是机器学习基础这部分如果你只是考前突击背概念会非常危险。因为选择题往往不是“什么是过拟合”这种概念题而是给你一个具体场景问你怎么解决或者问你某个操作会带来什么影响。比如“当模型在训练集上的准确率是100%在测试集上是70%时下列哪种做法最有可能提高测试集准确率A. 增加模型层数 B. 加入L2正则化 C. 扩大训练集 D. 减少训练轮数”。这道题本质上就是在考你对正则化的理解如果你只背过“L2正则化可以防止过拟合”而不理解它通过惩罚大权值来限制模型复杂度就很容易选错。所以备考时机器学习部分最推荐的复习材料就是我之前提到的周志华《机器学习》西瓜书的前八章加上李航的《统计学习方法》。不用把数学推导全啃下来但务必要理解每个算法的核心思想和适用场景。建议找一个研友互相提问用“费曼学习法”把KNN、决策树、逻辑回归、SVM、朴素贝叶斯、K-Means、PCA这些经典算法用口语讲一遍能讲明白笔试选择题基本不成问题。6.3 一定要模拟真实考试环境最后一个备考建议也是我觉得最有效的一条考前至少做两次全真模拟。不要只刷题而是严格按照网易笔试的时间、题型和平台来模拟。打开牛客网的模拟试卷或者找一套往年的真题给自己定一个90分钟的倒计时不开IDE的代码补全不查资料像真实考试一样做一遍。这样做的好处是你提前适应了“边看时间边做题”的紧迫感知道自己在一道题上最多能花多少分钟也知道了自己容易在哪里卡壳。第一次模拟如果成绩惨不忍睹非常正常因为很多人刷LeetCode刷习惯了根本不适应牛客网的输入输出格式也不适应时间压力。第二次模拟你就会明显感觉流畅很多这种“应试肌肉记忆”只有通过全真模拟才能建立起来。我当年备考时做了一个小工具把牛客网的所有输入输出坑整理成了一份速查表包括while(cin n)模板、EOF判断、long long使用场景等考前一小时只过这份速查表。这个习惯一直保留到了我后来的社招跳槽中每次都帮我省下了大量磨蹭的时间。我这些年陆陆续续帮不少人做过秋招辅导发现一个反复出现的规律进不了大厂算法岗的人很少是因为不会难题更多是被“简单题做不对、中等题做不全、时间分配乱”这三座大山压垮的。网易2020校招笔试这套卷子其实就是一个非常好的“压力测试模板”你把它的知识点吃透了后面再面字节、腾讯、阿里心态上都会稳很多。最后再分享一个小技巧笔试前一个小时别再看新题了把你自己整理过的模板代码、复杂度速查表、输入输出坑位表拿出来翻一遍然后闭眼休息一会儿让大脑保持清醒。考场上决定你命运的往往不是你知道多少而是你在有限的时间内能稳定输出多少。
返回列表