初级大数据工程师面经指南(上)

经过近一年卧薪尝胆的自学和各种折腾后,于上年裸辞的博主终于于3月中旬来到深圳。彼时毕竟是没参加过任何大数据方面面试的小菜鸟,对前面的路一无所知,甚至连自己能不能找到一份适合的工作都曾怀疑过。当时一想到自己现在的身份(既失去了应届生的光环又没有招聘要求中3-5年的工作经验)就满脸的尴尬。短短两周的时间让自己体验了跌入谷底再到强势反弹的生活。算了,废话少说,这些经历有时候文字根本无法表达,即使可以表达,也只有经历过的人才能看懂,如果你真的想看的话,可以看下随笔中的文章,我会在下周找个时间,好好总结下这段炼狱般的生活带给我的人生感悟。以前经常看别人的面经,感觉对自己帮助挺大的,至少能够让自己窥探下自己是否能够应聘该岗位;今天就写写自己的经历,希望也能给其他人一些帮助。

直接进入主题说下最近的这几场面试吧:

  1. **自己的状态:**第一家公司是某上市公司,面的是大数据开发的岗位,但是面完之后感觉这个岗位偏向JAVA方向,由于当时是刚到深圳的第二天就去面的,再加上之前准备过的一些面试题也经过年前和年后的折腾基本忘光了,等到做面试题的时候,才突然发现自己当时的状态有多尴尬。

**结果:**进入技术面因经验不足没有拿到Offer。

**经历:**一轮的话是笔试,几道Java基础题如String类能否被继承以及为什么会这样、return和finnally的执行先后的次序等接下来是两道编程题:让写一个单例的实现、用递归的方式解决一个问题。然后是让根据一个问题让写一个算法实现的思路,要求复杂度必须为O(n)。最后才涉及到大数据相关的知识:两道常见的大数据题目:一个是让从1000W个数字里面求最大的10个数写出思路,第二个问题是针对集群的,说如果一个正在运行的系统突然变慢了,如何查找问题以及如何优化写出思路。题目基本就是这样,但两个编码题直接就被晾在那里了,当时脑海里竟然连JAVA一些常用的语句都和Python搞混了(一直在学大数据,java基础被扔到一边了一年多,一下让手写代码,整个人都无语了,当时严重“怀疑”自己是不是学过JAVA.)
二面的话是技术总监和产品经理面的(说实话当时以为就没有二面了,本来抱得期望也挺低,只是想先了解下整个过程包括试题,面试等让自己适应下这这个环境,看下自己到底在哪个阶段),整个过程也就是常见的基本的套路,先自我介绍,然后面试官提问。期间技术总监却对我机器学习的项目很感兴趣(我当时有点郁闷,毕竟有大数据的项目怎么不问大数据的项目?机器学习的项目是作为一个辅助项目),问了大概十几分钟吧,然后说了下自己的实习和工作经历,之后最重要一点又回到了那两道编程题上,产品经理直接问这两道编程题你写不出来吗?当时也是满脸的尴尬(毕竟之前真的没准备),只能说这个真的没准备。后来也没聊几句就以自己经验太少把自己PASS了。

**总结:**回来之后,那一周的时间没有再去面试,而是狂补之前总结的面试题,然后回顾之前的JAVA知识,这一周算是活到现在为止遇到的最难熬的一周。。。后来总结这次面试觉得自己问题非常多:1、一轮面试题没有准备好这也是自己直接被PASS的主要原因。2、二轮技术面试中由于情绪问题自己向面试官诉说不少关于之前自己在上一家公司的“不幸”遭遇。这是一个大忌,毕竟,在技术面你只聊技术,其他的一些事是HR面才应该聊的。
2. **自己的状态:**在周末和同学一起放松了下之后,感觉状态已经调整的不错了。然后在这周的周二去面了第二家公司,岗位为大数据平台开发,第二家公司为一初创企业,刚拿到天使轮的投资。

**结果:**聊了薪水没拿到Offer。

