阿里面试经历及总结(数据研发、Java研发方向)+个人经历

来源:互联网 发布:淘宝联盟手机登陆不上 编辑:程序博客网 时间:2024/04/29 22:16
先简单自我介绍下:能源学院、控制工程。教研室偏硬件方向。自学的软件(数据挖掘、分布式方向),一年左右,比不上那些大牛。Resume

我投的岗位“软件研发工程师”。到了面试现场,选择了Java语言(有对应的面试官)。不过,后面进行了交叉面试,被推到了“数据研发”岗位。



一面:
首先,自我介绍。
我:“我做过两个项目。写过几篇论文和专利。还参加过阿里巴巴大数据竞赛。同时,出于个人兴趣,我还阅读了一下HDFS的少部分源码,理解了一下HDFS的核心思想,实现了一个功能非常简单,并且还不完善的HDFS。”
面试官1:“说一说你写的论文中的某一篇的创新点?”
我:“我写的文章或者专利,主要遵循一个原则:将已有的理论或者模型应用到新的场景中。所以,都是偏向应用的。重点说说这篇论文吧。首先,从奇异值分解说起吧……”
大概讲了几分钟后。面试官1打断我:“你做的这些东西都偏向数据挖掘方向,为什么没有投数据挖掘呢?”
我:“因为,按照我的理解,数据挖掘这个岗位需要对机器学习算法有深入研究,然而,我做的偏向于对数据挖掘算法的应用。所以,我想投研发,偏向数据挖掘和分布式方向,从基础做起。”
面试官1:“其实,你的优势是做过数据挖掘。这样吧,我先找一个数据研发的面试官对你进行一下面试。等会儿,你再来我这。”
虽然自己也系统地学习过机器学习算法,但是接触时间太短(几个月),研究不够深入,只在比赛中用过少数几种算法:LR、RF和GBRT。自己的优势在于对数据的理解和特征的提取,以及算法的应用。而算法推导过程并不清楚,只是理解了其思想。我怕被问得太细致,所以不是很情愿。不过,在面试官1的坚持下,最终还是同意了。

看到第二个面试官的牌子上写着“数据研发”,我稍微舒了口气;幸好不是“数据挖掘”。
今年,“数据研发”岗位招人挺多的,很多都是去小微金服。
面试完之后,我觉得“数据研发”的岗位要求是这样子的:
  • 熟练掌握基本的SQL语句;因为有一道笔试题目。我觉得阿里应该用自己的ODPS-SQL(类似于Hive)进行数据研发,虽然这个平台挺复杂的,但是面试的时候的要求并不高。只要掌握基本的内建函数和SQL语句就行了:select, group by...。我在比赛过程中,写过几万行SQL代码(去重之后几千行),没有用到过索引和视图;经常用到内建函数,偶尔使用UDF(用户自定义函数)。但是,写的代码不包含索引、视图和UDF。也没有考优化(其实我也不懂)。
  • 有数据研发方面的相关经历,面试官似乎很注重这一项。我参加过阿里巴巴大数据竞赛。
  • 对数据研发有一些自己的看法。这个很关键,一定要思路清晰。我主要在讲比赛中的模型:数据的预处理->训练集、预测集->特征提取->进一步处理->正负样本比例->训练->预测。
  • 当然会用写MapReduce的话就过更好了。阿里的平台提供了MapReduce,估计工作中会用到。这边有个详细的介绍:超级啰嗦版ODPS MapReduce入门
然后,跟第二个技术面试官开始交流。
面试官2:“自我介绍一下吧。”
我:“刚才介绍过其他经历了。那我主要介绍下与数据研发相关的经历吧。”然后,简单说了下自己参加的阿里巴巴大数据竞赛。
面试官2:“行。先做一道题目吧。”
面试官给了我一道SQL的题目:给定一个表,共四列:user_id, brand_id, time, cnt(花的钱数)。从这个表里面选出用户B对每个品牌brand购买的总额度。
一看到,有点窃喜,这跟我竞赛做的东西太相似了。跟面试官进行简单沟通后,很快写出来了;不过还是怕做错,检查了很久才拿给面试官2。顺便提了一下,如果需要处理字符串的话,我会用ODPS-SQL里面的UDF。面试官看了下程序,没说什么,就放到了一边。
后面,我们主要在讨论阿里巴巴大数据竞赛:我做了什么,用什么模型、算法做的,准确率是多少。(这块讨论时间最多)
还好,我主要讨论的是对业务和数据的理解,没有深入讨论数据挖掘算法。

