现在的位置: 首页 > 综合 > 正文

2014.4 阿里实习生招聘面试经历

2017年10月17日 ⁄ 综合 ⁄ 共 7130字 ⁄ 字号 评论关闭

一、      笔试:

首先简单的说一下阿里的笔试题,笔试实在3月29号晚上,全国统考,刚好那天下午是TX的笔试,一天考两场,而且考场在不同学校,还是蛮累的。阿里的题首先是20道单选,然后是4道不定向选择,然后是填空题和简答题。还有一道java方向的附加题,监考人员说明阿里需要大量的java工程师。感觉比TX的题好做,考试范围相对没TX那么广,阿里很喜欢考概率题,这次不下于三道吧,还有智力题,没有编程题。总体而言难度还好,但感觉刷人刷的比较明显。然后后面一个月开始了全国各大城市的面试之旅,每个城市都是待两天吧。武汉在行程安排上是最后一站,所以直到24号才面试,时间有点久。之前刚好已完成TX的面试,也算有了一些经验。

二、      一面:

面试地点是君宜王朝大饭店,不是面试,还真没机会进去,-_-。中午12:20到酒店后,先签到,签到的时候会问你面什么方向,C++还是java,貌似还有一小部分是C语言。签完到,在大厅等,有水还有小吃,和旁边一起等的哥们瞎扯。期间得知此次武汉站阿里不接受霸面,给出了理由是时间和面试官有限,不过还是把简历收了,如果合适估计还是会给机会面试。大概不到1点的时候通知去一面。一面在一个大房间,很多小桌子围成一圈,1V1。

1. 简单的自我介绍,对参加的竞赛了解了下。

2. 项目上的改进,有什么应用呢?项目怎么做的,说流程,并基于内容提了几个问题。

3. 在地图上给定两个点,怎么搜索从一个点到另一个点的最优路径。直接回答搜索算法比较好的应该是A*启发式搜索,然后问A*是基于广搜还是深搜的,回答基于广搜。再问还会哪些其他搜索算法,说一下具体实现。就简单的回答Dij,DFS,BFS的实现关键点。

4. C++基础:多态怎么实现的,多态的内存分布,构造函数可以是虚函数吗? 画内存分布图说明。

构造函数可以调用虚函数吗,编译能通过吗?可以运行吗?我说我知道这样调用是肯定有问题的,我肯定不会这么用,因为先调用基类构造函数,再调用子类,如果在基类构造函数中调用虚函数,此时虚表还未建立完整,调用子类虚函数肯定有问题,但这样能不能编译就不确定了,感觉可以编译,有点不确定。

面试官笑着说你回去试试吧。回来查了下编译是可以通过的,但是运行出来的结果是不确定的。

5. 算法:知道哪些排序算法,堆排序、归并排序、快排的时间复杂度各是多少,分析平均时间和最坏时间复杂度,快排怎么实现的。

给定一个已经排序的数组,然后统计其中出现次数最多的那个数,写代码,还因为最后那个字符是否考虑到了有个讨论,的确是考虑到了,然后他觉得没考虑到,就说要是让你输出所有统计次数呢,继续改代码,这次的确最后一个数在else里面没统计进去,但是与max的比较是在if/else之外啊,的确与max比较了,好吧,然后就没深究了。

6. STL: 知道vector吗,一个自然数数组,要删除其中的奇数,写出代码。这个需要注意的是erase删除结点,则该结点的iterator会失效,同时erase会返回下一个有效迭代器,所以iter++只有在偶数的时候才运行。

继续问到iter++和++iter的区别,回答前者会产生一个临时变量,后者的效率更高,如果前面有=的话,得到的值不一样。

vector是怎么存储的,如果让你实现vector,你怎么做,首先说了下STL里面的vector,内存如何分配的,构造函数等等。开始用数组实现vector,然后问一定要写成类似MS提供的STL里面的vector,提示说不用,写个基本框架就可以了,就直接写vector代码,然后写vector的插入操作,注意vector满时要重新分配两倍的内存空间,将原数组拷贝进去。

vector是线程安全的吗,解释了下,貌似我没说出本质,有点犹豫,然后说要是多线程操作vector的插入操作,会不会有问题。这个其实和两个线程同时对一个变量进行赋值一样的,所以肯定是不安全的,需要加锁,有可能插入两个数据了,而finish就加了一次这种问题。

期间问到有没有看过STL源码,回答看过,对STL里面各种编程思想感触很深。

7. 计算机网络:三次握手,四次挥手,握手阶段什么时候可以传数据,四次挥手为什么客户端要再等待一会?画图说明就可以了。