**经历:**一轮笔试,但是试题比较开放,大体方向为重要的Linux指令及作用、网络TCP并发数为10K怎么办、写一个决策树代码实现、最后两个算法实现题只需要写对应的伪代码思路(但是感觉这两个题是公司目前正在面临的问题想通过面试来尝试得到对应解决方案),其他的题目不太记得了。
二轮的话是一个技术负责人和员工面的,但过程是直接的一问一答,不用再来什么自我介绍,少了不少套路,期间主要聊得还是机器学习模型主要对其中的SVM的算法的实现、原理以及对噪音是否敏感(从考官哪里学到SVM对噪音非常敏感的)等问题做了不少了讨论,之后关于大数据的框架却也没聊多少,之后又聊了一些Linux相关的知识,记得比较清楚的一个问题是linu启动的时候加载的过程是什么?(没回答出来所以记得特别清楚)之后问了下薪水的问题,最后又让博主去看一篇英文文献(博主英语在各科中从小到大一直都是拖后退级别,再加上这么长时间没接触英语,单词都忘得差不多了,这直接来篇专业的英文文献,直接懵逼。给我个Google翻译我立马给你读懂,哈哈,说着玩呢。),也许就是因为最后这一步然后博主就被pass了,毕竟照面试官说的他们目前的项目基本都需要看对应的英文文献,如果看不懂就没法工作,别人也不可能帮你。但是最后自己却犯了一个错误,就是向面试官表决心自己可以学习相关的东西,快速上手。整个面试的过程,让我感觉很舒服,小公司没有像大公司那样的套路,再加上这家公司上的员工基本上都是某985高校的,所以给人的感觉很亲近,有些问题如果你一时回答不上来,面试官会去引导你去回答,他们也会根据你的工作经验来考察你的能力(真的印证了越有实力的人越谦逊这句话)。

**总结:**虽然这次没拿到offer,但是这次过程给了自己不少信心。整个面试的过程中自己无论是心态还是表达都做的不错(感觉之前没有面试前自己在脑海里彩排的场景被排上了用场)。最重要的一点是自己能够和面试官比较流畅的交流或者说面试官问的问题基本都能答出来。这是最终要的一点。唯一的不足也许就是最后自己表决心,自己可以学什么什么,对于一个职员来说永远不要说“学什么什么”的字眼,毕竟公司招你来时让你工作的,而不是学习的。虽然这个字眼在大多数时候是一个褒义的,但有些场景下就会变成贬义。。。

3.**自己的状态:**带着上面的状态,周三去面了第三家公司,岗位为数据开发师,该公司也属于创业公司不过已经拿到3轮融资。

**结果:**第二天拿到Offer。

**过程:**一面也是笔试,同样试题比较开放,就两道题:一道是提出一些新的方法来扩展公司的业务,增加用户量。第二道题是也是关于公司业务的解决方案:如何分析一个地方的运动氛围(大体意思是这样)。
二面是相关部门的员工过来面得,也是自我介绍,然后记得让讲了下MR的运行原理,之后记得有一个关于队列和链表的问题自己答得不是特别好,特别是让自己描述队列的时候,自己竟然把顺序表的为什么查询的快,增删慢的原因给说了出来。不过那位可能的“未来的同事”在面试过程对我的“关照”也让我对该公司加分不少(其实只需要先描述下队列是遵循先进先出原则,在一边进在另一边出就行了)。
三面是部门的leader,也是根据简历问了下股票预测模型中的相关知识(为什么每个公司都这么看重这个东西),其他的没什么印象。

**总结:**经过这次面试自己了解到自己目前在一个什么样的位置,大概值多少钱。也及时发现了自己在HR面存在的问题并改正。

4.**自己的状态:**由于每次技术面中都遇到“贵人”在“引导”自己,所以每次技术面也很流畅,这也更加坚信自己可以拿到理想中的薪酬。周四面的是数据开发工程师岗位,也是一家拿到C轮融资的初创企业。

**结果:**拿到Offer。

