目前市面上的大数据开发岗位主要分为两大方向:【大数据ETL开发】和【大数据分析】
不同的岗位对技术要求的侧重点不一样,前者的市场岗位需求更大。
1. 大数据ETL开发岗位简介:
这个岗位的核心工作是负责将原始的数据源接入到大数据平台,然后用平台中的各种大数据组件对数据做各种数据的转换、清洗,然后有的就可以直接入库,用于各种BI系统的报表展现;
而有的清洗后的数据则提供给大数据分析人员作为数据源,用于各种机器学习算法、人工智能模型等手段进行分析、挖掘,最终得出想要的结果。
面试考察点和注意事项:
我面试过很多大数据开发的候选人,发现一个普通现象,就是大家以为大数据开发只需要对一些常用的大数据组件熟悉就可以了,比如临时背一下Hadoop、Spark、Kafka等这些常用技术的一般功能、常用API、安装部署等就万事大吉了。
要是你这样认为,我劝你洗洗睡吧...
如果说在5、6年前,你这么干,或许有用,因为那个时候大家对大数据技术还处于一种【朦胧而神秘】的状态,对其技术本质还理解的不够深入。但是现在如果你还用这一套理论的话,你就等着面试官对你说出那句【请出门左拐,不送】。
因为这些东西过于简单和表面,只要有点计算机基础的,稍微花点时间学习下,或者干脆报个培训班临时抱个佛脚,轻松就搞定了。
但是现在这个岗位的面试,一定会问很多原理性的东西,虽然你是通过写API进行ETL开发,但是如果你能对API背后的细节清楚的话,那面试官就会认为:你除了能写一般的业务代码外,还能让你的业务代码跑的更快、更稳定,代码出了问题后,你也有能力快速诊断并解决。
比如我向很多候选人问过一个很经典的问题:spark中map算子跟foreach算子有哪些相同点和不同点?什么情况下选map?而什么情况下选foreach?
大部分人都回答不好,很多回答都让我很失望。我相信任何一个用过spark的大数据开发,都一定用过map和foreach这两个算子,因为太常见了,常见到很多人都忽略了它背后的原理。
因此,如果面试这个岗位,建议一定要注重理解所用技术的细节。
谈谈我考察一个大数据ETL开发的角度
首先,全局视角:我认为一个好的大数据ETL开发,应该对你所在的大数据系统(或者叫大数据平台)有一个全局性的认识。这样,你才清楚你的每一次代码开发,对应运行在这个系统的哪个位置,会与哪些模块交互、模块间的兼容性如何、上下游的数据处理链路是怎么样的。
因此,我一般的第一个问题就是:说说你用过的大数据系统的整体架构,或者这个大数据系统的数据处理链路是怎么样的?
这个时候有人可能会说,我又不是架构师,系统又不是我设计的,我为什么要清楚这些?如果你这么回答,那不好意思,印象分一下子少了一半。
可能这个确实不是你分内的事情,工作中也确实没有给你这样的任务,但是这间接说明一个问题,那就是:你永远只会守着自己的【一亩三分地】,没有拓展自己技能边界的意愿和想法。你觉得这样的人,竞争力会强吗?
其实你只要稍微有点全局思维就可以发现,任何一个大数据系统它都是有套路的,都可以将其拆解为3大部分:【数据源接入模块】、【数据计算模块】、【结果存储模块】。
有了这个全局思维,你会发现困扰在你身上的很多问题都可以迎刃而解。
其次,局部思维:当你在写代码开发具体的功能的时候,你是否想过为什么要用这个技术?使用这个技术的优劣势在哪?为什么不用另个一个呢?
比如在对数据源接入时,很多时候我们都用kafka这个组件,来承接数据的落地,那为什么会选这个组件?都知道它快,为什么快,是什么原理支撑它快的,数据结构?通信原理?等等。
然后,业务理解能力:所有的开发,目的都是完成业务需求,那么对业务数据的理解能力就显得特别重要。比如我们在数据处理过程中常常遇到的效率优化问题,比如:用计算引擎对数据计算时出现分区之间数据不平衡问题(也叫数据倾斜)如何解决?
这个时候其实需要你对业务有比较深的理解才可以,不是单纯的技术问题能解决的,你如果要平衡新的分区,就要基于当前业务要求作出新的调整。
最后,基础能力:这里指的是计算机基础,编程语言基础。要知道【万丈高楼平地起】,任何一个坚实稳定的软件工程都需要一个牢靠的地基支撑。这个也是每次面试的必考察项。
考察哪些:JVM原理、常用容器类型、常用数据结构与算法、网络IO、计算机组成等等。
2. 大数据分析岗
这个岗位跟上一个岗位相比,从理论上来说应该是要少很多的,但是一些注重算法的公司在这个岗位上的人员投入比例却非常的大。
岗位简介:
如果说上面那个ETL开发是要求你的技术面【大而广】的话,那么数据分析这个岗位就需要你【窄而精】。
这是一个要求专业能力非常突出才能做好的岗位,一般要求数学专业背景的人,且学历要求很高(至少硕士以上),对各种数据模型、算法精通、能熟读各种最新的算法设计paper(英文要好)。一般对语言本身的要求反而不是很高,常用的语言为Python、R。
PS:至于那种通过调用别人算法API的开发人员,说也会数据分析,拜托你别搞笑。
面试考察点:
因为这块不是我擅长的领域,但也有幸参与过几次面试别人的会议。主要考察用过哪些算法,调过哪些参数,不同参数对模型的影响等等。
侧重点在对算法,模型的理解和应用能力。
(多的我也说不出来了,见谅!)
3. 面试注意要点
首先,简历可以适当包装,但不要夸大,切记不要造假。项目描述中,只要你能hold的住的都可以往简历写,不一定都得是你做的才行,其他人做的也可以。但是如果简历夸大,造假,会死的很惨。
其实,描述项目经历时,尽量简洁,不要说太多只有你这个项目中才用到的词汇,面试官可能听不懂,尽量讲行业通用的名词,提炼关键信息,多提自己擅长的技术点;
最后,面试过程尽量谦虚、谦卑。如果你很高傲,那么面试官问你问题的难点很可能会根据你的高傲程度而呈现【指数级】增长,不信的话可以试试。
最后,祝你面试顺利...
(PS:如果你有任何大数据相关问题,欢迎找我探讨)