8. 操作系统:进程和线程是什么,区别,多线程知道多少,互斥量、事件、信号量怎样用,(我说还有临界区CRITICAL_SECTION,他没明白,貌似他没用过,囧)因为我说的是windows下的互斥量,而公司显然是在linux下开发的,linux下是没有临界区这个的。

现场写一个生产者消费者多线程程序,我写了一个生产者一个消费者的,然后问怎么优化,第一时间还以为要从算法的角度去考虑优化,提示说高并发,然后我就说用信号量可以实现并发,多个生产者和多个消费者,既有同步也有互斥,balabala解释一阵。

9. linux下的命令行知道多少,top命令用过没有,fork()函数用过没有,说了下,简历上写用过gdb调试,问如果用gdb调试像fork()这样的多线程怎么调试,直接说只调试过单线程,这个真没试过,囧...gdb怎么调试,我说,加断点,然后单步调试如何如何,然后问,你觉得多线程里面的断点调试怎么实现的。好吧,这个问题还真没想过,想了下,我说执行到断点就线程挂起,然后等待执行下一步的命令来唤醒线程。不知道回答的对不对。

10. 大数据:给定1G文本,文本每行是一个单词,现在可用内存很少,假设1M,怎么统计文本中出现频率最多的10个单词。TOP K问题,回答类似map-reduce,分而治之,将大文本分为多个小文本,即使用hash函数将相同hash值的单词分到同一子文本,直到内存能装下,再hashmap统计次数,最后建立元素为10的最小堆,即可完成。问这样分成多个小文本IO开销太大了吧,回答是的...然后问这个算法的时间复杂度,解释了下统计和堆的时间。

11. 开放性问题1:你是怎么学习C++的?首先是先看书,C++ primer和深度探索C++对象模型都看了几遍,然后自己对不懂的地方在网上查资料,同时自己编写小的演示程序来测试,更直观的是反汇编,看汇编代码,总之一定要搞清楚研究的对象在内存上是怎么存储的。然后又以虚函数为例说明了下。

开放性问题2:除了学C++外,你还学过或者想学哪些其他的东西。回答想学nginx,问为什么要学这个,我说nginx已经被阿里腾讯等大公司所使用,尽管是web服务器,但是它里面使用的多线程高并发和内存池等知识都有很好的学习价值,有必要扩展自己的视野。算是闲扯。

12. 了解到我研究生的研究方向是图像处理中的模式识别这块,就问如何实现车牌识别,你觉得应该怎样做。这个的确没有做过相关的,从一般的处理方法出来,车牌字符比较大,而且边缘明显,所以用滤波加二值化和膨胀等形态学处理应该就可以得到,可能效果不好。复杂一点的就是提典型特征+神经网络SVM等分类器了。大致描述了一下流程,然后就没多问了。期间还问了发表的两篇文章是做的什么,稍微说明了一下。

13. 以后要做什么方向,系统还是业务,客户端还是服务器端,假如要你来阿里做java愿不愿意,算是闲聊,同时了解了下阿里的业务。不了解的可以叫他介绍下各是干啥,说下自己的想法,随机应变。

面试一个小时10分钟左右,旁边的那个面试官都换了两个人了,我还坐在那说,最后面试官终于开口说没问题了。

 

总结:只要你敢写在简历上,他就敢问,当然一面问的的确够基础,要求写出代码的一定要保证正确,编程习惯也要良好,对输入的指针进行判断,只要的东西最好用图示展示清楚,开放性问题考察时间规划和思维运转,总之不能冷场,最好是能说点东西出来。

     

三、       二面:

一面结束后,出来等结果,工作人员会告诉你,要是继续等下一轮面试就表示面试通过,要是说回去等通知就是跪了,这时在来往上是可以查到自己的状态的。出来后通知过两个小时面二面。之前有同学说阿里就二面,第二面是技术面试官和HR一起面,而且二面主要倾向于项目这块,然后就在大厅等,等的差点睡着,后来和旁边的哥们闲扯了下,终于在5点的时候通知去二面。二面在上次参加宣讲的会议室,大多数是一个技术面试官和一个HR面试官一起2V1。

顺便提一下阿里的宣讲,一个多月前打电话给内推的同学去参加,去了后发现只有我们学校的,是专场,大概就50人的样子,形式与其他公司有点小区别,不过觉得这样一个讨论的过程还不错。最后大家分组还讨论了一道题。

二面面试官那居然只有一个人,惊了个呆,了解到HR不够,所以就没有HR参与这轮面试。好吧。

1. 简单的自我介绍。

2. 果然是项目,说一下你认为印象最深刻的项目详细说一下。然后和面试官讨论,问应用方向,问具体的优化,各种细节吧。这个自己做过的项目,说起来还是比较容易的。讨论时间有点长。

