2019年秋招那阵子,我投了不少大数据方向的岗位,顺丰科技的大数据挖掘与分析工程师就是其中之一。收到笔试链接的时候其实挺淡定,毕竟大数据、数据挖掘、数据分析这几个方向平时一直在准备,但真正点开试卷才发现,客观题的范围比想象中宽得多——从概率统计到机器学习算法,从SQL到Spark原理,再到业务分析思维,全塞在有限的时间里。今天把这份客观题合集的考察逻辑和知识点重新梳理一遍,既是对自己笔试过程的复盘,也能给后面准备同类岗位的朋友一些参考。
当时这套卷子给我的整体感觉是:不偏不怪,但覆盖面极广。它不像某些公司喜欢出偏题怪题来拉区分度,而是老老实实考察你作为大数据挖掘与分析工程师的基本功是否扎实。数学基础、经典算法、工程工具、业务思维,四条线交叉出题,哪一块有短板都会在分数上体现出来。
1. 顺丰科技这次笔试到底考了什么
1.1 岗位定位与笔试侧的考察逻辑
先说要考的岗位。大数据挖掘与分析工程师,在顺丰科技的职级体系里属于技术类中台岗位,日常工作大概率是围绕物流场景的海量数据做清洗、挖掘、建模和分析,支撑运营决策、路径优化、时效预测、客户画像等业务方向。这类岗位和纯算法研究员不一样,它更强调数据工程师和数据科学家的复合能力——你既要能写SQL把数取出来,又要能建模把数用起来,还要能理解业务把结果讲清楚。
笔试侧自然会沿着这个定位来做考察设计。客观题部分不会让你手写完整模型代码,而是通过选择题和判断题来测试你的知识广度、概念准确性和快速推导能力。这其实是很好的筛选方式——概念清晰不清晰,边界条件掌握不掌握,公式理解到位不到位,选几个选项就能看出来。
从当年的考点分布来看,数学与统计占了大概三成,机器学习与数据挖掘算法占了三成多,大数据工程和SQL占了近三成,剩下的就是少量数据分析思维和业务场景题。这个比例对准备方向很有指导意义:如果只刷机器学习模型而不重视概率论和SQL,大概率会翻车。
注意:这种客观题笔试并不仅仅是看最后得分,部分公司还会参考你的答题时长和正确率分布来评估熟练度。所以不只是要会做,还要做得快。
1.2 客观题的整体结构与时间分配
整套客观题我记得是50道左右,题型包括单选、多选和判断,答题时间一般在90分钟到120分钟之间。平均下来每道题只有两分钟左右,这对概念的熟练度要求很高。如果是需要现场推导的数学题,两分钟其实挺紧张,所以做题顺序很重要。
我的策略是先把判断和单选快速过一遍,遇到一时拿不准的题目先用排除法选一个,标记好回头再看;多选放在最后做,因为多选的得分规则通常是少选不得分或者少选得部分分,需要更谨慎地对待。
时间分配上,数学和统计题我控制在每道一分半以内,机器学习题控制在两分钟以内,SQL和数据工程题视复杂度而定,但不会在一道题上超过三分钟。整套卷子最好留出十到十五分钟来检查标记的题目,尤其是概率计算题,很容易出现小数点错位或者条件概率漏算的情况。
2. 数学与统计基础:最容易失分也最容易捡分
2.1 概率统计考察思路与典型题目复盘
概率统计是这类笔试的绝对重点,因为大数据挖掘的本质就是从数据中推断规律,而规律背后都是概率。顺丰科技的客观题里,条件概率、贝叶斯公式、期望、方差、常见分布,基本各出了一到两道,难度介于教材课后题和考研数学之间,不超纲但需要熟练。
我印象很深有一道题,大意是:一个分类器在正样本上的召回率是90%,在负样本上的误报率是10%,样本集中正负样本比例为1:9,问随机抽取一个样本,分类器预测为正类时,该样本真实为正类的概率是多少。
这道题考的就是贝叶斯公式。很多同学看到召回率和误报率就直接作答,忽略了先验概率。正确做法是设样本总量为100,正样本10个,负样本90个。预测为正的正样本有10乘以90%等于9个,预测为正的负样本有90乘以10%等于9个。所以在预测为正的18个样本里,真实为正的是9个,概率是50%。
这道题给我最大的启发是,在任何场景下,先验分布和分类器的性能指标必须一起看,单独拿一个指标说事都是耍流氓。这种思维放到实际业务场景中同样成立,比如物流场景中投诉识别模型,即使准确率看着很高,如果投诉本身是极小概率事件,模型预测为正的样本里真正是投诉的可能比例并不高。
还有一类高频题是期望与方差的性质。比如问E(aX+b)和D(aX+b)的表达式,考的是线性变换对期望和方差的影响。前者等于aE(X)+b,后者等于a方D(X)。这类题不难,但容易记混,复习时一定要把公式推一遍而不是死记硬背。
2.2 线性代数与最优化相关考点
线性代数在数据挖掘笔试里虽然占比不如概率统计,但一定会出现,而且通常和机器学习模型结合着考。比如矩阵乘法在神经网络前向传播中的作用、特征值与特征向量在主成分分析中的含义、矩阵的秩与数据有效维度之间的关系。
顺丰科技的卷子里有一道题我记得比较清楚,给出几个关于PCA的描述,让选出正确的。其中有一个选项说“PCA是对协方差矩阵做特征值分解,取最大的k个特征值对应的特征向量作为投影方向”,这个是对的。还有个选项说“PCA是一种有监督的降维方法”,这个显然是错的。这类题考察的不是计算能力,而是对常见算法原理的理解是否准确。
最优化相关的题目主要集中在损失函数的凸性和梯度下降上。比如问逻辑回归的损失函数是否凸函数、学习率设置过大会导致什么后果等。逻辑回归的损失函数是关于参数的对数似然函数取负值,整体上是凸函数,所以梯度下降能找到全局最优解。学习率过大会导致损失函数震荡,甚至发散,这个是最基本的优化常识。
复习这部分内容时,我的建议是不要只背结论,要能从几何意义上理解。比如PCA的投影方向为什么是特征值大的方向,因为特征值代表该方向上的方差大小,而PCA就是要保留方差最大的方向,这样才能最大程度保留原始信息。理解了这个逻辑,相关题目无论怎么变都能应对。
3. 数据挖掘算法:考点集中在模型原理与业务落地
3.1 经典模型高频考点:贝叶斯、树模型、聚类
机器学习与数据挖掘算法部分是整套卷子的重头戏,顺丰科技考察的内容非常经典,基本都是主流算法。朴素贝叶斯、决策树、随机森林、K近邻、K-means、逻辑回归、支持向量机,这些模型的概念、适用场景、优缺点,几乎覆盖了全部考点。
朴素贝叶斯有一个关键假设,就是特征之间相互独立,这在实际数据中往往不成立,但它在文本分类等场景下依然表现良好。笔试里经常考的就是朴素贝叶斯的假设是什么、为什么在特征相关性强的场景下效果会变差。
树模型主要考察分裂依据,比如ID3用信息增益,C4.5用信息增益率,CART用基尼指数。有一道题是问决策树在选择分裂特征时,为什么倾向于选择取值较多的特征,就是因为信息增益对取值数目较多的特征有所偏好。这种细节题如果没有真正理解信息增益的计算过程,很容易答错。
聚类题目的典型问法范围很广,包含K-means算法的步骤顺序,比如初始化簇中心、分配样本到最近中心、更新中心、重复直至收敛,也会涉及K值的选择方法,比如肘部法则。需要注意的是K-means对初始中心敏感、容易陷入局部最优,并且只适用于凸形簇。
我当时还遇到了一道和业务结合得比较紧的题:在物流用户分群场景中,如果要基于用户的寄件频率、寄件金额、寄件区域等特征做聚类,哪些特征需要先做标准化处理。因为K-means基于距离计算,量纲不一致会导致距离被数值大的特征主导,所以聚类前通常要做Z-score标准化或Min-Max归一化。这类题就是把算法原理放到业务场景里去考察应用能力。
3.2 模型评估、过拟合与特征工程
模型评估和过拟合处理是客观题里又一个集中出题区域。准确率、精确率、召回率、F1值、ROC曲线、AUC值的定义和适用场景,几乎每年都会考到,顺丰科技的考卷也不例外。
有一道题是给定混淆矩阵,让计算精确率和召回率。这种题没有技巧,就是公式。精确率是预测为正类中真实为正类的比例,召回率是真实为正类中被预测为正类的比例。容易混淆的是分母不同,一个是预测结果,一个是真实结果。
还有一个高频选择题是:在正负样本极其不平衡的场景下,以下哪个评估指标更适合?答案是AUC或者F1,而不是准确率。因为在样本不平衡时,即使全部预测为多数类,准确率也可能很高,但这个模型没有实际意义。更重要的是AUC值不受分类阈值的影响,它能更全面地评价模型排序能力。这一点在物流场景里很重要,比如风险包裹识别,真正有风险的包裹占比很低,模型评估如果只看准确率,优化方向就会跑偏。
过拟合问题也是必考内容,考察点包括过拟合的表现、原因、解决方法。正则化项L1和L2的区别也属于高频考点,L1稀疏、L2平滑。L1正则化为什么能产生稀疏解,是因为L1范数在零点不可导,优化过程中更容易让参数变为零。如果笔试中出现了深度学习相关题目,问Dropout的作用是缓解过拟合,通过随机丢弃神经元来降低神经元之间的复杂共适应关系,这种常规题也要掌握。
特征工程相关的客观题相对少一些,但也会出现,比如类别型特征的编码方式,比如独热编码和标签编码,以及两者各自的适用场景。另外,特征选择的方法通常从过滤式、包裹式、嵌入式三个维度来区分,这属于数据挖掘的基本常识。
经验之谈:复习模型评估时,不要只看公式,要自己画一个混淆矩阵,把精确率、召回率、F1、特异度全部手写推导一遍。笔试的时候时间紧张,只有形成肌肉记忆才能快速答对。
4. 大数据开发与SQL:一面笔试里的硬核环节
4.1 Spark/Hadoop原理考点
大数据挖掘与分析工程师毕竟带着“大数据”三个字,所以Spark和Hadoop相关原理几乎一定会考到。这类题考察的是你对分布式计算框架的理解深度,而不是会不会写代码。
Hadoop相关的考点主要是HDFS和MapReduce。HDFS的核心设计思想是把大文件切分成多个块,每个块默认128M,分布式存储在集群的不同节点上,并且每个块有多个副本,默认是3副本。这样设计是为了在普通服务器上实现高容错和高吞吐。MapReduce的核心是分而治之的思想,把计算任务分成Map阶段和Shuffle阶段以及Reduce阶段。Map阶段处理原始数据,Shuffle阶段进行分区、排序和合并,Reduce阶段进行聚合汇总。
Spark相关的考点主要集中在RDD、宽窄依赖、Stage划分这几个核心概念上。有一道题是判断哪些操作会触发Shuffle,比如groupByKey、reduceByKey、join都会触发Shuffle,而map和filter不会。这个基础概念在实际调优中非常重要,因为Shuffle是Spark作业性能瓶颈的主要来源。
还有一道题考察的是宽依赖和窄依赖的区别。窄依赖是指父RDD的每个分区只被子RDD的一个分区使用,可以放在同一个Stage中,比如map、filter;宽依赖是指父RDD的分区被子RDD的多个分区使用,需要进行Shuffle,比如groupByKey。宽窄依赖的划分决定了Stage什么时候被切断,这也是Spark作业优化的关键依据。
笔试中如果涉及Spark任务调优,可能会提到以下方式:增大广播变量、减少Shuffle数据量、调整分区数、使用reduceByKey替代groupByKey。这是因为reduceByKey会在Map端先做一次Combine操作,减少Shuffle阶段传输的数据量。这就是典型的“懂得原理才能做出正确选择”的题目。
4.2 SQL与数据仓库场景题
SQL题在大数据岗位笔试里基本属于送分题,但也是送命题——会的就是秒选,不会的就只能蒙。顺丰科技的SQL题主要以场景题为主,考察常用函数的掌握和逻辑思维,而不只是单纯的语法记忆。
我记得有一道题是给定一个订单表,有三个字段,分别是order_id、city_name和order_time,要求统计每个城市每个月的订单数量。这道题考察的是DATE_FORMAT函数配合GROUP BY来使用。类似的还会考察行转列和列转行,比如把每个用户在不同月份的消费金额从长表转成宽表,通常使用CASE WHEN配合聚合函数来实现,这在做用户行为分析时非常常见。
窗口函数也是这几年笔试的常客。比如要求计算每个城市订单量排名前3的城市,需要用到ROW_NUMBER()或RANK()窗口函数,然后按照排名进行过滤。窗口函数的考察点在于理解PARTITION BY和ORDER BY的作用范围——PARTITION BY决定了窗口如何分组,ORDER BY决定了窗口内如何排序。这个考点在实际工作中用得非常多,比如计算物流时效的环比和同比、对客户进行RFM分层的排名等。
Hive SQL和数据仓库的概念也会穿插考察。比如问到Hive中内部表和外部表的区别,内部表删除时元数据和HDFS数据都会删除,外部表只删除元数据,底层数据保留。还有分区表和分桶表的区别,分区表是按某个字段的目录维度来组织和数据,分桶表则是按照某个字段的哈希值把数据分散到不同文件中。在实际数仓建设中,分区表用于按时间日期管理数据,分桶表常用于抽样查询和表连接优化。
行业经验告诉你,SQL这类题目没有捷径,关键是要多写多练。笔试前可以把常用的聚合函数、日期函数、窗口函数都过一遍,确保语法细节不出错。我个人还习惯把每道SQL题先写下解题思路再写语句,因为笔试环境下的SQL题往往不仅仅考察语法,更考察逻辑是否清晰。
5. 实操复盘:笔试过程中的方法与踩坑记录
5.1 时间分配与做题顺序的临场策略
客观题笔试的临场策略往往比复习策略更容易被忽略,但它对最终分数的影响非常大。我在顺丰科技的笔试里总结了几个比较实用的做法。
第一,拿到卷子后不要急于动笔,先花两分钟从头到尾浏览一遍所有题目,标注出哪些是必拿分的简单题,哪些是可以直接选出来的概念题,哪些可能需要推导。这个过程能让你对整体难度有把握,避免在前几道难题上浪费太多时间。
第二,严格按照先易后难的顺序来做。选择判断这类客观题的难点往往在于个别需要计算的概率题和带场景的数据分析题。我的习惯是先做概念题和SQL场景题,把计算题和容易混淆的概念题留在后面集中攻克。这样安排的原因是概念题不需要草稿纸,一旦判断准确就可以快速得分,而计算题如果卡壳很容易产生焦虑,影响后面题目的状态。
第三,多选题目要格外小心。多选通常采用漏选、错选、多选都不得分的规则,所以不确定的选项尽量不选。如果题目要求选出“以下哪些说法正确”,遇到拿不准的说法,先用反向验证法——尝试举一个反例,如果举不出反例,通常可以认为是正确的。
临场技巧:做概率和统计计算题时,善用选项之间的数量关系来验证。如果感觉自己计算出来结果不在任何一个选项中,不要急着怀疑题目出错,先重新检查有没有漏掉条件或者用错公式。我笔试时有一道条件概率题,第一次算出来是0.6,选项里没有,重新读题才发现看漏了“在样本不均衡条件下的先验值”这个关键信息。
5.2 错题复盘与知识点补全清单
笔试结束并不代表事情就完了。客观题考试最有价值的部分其实是考后复盘,通过错题来查漏补缺比任何模拟题都有效。
我在复盘时发现,最容易失分的不是那些难啃的算法原理题,而是一些基础概念和边界条件。比如“逻辑回归是否能处理非线性问题”这种经典问题,如果没有深入理解它的决策边界本质,很容易被表象迷惑。逻辑回归本质上是一个线性分类器,因为它学到的决策边界是线性的。但可以做特征变换,比如添加多项式特征或者使用核方法,来实现非线性分割效果。这类型的题目如果只是背结论,很容易翻车。
复盘时我会把错题整理成一个知识点补全清单,按主题归类并标注薄弱程度。我的清单上当时主要有这几块:贝叶斯公式的实际应用场景、K-means聚类中K值的选择、Spark宽窄依赖的划分规则、窗口函数在各种统计场景下的具体写法以及L1和L2正则化的数学本质。针对这些薄弱点再去找对应资料逐项击破,比盲目刷题效率高很多。
此外,有些错题是审题不仔细导致的。比如多选题里的“不正确的是”被看成了“正确的是”,这种失误只能靠平时养成先圈关键词的习惯来避免。我在后来的准备中,遇到选择题都会先把“以下正确的是”或者“以下说法错误的是”这类的限定词圈出来,不要高估自己考场上集中注意力的能力,因为考试中的时间压力会放大粗心的概率。
6. 往届真题背后的大数据技能树
从这套客观题合集往深处看,能发现顺丰科技这类物流龙头企业对大数据挖掘与分析工程师的技能要求,其实构成了一棵完整的技能树。笔试只是这棵树的映射,真正的价值在于让你意识到自己缺了哪根枝杈。
三块核心能力明确了大数据岗位的准入门槛:数学基础决定你能不能在理论上理解算法,算法理解决定你能不能把数据变成可用的模型,工程能力决定你建模之后能不能落地到生产环境。
数学基础层面,除了概率统计和线性代数,最好还要懂一点信息论和数值优化常识。信息熵是决策树和特征选择的基础,交叉熵是很多分类损失函数的基础,这些概念在笔试里经常以“变形考法”出现。虽然不要求你会推导每个公式,但至少要知道每个概念解决什么问题以及解决思路。
算法层面,要有意识地建立算法之间的联系。线性回归、逻辑回归、SVM、朴素贝叶斯、决策树、K近邻这些经典算法看似独立,实际上它们都是一条解决问题的思想链上的不同环节。比如都涉及损失函数的设计,都涉及模型的偏置和方差权衡,都涉及训练集和测试集误差的比较。树模型可以通过集成学习演变成随机森林和梯度提升树,聚类算法和降维算法又可以结合做用户分群和特征压缩。笔试里很多多选题目,本质上就是考察这种横向归类能力,而不是单点记忆。
工程能力层面,需要做到至少熟练掌握一种SQL引擎并能看懂Spark等分布式计算框架的核心原理。在真实的大数据挖掘工作中,你会遇到的情况很可能是数据存放在Hive中,处理逻辑需要用Spark来实现,特征的产出又依赖数仓的分区和生命周期管理。如果只懂sklearn而不懂数据如何被取出和处理,建模就只能停留在案例阶段,无法真正在业务中落地。
因此,在准备这类笔试的时候,不要把目光只局限在刷题目上。我当时在刷完客观题之后,花了额外的时间去补完这棵技能树:重看《机器学习》周志华版的经典章节,补齐Hadoop生态的组件图谱,坚持每天在本地Spark环境里写几个分析任务。这些积累在后来面试的每一轮都派上了用场。
回到顺丰科技这套2019秋招客观题合集,它给我的最大启发是:大厂笔试考的是基本功,基本功就是那些最朴素、最经典、最不容易过时的知识。概率论不会因为深度学习的火热而失效,SQL不会因为AI平台的流行而消失,一题一题分析下来,你会发现每一个考点都能在你的技能树上找到对应的位置。准备笔试的过程,其实也是自我体检的过程——哪里弱,一目了然,补就是了。