记阿里巴巴一面

序幕     

        今天去阿里巴巴面试了,先讲一下大概的流程,具体题目后面再说。阿里给我安排的是4点半的场次,不过下午没什么事情就早早的去了,大概两点钟吧到了南大南园教学中心,到时已经有一二十号人在排队了,跟管理的美眉说了一下情况,她就把我的简历抽出来放入队列中去了。感觉阿里面试的效率还是蛮高的,快的话二三十分钟一个人吧,慢的话也有五十分钟靠一个小时的,到了三点十分的样子报到我的名字了,虽然是第一次正式的面试,我感觉也没啥紧张的,进去了发现有七八张小桌子,每张小桌子一个面试官吧,我被带到了最里面的小桌子,面试官是个和善的年轻人,据外形和口音估计,应该是福建人吧。

        面试官先介绍了一下他自己,然后让我自我介绍一下,感觉想说的有很多,这点在下面的面试中一定要注意,要事先准备好自我介绍,即使是中文的,也要心里有谱,要有序、有特色、有亮点,否则即使你说了很多,面试官也理不清楚你到底说了些什么,第一印象就是这个人没什么条理,冲上来乱七八糟的说一通。我想如果分点来说会比较好,比如说整理出第一说个人基本信息,第二说专业方向,第三说对公司的了解,为什么要来这个公司。每个点都要简洁明了,加起来最好两分钟左右吧,下次一定一定要好好准备。

        下面面试正式开始了。

 

第一节——基础考察之数据结构

问:你的什么课程学的比较好,数据结构、编译原理或者操作系统网络等。。。

答:略懂数据结构

问:请你讲讲常用的数据结构有哪些,它们都有什么特点。

答:(当时脑子很乱,数据结构都好多年前的事情了,不过面试前我把C++的容器好好看了一遍,以为这里能忽悠过去)balabala扯了天花乱坠,开始讲,我想从C++的STL的数据结构说起,因为这样比较具体(面试官点头),然后开始背书,STL的容器。。。里面有序列式容器和关联式容器,然后扯到vector,list,deque,stack,queue,然后再扯hashtable,hashmap和avl tree,神马的,总之扯的东西是从这篇文章里面来的,这里就不再说一遍了http://www.cnblogs.com/dong008259/archive/2012/03/06/2380724.html

看不出来面试官是否满意,我想常用的数据结构及其特点应该是常考的题目,所以应该时常复习,http://www.cnblogs.com/adforce/archive/2011/04/19/2020661.html这篇文章总结的很好,要时常拿出来看。

问:常用的哈希函数有哪些?我们再遇到某一具体问题的时候,应该根据其什么特点选择什么样的哈希算法。

答:第一个问题感觉回答的还行吧,具体见百度吧http://baike.baidu.com/view/329976.htm,第二个问题比较难,我也答的不是很好,网上貌似答案也不多,希望高人赐教。

 

第二节——基础考察之算法&操作系统

问:怎么在判断一个元素是否出现在某个数组中

答:如果该数组是有序的那么可以用二分查找,时间复杂度是O(lgn),如果是无序且无其它信息的话只能遍历了,那么时间复杂度O(n)。(显然这个问题只是开胃小菜。。。暴风雨还在后面)

问:如果是链表怎么办?

我问:是不是排序的单链表且只有头指针?

考官答:是有序的,可以改造链表,比如可以构建双向链表,只有头指针。

答:(其实当时没有任何思路,但是说不知道是面试场上的大忌)如果是单链表且只有头指针的情况下只能遍历,那么算法的时间复杂度是O(n),如果是双向链表的话,即使从头和尾分别进行搜索时间复杂度也是O(n)。如果实在要提高查找效率的话,可以用一个数组存放各个结点的地址指针,那么就可以在单链表上做二分查找了,那么时间复杂度是O(lgn)。(其实能想到这个算法我觉得自己已经过关了。。。后来证明我弱爆了)