3. STL会是吧,那写个stack的实现代码,最好不要用其他容器。好吧,我还想要不直接用deque来实现,又觉得没必要搞这么麻烦,还是用数组吧,然后写push,top,pop,主要也就是注意下栈满和空的时候。写完讨论了下也没再问了。

4. 多线程了解多少,好吧,那就从最简单的线程进程说起,区别联系,说完以后,问就拿今天面试官与面试者来说,假设m个面试者,n个面试官,你写个多线程并发的程序来描述这个过程,可以写伪代码。这个其实还好,创建资源为n的信号量,即可实现。

5. 说说你对面向对象的理解。首先面向对象的三大特性和6大原则,每个再稍微啰嗦两句,再结合一下平时编程的心得大致谈谈。

6. 又问到图像上的文本识别问题,好吧,结合对图像处理的理解,说了几种方法,也不知道面试官自己懂的多不多。可能也是考察能不能活学活用吧。

7. 最后感觉面试官可能有点累了,说话不多,也不提问,在电脑上记录什么,有点尴尬,然后我就说我能不能问个问题,他说可以啊,我就说阿里的共享业务事业部是干啥的,为何它和聚划算啊天猫啊淘宝啊等等业务都有关系,他来了句“你还知道共享业务事业部啊”,囧,然后给我介绍了下中间件,以及大致的业务运转流程。解释完问还有没有问题,我说没有了,他说那差不多行了。

总结:二面问基础问的不多,而是偏重于你实际的项目,所以不管你项目做的什么,一定都要对整个流程有细致的把握,这样无论问哪个方面,都可以根据实际情况回答,还可以根据面试官的提示对细节进行改进,一个讨论的过程。

     

四、       三面:

二面结束的时候,问二面面试官,是否二面就是终面,他说是的,但是如果你两次面试都是A,就还有一轮交叉面。听起来很高端,然后出来等,那时候已经6点多了。过了会,工作人员找到我说你还有一轮要面,问是否今天面,还是明天面,果断明天面,今天再面下去还不得崩溃。

第二天早上10点下大雨,到老地方签到等,第二天来面试的人已经很少了,大厅等的人没几个,而且在签到表上没看到别的来面交叉面的。在10:30的时候,通知去面试,然后私下问了下工作人员,不是只有两轮面试吗,为何还有交叉面,这是啥面试。他说证明你不错,公司想进一步了解你,所以就加面了。进去后,发现是一个技术面试官和一个HR。

面试流程还是自我介绍,问项目,说一个最熟悉的项目,然后讨论;叫我写vector实现;如何写多线程,项目中怎么用的,进一步讨论;最后又是图像上水印文本的识别。好吧,整个技术面和第二面没太多区别,就不多写了。大概面了半小时,HR姐姐发话了,然后开始了最虐心的一轮面试。

HR姐姐的问题主要有:

1. 说一下你的成长经历。我就从家庭情况说起,中学,大学,研究生阶段。其中提到爸妈现在在杭州。最后发现这句话还是很关键的。哈哈。

2. 说一下你的活动经历。说了下大学期间担任班委,负责过班级的财务,然后她笑着问为什么让男生负责财务,因为你数学好才让你负责的吗,囧,我说可能大家是这么认为的吧。研究生负责实验室网络、电脑设备等活动。

3. 大学期间成绩如何,哪一门学的最好。我说主要是数学吧,她说你能不能讲个case,证明你数学学的好。好吧,从数模竞赛获奖,现在研究算法,已经阿里笔试里面出现的概率等数学题说了下。

4.读书期间谁对你影响最大,举例说明。举了本科期间的XX同学,研究生期间就直接说带我的boss对我影响最大,好好的夸奖了他一番。O(∩_∩)o

5. 说一下你在做项目期间,是怎么和其他人合作的,是负责人还是参与者,你和其他人的职责各是什么,怎么分工。还有要是你需要的代码别人没完成,你是怎么和他处理的。能不能举例说明。其中因为一些话不够具体,与她有点分歧,她一定要强调不是感受,是实际怎么操作的。最后回答分工合作的项目是和师兄一起做的,只是参与者,按照分工做好自己的事就没管了,我作为负责人的项目是我一个人做的,没有分工,然后就不再问了。

6. 说一下你学什么东西的心得最多,其中的亮点在哪里。我说学多线程吧,然后问为什么要学多线程,为什么觉得学了以后收获最多,是和学别的东西比还是怎么比,大概花了多久,你是怎么学的,我说看书,自己学demo测试,有问题查资料,然后运用到项目中。她说每个人不都是这样学的吗,亮点在哪?好吧,半天没明白亮点是什么。过了会,她讲她以前学习东西的时候,做笔记,然后和同学讨论,交流笔记,这样就可以学到更多东西,这是她的亮点。然后我说我写博客啊。技术面试官听到后,速度问你的博客地址,然后瞧进去看了下。很不幸的被看到里面我发的一道TX今年实习生招聘的笔试题,然后问你参加了TX的招聘吗,拿到offer了吗,如实回答拿到了。