讨论很顺利。结束之后,面试官2把我带回面试官1。
回来后,继续与面试官1主要讨论我写的论文。由于之前对自己写的论文进行过总结,思路很清晰。并谈论了写论文的体会和收获。
总之,第一面的面试官很和蔼,交谈也很开心。
再次稍微提一下:个人觉得面试官主要有两类,一类是用技术把你问死,从而判断你对技术的掌握深度。另一类是,简单的技术问题之后,让你去表现,引导你来讲,从而看你这个人的思想、表达能力、个人观点等综合素质。
当然,一个面试官如果看到你不善于表达,就只能一直问你问题了。
很荣幸,我碰到的是第二种面试官。面试跟聊天一样轻松。
最终,顺利通过。



二面:
二面的面试官是做Java研发的。
刚开始,还是讨论比赛和分布式。后面问了我一道大量文本处理的问题“找出一个大文本中的Top3的字符串”。没有做过这方面的研究,答的不好。
Java问题:“讲一下JVM的结构。”
网络问题:“TCP/IP的三次握手、四次挥手”
然后,就开始问关于JavaWEB的问题。
这方面我只是了解过,面试官3说:”没事,说下自己的理解就行了。“
面试官3:“淘宝用户的数据(购物车……)存在那里?怎么满足高并发?
这方面不了解,面试官让我自由发挥;回答的也不好。
面试官3:“那我们问一下你的算法问题。输入两个整型数组,返回一个数组:两个数组中的公共值。
其实,到这个时候,自己有点思路混乱了,有点紧张。我从快速排序算法开始写,然后用的方法也不是最好的。面试官不是很满意。
后面吃午饭的时候,我想到其实可以为O(nlgn)排序后,再O(m+n)就可以了。跟别人讨论的时候,我想到,针对某些特殊的情况;其实这个可以用哈希的思想来做。复杂度O(K),K为数组中的最大值。
面试官3:“考一下你对递归的掌握。写一个函数,输入int型,返回整数逆序后的字符串。如:输入123,返回“321”。  要求必须用递归,不能用全局变量,输入必须是一个参数,必须返回字符串。”
当时,只做到了逆序输出(打印),并没有做到逆序返回字符串。
吃完午饭,跟别人讨论的时候,我突然想到这个要用到二叉树递归求解深度、叶子数等问题的一些思想:每次返回的时候加上上一次的返回值。
这个时候,面试官不是很满意,正好也该吃饭了。然后,面试官3说:“这样吧。我帮你找个数据研发的,你再去面试一下。让他来做评价吧。”虽然不情愿,但是还是同意了。毕竟这次表现太差了。

为了避免下午问到同样的问题。午饭后,跟其他同学把算法问题讨论明白了。
然后就是面试官4,还属于二面阶段。
面试官4:“就当做我们在聊天,讨论技术问题。讲一下你的相关经历吧。“
这样就放松了很多,像前面一样,对不相关的经历一句话概括。最后重点讲述阿里巴巴大数据竞赛。
面试官4对竞赛挺感兴趣,所以,就从头到尾一直围绕竞赛来讲。
主要讨论到了模型、算法、特征。重点讨论了我对数据的理解,并且得到了面试官4的认可。
我说:“比赛的时候,我们每天都要盯着数据提取特征。如果,仅仅把这个当作数字来看,确实很枯燥。但是,我们会把它当作一种用户行为对待和分析。这样就变得很有趣了。比如,数据清洗后,我看到某个用户每天都在点击某一个品牌,他就是不买,很显然这就是屌丝;有些人一直在购买,明显的高富帅啊。”
总之,就是很轻松地在聊比赛相关的事情,以及自己对数据的理解。
最后,顺利通过。



三面
早就听说,今年很多进入HR面试的还是有很大可能被淘汰。于是,比较小心。
后面才知道,其实不一定是HR刷的。因为,几轮面试都通过之后,面试官还要商量到底录不录取;如果确定录取的话再给Offer。有些被刷掉的人可能是因为前面表现不好,被技术面试官刷的,并不是HRjj刷的。我听说,一般HR通过之后,数据挖掘和算法刷人比较多;对于其他岗位,很少被刷。
不过,面试官人太好了。聊着聊着,我就口无遮拦的什么都开始说了。
聊到了:平时怎样提高自身技术能力;自己的优缺点;阿里巴巴的花名等等。
面试过程中,主要强调了两点(用自己的经历):
  • 我很喜欢跟别人讨论问题,这样总会得到意外的收获。并且,还举了项目、竞赛以及平时的例子。甚至,我还说了,刚才技术面试官的问题我没有回答上来,但是,私下与其他面试的同学(我不认识)讨论过程中,我就豁然开朗了。
  • 把工作当作生活的一部分,愉快地工作。这个主要说了,我在比赛过程中,怎样把一些无聊的事情做成很有意思的事情。
