尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

网易2020大数据开发提前批笔试复盘:考点与备考策略

网易2020大数据开发提前批笔试复盘:考点与备考策略 先说明一下这篇是基于网易2020校招提前批大数据开发工程师岗位的笔试复盘。我当年是参加了这场笔试的后来也帮学弟学妹梳理过很多次考点对这套题的风格和考察逻辑比较熟。2020年那场试卷整体难度在互联网大厂校招笔试里属于中等偏上没有什么偏题怪题胜在覆盖面广、考察细致很容易暴露知识盲区。这篇内容会比较长主要围绕这套题背后的考点逻辑来展开不一定逐题复现但会把题型结构、核心知识点、答题思路和备考策略都拆开讲清楚希望对你准备同类岗位的笔试有实际帮助。1. 这场笔试的底细提前批不是简单版正式批网易提前批笔试和正式批笔试在岗位匹配上基本一致但有一个关键区别提前批的笔试成绩直接关联面试优先级考得好的人会被优先安排面试甚至在正式批开始前就拿到意向书。所以提前批的笔试不是试试水它本质上是一轮前置筛选成绩决定了你的简历被推进到哪个面试官手里。1.1 试卷结构与时间压力2020年这场大数据开发工程师提前批笔试总时长120分钟题目类型大致如下题型题量分值占比考察方向单选题15题左右30%Java基础、网络、操作系统、大数据组件概念多选题10题左右25%大数据组件细节、分布式原理、判断题辨析编程题2题30%算法与数据结构、海量数据处理简答/设计题1题15%系统设计、数据链路设计时间分配上前面30道选择很容易花掉50分钟编程题两道又得留出40分钟留给最后那道设计题的时间其实很紧张。我当时就是选择题在多选的几道题上纠结太久差点没时间写设计题这个后面细说。1.2 大数据岗位笔试的质量线在哪里热搜词里有句话讲得很到位对于大数据而言最基本、最重要的要求就是减少错误、保证质量。这句话放在笔试里同样成立。网易这场笔试的题目设计明显不是想难倒你而是想看你在全链路视角下能不能做到不犯错——从数据采集、存储、计算到调度每个环节都有对应的题每道题都在验证你对某个环节的理解是否准确。所以准备这场笔试不能只刷算法题也不能只背组件八股文而是要建立一条完整的知识链路数据从哪来采集、放哪存储、怎么算计算引擎、怎么调度调度系统、怎么保证一致性事务与容错。理解了这条链路选择题里很多看似零散的考点就能串起来。1.3 这场笔试真正筛选的能力通过复盘我认为网易这场笔试主要考察三种能力第一种是基础知识的准确性。Java集合、并发、JVM、操作系统、网络这些基础不要求你有多深的源码功底但要求你用词准确、概念清晰。比如考的HashMap在JDK 1.8里链表转红黑树的阈值是8很多人会记成6这种细节就是区分度。第二种是大数据组件原理的理解深度。不是让你背HDFS是分布式文件系统这种定义而是让你理解写流程中副本放置策略的原理、MapReduce Shuffle为什么要排序、Spark宽窄依赖怎么划分Stage。这类题占了多选和简答的大头也是最有区分度的部分。第三种是工程设计与场景分析能力。设计题通常给你一个业务场景让你设计数据链路或排查问题。这类题没有标准答案但阅卷人有明确偏好完整度、合理性和边界意识。2. Java语言基础不是八股是写大数据代码的地基网易大数据开发岗笔试对Java的考察比重相当高这和大数据生态的实际情况直接相关。Hadoop、Spark、Flink这些主流框架都是JVM系语言写的生产环境里写UDF、调优、排查问题都离不开Java功底。2.1 集合框架的考察套路选择题里最常见的集合考点是ArrayList和HashMap。ArrayList考扩容机制默认容量10扩容时新容量是旧容量的1.5倍也就是oldCapacity (oldCapacity 1)。这个计算方式在JDK 1.8里是int newCapacity oldCapacity (oldCapacity 1)注意是右移一位而不是除以2的常规写法考的是你对源码细节的熟悉度。HashMap的考点更多而且每年必考。核心包括默认初始容量16负载因子0.75扩容阈值是容量乘负载因子哈希策略(n - 1) hash而不是hash % n因为位运算更快且前提是容量必须是2的幂链表转红黑树的条件链表长度超过8且数组长度大于等于64两个条件缺一不可红黑树退化为链表的条件节点数小于等于6很多人在为什么转红黑树的阈值是8这个问题上答不好。源码注释里提到泊松分布下负载因子0.75时桶内链表长度达到8的概率已经极低约千万分之六设置8是为了在时间和空间上取平衡。这类源码级的细节正是笔试单选题里容易出也容易错的地方。2.2 并发与线程池必考但容易踩坑并发这部分网易喜欢考线程池参数和并发工具类。ThreadPoolExecutor的七个参数必须背熟而且理解到位核心线程数、最大线程数、空闲存活时间、时间单位、阻塞队列、线程工厂、拒绝策略。关键考点是任务提交后的执行顺序当前线程数小于核心线程数时新建线程执行任务当前线程数大于等于核心线程数时任务进入阻塞队列队列满且线程数小于最大线程数时新建非核心线程执行任务队列满且线程数达到最大线程数时触发拒绝策略这里有个常见的混淆点很多人以为核心线程数满了就创建新线程到最大线程数实际上中间还隔着一层阻塞队列。生产环境里有个调优口诀CPU密集任务核心线程数设为CPU核数 1IO密集任务设为2 * CPU核数虽然笔试不一定会考这么细但理解这个逻辑有助于做对线程池相关的场景题。ConcurrentHashMap也是高频考点重点在于JDK 1.8之后它放弃了分段锁改用CAS synchronized锁桶头节点。put流程大致是计算hash定位桶桶为空则用CAS插入桶不为空则锁住桶头节点再插入扩容时支持多线程协助迁移。这个设计演进过程反映了从锁粒度粗到锁粒度细的思路笔试喜欢考JDK 1.7和1.8的区别这种对比题。2.3 JVM考点GC与内存区域JVM在一场大数据岗笔试里的地位有点像足球场上的中场——不是最出彩的但必不可少。网易考JVM主要围绕两个方向内存区域划分和GC机制。内存区域题通常是给一段代码判断对象分配在哪个区域或者判断哪个区域会抛出OutOfMemoryError。必须清楚堆存放对象实例、栈存放局部变量与栈帧、方法区存放类元信息与常量、本地方法栈服务native方法、程序计数器记录字节码执行位置。GC题则喜欢考可达性分析、GC Roots有哪些、Minor GC和Full GC的触发条件、常见垃圾收集器的适用场景。这里我想提醒一个容易忽略的点G1收集器在JDK 9之后成为默认垃圾收集器它的核心设计是Region化内存布局 可预测停顿时间它把堆分成一个个Region通过维护优先列表来回收价值最大的Region。这个价值最大化的思路和很多大数据调度算法的思想是共通的理解它对后面理解YARN的调度策略也有帮助。2.4 语言基础题的复习建议说实话Java基础部分我见过太多人花大量时间刷源码解析视频结果笔试依然错在细节上。我的建议是不要追求源码逐行读而是抓住面试官最爱问的20个知识点逐个击破比如HashMap的put流程、ConcurrentHashMap的线程安全实现、线程池的执行流程、四大拒绝策略的区别、类加载的双亲委派模型等。每个知识点用概念 场景 易错点三要素来准备比泛泛看源码效率高得多。3. 大数据组件原理题拉开分差的主战场如果说Java基础决定了你的笔试能不能及格那大数据组件的原理题就决定了你能不能进面试。网易2020这场笔试的大数据部分不夸张地说占了半壁江山单选、多选、简答都有涉及。以下按组件逐个拆解高频考点。3.1 HDFS读写流程与副本策略HDFS相关题目基本围绕读写流程和副本放置策略展开。NameNode负责元数据管理DataNode负责数据存储这个基础概念不用多说容易失分的是细节。HDFS写流程的完整链路是客户端调用DistributedFileSystem.create() → 联系NameNode检查权限并创建文件元数据 → 返回DFSOutputStream → 客户端将数据切分成packet默认64KB → 放入DataQueue → DataStreamer向第一个DataNode发送请求 → 建立Pipeline按副本数建立DataNode链路 → 数据包沿Pipeline传输同时每个DataNode保存后向下游转发 → 每个DataNode发送ACK响应沿Pipeline反向传回 → 所有ACK确认后从AckQueue移除 → 关闭输出流通知NameNode写入完成。笔试里常考的点是副本放置策略。默认副本数为3策略是第一个副本放在客户端所在节点如果客户端不在集群内则随机选一个节点第二个副本放在与第一个副本不同机架的节点第三个副本放在与第二个副本相同机架的不同节点。这个策略的目的很明确保证机架级容灾一个机架宕机还有别的机架有副本同时兼顾写入性能同机架传输快。还有一个高频选择题HDFS在小文件场景下为什么性能差答案是每个文件、目录、数据块在NameNode内存中对应一条元数据记录一条记录大约占150字节大量小文件会占用大量NameNode内存且MapReduce处理小文件时每个文件至少需要一个Map任务导致任务数爆炸。这个知识点也经常和后面的MapReduce结合考。3.2 MapReduceShuffle是永恒的考点MapReduce部分Shuffle阶段是绝对的核心考点。Shuffle发生在Map输出之后、Reduce输入之前包含完整的过程链Map端输出 → 分区Partitioner默认按key的hash值对Reduce数量取模 → 环形缓冲区默认100MB达到80%阈值触发溢写 → 溢写前按key排序 → 溢写文件合并Merge合并时做归并排序 → 可选Combiner在Map端做局部合并减少网络传输 → 拉取Reduce端从Map端拉取属于自己的分片数据 → 归并排序 → 分组 → Reduce函数处理。笔试经常考环形缓冲区溢写比例是0.8以及排序发生在溢写之前而不是之后。还有一个常考判断题Combiner和Reducer的区别。Combiner是Map端的局部聚合不能改变最终结果的数据类型和语义比如求平均值就不能用Combiner因为局部平均再平均不等于全局平均。这类细节是判断题的经典素材。3.3 Spark宽窄依赖、Stage划分、内存管理Spark在大数据岗笔试里的地位越来越高2020年网易的笔试题里Spark部分所占比例已经和Hadoop持平。高频考点包括RDD的宽窄依赖、Stage划分规则、Spark运行架构、持久化策略。宽窄依赖的判断标准父RDD的每个分区最多被子RDD的一个分区使用则是窄依赖父RDD的每个分区可能被子RDD的多个分区使用则是宽依赖。典型的窄依赖有map、filter、union典型的宽依赖有groupByKey、reduceByKey。笔试常考的是为什么宽依赖需要Shuffle因为宽依赖意味着父子RDD分区之间存在数据交叉必须在集群范围内重新分配数据这个过程中父RDD分区的数据需要被拉取到多个子RDD分区所在节点就产生了Shuffle。Stage划分规则必须记牢从触发Action的RDD开始向前回溯遇到宽依赖就划分一个新的Stage遇到窄依赖则归入当前Stage。换句话说窄依赖是Stage内部的管道宽依赖是Stage之间的边界。这个划分的目的是减少Shuffle次数把可以管道化执行的计算链放在同一个Stage里。Spark内存管理也常考。执行内存Execution Memory和存储内存Storage Memory的默认比例是0.3和0.5统一内存管理剩余0.2为保留内存两者之间可以互相借用但借用时如果对方需要可以强制回收。这个机制和笔试里的一个常见判断题相关Spark执行内存和存储内存有严格的边界互不干扰这个说法是错的。3.4 Hive、Kafka、Flume、Zookeeper这几个组件在选择题里出现频率也很高。Hive考的是SQL底层转换逻辑比如一条SELECT ... GROUP BY语句底层会转换成MapReduce任务GROUP BY对应Reduce阶段的聚合操作JOIN的三种实现方式MapJoin、Common Join、SMB Join之间的区别和适用场景。还有一个细节容易考Hive中分区分桶的区别分区对应目录partitioned by分桶对应文件clustered by分桶能做更细粒度的数据划分和采样。Kafka考的是消息投递语义、副本机制、消费者组。消息投递语义有三个级别At Most Once、At Least Once、Exactly Once笔试常考如何实现Exactly Once——需要生产者端开启幂等或事务消费者端结合幂等消费或事务消息。副本同步有一个常见概念ISRIn-Sync Replicas即与Leader保持同步的副本集合当Leader挂了之后从ISR中选举新的Leader。这个知识点经常以场景题出现某个Kafka分区Leader宕机系统如何恢复读写Flume考的是Source、Channel、Sink三类组件的职责以及Channel的两种主要类型Memory Channel和File Channel的区别。Memory Channel读写快但数据可能丢失File Channel慢但数据可靠。一句话总结就是Flume的Channel选型是速度与可靠性的权衡这正好呼应热搜词里提到的减少错误、保证质量。Zookeeper则喜欢考它的应用场景分布式锁、服务注册发现、集群元数据管理。经典题目是Zookeeper实现分布式锁的原理核心是临时顺序节点 watch监听机制。创建临时顺序节点判断自己是否是最小序号节点是则获得锁否则监听前一个节点。这个思路在HBase的Region分配、Kafka的Controller选举中也都有应用理解一次就能举一反三。3.5 高频考点速查表组件必考考点易错点HDFS写流程、副本放置策略、小文件问题副本3、机架级策略、150字节元数据MapReduceShuffle全流程、环形缓冲区、Combiner溢写比例0.8、排序时机Spark宽窄依赖、Stage划分、内存模型宽依赖产生Shuffle、Stage由宽依赖分割HiveSQL转MapReduce、分区vs分桶分区分桶概念混淆Kafka消息语义、ISR、消费者组Exactly Once的边界条件FlumeSource/Channel/Sink、Channel类型Memory vs File Channel取舍Zookeeper分布式锁、临时顺序节点监听前一个节点的机制4. 算法与数据结构的考察TopK、分治、海量数据处理网易大数据岗的编程题有一个显著特点它不考纯竞赛向的难题而是考工程中真实会用到的算法。2020年提前批的两道编程题都在海量数据处理的范畴内本质上是把面试中常问的TopK问题、数据去重问题以编码形式呈现。4.1 第一道编程题的典型解法TopK的堆实现给定一个包含海量整数的文件找出其中最大的100个数。最直接的思路是全排序然后取前100复杂度O(n log n)。但在海量数据场景下全排序会面临内存不足的问题更合适的方案是维护一个大小为100的最小堆遍历每个数如果数比堆顶大则替换堆顶并调整堆。这样时间复杂度是O(n log 100)近似O(n)空间复杂度O(100)。笔试要求写代码时我建议直接用Java的PriorityQueue实现代码简洁不容易出错public ListInteger topK(int[] nums, int k) { PriorityQueueInteger minHeap new PriorityQueue(k); for (int num : nums) { if (minHeap.size() k) { minHeap.offer(num); } else if (num minHeap.peek()) { minHeap.poll(); minHeap.offer(num); } } ListInteger result new ArrayList(minHeap); Collections.sort(result, Collections.reverseOrder()); return result; }注意一个细节PriorityQueue默认是小顶堆如果要求最大的K个数直接用默认实现即可。最后返回结果前如果要求降序排列需要再排一次否则输出顺序是堆内顺序不是降序。这个细节虽然不影响正确性但可能影响部分用例的比对方式。如果数据量更大、连单机都放不下那就需要分治把大文件拆成多个小文件每个文件分别用堆或排序找出局部TopK最后做多路归并。这个思路在后面系统设计题里也会用到属于大数据工程师的基本功。更极端的情况还有位图法Bitmap和布隆过滤器Bloom Filter但这道题用堆就已经够了。4.2 海量数据的TopK问题还有哪些变体TopK最常见的变体是求中位数或求第K大的数。海量数据求中位数的经典做法是分桶法先对数据做一次采样或直方图统计确定中位数所在的范围再在范围内精确计算。还有一个思路是两个堆——一个大顶堆存较小的一半一个小顶堆存较大的一半保持两个堆大小平衡堆顶就是中位数或接近中位数。这个思路在笔试里如果时间充裕可以作为一种优化解法写出来能体现你对数据结构的灵活运用。另一个高频变体是海量数据去重后统计给定一个文件包含几十亿个URL统计去重后还剩多少条。这个问题的标准答案是布隆过滤器Bloom Filter它的原理是用多个哈希函数把元素映射到一个位数组查询时判断所有哈希位置是否都为1。布隆过滤器可以有误判判断存在时可能误判判断不存在时一定准确但空间效率极高。笔试里如果只是问思路答出布隆过滤器 预计内存大小就足够如果要求代码实现那么实现一个基本的布隆过滤器并不复杂。4.3 刷题策略真题比题海重要很多同学准备笔试时一头扎进LeetCode刷了几百道题但到了大数据岗的笔试现场发现题型和自己练的不太一样——考题更偏向海量数据 分布式 复杂业务场景的组合。我建议刷题顺序是先掌握基础数据结构与算法的核心题数组、链表、栈、队列、二叉树、堆、哈希表、排序、二分查找、快慢指针再重点突破高频考题TopK、LRU缓存、手写单例、生产者消费者、多线程交替打印最后练海量数据专题位图、布隆过滤器、分治、外排序、哈希分片这样练下来笔试遇到编程题大概率能快速定位到它想考什么。提前批真题数量有限不用疯狂刷模拟题把每个考点吃透比题海战术有效。5. 简答与设计题链路设计是送分题还是送命题2020年笔试的最后一道简答/设计题我记得是关于埋点日志分析链路的。题目大概是某业务每天产生TB级别的埋点日志需要设计一套离线分析系统支持次日产出报表并考虑数据延迟、数据倾斜、任务失败恢复等问题。这道题没有标准答案但考察维度很清晰。5.1 离线链路设计的基本框架面对这类系统设计题最容易丢分的情况是只写用HDFS Hive 定时调度一句话就结束。阅卷人想看的是你的完整链路设计能力和对细节的把控。我的答题框架是四层数据采集层埋点日志通过Flume或Logstash采集到KafkaKafka作为数据缓冲层解决大量日志并发写入对HDFS造成压力的问题。这里要写到Kafka的Topic分区策略和副本数设置。数据存储层Kafka数据经过Flink或Spark Streaming做实时清洗后写入HDFS按天或按小时做分区存储格式上关注列式存储Parquet或ORC与压缩算法Snappy或Zstd。这一步要写清楚为什么选列式存储——OLAP场景下查询只需要读取相关列减少IO。数据计算层使用Hive或Spark SQL进行离线ETL和报表计算。调度上使用Azkaban或Apache DolphinScheduler编排任务依赖。这里要特别写清楚任务失败的处理机制失败自动重试、重试次数限制、失败告警、数据回填。数据服务层计算结果写入MySQL、ClickHouse或Kudu供报表系统查询。如果报表数据量大要考虑预聚合和结果表分层。这里要提到数据质量监控每天产出后对数据总量、关键指标波动做校验超过阈值则告警。5.2 数据倾斜与延迟设计题里必须回答的细节设计题最容易拉开分差的点是你在链路中主动识别了哪些风险并给出了方案。我就以数据倾斜为例。埋点日志中90%的流量可能集中在几个热门页面这会导致对应的Reduce任务处理时间远大于其他任务整体任务卡在长尾上这就是数据倾斜。数据倾斜的解决方案要写全过滤异常Key先把导致倾斜的Key单独拎出来统计其数据量确认是脏数据就过滤掉加盐Salting给倾斜Key加随机前缀让数据分散到多个Reduce任务再对结果做二次聚合调整并行度增大Reduce数量但要注意这只在数据量大但Key分布不均匀的情况下有效使用两阶段聚合Map端先做局部聚合Reduce端再做全局聚合减少Shuffle数据量另一个必须回答的点是数据延迟。日志数据的到达天然有延迟可能出现某天的数据在第二天凌晨才完全到达的情况。设计时要明确数据迟到如何处理是用事件时间窗口还是处理时间窗口如果任务跑完后又有迟到数据到达是触发数据回刷还是放弃。这些边界条件的处理比链路本身更能反映你的工程经验。5.3 实时链路一个通用的加分答案如果笔试时间充裕设计题还可以写一段实时链路的补充方案。埋点日志除了离线分析还需要实时监控核心指标比如实时用户数、实时订单量。这时候链路变成Flume采集 → Kafka → Flink做窗口聚合 → 结果写入Redis或ClickHouse → 前端大屏展示。Flink的核心概念在实时链路设计题里经常要用到事件时间、水位线Watermark如何解决乱序数据问题窗口类型的选择滚动窗口、滑动窗口、会话窗口状态后端的选择RocksDB还是堆内存各有什么利弊Checkpoint机制如何保证精确一次语义Exactly Once把离线链路和实时链路都答出来设计题基本可以拿到很高的分因为这说明你脑子里有一个完整的数据架构而不是只会背组件。5.4 写设计题的三个习惯第一先画出数据流向再动笔。在草稿纸上标清楚每个组件之间的数据流向和接口再落笔写正文保证逻辑不混乱。第二主动写出为什么比如选择Kafka作为缓冲层是因为它具备高吞吐、数据可回溯、可多消费者订阅的特点这种解释比单纯列组件名有说服力得多。第三预留一个如果数据量翻10倍怎么做的扩展段这说明你有水平扩展的思维是面试官非常看重的工程素养。6. 关于这套题的备考路线与注意事项最后想分享几个备考过程中的实际经验特别是针对如何在有限时间内最高效地准备这套题。6.1 三轮复习法我见过太多人备考校招笔试时第一轮就抱着源码开始啃结果一个HashMap的源码看了三天最后什么都记不住。我更推荐三轮复习法第一轮约2周提纲挈领建立知识地图。把Java核心、Hadoop、Spark、Hive、Kafka、Zookeeper每个组件的高频考点列成清单做一个思维导图或Excel表格做到看到题目立刻知道它考哪个知识点。第二轮约2周逐点击破按专题刷题。针对每个考点找3-5道真题或模拟题练习。遇到答错的题不要只看答案解析要回到原理层面重新理解。比如你答错了MapReduce的排序发生在哪个阶段不要只看答案是溢写前排序要重新理解整个Shuffle流程。第三轮约1周全真模拟卡时间做套题。严格按照120分钟完成一套题模拟真实考试的压力环境。特别要注意多选的时间控制三道多选如果都拿不准建议先凭第一直觉选完标记出来回头再检查不要卡在中间耗掉后面编程题的时间。6.2 多选和简答的保分策略多选是这套笔里最坑的一部分因为少选不得分多选也不得分只有完全选对才算对。这意味着你不仅要掌握正确选项为什么对还要掌握错误选项为什么错。一个实用的方法是给每个选项标注知识点关键词而不是仅仅选ABCD。比如选项是Spark的窄依赖包括map、filter、reduceByKey你要能立刻反应过来reduceByKey是宽依赖这个选项就是错的。这种标注能力需要平时的刻意练习。简答题则要遵循宁可多写不要少写的原则但多写不是堆废话而是多写有信息量的内容。比如问HDFS的副本放置策略除了写三个副本的放置规则还可以写这个策略兼顾了可靠性跨机架容灾与性能同机架传输快这句设计意图是采分点。6.3 最后一周的考前重点考前最后一周不建议再学新知识了重点是查漏补缺和保持手感。我会把之前整理的知识地图再过一遍把每个考点的核心概念易错点常见问法说给自己听像讲课一样能讲清楚说明真正掌握了。同时每天保持做1-2道编程题热身保持代码手感。还有个容易忽略的点是提前批笔试前一定要确认好考试平台和网络环境有些平台要求摄像头监控有些要求共享屏幕提前调试好设备比多背一个知识点更重要。我当年就有同学因为考试环境调试失败笔试开始半小时才进入系统直接影响了状态。6.4 笔试结束后的动作笔试结束后不要干等结果。第一时间把考场上没做出来的题复盘一遍尤其是那些好像知道但写不出来的知识点这正是面试前查漏补缺的最好线索。把每道题对应的知识点整理成一份笔试复盘文档在面试前重点回顾。我当时的经验是笔试中暴露的每一个薄弱点几乎都对应着面试官在后续面试中会追问的方向早点补上面试时就能从容应对。对于网易这种大厂的提前批笔试只是第一道关卡后面还有三轮左右的面试但笔试成绩直接决定了面试的优先级。如果你想投递的是大数据开发工程师岗建议把上面提到的知识链路整体过一遍不要心存侥幸毕竟每年都有大量候选人因为基础不扎实倒在笔试环节。扎实地把每个知识点过一遍到了面试阶段你会感谢现在的自己。
返回列表