然后HR继续纠结亮点问题,为什么要写博客,我说这样放在网上,无论我在哪里,我想看的时候都能看到,而且可以分享给别人。她说那你怎么不写文档,我说文档只能放在电脑里,不是随时想看就能看,这时她终于不再纠结这个问题了。已经被深深的伤了。中间好像还问到除了学的这些,你还有什么想学的,然后再次回答nginx,和回答一面时差不多的话又说了下,技术面试官点头表示认同,HR然后问为什么要学,回答为了开阔视野,学习成熟的产品有助于个人的进步。总之,当时已感觉这个HR太能折磨人了,我回答的话总觉得她不够满意。唉。

7. 你以后要做什么方向。好吧,我承认我犯了个错,我说我想做java方向的,因为前两个面试官都问过我以后要是从事java开发,愿不愿意。HR姐姐不乐意了,你是因为阿里java用的多才这么想的吗,你为何要放弃自己擅长的C++,而去用java开发。你不能只看到表面啊,各有各的使用领域啊,如何如何,教育了我一顿。我就频频点头,回答嗯嗯,是我看的太肤浅了,看到网上说现在java用的多才这么想的。好吧,再被伤一次。

8. HR姐姐问,TX的offer是什么部门,说了下,那你去TX吗。我赶紧说如果阿里给我offer,我就去阿里。这时技术面试官来了句“他爸妈在杭州,我们有天然优势。”谢谢顶我,我说是的,这是很重要的一点。终于HR不再问了,说没有问题了,问我有没有问题。我说要是录取的话,大概什么时候发offer。她说大概一周内。然后来了句,你很急吗?我赶紧说不急。真是尴尬。再问还有没有问题,我去,有问题也不敢问了啊,就说没有了。然后就结束了这次虐心的面试。最后HR姐姐起身给我开门,好吧,还是感谢下她吧。

面完二面以后查询的状态就是面试已完成,三面以后也没变化。出来后工作人员叫回去等通知。

五、       总结:     

总的来说,写在简历上的东西都会问到,只有你不敢写的,没有不敢问的,写在上面的一定要搞清楚。C++基础,数据结构,STL,多线程这几点被频繁问到,基础一定要扎实才能不被问倒。引用在T派上看到的一句话,TX笔试题出题组长的建议“《C++ primer》《深度探索C++对象模型》这样的书值得看上十遍”,基础有多重要,各位自己体会。

另外还有图像处理方面的文本识别,每个面试官都问到了,可见阿里应该也是有部门专门做这个的。回来后和阿里的师兄了解了下,发现他就是做图像文本识别的,囧。然后推荐大家写博客,当然要是原创的,自己整理的也行,用来技术交流,技术面试官会去网上看你的博客,更好的就是去github上发布自己的源码,如果你有这些,必然会加分不少。没有项目的就去看开源代码,参加开源项目,这也是不错的选择。

最后面试是一个交流的过程,在这个过程中尽量保持清醒的头脑,淡定的状态,即使有问题回答不出标准答案,也不要说不会,尽可能根据自己平时的积累去说一些可能的方法,面试官考察的是你的思维方式和学习能力。再一些技巧,特别是HR,尽量回避自己不确定的东西,我上面那个要说想做java方向的这是个反面教程,有些问题可以回答的抽象点,例如你的规划是怎样的,可以说自己的优势是做技术,三五年内肯定是做技术比较合适,最好是进公司,而且还要进像XXX这样的大平台公司,随便夸该公司一番,提升自己的技术水平,和公司一起进步,至于再往后,我觉得要根据这几年的积累来决定,如何如何。最好不要说我要转行做管理啊什么的,没必要这么说,你能确定你五年后就是个领导了?

最近在T派上有TX的面经征文比赛,需要看面经的可以去T派上看看,百度T派即可看到。本人TX面的感觉有点随意,觉得没太大技术含量,就没写TX的面经。

 

注:之前看了面经无数,这次是第一次完整的写,当然中间很多问题的回答就直接跳过了,一不小心写了快7000字了,希望对各位有一定帮助,毕竟每个人遇到的面试官都不一样,而且问的问题也是想到什么问什么。总之,基础是最重要的,很多人都认同一句话“没有项目经验,公司可以培养,有经验当然更好;但是公司不会去培养一个基础不好的人”。最后祝各位找到好工作!

抱歉!评论已关闭.