考官:可以在链表上改造,不能用其他额外的空间。

我:。。。。。。。。。。。。。。。。。。。。。。。实在想不出来了,没答出来。

其实这里可以用一个特殊的数据结构叫做跳表,也就是skiplist,不过在给我三个小时我也想不出这种复杂的数据结构的,下面附skiplist的介绍,这里不再重写一遍:http://blog.csdn.net/caoeryingzi/article/details/6018070

考官:写一个程序吧,实现一个队列,这个队列有入队和出队操作,并且要同时考虑多线程的并发访问。

我:(来之前把操作系统的并发控制好好的看了一下,内心暗喜),这个网上有很多资料,我就不把自己的naive的东西放上来了,传送门:http://wenku.baidu.com/view/1babd9204b35eefdc8d3337a.html,我是用的双向链表实现的,感觉双向链表在出队是速度会更快一点。

 

第三节——研究方向

问:请说说hadoop的系统架构。

答:分别说了namenode、datanode、jobtracker、tasktracker的作用以及他们之间的结构等。

问:在hadoop上做过的数据挖掘算法。

答:naivebayes、bp neuralnetwork、pagerank、invertindexing...

然后说了一些算法的实现,感觉这些我说的都很轻松,他就不问这个了,下面开始问复杂的了。

问:hadoop的分布式环境下比单机环境下的效率提高多少。(对这个问题要好好准备)

答:不能一概而论,如果数据规模小的话,hadoop分布式系统的性能可能还不如单机,只有当数据量巨大的时候hadoop才能展现出它的优势。

问:好,那么请你说说hadoop的系统开销从哪里来。

答:1 网络开销 2 资源分配/任务调度的开销 3 文件读取的开销(文件要从hdfs中读取) 4map-reduce编程规范的开销5 hadoop所基于的java语言本身效率就不高。其实是瞎扯,因为我自己也不太懂,这个问题在网上也没有很好的答案只是我觉的还应该考虑分布式系统本身的一些内耗,比如说分布式系统需要花很大的精力来应对失效问题,系统时钟不同步问题,死锁问题等,再深入的我也不太会了。

问:知道hive这个工具吗

答:用过

问:请你说说一条sql语句在hive中是怎么执行的

答:。。。。。。。。。

囧态不再描述,这份ppt总结的很好http://wenku.baidu.com/view/28609b80bceb19e8b8f6bab8.html

 

第四节——项目相关

项目答的还行吧,主要事先把做过的每个项目都总结了一份材料,打印出来,感觉对着打印材料说总比说空话要有说服力的多。

 

尾声

面了有一个半小时吧,感觉聊了好多好多,本来以为有机会进二面的,谁知道他让我先回去。。。其实我心里明白我已经挂了,但是男人嘛,拿得起放得下,工作这种事情本来就是个双向选择的过程,起身,友好的握手,第一次面试就这样以失败告终了。

 

总结

1. 事先一定要准备好自我介绍,这是给面试官的第一印象。

2. 数据结构很重要,常用的基础的数据结构更加重要。操作系统方面,面试官忒喜欢靠进程同步,这里是个重点。

3. 对自己常用的技术或是工具等万万不能停留在会用的基础上,一定要去了解它的实现的机制,以及它的优缺点和可以优化的地方。

4. 事先把自己的项目整理出来并且打印出来带去面试往往会有很好的效果,你做出来的实实在在的东西永远比你坐在那说几句话更加能够令人信服。(后来结束的时候面试官要走了我的项目材料,说他回去再看看,是不是说明我还没有完全挂掉?)

5. 自信是面试成功的第一要素,虽然我没有通过面试,但是我对自己的表现基本满意,面试全程基本没有冷场,聊的很High,我也学到很多东西,感谢阿里,再见阿里。
发布了34 篇原创文章 · 获赞 6 · 访问量 25万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章