
1. 笔试整体节奏与题型结构1.1 考试入口与前置准备2020年4月11日晚上19:00到21:30那场网易互娱游戏研发暑期实习的线上笔试我到现在印象还挺深。当时因为疫情原因笔试统一改成了线上进行用的牛客网平台要求开摄像头、锁浏览器全程远程监考。和现场笔试最大的区别有两个一是你必须在规定时间内完成特定平台的调试和测试二是出现断网、死机、浏览器崩溃这类突发状况时处理不当会直接影响整场考试心态。我的建议是提前一天做三件事。第一确认邮件里给的笔试链接能在Chrome或Edge里正常打开牛客网对不同浏览器的兼容性不太一样尽量别用那种开着大量插件、带广告拦截的浏览器环境。第二找一个安静、光线正常、不会被家人打扰的房间摄像头画面里不要出现书籍、纸张、手机等疑似作弊的物品这个考试平台有后台人工抽检你也不知道哪一秒就被截屏记录了。第三提前30分钟登录系统完成人脸识别和设备检测把手机放到另一个房间或者关机我见过一个同学笔试中途手机响了一声他下意识看了一眼倒没有实质影响但在人工审核环节确实给自己增加了不必要的解释成本。1.2 题型分布与分值逻辑网易互娱游戏研发岗的笔试题型基本可以归纳为三块逻辑推理题、专业知识选择题/填空题、编程题。不同年份、不同项目组的题目构成略有差异但大方向没有什么变动。也就是说他考查的核心是三个维度你的思维敏捷度、你的计算机专业基础、以及你的代码实现能力。逻辑推理题一般占比较小10到15题左右常以图形推理、数字推理、文字逻辑判断的形式出现。这部分的核心意义不在于真的测你的“智商”而在于看你在有限时间内能不能快速识别规律、分配注意力。很多准备不充分的人会在这里卡住然后导致后面的编程题时间不够这是最大的时间管理陷阱。专业知识题基本覆盖C、操作系统、计算机网络、数据结构、图形学基础这些游戏研发最常碰到的领域题目难度中等重在基础概念的理解和辨析。编程题一般是2到3题难度递进第一题通常是字符串处理或简单模拟第二题是中等数据结构和算法第三题就会涉及图论、动态规划或者复杂状态搜索。整场考试2.5小时我的经验是编程题占大头如果逻辑题超过15分钟还没做完就应该立刻止损。2. 各题型深度拆解与解题思路2.1 逻辑推理题别在送分题上输时间逻辑推理题的典型特征是你一眼看过去就知道“这题不难但就是想不出来”因为它考的是从有限信息里快速抓住规律的能力。常见的有三种。第一种是数列推理比如给一串数字让你推下一项表面上复杂但本质上往往就是等差数列、等比数列、斐波那契变形、隔项规律等组合。第二种是图形推理常见套路包括图形旋转、对称变换、阴影移动、笔画数增减等这种题对玩过解谜游戏的人有天然优势。第三种是文字逻辑类似“甲乙丙丁中只有一人说真话谁是小偷”这类技巧就在于假设验证法不要凭直觉猜快速假设某一项成立看整体是否矛盾。这一部分我的建议是会做的赶紧做过了30秒还没有清晰思路就先跳把题目标记好回头如果有时间再补。我印象很深的是当时有一道图形题给了我八个黑白填充的方格图案问第九个是什么我盯着看了快三分钟最后选了最像的那个考完一对答案反而是错的。后来复盘才知道它是按“每行黑格数量依次递减、白格位置顺时针旋转”这个双重规律走的单看某一维度根本看不出所以然。这给我的教训就是图形题如果只从单一维度看不出规律就同时从数量、位置、对称性三个维度去比对任何一个单一维度卡住超过40秒就该果断标记跳过。2.2 编程算法题数据结构扎实是底线2.2.1 第一题字符串与栈的经典组合编程第一题通常不会太难核心目的是筛掉那些连基本输入输出和常用数据结构都写不利索的人。那次笔试的第一题大意是给定一个包含小写字母和左右括号的字符串要求反转每一对括号内的字符顺序然后去掉括号输出最终结果。比如输入(abc(def))处理完应该是fedcba的某种嵌套反转结果。这题的考点其实很清晰栈的先进后出特性。做法是维护一个栈遇到左括号就把当前结果字符串入栈并清空遇到右括号就把当前字符串反转后与栈顶内容拼接。时间复杂度是O(n)数据范围给到10的5次方完全够用。这里有一个容易被忽略的细节如果字符串里存在嵌套括号比如a(b(c)d)e你需要确保每一次入栈和出栈操作都基于当前的“状态层”而不是全局状态。我记得有人写到最后发现输出顺序反了就是因为没搞清楚“栈里存的是历史字符串反转的是当前层”这个逻辑。2.2.2 第二题动态规划与状态转移第二题考的是动态规划场景包装成了一个类似“跳跃游戏”的模型给定一个非负整数数组每个元素代表你在该位置最多能向前跳多少步问能否从数组起始位置跳到末尾。这个模型在LeetCode上也有类似原题但笔试里加了一个条件到达某个位置时会获得一个得分得分可正可负要求在能到达终点的情况下最大化总得分上限。如果不加得分直接用贪心维护“当前能跳到的最远距离”就结束了。但是加了得分之后贪心就不成立了得用动态规划。定义dp[i]为跳到位置i时能获得的最大得分那么dp[i] max(dp[j] score[i])其中j满足 j nums[j] i也就是从j位置能跳到i。如果直接扫描复杂度是O(n²)数据范围如果来到10的5次方就会超时需要优化。常见的优化思路是维护一个前缀最大值的线段树或者用一个最大堆来维护“能从该位置跳到当前位置所有前驱位置对应的dp值最大值”。当时我第一版打的是O(n²)的暴力测试用例没过去一半然后改成用优先队列每次取堆顶的最大dp值先判断它对应的下标能不能跳到当前i不能就弹出能就作为转移来源整体复杂度降到O(n log n)才通过。这道题给我最大的感受是笔试考动态规划考察的核心其实是“你能否识别出状态定义”而不是“你能否背出某个模板题”。有些人看到“最大化得分”就直接套背包的模板结果完全对不上因为题目里的每一步限制条件都不同状态设计的自由度很高。建议准备的时候不要只刷模板题多看看同一模板在不同包装下的变体真正弄清楚“为什么要这么定义状态”才是关键。2.2.3 第三题图论与拓扑排序第三题是典型的图论题包装成游戏内的任务解锁系统有N个任务每个任务可能有若干个前置任务只有当前置全部完成时任务才能开始给定了任务之间的依赖关系和每个任务的耗时求完成所有任务的最短时间。这题本质上是带权拓扑排序。这个题的核心考点有两个一是能否想到用拓扑排序处理依赖关系二是在拓扑排序的基础上能否处理“并行执行”的逻辑。因为任务之间没有严格的串行关系如果两个任务没有依赖冲突它们是可以并行推进的。换句话说每个任务的最早开始时间取决于它所有前置任务各自完成时间的最大值而不是之和。基于这一点可以维护每个节点的入度、前置完成的最大时间然后把入度为0的任务扔进优先队列按照完成时间从小到大的顺序进行处理。每处理完一个任务就更新它的后继节点的“前置最大完成时间”当某个后继的所有前驱都完成了它的入度归零就可以将其加入队列中。用这种思路做时间复杂度O(N log N)。这道题是我们那次笔试的区分题能做出来的基本都能进入下一轮。2.3 游戏研发相关专业题吃的是知识积累笔试里的专业题覆盖面比较广我当时遇到的内容大致可以分成五块后来也成了我自己复习游戏研发基础的框架。第一块是C基础考查点集中在虚函数机制、内存布局、智能指针、STL容器复杂度、构造函数析构顺序这些。其中“虚函数表是运行时多态的核心”和“shared_ptr循环引用会导致内存泄漏”这类题几乎是必考的。第二块是数据结构重点在链表、树、哈希表常考“哈希冲突的解决方法”“平衡树的旋转”“链表反转的迭代与递归实现”等。第三块是操作系统进程与线程的区别、死锁产生的四个必要条件、进程间通信方式都是高频考点。第四块是计算机网络TCP三次握手与四次挥手、TCP与UDP的区别、滑动窗口、拥塞控制考得中规中矩不会太深入。第五块是图形学基础这是游戏研发最特殊的部分常见的有坐标系变换、矩阵乘法、光栅化流程、深度缓冲、渲染管线的基本流程等没有基础的人会明显感到吃力。这里我想多说一句图形学基础一定不要到最后才开始看。哪怕你不做渲染方向游戏研发的岗位围绕的就是整个渲染、物理、逻辑交互链路你不知道MVP矩阵的变换流程不理解“模型空间 - 世界空间 - 观察空间 - 裁剪空间”这条链路很多后续的问题都会卡在非常基础的位置。那次的专业题里就有一道问“透视投影和正交投影的区别”看起来很基础但不少人在“近大远小是哪一种投影的效果”这个点上糊涂了。2.4 游戏行业理解题别只背题库除了纯技术题网易的笔试还会穿插一些和游戏行业相关的开放性问题。比如问“你最近在玩什么游戏分析一下它的核心战斗循环”或者“如果让你给某个游戏设计一个新玩法你会怎么做”这类题。这部分表面上不难但实际上极其考验你把“玩家视角”转成“开发者视角”的能力。我的建议是提前准备至少3款不同类型游戏的分析框架单机、竞技、手游各选一个别只写“这个游戏很好玩”这种没有信息量的话要有意识地拆解它的核心玩法模块、数值体系、玩家成长路径和社交交互设计。游戏研发岗位要的是能站在系统设计高度看问题的人而不是单纯的代码机器。3. 现场做题策略与时间管理实录3.1 我的答题顺序与取舍逻辑那场笔试一共150分钟我的策略是先把所有非编程题快速过一遍留出整块的120分钟给编程题。具体操作是这样的前30分钟快速浏览逻辑推理和专业题凡是有把握的当场做完凡是没把握的标记后直接跳过不在任何一道题上恋战。用30分钟把基础题做完或者说把能拿的分拿到手然后从第31分钟开始全力写编程题一气呵成写到第140分钟最后留10分钟统一检查。这个策略的核心逻辑是编程题是拉开差距的地方而且编程题的调试成本极高。一道题从读懂、构思、写码、到通过全部测试用例至少需要30分钟如果你先花1个小时磨基础题后面编程题写的时候就非常紧张一旦遇到一个隐蔽的bug整道题就可能报废。基础题的分值是固定的但编程题是分层次给分的部分用例通过也能拿到一部分分性价比完全不一样。相反地人为压缩基础题的时间最多损失一道不会做的题的分不会影响整体大局。当然这个策略也有一个前提你必须对自己的编程速度有清晰的认知。如果你平时写算法题的正确率和速度一般我建议把编程题预留时间拉长到130分钟基础题压缩到20分钟。因为基础题哪怕全对也就那么几十分编程题哪怕只AC一题都直接决定了你能否进入面试。先保大头再收小头这个优先级千万别搞反了。3.2 线上笔试的意外与应对线上笔试最大的风险在于环境的不确定性。那个晚上我的网络就出了一次状况写第二题动态规划时代码刚提交页面卡了差不多十几秒右上角出现了“网络连接断开”的提示。当时心跳直接变快好在我之前设想过这种情况立刻冷静下来先看题面有没有保存草稿等网络恢复后重新打开了答题页。好在牛客网对答题内容有自动保存功能没有丢代码。这个经历让我学会了一件事每写完一段逻辑先做好代码的本地备份。你可以把代码先复制到一个本地编辑器里用快捷键注释掉再粘贴回去或者直接用截图工具截屏保存。截图本身并不会被判为作弊但千万别切屏出去查资料一旦系统检测到跳出考试页面会有被标记的风险严重时直接终止考试。另一个容易被忽略的坑是编译环境。那次笔试的编程题支持多种语言我一开始默认选了C17但写了十几行后发现平台里的编译器对某段代码提示“无法识别该类型”才意识到自己不小心用到了C20的特性。赶紧改成常规写法才避免了后续的时间浪费。这个教训非常实用笔试的编译环境和你本地电脑上装的不一定一致正式开写前先拿题目里给的示例输入做一次最简单的输出测试确认编译环境没问题再开始写。别图省事省那30秒结果后面几十行代码全在一个错误的假设上跑。3.3 部分通过用例的拿分技巧编程题不是只有AC和非AC两个结局。当你在限定时间内写不出完全正确的解法时一定要学会“拿部分分”。第一暴力解法在所有数据范围小的测试点上是能拿满分的。比如那道图论题如果你写出一个O(N²)的暴力拓扑模拟前30%的测试数据是能全部通过的这部分的分数足够让你在所有面试候选人中排到一个不错的位次。第二如果思路不完整先把输入输出框架写好把能处理的边界情况处理掉。很多人以为“写一半的代码不如不写”这是完全错误的认知。在机器阅卷的系统里部分通过意味着你有真实的编码能力只是算法能力稍弱这比交了白卷强得多。第三如果完全没思路至少写一个最朴素的遍历逻辑把数据结构建出来比如把所有节点的邻接表建好、把入度数组初始化好也能向阅卷系统证明你具备基础功底。4. 备考参考与避坑指南4.1 复习资料与刷题方向如果要为这类型笔试做系统准备我的建议是把重点放在三个方面。第一刷题。优先刷数据结构与算法的高频题比如字符串处理、链表、二叉树、栈与队列、哈希表、动态规划、图论、贪心其次需要重点刷的是带游戏化场景包装的题目这类题目在LeetCode上通常体现为“类似游戏规则模拟”的题实际笔试中出题人非常喜欢把经典算法包装成游戏内的玩法比如任务解锁、寻路、战斗回合模拟等。第二补强计算机基础。操作系统、计算机网络、C底层机制这三块是专业题里最大头的部分可以直接用考研408的复习资料覆盖度足够。第三图形学和引擎基础。前期只需要了解渲染流程、坐标系变换、光照模型、物理引擎的基本概念。我当时是看了一些公开课里关于渲染管线的章节再配合GAMES101的课程材料做补充能应付笔试里的图形选择题和简单问答。这里特别提醒一点不用把大量精力花在“猜题”上。网易笔试的题风比较偏临场反应你不可能背住所有可能的题目但你可以通过刷题把“快速建模思路”这个能力练出来。题型千变万化建模能力和代码熟练度是固定的。4.2 几个我踩过的坑希望你别再踩一次第一个坑选择语言时犹豫不决。我身边有同学一会用C一会又想切Python结果在选择题和编程题之间反复横跳浪费了大量的时间。实际上笔试的编程题每种语言都支持没有哪一种有绝对优势重要的是你平时用哪一种最熟练。如果你平时只刷过Python非要为了“C显得更专业”而临场换语言大概率会死在语法细节上。选最熟悉的那门别逞能。第二个坑细节理解偏差导致全盘皆输。编程题最怕的不是不会写而是读错题。那次第一题字符串反转题面明确说“括号内部的字符串需要反转”但有人理解成了“从左到右逐层反转”结果写出来的代码完全对不上预期输出。这类题目在正式的比赛中通常会在“提示”块中给出输入输出示例务必先把示例推演一遍再动手编码。宁可多花两分钟读题也不要一边写代码一边才发现理解错了。第三个坑心态失控。2.5小时的笔试时间越接近尾声心态波动越剧烈。我记得当时写到第三题结束还剩10分钟检查时间可以说非常紧张。原计划里剩下的时间我会回过头去补逻辑推理题里跳过的题目但实际发现眼睛已经开始发花精神疲劳到了一个临界点根本没法高效思考。后来我总结出一个应对办法提前准备好一罐水或一瓶功能性饮料在考试进行到1.5小时左右补充能量。这个细节看起来无关紧要但实际操作中确实能帮助你保持一个相对稳定的状态撑到最后20分钟。4.3 面试衔接笔试后你该做什么笔试结束之后一般1到2周内会给结果。这个阶段的重心不要放在“干等”上而是要趁热打铁把笔试中没做出来的题重新梳理一遍。我当时在笔试结束后当天晚上就把三道编程题重新在本地编译器上做了一遍尤其第三题图论那道通过查阅资料最后理解了带权拓扑排序的标准做法。这个过程的意义在于面试中极大概率会被问到“你笔试中有哪些题没做出来”“现在知道怎么做了吗”到了那个时候你能说出一个完整的、经过自己验证的解法会是很大的加分项。很多人的误区是笔试结束就彻底放下等到面试通知来了才开始准备但面试官往往更看重你在笔试之后的复盘态度和学习能力。把笔试题吃透不仅是在准备面试也是在帮你查漏补缺找到自己知识体系里的薄弱环节。每个人准备笔试的方式不尽相同但方向大致是一样的基础要扎实代码要熟心态要稳时间要榨干。如果你能做到这四点前面那些题型的坑基本上都有惊无险。