最后,面试官问我还有什么问题。
我说:“参加比赛时,加了阿里旺旺的群,里面有很多内部员工,通过他们对阿里认识了很多;所以,没有要问的了。”



结束
面试,就这样结束了。出来之后,赶紧看了下自己的状态“三面通过”;过了一会突然变成了“面试结束”。 听别人,说面试结束就是挂了的意思。
于是,问了下外面的工作人员,他们说:“这是回去等通知的意思。”HR面试之后,状态是“三面通过”“四面通过”“面试结束”等。这是正常的。因为他们还要根据前面的综合表现进行筛选。并不是“面试结束“的都不到Offer,都有可能收不到的。后面听说,有的甚至“四面通过”的都不会收到Offer。
回到学校后,一直等到凌晨三十八分才收到短信。然后,兴奋了一个晚上。



总结:
对于,基础比较扎实的人,那就让面试官随便问吧。不过,我觉得任何人都有可能别问死的,因为他们想通过这种方式看看你的掌握深度。
对于我呢,基础知识一般:数据结构、排序算法和递归,能写出来;操作系统,懂一些基本理论;计算机网络,懂一些基本概念和理论。就只能充分发挥自己的竞赛、项目、论文和专利的优势了。
面试过程中,有一点很重要,把握面试官的兴趣点,并将面试官带入自己的优势。当然,如果自己的优势不是面试官非常了解的领域,但是面试官又比较感兴趣,那就更好了。对于我的几位面试官,聊天的时候,我注意到,面试官1对我的论文和专利感兴趣,面试官2和面试官4对阿里巴巴大数据竞赛感兴趣,面试官3对我的基础能力感兴趣,HR对合作能力感兴趣。面试官3只想问我的基础,虽然多次尝试把他带到我的优势(数据挖掘和分布式)上面来,但是,都被他强制带回去了。其他几位面试官,都是被我有意识地将话题转移到阿里巴巴大数据竞赛上面。正好他们都没有深入了解过这个竞赛,对此有一定的兴趣;然后,大部分时间都在讨论这些内容了。
总而言之,把自己的优势发挥到极致。

最后,感谢本科同学Jason帮我我指明了学习方向,以及给我的各种建议。还有导师、朋友和同学对我的支持和帮助。


关于我的学习经历
有人问我学习路线,我觉得这个因人而异。我简单说下我的经历吧。流水账,仅供参考。
关于本科
本科学通信的,计算机的基本课程(C/C++、操作系统、计算机网络等)都学过,但是不深入。做过电子设计竞赛。从PCB到单片机程序,再到Linux编程;或多或少都学习过一些。
研一
研究生,控制工程。研一主要在学习课程;与此同时尝试寻找自己以后的路线,未果。
下半学期学完所有课程之后,开始做项目。“滑坡预警系统”。大部分工作都偏嵌入式方向,包括无线传感器网络和简单硬件。但是,写的论文和专利涉及到了预警模型;所以,一般跟面试官交流的时候,我只强调这一部分。项目从5月左右份持续到了11月份左右。
研二
从十一月份开始,学习Java,通过Hadoop来学习大数据,直到第二年开学。开学之后,回头想了想似乎没学到什么东西,只是懂了一些概念而已;感觉学习方法有问题,方向定位不明确。
其实,后面我才意识到,学习大数据可以从三方面下手(只是个人的不成熟的理解,仅供参考):
1、阅读Hadoop、Spark等原码:其实只要看其中一方面就可以了,比如HDFS。当然,写一些MapReduce程序,就更好了。千万不要纠结于去搭建平台,我感觉纯粹是无用功。因为,这就相当于去学Linux,却把经历放在了安装各种版本的Linux系统上面。
2、我觉得大数据的本质一:数据挖掘->机器学习算法。要把这个学好需要很好的数学基础,并花费很长的时间。慎重选择。
3、本质二:对问题进行建模,对数据和业务的理解。这个最好通过项目和竞赛来学习。

之后,与同学一块做了一个非常简单的微博WEB应用,花了一周左右。后来由于阿里巴巴大数据竞赛,没有继续去完善。通过这件事,我觉得从实践中学习,收获最快。因为,我在这一周之内接触了JS, HTML, PHP, 并了解了bootstrap框架;解决了很多问题。
做这件事,使我明白了一个道理:想法很重要,想法驱动实践;不要畏惧没有接触过的东西。比如,我想实现某个功能,我先把思路整理好,然后,按照我的思路去查找我需要的函数,然后调试。
后面无论是参加竞赛,还是去学HDFS都受益于这个道理。