**过程(技术面持续约1小时):**整个技术面让自己很无语。一面直接是两个员工面,还是老套路。首先自我介绍,然后让说下区块链(中间自己把说的过程中把公钥说成了秘钥,但一位员工很和气的纠正了我),然后又说了下股票模型中的一些问题。之后部门Leader直接就过来,还没拿到我的简历就开始发问,当时我们三个直接都没话说,然后就开始不停的问些实际开发中遇到的实际问题(拜托他连我的简历都没看,就开始问东问西,语气也很挑衅,直接回答会或不会),记得有一个问题是当一个Hive中一张表特别大时如何做切分?还有Spark内存爆满如何处理?等等(内心独白是:拜托你看下简历再提问好不好,我刚毕业半年的,哪有这些实际经验,再说对于Spark、Hive我也只是写的了解好不好)之后也有说到算法,让我说随机森林的原理,然后说分裂特征是什么,我举了一个例子,他竟然又莫名其妙的问你给我说出来(内心独白:我去,我不是说了吗?)之后没办法只能把例子换成数字然后比如大于50作为一个分裂特征…
之后有个问题是让我说下数学在机器学习中的应用,我举了推荐系统的例子讲了下最终将CF算法中对应的表的数据可以转化为行列式,之后可以用线性代数的知识来根据业务进行操作。之后leader竟然说这个谁都知道,你问问他们两个知道不(旁边两个员工只是尴尬的笑了笑),然后又说如果数据量达到多大多大你要怎么处理?(内心独白:你问你的员工吧。。。)之后又聊到Linux操作系统,就问熟不熟(内心独白:简历上写的清清楚楚你能不能看下),我说了解常用的指令,接下来直接问Vim用过吗?ViM编程里面你能说下一些功能的快捷键(删除某行,跳转到尾部什么的)以及如何在查询某个字段等问题?之后又聊到一些什么东西的时候,我反驳了一下,然后他竟然说这块我也不熟,那谁谁你不是之前负责这块吗?你跟他解释下(我总算知道他也是人。。。)。不过最尴尬的一个场景是当时他问我一个非常简单的问题:环境变量在linux下的那个文件中配置?当时脑海中闪过etc/profile但是又不确定(毕竟集群扔那4、5个月了,又不是最近一直在linux下搞东西),所以只说了etc/,这个时间久了真的记不太清楚了(当时profile就在嘴边但是没有说出来)。但是Leader说的话的意思是你到底玩没玩过Linux,用那种非常鄙视的语气。(内心独白:TMD,拿台电脑试下不就知道了)不过当时也没过多解释,因为对于这种人你说再多都没用。最后到我提问的时间的时候,我问了当前公司的AI平台搭建到那种地步?回答这个问题时,也是难得见这个Leader心虚一次(讲的过程中眼睛不敢正视我,整个语气也虚了很多)。整个过程除了一些实际经验问题其他的问题能答的也都答出来了,但是对这个Leader的态度也是刷新我的三观。又想起来两道题:说下Spark为什么比MR快?Hbase中RowKey怎么创建?
HR面的时候,HR第一个问题就是:刚才的那个面试官怎么样?我也是呵呵一笑:“太犀利了。”之后才了解到原来Leader全场打压我也许是想压低我薪酬,和HR小姐姐聊完各种福利之后,最后HR小姐姐说给你的薪水比你预期的低一点你能否接受?可以考虑。Over。

**总结:**第一次碰到这样的面试官,刷新我的三观,也许这是套路,是自己见识太少吧。虽然拿到了Offer,薪水也符合自己的期望值,但是我还是会慎重考虑。

5.周五上午面一家B轮初创的数据分析师岗位。

**结果:**因为岗位需求没有拿到Offer

