網上一牛人的阿里五面

一面(電話面 1一個小時左右  
約投遞一週後接到電話,問了大概以下問題,時間比較長了,記得不太清楚了

1 ArrayList和LinkedList有什麼區別,能否序列化

1) 因爲Array是基於索引(index)的數據結構,它使用索引在數組中搜索和讀取數據是很快的。Array獲取數據的時間複雜度是O(1),但是要刪除數據卻是開銷很大的,因爲這需要重排數組中的所有數據。

2) 相對於ArrayList,LinkedList插入是更快的。因爲LinkedList不像ArrayList一樣,不需要改變數組的大小,也不需要在數組裝滿的時候要將所有的數據重新裝入一個新的數組,這是ArrayList最壞的一種情況,時間複雜度是O(n),而LinkedList中插入或刪除的時間複雜度僅爲O(1)。ArrayList在插入數據時還需要更新索引(除了插入數組的尾部)。

3) 類似於插入數據,刪除數據時,LinkedList也優於ArrayList。

4) LinkedList需要更多的內存,因爲ArrayList的每個索引的位置是實際的數據,而LinkedList中的每個節點中存儲的是實際的數據和前後節點的位置。

兩者均可實現序列化

2 如何判斷鏈表是否有環

如圖,如果單鏈表有環,則在遍歷時,在通過6之後,會重新回到3,那麼我們可以在遍歷時使用兩個指針,看兩個指針是否相等。


方法一:使用p、q兩個指針,p總是向前走,但q每次都從頭開始走,對於每個節點,看p走的步數是否和q一樣。如圖,當p從6走到3時,用了6步,此時若q從head出發,則只需兩步就到3,因而步數不等,出現矛盾,存在環

方法二:使用p、q兩個指針,p每次向前走一步,q每次向前走兩步,若在某個時候p == q,則存在環。


3 concurrentHashMap如何實現

這個實現分析還是比較複雜的,詳見牛人博客:http://www.iteye.com/topic/344876

4 集羣服務器 如何application 共享
5 四個表 記錄成績,每個大約十萬條記錄,如何找到成績最好的同學

6 AIO與BIO的區別

詳見:http://bbym010.iteye.com/blog/2100868