一周左右之后,便去参加阿里巴巴大数据竞赛,持续三四个月。这段时间,学习到的东西最多(其实我的简历上面很多技能都来源于此)。学到的语言:Python、sql(各几万行)。还有数据挖掘、推荐系统、机器学习、MapReduce等。期间,对机器学习进行了系统学习,并做了一些笔记放在博客上面:ML。但是,学习时间太短,不够深入。

后面,又参与了一个新项目“山火识别算法”,进行了简单的学习和算法仿真。对于这个项目,面试的时候,我会重点强调机器学习算法,跟我做的阿里竞赛很相关。真正放在上面的经历总共一周左右,但是足以应对面试官。当然,现在我还在做这个项目。

后面,我感觉分布式挺重要,并对其有点兴趣。就看了这本书《Hadoop技术内幕:深入解析Hadoop Common和HDFS架构设计与实现原理 》,理解一下核心思想(这本书内容很多,我只是选择性看的)。然后,自己写了一个非常简单的HDFS。总共用了半个月左右的时间;期间,也在复习找工作的相关知识。

另外,尝试在用Github,学习了一下简单的LaTex,用hexo搭建了个人博客。 如果想学LaTex写简历的话,只看我的那两篇博客就行了:LaTex。LaTex排版优美,对于程序员来讲,最好了解一些。

最后,再强调一下:想法很重要,想法驱动实践;不要畏惧没有接触过的东西。这两点也许并不完全正确,但是对我影响最大。这也是,我研究生的最大收获之一。
总结
其实,我就是一个普通的人做着普通的事情。
仔细想了想,或许我面试通过的关键在于:
1、扬长避短,充分发挥自己的优势。
2、表达能力:或许我们工科生不善于表达,但是,一定要逻辑清晰并自信的表达出来。
3、一定的相关技术积累。

关于自己的技术积累:
1、做好自己的项目,跟老师和谐相处,互相理解:导师给我的任务(项目、论文、专利),我都会顺利完成;所以,导师也很支持我学习新东西,甚至参加比赛。
2、探索自己的兴趣。
3、与优秀的人交流:感谢Jason对我的“洗脑”。
4、新技术:数据挖掘、分布式。

关于一个好朋友的技术积累(同去阿里):
1、基础扎实,足够深入。就算被问死,也会得到面试官认可。掌握:操作系统,网络(TCP Socket),数据结构和算法(递归和排序)。
这一点是他去阿里关键。他看书很认真,认真到如果一本新书被他看一遍,让人感觉这本书至少被翻过几十遍。
2、游戏应用:框架,优化。他参加了我们学校的手机APP大赛,似乎拿了个二等奖。他没做过游戏,也没有真正使用过C++,但是他用一周时间就用C++实现了基本功能。所以,还是前面那句话想法很重要,想法驱动实践;不要畏惧没有接触过的东西。
3、看一个源码。比如,他本想看Nginx,但是时间太紧急;就把uCOS2看了几遍。

一些不太成熟的建议:
1、相关项目:这个最重要;但是我也没有,只能通过自己项目中的某一点来找联系。
2、相关竞赛:我还是觉得ACM应该最重要(可惜我没参加过);然后就是互联网公司举行的数据挖掘、安全方面等竞赛。
3、论文和专利:又想到了我的某个做IC设计的同学:5篇论文(3篇SCI);15项专利。现在已经有5个Offer了,还是走的社招路径。当然,他找工作,靠的是项目经历。
3、源码:建议关注一下分布式或者数据挖掘方面的源码。我只是看了HDFS的很少一部分代码,还是通过《Hadoop技术内幕:深入解析Hadoop Common和HDFS架构设计与实现原理 》看的,主要是书写得很好,要不我也看不懂。
4、博客:以前觉得那些写博客的人是不是闲的没事干,来给我们无私奉献。后面才懂了,其实写博客既是对知识的总结,更是对自己实力的证明。想想看,要是你的博客在csdn排在前一百名,还愁工作吗?比如,这个美女的博客:Rachel-Zhang,似乎早早地就去百度了。
5、Github:如果你是一个贡献值,我觉得就是工作来找你了。我只会简单的使用,并在尝试多用医用,仅此而已。
6、开源社区:stackoverflow,里面都是大牛,机制很完善;如果你的Reputation能超过100,那么找工作就so easy了。
7、领英网LinkedIn:这个更主要是面向在职的人员。
8、总之,对于源码、博客、Github、开源社区,任意一项能掌握或者精通。那么你就是大牛,工作肯定就没问题了。我就是那种一项都没有做好的人,都懂一点点。

PS:以上全部是个人想到的,可能并不成熟,有取舍的选择。这就好比,别人帮我修改简历找到了他认为的20个错误,如果我认同5个甚至1个,那么我觉得对我来说都帮助很大。

by DanielJyc                                 Github
0 0
原创粉丝点击