2020届秋招那阵子,我完整走完了网易大数据开发工程师岗位的正式批笔试。考完最大的感受是:这套题不偏不怪,但覆盖面极广,从Java集合的底层实现一路考到Kafka的ISR机制,最后用两三道编程题做收尾。如果你正在准备大数据开发方向的校招,这套卷子的考点分布基本就代表了大厂对校招大数据开发工程师的通用要求,把里面的知识点吃透,比盲目刷十套题都管用。
这篇文章我会按自己的记忆把整场笔试拆开复盘,包括题型分布、每个模块的高频考点、编程题的破题思路,以及我当时踩过的坑和总结出来的答题节奏。内容不涉及具体原题答案,只谈考察逻辑和准备方法,希望能给正在刷笔试的你一些参考。
1. 笔试全景:题型、题量与考察方向
1.1 题型构成与时间压力
网易的笔试系统一般是牛客网,整场考试120分钟,题量不算小。我那场的题型是:单选题、不定项选择、简答题、编程题,四类混在一起,可以自由切换题目顺序。这种设置有一个隐藏陷阱:如果你按顺序从第一题慢慢做,后面的编程题很可能没时间。
题量大概在30道左右。其中选择占大头,简答两三道,编程题两到三道,具体题数每年会有微调,但整体结构很稳定。这里提醒一句:不定项选择题是扣分重灾区,网易的多选一般“少选得部分分、错选不得分”,所以拿不准的选项宁可少选,也不要冒险。
整场笔试的时间压力主要来自选择题。很多选择题不是一眼能看出答案的,比如给你一段Java并发代码问输出结果,或者给你一个Spark的DAG问你哪些Stage可以并行,这种题必须现场推演,每道都要花两三分钟。如果前面拖太久,编程题就会很紧张。
1.2 考察方向与分值分布
从我复盘的情况看,这套卷子的考点分布大致如下:
| 考察方向 | 大致占比 | 典型题型 |
|---|---|---|
| Java基础与JVM | 25% | 选择题、简答题 |
| 数据结构与算法 | 20% | 编程题 |
| 大数据组件原理 | 25% | 选择题、简答题 |
| 操作系统与网络 | 15% | 选择题 |
| 数据库与SQL | 10% | 选择题、编程题(偶尔) |
| 智力/逻辑题 | 5% | 选择题 |
这个分布基本代表了大数据开发岗位的通用标准:Java是基本功底,算法是敲门砖,大数据组件是岗位核心。按照这个比例去准备,不会出大问题。
有一个容易被忽略的点:网易的笔试会把“大数据组件”放到选择题里考,而不是单独出文档题。这意味着你不仅要会用组件,还要能说清楚组件底层的机制,比如HDFS写文件时数据流向、Kafka副本同步的细节。只看八股文不够,得真正理解原理。
1.3 整体难度感受
说实话,这套卷子比我预想的要“温和”。它没有那种故意刁难人的脑筋急转弯,也没有超纲的冷门知识点,所有题目都在常规复习范围内。但温和不等于简单,它的难点在于“广”和“细”。广是指涵盖多个技术栈,细是指每个知识点都考到实现细节而不是概念背诵。
我当时的感觉是:选择题做得还算顺手,但简答题需要组织语言,编程题第一道很常规,第二道开始有区分度。总体而言,这套卷子能筛掉两类人:一类是只背概念没深入理解的,一类是算法功底不过关的。
2. 大数据组件考点:Hadoop、Spark、Kafka、Hive一个都没少
2.1 HDFS:写流程和副本策略是必考
HDFS的考点非常集中,这次的选择题里出现了“客户端往HDFS写一个文件,完整的数据流路径”和“副本放置策略”两道题。第一道是经典中的经典:客户端先向NameNode发起请求,NameNode检查权限和配额后返回可用的DataNode列表,然后客户端分块写入,写完一个块后由DataNode之间做管道式复制,最后所有副本确认后向NameNode汇报。
这个流程看似简单,但有几处细节很容易记混:一是客户端写入时先写本地临时文件还是直接发DataNode,答案是先写本地缓冲区再分组发送;二是DataNode之间的复制是“流水线复制”,即第一个DataNode收到后边存边传给下一个,不是等全部接收完再复制;三是最后一个副本确认完成后,客户端才关闭输出流。选择题会把这几步打乱让你排序,只要理解数据流而不是背步骤,就不容易错。
副本放置策略也是高频点:第一个副本放客户端所在节点,第二个副本放在不同机架的节点,第三个副本放在第二个副本同一机架的另一个节点,整体是机架感知策略。这里我建议顺手记一下为什么是这样:写时追求效率,读时追求可靠性和容错,机架间副本保证数据安全,机架内副本减少跨机架读写的网络开销。
2.2 MapReduce与Spark:对比类是出题人最爱
这道选择题让我印象很深:给出几个关于Stage划分的描述,问哪些是正确的。本质考的是Spark宽窄依赖。Shuffle类算子产生宽依赖,划分Stage时遇到宽依赖就要切一刀;窄依赖的多个分区可以放到同一个Task里做流水线计算。对比MapReduce的Map和Reduce两个阶段,Spark的Stage就是“被Shuffle切开的算子集合”,这一点理解透了,相关题目都能拿下。
另外一个高频对比点是shuffle机制。MapReduce的shuffle要经历分区、排序、溢写、合并、拉取、归并排序这一大套流程,而Spark的shuffle机制在1.6版本前后有较大变化,现在主流是Sort-Based Shuffle。选择题常考“MapReduce中Map端输出先做分区再做排序还是先排序再分区”,答案是先分区再排序,每个分区内部有序。排序是默认行为,不是为了业务排序,而是为了后续归并和Reduce端拉取时的效率。
关于Spark我还想多说一句:RDD的持久化级别、checkpoint和容错机制也是选择题常客。要注意cache和checkpoint的区别,cache只是缓存不改变血缘关系,checkpoint会砍掉血缘并把数据放到可靠存储里。血缘机制是Spark容错的核心,这个考到的概率极高。
2.3 Kafka:ISR机制需要理解到副本层面
这次卷子里有一道Kafka的多选题,考的是ISR(In-Sync Replica)机制和消息可靠性。Kafka的副本同步是“Leader主导、Follower拉取”的模式,Follower定期向Leader拉取数据并更新自己的LEO(Log End Offset),所有落后于Leader不大多的副本组成ISR集合。Producer可以选择acks=0、1、all三种级别,分别对应不等待确认、Leader确认、全部ISR确认。
这里容易混淆的是HW和LEO的概念。高水位HW是ISR中所有副本都同步到的位置,消费者只能看到HW之前的数据,LEO是每个副本的日志末端位置。当Follower故障恢复后,会先从自己的LEO截断到HW再重新同步,这是保证副本一致性的关键机制。选择题喜欢把这些概念放在一起考,比如“某个副本挂了之后HW怎么变化”“Leader挂掉后新Leader怎么选举”。
关于选举也要注意:Leader选举不是看谁数据多,而是从ISR中选择,如果ISR为空,会开启“ unclean领导者选举”。生产环境一般禁掉这个选项,因为可能丢数据。这种和生产实践结合的选项,往往是区分度最高的。
2.4 Hive与数仓:SQL别只会写不会优化
Hive相关的内容在这套卷子里主要考了两类:一类是SQL本身,一类是Hive执行过程的原理。SQL题目会给一个场景,比如“统计每个用户最近一次下单的商品”,这就是典型的窗口函数Row_Number() Over(Partition By user_id Order By order_time Desc),还有分组TopN问题。Hive选择题也会考HQL与普通SQL的差异,比如Hive不支持事务的默认配置、分区表和分桶表的区别。
我个人建议把窗口函数练熟,尤其是Row_Number、Rank、Dense_Rank的差异,以及Sum Over做累计值、Lag/Lead做前后行对比。数仓岗笔试爱考这些,大数据开发岗也会带一两道。
另一个值得关注的点是Hive执行原理:一条HQL怎么被解析成MapReduce任务,什么是Map端聚合(Map Join)、什么是Reduce端聚合。题目可能会问“数据倾斜怎么解决”,选项里出现“加随机前缀做二次聚合”“小表Broadcast Join”“调整分区键”等,这些都是生产环境真实遇到的问题,备考时别只刷概念题,结合实践去理解。
2.5 Flink、Zookeeper、HBase:冷门但不能不看
大数据组件不止Hadoop三件套。这套卷子里还出现了Flink的Checkpoint机制、Zookeeper的选举流程、HBase的Region分裂这几个考点,占比不大但足以拉开差距。
Flink相关的题目主要围绕精确一次语义(Exactly Once)和状态一致性。它通过Chandy-Lamport分布式快照算法实现Checkpoint,配合Barrier机制保证状态一致性。这个算法名字听起来唬人,核心思想就是在数据流里周期性插入Barrier,每个算子收到Barrier后对自己的状态做快照,所有快照完成就生成一个Checkpoint。我当时复习时把这个流程画了一遍图,答选择题就轻松很多。
Zookeeper在大数据生态里的角色是“分布式协调服务”,选择题会考ZAB协议和选举机制。大数据开发岗不需要深究Paxos算法细节,但要知道ZK在Kafka、HDFS HA里分别解决什么问题:Kafka用它做Broker元数据管理和Controller选举,HDFS用它的临时节点做NameNode主备切换。
HBase考的是存储模型:Region怎么分裂、RowKey怎么设计、MemStore什么时候刷写。其中RowKey设计原则比较常考:长度尽量短、散列分布、避免热点。这类题目即使没实际用过HBase,把官方架构图吃透也能应付。
3. Java与JVM:选择题的重灾区
3.1 集合框架:HashMap是永远的神
Java集合在选择题里的出场率极高,尤其是HashMap。这套卷子有一道题直接问“JDK1.8的HashMap在什么情况下由链表转为红黑树”,答案是链表长度达到8且数组长度大于等于64,两个条件缺一不可。这个细节很多人只记一半,考试时就容易翻车。
还有一道问ConcurrentHashMap在JDK1.8中如何保证线程安全,答案是CAS加上Synchronized锁住数组的每个桶节点,锁粒度比JDK1.7的Segment更细。这里有一个容易混淆的对比:HashTable是锁整个表,ConcurrentHashMap是锁桶,所以并发度更高。结合生产环境里的缓存设计来理解会更透彻。
集合相关题目还会考ArrayList和LinkedList的底层结构差异、HashMap的扩容机制和负载因子、TreeMap的红黑树性质。我的备考建议是:集合框架不要只看理论,自己把源码翻一遍,重点看put、get、resize这几个关键方法,因为选择题特别喜欢考源码级别的细节。
3.2 JVM:内存布局和GC算法要成体系
JVM的题目集中在内存区域和垃圾回收。选择题考了“哪些区域是线程共享的”——堆和方法区共享,虚拟机栈、本地方法栈、程序计数器是线程私有的。还有一道题问“哪些对象可以作为GC Roots”,答案包括虚拟机栈中引用的对象、静态属性引用的对象、常量引用的对象、JNI引用的对象。这些都属于JVM基础八股,复习到位就能拿分。
垃圾回收相关的考题是选择题里比较难的。它会给你几种垃圾收集器的名称,问哪些是“分代收集”的、哪些适合大内存场景。这里的核心考点是CMS和G1的对比:CMS标记清除会产生碎片,G1是Region化布局可以避免全堆扫描。如果复习时间紧张,至少要分清Serial、Parallel、CMS、G1这四种收集器的适用场景。
我的经验是,JVM题目光背结论不够,得能说出“为什么”。比如G1为什么适合大内存?因为它把堆分成多个Region,可以局部回收,不需要暂停整个堆。理解了设计思路,即使遇到没见过的选项也能推理。
3.3 并发与多线程:直接上代码题
网易喜欢在选择题里直接放一段多线程代码,问你输出结果或者是否存在线程安全问题。这类题考的是对Synchronized、Volatile、ThreadLocal的理解深度。
Volatile是高频考点。它保证了可见性和禁止指令重排,但不保证原子性。选择题会举例:多线程对volatile变量做i++操作,最终结果是否确定?答案是不确定,因为i++不是原子操作。还有一道经典的DCL单例为什么要用volatile,答案是防止指令重排导致拿到未初始化完成的对象。
ThreadLocal的话,要清楚每个线程维护自己的变量副本,底层是ThreadLocalMap,键是ThreadLocal对象,值是变量副本。常考的一个坑是ThreadLocal的内存泄漏问题——Entry的key是弱引用,value是强引用,如果ThreadLocal对象被回收但线程没销毁,value就无法被回收。所以用完后要记得remove。这种细节在生产里容易踩,笔试里也爱考。
3.4 Java基础备考建议
对于Java基础部分,我给准备校招的同学一个比较实用的建议:先把《Java编程思想》里关于集合、异常、泛型的基础过一遍,然后直接上《深入理解Java虚拟机》的重点章节,最后用LeetCode的并发题练习题感。这套组合适合时间不充裕但又想拿高分的场景。
我当时的时间分配是这样的:集合框架三天、JVM四天、并发三天,总共十天左右。每天不贪多,但每个知识点都推导一遍,比如HashMap的put流程一定要自己能画出来,画不出来的地方就是没搞懂的地方。
4. 数据结构与算法:三道编程题的破题思路
4.1 第一题:TopK频率统计
编程题第一道通常不会太难,你这套卷子的第一题是“给定一个字符串,统计出现次数最多的前K个字符,按频率降序、同频按字典序升序输出”。这道题本质是TopK问题,解题思路很标准:先遍历字符串用HashMap统计频率,再用大小为K的最小堆维护前K个高频字符,最后在堆内按规则排序输出。
这里的关键点有两个:一是TopK选最小堆而不是排序,时间复杂度能降到O(n log k);二是输出排序规则,需要自定义比较器,同频时按字符字典序升序。如果对Java的PriorityQueue不熟悉,很容易在比较器上输错。我用Java写了一个参考版本:
import java.util.*; public class TopKFrequentChars { public static void main(String[] args) { Scanner in = new Scanner(System.in); String s = in.nextLine(); int k = in.nextInt(); Map<Character, Integer> freq = new HashMap<>(); for (char c : s.toCharArray()) { freq.put(c, freq.getOrDefault(c, 0) + 1); } PriorityQueue<Character> minHeap = new PriorityQueue<>((a, b) -> { int cmp = freq.get(a) - freq.get(b); if (cmp != 0) return cmp; return b - a; }); for (char c : freq.keySet()) { minHeap.offer(c); if (minHeap.size() > k) { minHeap.poll(); } } List<Character> list = new ArrayList<>(minHeap); list.sort((a, b) -> { int cmp = freq.get(b) - freq.get(a); if (cmp != 0) return cmp; return a - b; }); for (char c : list) { System.out.println(c + " " + freq.get(c)); } } }注意在构建最小堆时,同频次时要把字典序大的放在堆顶,这样pop时优先排除字典序大的,保留字典序小的。最后输出前再按题目规则倒序排一次。
4.2 第二题:倒排索引构建
第二题开始有区分度了。考题是“给定若干行文本,构建倒排索引,输出每个单词对应的行号列表,按单词字典序输出”。这个题目很有大数据特色,本质上就是搜索引擎的倒排索引,和MapReduce里的WordCount进阶版思路一致。
解法也不复杂:逐行读取文本,按单词切分,用Map记录单词到有序行号集合的映射。因为要求输出时行号有序,我用了TreeSet来存储。代码写起来并不难,难点在于输入处理:牛客的ACM模式需要自己处理多行输入,如果不懂如何判断输入结束,这道题基本就废了。
我当时写的大致逻辑如下:
import java.util.*; public class InvertedIndex { public static void main(String[] args) { Scanner in = new Scanner(System.in); Map<String, TreeSet<Integer>> index = new HashMap<>(); int lineNo = 1; while (in.hasNextLine()) { String line = in.nextLine(); String[] words = line.split("[^a-zA-Z0-9]+"); for (String w : words) { if (w.isEmpty()) continue; String word = w.toLowerCase(); index.computeIfAbsent(word, k -> new TreeSet<>()).add(lineNo); } lineNo++; } List<String> keys = new ArrayList<>(index.keySet()); Collections.sort(keys); for (String key : keys) { StringBuilder sb = new StringBuilder(key + ":"); for (int no : index.get(key)) { sb.append(" ").append(no); } System.out.println(sb.toString()); } } }这道题考察的是对Map、Set等数据结构的灵活运用,以及处理流式输入的能力。在大数据开发的实际工作中,倒排索引是非常基础且常见的概念,出这道题很符合岗位定位。如果你在刷题阶段多练几道类似的设计题,现场会淡定很多。
4.3 第三题:动态规划压轴
如果这场笔试有三道编程题,第三道大概率是动态规划。我印象里那次考的是“跳台阶变种”,类似LeetCode的Climbing Stairs加了一些限制条件,比如某些位置不能踩、每次可以跳1到2步。这道题比前两道明显难一档,主要是状态转移要额外处理限制条件。
解题思路一眼就能看出来:定义dp[i]为跳到第i个台阶的方法数,dp[i] = dp[i-1] + dp[i-2],但遇到不能踩的位置dp[i] = 0。初始化时dp[0] = 1,然后从1到n遍历。注意取模问题,很多DP题的结果要模1000000007,因为不取模会溢出。
写DP题时我有个习惯:先在纸上把转移方程写清楚,再写代码。很多同学一上来就敲代码,敲到一半发现状态定义错了只能推翻重写,非常浪费时间。DP题每一步都要稳,尤其是边界条件的初始化,一旦出错,样例都过不了。
4.4 ACM模式是校招笔试的分水岭
这里单独说一句:网易笔试的编程题是ACM模式,不给你填函数,需要自己写Main类、自己处理输入输出。很多在学校里用惯了LeetCode核心代码模式的同学,第一次接触ACM模式会非常不适应,连怎么读取一行整数、怎么读取多行字符串都要想半天。
建议大家在笔试前务必做几道牛客网上的ACM模式练习题,把Scanner的各种用法彻底搞明白。基础的就是nextInt()、nextLine()、hasNext()、hasNextLine()的区别,进阶的是如何读入不定长输入、如何拼接输出结果。这个能力不提前练,考场上是现学来不及的。
5. 操作系统、网络与数据库基础
5.1 操作系统:进程线程、死锁、内存管理
操作系统的选择题往往是“送分题”和“送命题”并存。基础考点包括进程和线程的区别、死锁产生的四个必要条件、进程调度算法、页面置换算法。这套卷子里出现了一道“哪些情况会导致死锁”的多选题,四个条件缺一不可,选项会把条件变形,比如“资源互斥”写成“资源可共享”,一眼就能排除。
更让人头疼的是内存管理相关的计算题,比如“某系统采用分页存储管理,页面大小为4KB,逻辑地址结构是多少位”,这种题只要记住页号位数加页内偏移位数等于逻辑地址位数,套公式就行。还有银行家算法判断系统是否安全,这类题需要实际推演一遍,做题速度会慢一些。备考时建议刷一遍经典题库里的OS选择题,常见考法都是反复出现的。
5.2 计算机网络:TCP与HTTP是重点
网络题占比不算高,但几乎集中考TCP和HTTP。TCP的部分包括三次握手和四次挥手、TIME_WAIT状态的作用、流量控制与拥塞控制的区别。选择题喜欢问“TIME_WAIT出现在哪一端”“为什么需要TIME_WAIT”,答案是为了保证最后一个ACK能到达对端以及让旧连接的数据包在网络中消失。
HTTP的话,状态码是必考的,尤其要记清楚301和302的区别,一个是永久重定向、一个是临时重定向。这道题网易考过,其他大厂也考过,基本属于网络里的高频题。另外HTTP和HTTPS的差异、HTTP/2多路复用的特性也要了解,大数据岗位虽然用网络不多,但这些基础逃不掉。
我的经验是,网络部分不用花太多时间,把TCP三次握手四次挥手的完整过程自己画一遍、常见状态码记一遍、HTTP版本演进梳理一遍,基本就能覆盖选择题。
5.3 数据库:索引、事务隔离级别、SQL
数据库相关的选择题和SQL题目值得认真准备。索引这块,聚簇索引与非聚簇索引的区别、联合索引的最左前缀原则、索引失效的场景,基本是年年必考。特别是最左前缀原则,选择题经常给一个联合索引和几个查询条件,问哪些查询用得上索引,这种题只要理解B+树的数据组织方式就能推断出来。
事务隔离级别这块,四种隔离级别对应解决什么问题要背熟:读未提交、读已提交、可重复读、串行化,分别对应脏读、不可重复读、幻读的解决程度。MySQL默认是可重复读,这一点也要记住。
SQL题目在笔试里一般不会太难,但会给一个多表关联的场景,让你写查询或者判断某条SQL的执行结果。常见考点是Join的区别(Inner Join、Left Join、Right Join)、Group By与Having的配合、窗口函数的使用。我当时的教训是:平时练习多用真实数据跑一遍SQL,不要只靠语法记忆,因为现场写SQL没有任何调试机会,写错一个关键字就是零分。
6. 时间分配与答题策略
6.1 我的时间分配方案
网易这套卷子120分钟,我当时的时间分配大致是:选择题40分钟,简答题30分钟,编程题50分钟。最后留出10分钟检查。这个分配比较适合我的节奏,你可以根据自己的强弱项微调。
关键是选择题不能恋战。如果一道选择题2分钟内没有思路,先标记跳过,最后有时间再回来。我之前见过不少同学在一道多选上纠结了十几分钟,导致后面编程题完全没时间,这是最亏的。选择题再难也就一两分,编程题一道题可能就是二十分,优先级一定要分清。
简答题我建议控制在每题10分钟以内。这类题不用写论文,把核心流程写清楚、关键字写准确就行,比如“HDFS写入流程”写清五大步骤,每步一句话,比写一大段没人看的废话更得分。
6.2 做题顺序:先编程还是先选择
很多人纠结做题顺序,我的建议是:先把编程题扫一遍,再做选择题。不用急着写,先花两分钟把每道编程题的题意和难度评估出来,做到心里有数。如果发现有一道简单到可以直接秒杀的题,马上做掉,确保拿到保底分。
然后再回到选择题按顺序做。这样做的逻辑是:编程题的分值高,先把它们“看进眼里”,大脑会在潜意识里处理思路;而且做完一道编程题后的成就感能帮你稳住心态,后面做选择题会更笃定。
当然,如果你算法功底一般,也可以先做选择热身,但一定要给自己定一个硬性时间点,比如开考后45分钟内必须开始编程题。不能因为选择题做得顺就一直做,要给自己留下缓冲。
6.3 简答题的得分技巧
简答题看起来主观,实际上是有得分点的。阅卷时基本是按点给分,关键词出现就给分。所以答题时要用序号分条列出关键步骤,不要写成一段话。
比如考“Spark任务提交流程”,你就写:1. 客户端提交任务到集群。2. Driver启动并构建SparkContext。3. DAGScheduler根据依赖划分Stage。4. TaskScheduler分发Task到Executor。5. Executor执行Task并返回结果。每一条都点到核心名词,这就是全分。我见过很多同学写了一长段但始终没提“DAGScheduler”“TaskScheduler”这两个关键词,结果分很低,很可惜。
7. 避坑指南与备赛路线
7.1 我在这次笔试中踩过的坑
这次笔试我踩了三个坑,写出来给各位提个醒。
第一个坑是Java读入字符串时容易混用next()和nextLine()。next()遇到空格就停了,如果你用next()读一整行字符串,只能拿到第一个空格前的内容。我当时做第一道TopK题时,如果题目给的字符串里有空格,在这种读法下就会直接漏数据。建议读字符串统一用nextLine(),除非明确知道输入里没有空格。
第二个坑是不定项选择题的“少选得部分分”规则。我总是习惯把拿不准的选项也选上,结果多选扣了不少分。网易的多选是错选不得分,拿不准的宁可少选也不要多选,每一分都很珍贵。
第三个坑是时间管理。我在一道HBase的RowKey设计题上纠结太久,导致后面写简答题时很赶。后来复盘才发现那道题就两分,真不该花那么多时间。选择题里如果遇到完全没有思路的,果断跳过,不要影响整场节奏。
7.2 大数据开发方向的备考路线
如果你现在还在准备阶段,我给一条亲测有效的复习路线,按优先度排序:
第一步,Java基础。重点是集合、并发、JVM,这是选择题的基本盘,花两周时间把《深入理解Java虚拟机》重点章节看完并做笔记。
第二步,大数据组件。按Hadoop、Hive、Spark、Kafka、Flink的顺序学习,重点理解设计原理和核心流程,不用会搭集群,但要能讲清楚每个组件解决什么问题、核心机制是什么。
第三步,SQL和数据库。窗口函数、Join、事务隔离级别、索引原理,这些是性价比最高的内容,投入产出比很高。
第四步,算法刷题。按照“高频Top100”的方式刷,重点练字符串、数组、哈希表、DP、树这几类,编程题的覆盖率很高。
总体时间安排建议1到2个月。如果时间紧,优先保Java和大数据组件,其次保算法,最后才是网络和操作系统。操作系统和网络虽然也在考纲里,但占比小,冲刺阶段刷一遍题集就够了。
7.3 考后复盘比考中更重要
笔试结束后,我做的第一件事是尽量回忆题目,把能记住的考点全部写下来,然后对照查漏补缺。这一步很多人忽略,但我觉得是笔试价值最大的部分。因为校招笔试的考点高度重复,这次考到的知识点在下一次笔试里大概率还会出现。
我这次复盘发现的薄弱环节是Kafka的HW和LEO机制,后来用两天时间专门啃了一遍,在后续其他厂的笔试里就真的遇到了类似的题目。所以说,不要考完就把卷子丢到一边,花一两个小时复盘,比多刷十道题还管用。
根据我个人的体会,网易这套大数据开发工程师的笔试其实是一个很好的“岗位能力体检表”。它考的东西没有一项是多余的,Java是开发底座、算法是解题工具、大数据组件是业务核心、操作系统和网络是基础素养,这些组合起来就是一个合格大数据开发工程师的日常技能树。认真做完这套题,无论最终有没有拿到offer,你对这个岗位需要什么能力都会有一个很清晰的认识。
最后再分享一个小技巧:笔试前一个晚上不要去刷难题,把常见的数据结构、组件原理、SQL语法在脑子里过一遍,早点休息。校招是一场持久战,笔试只是其中一环,保持稳定的作息和心态,比临阵磨枪更重要。祝各位都能拿到心仪的offer。