
说句实在话如果你准备投网易有道的技术岗2017年那会儿的内推选择题几乎就是简历通过之后的第一道硬门槛。很多人觉得选择题嘛无非是看看基础随便刷刷题就能过结果真上了在线笔试系统才发现题目又多、时间又紧、知识点又杂做一半就开始慌。我自己当年也在这个环节里折腾过不少时间后来复盘才发现这套选择题的考察逻辑其实非常清晰只要你搞懂它到底在考什么、怎么考完全可以在考前一两周内高效准备稳稳拿下这一关。这篇文章我就把自己准备网易有道2017内推选择题的完整思路、踩过的坑、考场上的做题技巧从头到尾整理出来。不管你是计算机科班出身还是非科班转行只要你准备投的岗位有在线笔试环节这篇内容都能给你一个可以直接照做的准备框架。1. 内推选择题的定位先搞懂它到底在筛什么很多人准备内推笔试的时候第一反应就是找题、刷题但很少去想一个最基本的问题这道选择题环节到底想筛掉什么样的人如果你不清楚这一点很容易把时间浪费在偏题怪题上反而忽略了真正重要的基础能力。1.1 内推流程中选择题的位置2017年那会儿网易有道的内推流程大概是这样的你先把简历投到系统里然后找在网易工作的朋友或学长学姐帮忙内推。内推成功后你会收到一封笔试邮件邮件里通常包含在线笔试的链接和时间。打开链接之后迎面而来的就是一套选择题后面还跟着几道编程题。我记得当时的在线笔试系统是有时间限制的选择题部分并不是无限时而是和编程题一样有倒计时。这意味着你不能在一道题上死磕太久否则后面的编程题会非常被动。这个设计本身就说明了问题选择题考察的是你在有限时间内的基础知识反应速度而不是让你慢慢推导研究的深度能力。有不少同学对“内推”有一个误解以为内推就等于免笔试直接进面试。我当年也差点踩这个坑还好提前问了一位在网易工作的学长才知道内推只是让你的简历更容易被看到笔试环节该走还是得走。所以收到内推邮件后第一件事是把邮件从头到尾读一遍确认有没有笔试链接、笔试时间是什么时候再开始制定准备计划。1.2 科目构成与考察逻辑从科目比例来看网易有道的内推选择题基本上把计算机专业本科阶段的核心基础课都覆盖了再混入少量逻辑题和工程常识题。我根据自己参加笔试的体验和后来网上的面经复盘整理过一个大致占比虽然不是官方数据但方向上很有参考价值考察方向大致占比常见考点举例数据结构与算法30%左右复杂度、排序、二叉树、哈希、图论操作系统20%左右进程线程、死锁、内存管理、调度算法计算机网络20%左右TCP/IP、HTTP、DNS、滑动窗口数据库15%左右索引、事务、SQL语句编程语言与工程基础10%左右C/Java/Python语法、编译链接、调试逻辑推理5%左右智力题、概率题、找规律这个分布其实很有道理。有道做词典、翻译、云笔记和在线教育服务端要应对高并发请求客户端要抠性能和用户体验所以数据结构、操作系统、计算机网络这些底子必须扎实。选择题不一定考得多深但广度一定够目的就是快速判断你的知识面有没有明显短板。我当时准备的时候把重点放在前四个方向上因为它们的分值占比最高而且知识点相对固定刷题效率最高。逻辑题和智力题分值低、随机性强我不会花太多时间去刷而是靠平时的思维积累去应对。这个取舍策略让我在有限的时间内把复习效率拉满了。2. 核心考点拆解高频知识点的出题方式光知道考什么科目还不够你还需要知道每个科目里到底有哪些高频考点以及这些考点在公司笔试题里是怎么出题的。这节我把自己复盘过的高频知识点和出题套路详细拆开讲。2.1 数据结构与算法选择题里的“保分项”数据结构与算法是选择题里最值得花时间准备的部分因为它规律性最强、刷题效果最明显属于投入产出比最高的板块。复杂度分析是必考内容。快排平均时间复杂度是O(nlogn)最坏是O(n^2)这个大家都知道但题目会换一个姿势考你“对一个已经有序的数组做快速排序如果每次取第一个元素作为基准时间复杂度是多少”这个时候如果你没有想过最坏情况的具体触发条件很容易以为有序数组是最优情况直接选O(nlogn)那就错了。排序的稳定性也是高频考点。选择排序、快速排序、堆排序是不稳定的冒泡排序、插入排序、归并排序是稳定的。选择题可能直接问“以下哪个排序是稳定的”也可能给你一个具体数组问你经过第一趟排序后的结果是什么这时候必须老老实实在草稿纸上手动模拟不能凭感觉。二叉树几乎年年都有题。前序、中序、后序、层次遍历之间的序列转换是最经典的考法给前序中序求后序给中序后序求前序这几种题必须做到熟练。完全二叉树的下标性质、堆的插入和调整过程、二叉搜索树的查找路径也是选择题的常客。哈希表部分主要考散列冲突处理方式和平均查找长度的计算。链地址法、开放定址法都要理解题目如果真的给出散列函数和一组关键字让你计算ASL会做的同学基本是送分题不会做的只能靠蒙。这类计算题我建议考前专门练几道把步骤吃透。2.2 操作系统与计算机网络容易扣分的“重灾区”操作系统部分进程与线程的区别是万年考点。选择题经常问“进程间通信方式有哪些”“同一个进程内的线程之间共享什么、不共享什么”。如果你只背了概念没理解具体场景很容易在选项里被绕晕。死锁的四个必要条件是必须背下来的互斥、持有并等待、不可剥夺、循环等待。题目可能会问你“破坏死锁哪个条件可以预防死锁”也可能给你一个具体场景让你判断是否可能发生死锁这些题本质上就是考你对四个条件的理解够不够深。内存管理方面的虚拟内存、页面置换算法也是重点。LRU和FIFO的区别缺页次数的计算都是典型的“会者不难”题。我建议找几道计算缺页次数的例题把置换过程一步步画出来。我自己在高中的时候第一次接触这个知识点觉得特别抽象后来画了几张表之后就彻底通了其实就是在模拟一个队列的进出过程并没有想象中复杂。计算机网络部分TCP三次握手和四次挥手是必考中的必考。除了握手过程本身还要知道为什么断开连接要四次挥手、TIME_WAIT状态存在的意义是什么。TCP和UDP的区别、滑动窗口机制、拥塞控制的几个阶段这些概念经常在选择题里来回考。HTTP状态码也是送分级别的高频考点。301是永久重定向302是临时重定向403是禁止访问404是找不到资源500是服务器内部错误502是坏网关。这些要背到条件反射的程度因为考试不会给你反应时间。我记得当时笔试里有一道印象很深的题考的是DNS解析过程问“用户在浏览器输入一个域名后DNS解析的查询顺序是什么”。选项里混了浏览器缓存、系统缓存、本地DNS服务器、根域名服务器这些层次。如果你平时没有配置过域名、没有排查过网络问题这道题很容易做错。所以网络部分不能只背理论最好自己动手配一次DNS、抓一次包很多概念一下就通了。2.3 数据库与编程语言细节决定成败数据库选择题的重头戏是索引和事务。索引底层为什么用B树而不是二叉树聚簇索引和非聚簇索引的区别覆盖索引的含义这些概念看起来基础但选择题会从不同角度反复考。事务的ACID特性、四种隔离级别、每种隔离级别解决的并发问题也是高频考点。读未提交、读已提交、可重复读、串行化你要能说清每一层能解决脏读、不可重复读、幻读中的哪些问题不能解决哪些问题。这类题只要整理成一张表基本就不会丢分。SQL语句题有时候会给一张学生表、成绩表让你选出“平均成绩大于80分的学生姓名”。这种题考查的是group by和having的搭配以及where和having的执行顺序。join的类型和结果集也是常考点left join、right join、inner join、full outer join每种连接保留哪些数据必须清晰。编程语言部分就看你的目标岗位了。投C岗位的虚函数、指针与引用、构造函数和析构函数的执行顺序这些一定要烂熟。投Java岗位的HashMap原理、垃圾回收、字符串常量池是高频考点。投Python岗位的GIL、深拷贝和浅拷贝、列表与元组的区别要搞清楚。我当时投的是服务端方向C和网络相关的题偏多备考的时候就把C的核心特性完整过了一遍。还有一个容易被忽略的点是编译链接相关的工程基础比如静态库和动态库的区别、编译器优化的影响、内存对齐的计算。这些题不一定每次都有但如果出现对于做过实际项目的同学来说就是送分题对于只刷题没写过工程代码的同学来说就很难蒙对。3. 我的备战实操从刷题到考场的完整路径知道考什么之后最关键的问题就是怎么在有限时间内高效准备。我不推荐那种“从第一章到最后一章啃教材”的方式因为内推笔试的准备窗口通常很短从收到内推邮件到正式笔试往往只有一到两周必须把时间花在刀刃上。3.1 刷题资料怎么选、怎么用我当时用的资料主要有三类牛客网的历年校招真题、剑指offer、以及王道考研系列的复习书。牛客网上的真题最有参考价值因为它把各大公司的笔试题汇总在一起你不需要自己去各个论坛翻帖子直接在网页上刷就行。2017年那会儿牛客的模拟系统已经比较接近真实的在线笔试环境了左侧是题目列表右侧是答题区还有倒计时用来找手感特别合适。剑指offer主要用来补充算法题思路。虽然内推选择题不要求你写出完整代码但很多数据结构题本质上就是算法思路的变形。比如“如何判断链表是否有环”“如何用两个栈实现队列”这些题目在剑指offer里有现成答案理解了之后选择题里的思路题基本都能应对。王道考研系列的复习书是我给所有准备技术笔试的朋友都会推荐的一套资料。它的选择题部分把操作系统、计算机网络、数据结构的考点整理得非常系统每章后面还有配套习题。虽然考研题和公司笔试题不完全一样但考点重合度很高尤其是操作系统和网络部分用它打基础比漫无目的地刷题更高效。刷题的时候不要只追求数量。我的经验是每道题都要能说出“对的选项为什么对错的选项为什么错”。如果一道题你模棱两可地选对了也要当作错题处理因为考场上题目只要稍微换个说法你可能就不会了。我当时刷题的正确率大概在百分之七十左右但每一道做错的题我都会花时间看解析把知识点补上。3.2 错题整理的三个维度错题本不是把题目抄下来就完了。我后来发现真正有用的错题整理至少要包括三个维度考点、错因、正确思路。考点就是这道题在考哪个知识点比如“页面置换算法中的LRU和FIFO”。错因要写清楚是自己概念不清、计算错误还是题目看错这一步很关键因为你可能反复在同一个原因上犯错。正确思路则是把解题过程重新推演一遍特别是计算题要写出每一步的关键过程。举个我自己的例子。我在“循环队列队空和队满判断”上反复出错原因是把牺牲一个存储单元的判断方式和设置标志位的判断方式搞混了。后来我把两种方式并排放在错题本上每次复习的时候先看考点再遮住答案自己推一遍推不出来就停下来重新理解。经过了大概三轮复习这个知识点才算是彻底掌握了。这种针对性的整理比刷十套新题都有用。因为刷新题只是在不断验证你已经会的东西而错题整理是在补你真正的漏洞。3.3 模拟考试和时间分配临近笔试前两天我抽了一个完整的晚上做了一次全真模拟。模拟的意义不只是检验知识水平更重要的是训练时间分配。选择题平均每道题只有一分多钟一旦在某道题上卡住整场节奏就全乱了。我的策略是拿到试卷先快速浏览一遍把题目按难度分三类。第一类是看一眼就有答案的立刻选第二类是需要算一算、想一想但能做出来的先做第三类是完全没思路的先标记跳过。等第一遍做完再回头处理第三类。为什么这么安排因为选择题的分数和难度不一定成正比先把有把握的分数拿到手再花时间挑战难题心态会更稳。模拟考试还会暴露出一个隐藏问题你在哪个知识点上花费的时间最多。如果发现某类题每次都让你纠结很久说明这个知识点还没吃透考前一定要重点补。在线笔试系统有的支持标记题目后返回修改有的不支持。我建议进入答题之前先把系统说明看清楚。如果支持标记就可以大胆跳过难题如果不支持那就要调整策略要么硬着头皮先选一个要么在草稿纸上记下题号等做完其他题再看系统允不允许修改。4. 考场上的应试技巧与细节知识储备是基础但上了考场技巧和细节同样能拉开差距。这一节我聊聊自己在实际答题过程中的体会这些东西在题目解析里是学不到的。4.1 排除法与反向思考选择题最实用的技巧就是排除法。不少题目不会直接问你“哪个正确”而是问“下列说法错误的是”。这种反向题最坑人的地方在于你明知道A和B是正确的但C和D乍一看也都有道理就容易放松警惕。我的习惯是把“错误”两个字在心里默念一遍提醒自己找的不是正确答案而是错误项。还有一类题目选项里出现“任何”“所有”“绝对”“一定”这类字眼通常这个选项大概率是错的。比如“所有递归都可以改成非递归实现”这个说法从理论上讲确实可以但“所有情况下递归的迭代版本都更高效”这种极端表述就要小心了。用反例思维去找选项中的漏洞往往能快速锁定答案。对于代码类选择题选择题经常给一段简短的C或Java代码问你输出是什么。这种题不要凭感觉选最好在草稿纸上手动模拟一遍执行过程。尤其是循环里嵌套了if、变量自增自减顺序比较复杂的时候手动模拟能避免被选项里那些“相似但不相同”的结果带偏。4.2 边界值、计算题与手动模拟计算型选择题是很多人丢分的主阵地。比如排序过程、哈希表的平均查找长度、缺页次数、二叉树节点数计算这些题目不能靠背必须真正算一遍。算的时候要特别注意边界条件比如数组下标从0开始还是从1开始题目默认的输入范围是多少。这些细节决定了最终答案是A还是B差一个数值可能就选错了。我印象里有一类题是“给定一个序列用堆排序第一趟之后的结果是什么”。如果你只记得堆排序的时间复杂度不知道建堆和调整的具体过程这道题就无从下手。所以备考的时候对经典算法的手动模拟能力一定要练不能只写代码忽略过程。还有一种常见陷阱是概念题答案在一字之差。比如“进程”和“线程”“同步”和“异步”“阻塞”和“非阻塞”选项中经常用相近的概念做干扰。应对方法就是考前把这些易混淆概念成对整理自己给自己讲一遍区别讲到能顺口说出来的程度。面试的时候这个能力也一样有用因为面试官问的很多问题本质上就是看你能否准确区分这些概念。4.3 在线笔试环境检查2017年的在线笔试系统比现在简陋不少但该注意的点一直没什么变化。考试前一定要提前测试设备摄像头能不能正常打开麦克风是否可用浏览器版本是不是系统要求的版本。别小看这一步我有一次模拟考试就因为在旧版浏览器上打开笔试链接题目页面一直刷新不出来浪费了将近十分钟。考试当天建议提前半小时进入系统把身份证件、草稿纸、笔、计算器如果允许都放在手边。在线笔试通常不允许使用手机系统可能不会把每个小动作都监控到位但最好还是自觉遵守规则。笔试只是整个过程的第一步后面还有面试诚信这东西一旦有污点比一次笔试没考过更糟。还有一个小细节有些在线笔试系统会在选择题和编程题之间切换时自动保存答案但有些不会。如果遇到不确定是否保存的情况尽量在切换板块之前检查一下答题状态确保选择题答案已经提交成功。别辛辛苦苦做完最后因为忘记提交白白丢了分数。5. 常见问题与避坑经验最后这部分我整理一下在准备网易有道2017内推选择题过程中遇到过的典型问题和踩过的坑也算给后来人提个醒。5.1 我踩过的坑第一个坑是时间分配失误。模拟考试的时候我因为过度纠结一道网络计算题花了将近十分钟最后编程题时间严重不足。后来我给自己定了一条纪律选择题单题停留时间不超过两分钟超过就标记跳过。这个纪律在正式笔试时帮我保住了后面编程题的时间现在回头看如果当时没有提前模拟很可能会在真实考场上犯同样的错误。第二个坑是误以为内推就免笔试。前面提到过这里再强调一次。内推和普通网申的区别主要在简历筛选环节内推简历更容易被看到不代表笔试面试都可以绕过。收到内推邮件时务必打开邮件正文和附件确认有没有笔试时间别等到最后一刻才发现自己漏了关键信息。第三个坑是刷题只看正确率不看解析。我早期在牛客刷题时遇到简单题做对了就直接下一道后来发现很多错误选项里藏着更细的知识点。开始认真看每条解析之后我才发现原来一个普通知识点能衍生出这么多考法。从那以后我做题的速度慢下来了但知识掌握程度反而提升了。5.2 选择题常见陷阱分类我把选择题里容易丢分的陷阱整理成了一张表方便大家对照检查。这张表我后来面试新人的时候经常拿出来用里面的陷阱类型放到今天依然有效陷阱类型典型表现应对方法反向题“下列说法错误的是”圈出关键词明确找错而非找对多选/单选混淆明明是单选却按多选做或者相反看清题号后面的标注概念混淆进程/线程、同步/异步、阻塞/非阻塞考前用成对概念自测边界条件数组越界、整数溢出、空指针手动模拟时代入边界值计算陷阱排序过程、哈希查找、缺页次数亲手算一遍不靠感觉绝对化表述“任何”“所有”“一定”用反例思维找漏洞这张表不是让你背下来而是提醒你审题的时候多留一个心眼。考场上最怕的不是题目难而是你会做的题因为粗心做错。5.3 选择题之后如何衔接面试很多人笔试一结束就把题目忘光了这其实非常浪费。选择题暴露出来的薄弱点往往就是面试官接下来追问的重点。面试官通常能看到你的笔试记录你哪道题做错了他心里基本有数。所以笔试结束后我建议立刻把不确定的题目和选项记录下来当天晚上就去查资料把每个模糊的知识点重新过一遍。我当时做完笔试之后把选择题里所有不确定的题目标了出来大概有七道。晚上逐一查了课本和博客才发现有三道题涉及的知识点我理解得并不准确。后来面试的时候面试官果然问到了网络相关的问题我因为当天晚上复习过回答得反而比笔试时更稳。这就是把一场笔试的价值用到极致的方法。还有一点是心态。选择题成绩不理想不代表没机会很多时候面试官更看重你在面试中的表达和思路。如果你能在笔试后快速补齐短板反而能把一次不理想的笔试变成展示自己学习能力的机会。准备后续面试时把笔试中的错题当成第一份复习资料这比漫无目的地刷面经要有针对性得多。最后再分享一个小技巧无论笔试结果如何做完题之后立刻把你随手记在草稿纸上的疑问点整理出来当天解决。我的经验是当天不解决的问题一周之后你会连当时为什么错都忘掉。这个习惯让我在之后不少技术面试里受益希望也能帮到你。