7 DirectMemory是否瞭解
8 對JVM瞭解多少?我當時提到了內存模型 ,他問我工作線程的內存如何釋放
9 JVM的垃圾收集算法瞭解多少?有哪些垃圾收集器
10 是否瞭解紅黑樹
11 session的生命週期是多久
12 關於Mina框架了解多少?(因爲我在項目裏用到了Mina,所以提到了這個部分)
13 是否瞭解Linux
由於大概四個月過去了,能記住的只有這麼多了。一面大概持續了一個小時吧,總的來說問題廣而雜,而且會比較深入。這就是大家所謂的壓力面試,面試基本在一個聊天+面試的氛圍中進行。面試官的跳躍性很強,時不時地聊天,又會突然提問。印象中還有更多的問題吧,實在記不清了,而且我當時也沒有全部回答上來。
二面(電話面 20多分鐘) 
本以爲一面掛了,結果還是在幾天後接到二面電話。他首先自我介紹是XX事業羣的總監,基本就是聊天,沒有任何技術問題。比較關心如果發offer能否全職實習的事。很輕鬆,也很意外。
三面(交叉面 30分鐘) 
第三面是杭州的電話(前兩面都是北京),很明顯就是大家所說的交叉面(前面的叫部門內部面試)。從他的問題中我能感覺到他完全不知道前面的面試官問過我什麼問題,後來事實證明在面試系統裏面應該只有評價,所以不要以爲面試過的問題不會再問了。
1 介紹自己的項目,問我項目中用到的websocket,問我websocket有哪些優缺點
2 HashMap和ConcurrentHashMap的實現
3 JVM內存都分爲哪些
4  是否瞭解數據庫的索引是如何實現的
5  對Linux是否實踐過?(幾乎沒有問,因爲我只說我會用簡單的命令)
三面總體說比較機械,沒有過多的廢話在裏面,一個問題接着一個問題,不會就過,感覺有點無情。而且也沒有最後的提問環節
四面(北京終面 1小時左右  
首先說爲啥要去北京。其實我也不知道,當時以爲是內推掛了,沒想到收到短信邀請參加現場面試,內推的姐姐也讓準備一下HR面之類的,但是我當時就覺得肯定還有一輪技術面。而且當時已經知道要擁抱變化了,所以這個技術面肯定不好過。記得去北京的時候,準備了厚厚一摞的複習資料,全部都是自己的博客總結以及自己想的問題,事實證明基本命中了技術面的全部題。
面試的場面就不說了,略顯冷清(大家都知道原因)。被叫號後領入一個大廳,跟面試官1V1,一個小桌,一個Apple(真想問問他蘋果筆記本怎麼樣,忍住了),桌子上有幾張紙,沒有很緊張。
首先講了自己的項目,而且在紙上畫了畫結構圖,項目引出的問題
1 BIO與NIO的區別
2 爲什麼要用Mina框架
3 Mina框架的實現原理
項目講了很久,總得來說這個過程是我來主導的,我有意在說出了一些點,然後他就問了我相關的東西。
然後讓我在紙上也一個HashMap的實現,set get方法,不要求線程安全。因爲真的看過hashmap源代碼,沒什麼壓力,不過hash傳播算法確實沒寫出來,不過他也不太在乎。在我寫的時候,他在看我的技術博客(博客地址是我寫在開放性問題裏面的)。寫完之後他看了一下,也沒說什麼,不得不說寫的挺亂的,沒有特意練過筆寫代碼,只說一個判斷可以進行短路優化。
後面他又問我一個博客上寫的問題,volatile和synchronized的區別。
問題不止這些,確實記不住了。後面跟他聊天中我就知道自己過了,能看出來他比較欣賞我的技術水平吧,尤其是對一些細節的掌握
五面(HR面 20分鐘左右吧)

HR面嘛,大家都知道就是聊天,然後她不斷對你評估。說一些問題吧
1 自己做過的項目
2 自己在大學期間有哪些做到了0到1
3 如果去問同學,他們會對你有什麼評價
4 遇到了什麼困難
5 喜歡哪個城市 

總結

以上說了那麼多,當然我要說這應該只有所問的題目的一半吧,因爲確實忘了。我覺得大家如果實在想知道到底都問的是什麼,可以看看其他人的面經,在我看來這些問題真的差不多。我最後沒有拿到阿里的offer,這不能說自己在擁抱變化,只能說自己還不夠優秀,下面講一下如何準備面試吧:
(1) 平時多看書,面試前看面經。有人說這不是廢話嗎?但我敢說大部分只做到了後半句,甚至有人都不知道還可以有面經可以看。我承認面試可以突擊,可以看看別人的面經問了什麼,自己查一點答案就背。但是這樣在面試官前面你首先就沒有自信,你會覺得那是我背的,在不斷回憶的過程中怕的是背錯,而不是一個正確的回答問題的過程。你以爲面試官真的看不出來嘛,那他對比一下也知道誰在背了。
(2) 好好包裝自己的項目。確實不是每個人都有很好項目,但你應該知道面試中總考的點是什麼。看我的面試經歷,有多次提到NIO與BIO,這是一個熱門考點,但我要說的是所有的NIO與BIO問題都是我引導面試官問我的。因爲我在介紹Mina框架的時候,我有意的提到NIO,那麼他們馬上就會去問這個知識點。所謂的項目,我覺得面試官是想知道你在項目中學習了什麼。不是說你學習了哪些編寫代碼的規範,而是說你學到了哪些他們感興趣的點。
(3)養成寫博客的習慣。阿里的簡歷選項中有一個讓提交github地址的地方,悲劇了我沒有。但是我仍然想讓面試官瞭解我,那麼只能通過開放性問題了。在一個顯眼的位置寫上自己的博客地址。曾經在一個騰訊的面經裏面看到,面試官對面試者說我們看了你全部的技術博客。博客不是讓面試官看到你技術有多牛,而是讓他們看你是如何學習的。把你的學習的點滴寫在博客上,哪怕只是Integer類的緩存,他們一旦get到這個點,就會覺得你的學習能力很強,會對你有一個很好的印象。PS:面試我的技術官都有看過我的博客,我相信它給我加分了。
(4)利用好“你想問我什麼?”。這個問題一般出現在面試的結尾,不要以爲自己沒用的,你能瞭解到很多。記得我在終面的時候問那個面試官“你對我的技術有些建議?我未來應該朝哪個方向努力。”他對我的面試過程以及博客進行了點評,而且把前面的面試評價給我講了講,簡單了提了一些建議。我覺得這建議勝過讀幾本書。據說阿里的終面面試官一般都是P10(可能不是哈),他們是牛P了,有多少人有這樣的機會去接觸到這些牛人,並且給你做指導呢?有這樣的機會爲什麼不抓住呢。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章