前言
鉴于在网上搜“阿里三面”搜出来一堆“阿里巴巴三面牙刷”,没有任何借鉴意义,只能自己亲身经历了,故写点经验以后面试可以参考。本人参加了5月5日的笔试,在5月20多号接到了电面,紧接着第二天是电面二面,5月30号经历了传说中的终面,下面分阶段回顾一下整个阿里校招历程。
笔试
5月5号先去参加了蓝桥杯,然后赶回学校笔试,稍微迟到了一会儿。幸亏阿里检查了身份证!才发现忘在了考场。。整个笔试有些心不在焉,不过现在想想,有些不会的题就算时间多了还是想不出来,会的题自然很快就写出来了。题不算太难,肯定还是涉及操作系统,数据库,算法,网络等知识,不算太深。和之前笔试其他公司不一样的地方是有点像数学题的感觉,大题只有最后一个让你写代码了,其他的都是写算法思想就行,还蛮灵活的,起码我没见过,感觉没有平时的积累,准备也没什么用,有的没有积累就当数学题也能做的,不过搞ACM的这些肯定不在话下了~
经验:
1、如果你操作系统的水平能达到考操作系统时的水平,包括网络、数据库等,应付笔试题应该是松松的,因为不会考的很细,都是一些考试重点,很基础的知识。不过忘是肯定的,所以复习很有必要。大题就有操作系统那几种调度方式的周转时间等的填表,可能会忘的东西,但是非常简单。
2、搞搞ACM应该有帮助,算法不会是经典的快排啊什么的,都是类似数学题,有大题有小题,我等没搞过ACM的?丝只能用脑袋干想了。。。
电面一面
电面时间是5月20多号的晚上8点多了,非常突兀,没有通知,直接就是面试的电话。他们规定的面试时间尽量控制在一小时,我面了68分钟,问到后来都抖了,是纯碎的技术面。刚开始有暖场,试图让你放松,而事实上我紧张的不行。。进入正式面试时会问一些问题,感觉面试官那里应该有个题库,就是从里面挑出来问,会的话他可以层层深入直到你不会。。你不会的话自然就直接换题了。。
当时先问了malloc和new的区别,当时感觉不明觉励,以为是要回答到内存中的层面,开辟内存的方式啥的。。说不太了解底层的,感觉都是应用中的区别。。说了new可以有构造函数,传些参数初始化啦之类的。最后问了问面试官,居然malloc是个函数,new是个操作符也算区别!所以不要想得太玄乎,再显而易见的区别只要是区别都可以回答的。。
后来问了代码运行时在内存中的分布,就是堆、栈、代码区、静态区那几个,说说各自是存什么的就行了。后来问了是从低到高还是从高到低啥的,然后他自己来了句好像太深了,算了。。我说了个大小端。。他就问了大小端和什么有关,我说是CPU,然后就问了intel处理器和AMD处理器神马神马的已经过于底层听不懂了呜呜呜。。这个题就算跳过了。。。
还有序列化和反序列化,怎么保证数据的正确性。。这个当时木有答上来,因为没用过java的序列化和反序列化,用的也都是上层的XML,JSON的格式,底层到底怎么搞得不清楚。。让面试官给我讲了半天,他还说“是我面试你还是你面试我”。。搞得我紧张的都不敢说话了。。中间某些人还不停给我打电话,搞得我都听不清。。特别尴尬。。总之越来越紧张。。还问了进程和线程的区别,我就稀里糊涂想到哪里说道哪里了。。用词特别不专业。。
还有个问题是链表怎么判断有没有环路,我说了做个标记,还有固定一个位置看有没有指回来的两种方法,太水了。。面试官提示我说小学有一种题是操场上的追击问题,试图启发我,无果而终。。。其实就是设两个指针,步长分别为1和2,然后看有没有追上就可以了。
总的来说,这第一次电面我是真的越来越紧张,虽然面试官一直试图让气氛变得轻松,但效果甚微。。我是越来越没有自信。。感觉自己太水了。。想赶快结束面试。。不同的题目中间还夹杂着一些闲聊的话题,不过我太紧张了话不是很多,中间会有沉默的时候,感觉好尴尬。。面试官人真的特别好,最后说第二天还有一个面试,指出了我的不足,让我改进,希望我能展示出来自己的优势。他说我基础知识还可以,但是特别不系统,一听就是没有为面试做准备,希望我明天能好好表现。真是感动啊。。表现那么差居然都给二面的机会了。。这么好的人忘问花名了⊙?⊙b汗。。
经验:
1、一面一定是可以准备的,面试题网上都能搜到一些,或者多参加一些笔试,有些简答题和面试题也差不多。而且面试官那里的题库还是挺庞大的,主要是想摸摸底,你了解的他会深入问你,不了解的也没有关系可以换道题。感觉这个时候其实完全没有必要紧张,有不会的很正常,别像我问着问着我声音越来越小都不想回答了额。。
2、做好面试的准备,调整好心态,本来以为这个电话是通知我电面时间的,结果直接开始,心态没调整好,遇到不会的就紧张。。后来问了同时接到电话的大牛,也是有不会的,也有答错的,都一面给过了,所以不用太担心了~一面就是基础知识,加上一点点聊天的辅助,没有问我简历上相关的问题。
电面二面
第二天晚上七八点钟的时候接到了二面的电话,当时刚好自己在寝室,比有室友听着要放松了一些,加上跟同学交流,感觉不会也没什么,总体聊得还挺开心的。这次就是基础知识外加开放题和简历上的项目的了解了。
还好一面那种基础知识的过了也没怎么问了,不过问了序列化,我就是一面那个面试官说的大体讲了一下,呵呵。。然后问了static,说不是static的函数能不能使用static的变量,我说可以。因为这次做好了准备不是很紧张,我的话就多了一些,顺便说了static的函数不能用不是static的变量。我这一说他就问原因,我说了静态的就一份啥的,他让我从什么java的什么机制上说,我也不知道啥意思。。我就说static在静态区,一个类就一份,非静态的成员变量得new才能有,而且在栈上,没法访问什么的blabla...
再有就是详细聊了聊简历上的项目,最后问了个“为什么银行有取号机而超市结账的时候没有”,我着实想了一会儿。。刚开始想到的是银行有VIP啥的,但是面试官马上说那超市也可以有VIP队和非VIP队,有道理啊。。然后就想到超市有取号机的话感觉取号机前面会排队,因为结账时间比较快,和取号叫号相比差别不是很大,而银行办理业务比较慢,差别就大了,所以超市没有必要。他说我没有看到问题的本质。。唉。。他好像是要提示我,问我一面有没有问我操作系统的知识,我说问了进程线程的区别。他又说让我举个异步的例子。。发现天天说ajax异步刷新啥的,对异步不怎么理解啊。。人家还给我解释了一下异步。。又被鄙视了。。不过现在想想银行是异步,超市是同步,可是我还是不知道为啥啊。。问了好多人也没什么特别好的专业性的解释,我还问了三面的面试官,他说这是个开放性的题,是想看我解决问题的思路的。