記阿里巴巴一面

序幕     

        今天去阿里巴巴面試了,先講一下大概的流程,具體題目後面再說。阿里給我安排的是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萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章