**过程(持续一个小时):**直接技术面,老套路,先自我介绍,之后TM的40多分钟都在讨论Hive,我TM只想说你们岗位要求的不是还有hadoop、kafka等等这些组件的吗?整个过程感觉面试官特别抠,打个比方他都想知道1+1为什么等于2。如抓着项目中的数据分析的过程不放,这个我没有异议,但是我简历中的Hive明明写着了解,也给他声明过我只会用HQL做些简单的数据分析。可这个面试官一直抓着Hql不放,让我把整个数据分析的项目全部重新写一遍。OK无所谓,写就写,谁怕谁。当时,问到对数据进行清洗这块的时候,让我比较惊讶的是,面试官问我:你用的什么算法?我说用MR程序直接就搞定了,这还用什么算法!面试官又问:你知道算法吗?算法是什么什么。。我说你先听我说,MR程序拿到数据后是按行读取,map端输入k为一个偏移量,v为一行的内容。拿到之后做一个切分,然后剔除不合格的数据这里面有两个依据1、根据数组的长度、2、根据返回码。不合格的程序不用write到reduce端。。。刚讲完,面试官问这个偏移量是什么?我说你可以把他理解为数组的下标,默认的是0,也就是读取当前行的行首。面试官又问数组下标有什么用?(内心崩溃,有病吧!你到底玩没玩过MR)。之后又让写HQL来完成自己写的一些数据分析的指标,写出来之后竟然问我select语句后面的限制条件为什么这样写?我真心没法回答(这样写才能得出结果啊,不这样写要怎么样写)。之后做Left join操作,又问为什么要join这张表?(我心累,你不是给了一个需求我不是再实现你的需求吗?)。之后他又画了两张表让我做left join,然后给他说结果。不过最后自己给自己挖个大坑,他让做项目里面转化路径的分析,自己没有写出来(整个过程也是一个join的套路不过比较复杂,忘了),这也多少让他怀疑这个项目到底是不是自己做的。再到后面Hive总算聊完了,聊到集群的HA机制时,让我说下HA。我就说是对节点各个组件的一个备份,如namenode的备份,yarn的备份。当namenode挂了之后,备份的namenode可以直接替代它。。。但是在一个问题上我们发生了争执,他认为secondary Namenode就是namenode的HA,但是我记得当时学习的过程中,视频中老师明明说过secondary Namenode不是namenode的HA,只是相当于namenode的一个热备份,根据checkpoint机制,当namenode挂了之后可以将生成的image文件用于还原数据。刚才查了一下,的确我说的没错,namenode的HA对应的backupNamenode的内存中metadata、以及edit和image文件都会和namenode同步。而secondary Namenode只是定时的备份image。不过给人的感觉还是这个面试官可能玩SQL比较久了吧,所以SQL特别熟,但是整个交流的过程,我是真心无语。最后竟然问起了项目里面用的java那个版本,hadoop哪个版本,(简历上写的清清楚楚)我是真心不想答,既然不相信我的话,那何必要接着面下去呢?接着问我java最新版本,我竟然说出个2.0(哈哈,前几天刷头条也不知道在哪瞟见的,不过那个时候已经不想问答问题)。最后轮到我问他问题,我问了贵公司目前的风控系统数据量有多大以及以后的这个发展方向,然后他也出现了前一位面试官相同的表现(心虚)。现在想想既然大家都是从小白成长起来的,那么那些老鸟面试的时候为什么要去摆出这样那样的姿态来为难面试者呢?结束之后,没有HR面,说让回去三天给通知。估计也没过,毕竟后来了解这个岗位基本就是HQL,有需求就去写,应该对HQL要求比较高。但是后来据他描述,他们连底层的数据仓库的ODS层还没有建起来,我都怀疑他们之前是怎么做的数据分析!最令我不爽的是这个面试官好像把知道和了解都当做是熟悉,简历上写的清清楚楚了解什什么什么,到他嘴里就变成了你对什么什么也挺熟的,然后直接就开始问问题。根本不给解释的空间。我也是醉了。
总结:再一次刷新自己的三观,难道这种奇葩的面试官真的不少嘛?(以前看别人的面经有提到过,但是真没想一下遇到这么多这种人)不过自己也有缺陷,就是数据分析的项目需要重新复习下,特别是数据分析对应的几个指标的实现这部分!最后没能拿到该公司的Offer,自己并没有太多的遗憾(毕竟整个技术面的过程该答的自己都答了出来),很大一部分原因觉得还是岗位的要求和自己目前的能力不太匹配。毕竟根据面试官面试的重点已经后期的交流觉得该公司的这个岗位还是需要精通SQL的人;而自己还远远未达到精通的地步。

6.周五下午快12点面完上午的公司,下午3点又要去面一家外包公司的初级大数据开发岗位,本来是不打算去的,毕竟对外包的印象不好,但是被招聘的小姐姐“忽悠”了两句,又一想既然有面试就去试试吧,能拿到offer再决定去不去。

**结果:**被公司放鸽子。

**过程:**回到住的地方吃过午饭后已经是下午1点然后休息了一会就出发,到地方后,直接站那等了半个小时(公司找不到面试官,面试官在开会),之后被丢给一个人坐那聊了5分钟,基本没有聊任何技术的问题,然后就让回去等通知,我去,真没见过这样的态度。后来和招聘的小姐联系说:你们公司是不是不缺人?从没见等了半小时面试5分钟什么都没聊就让回去等通知的情况。

**总结:**外包公司最好别进,毕竟自己上一家公司就是外包公司,里面什么情况我还是比较清楚的;但是第一见这么不正规的外包公司。其实下午本不想来,但是毕竟答应招聘的小姐姐了,所以最终还是跑了一趟,谁知道被公司给放了鸽子,我去这剧情刚好相反。(不是应聘者放公司鸽子吗。。。)

周末休整下,针对自己的不足,再做些相应的调整。下周再跑一周的招聘,到时候会在下篇中和大家分享整个经历。希望这些经历能对各位读者有一定的帮助。

你可能感兴趣的:(随笔,自学大数据之路)