1. 程式人生 > >記一次阿里面試總結

記一次阿里面試總結

一面,電話面:

大概早上9點左右,收到了阿里HR的小姐姐的電話,聲音很好聽,雖然後面不怎麼管我了...跟她約了晚上9點的電話面..然後一整天上班不在狀態,開始各種回顧之前準備的知識.為了這次面試大概準備了半個月,利用每天下班到家8點到凌晨1點30的時間,瘋狂的補充自己的技術棧.感覺進步飛快.

面試從晚上的8點開始,面試官要求線上做一道演算法.不巧的是,我的電腦在不久前剛剛壞掉,所以沒辦法,只能找了樓下一家最近的網咖,找了個相對的安靜的包廂(後來還是很吵~~).

演算法題是:

給出一個無序的整形陣列,給定一個 target value ,要求找出陣列中連續元素相加之和等於target value的元素集合.找出元素下標之和最小的即可.

乍一看題目沒有想象中難,大概是因為我面的是P6.稍微整理了一下(中間思路很多,所以有點亂),在網頁上(阿里有一個線上的網頁)開始敲程式碼.問了面試官有沒有編譯環境,面試官說用人腦編譯一下吧. ~.~

題目不難,從頭開始遍歷陣列,寫2層迴圈基本就可以搞定。但是有幾個點要注意一下:

1.程式碼風格.因為你寫的程式碼,面試官全程都能實時的看到,所以一些好的程式碼習慣要提前培養好.(後面面試官的提問也證明了這一點)

2.注意一些異常Case的處理,比如引數的合法性,空判斷等。

3.演算法的優化,儘可能給出複雜度低,效能高效的程式碼

大概花了30分鐘左右,我提示面試官我做完了.面試官看了一下,指出了一些異常Case的問題,一些演算法中需要優化的地方.另外因為我對一些臨時變數 \ 成員變數的命名已經形成了一定的習慣,面試官問我有沒有讀過原始碼,我說讀過一些,然後簡單的問了一些原始碼裡的命名規則等等. 這裡建議面試者可以讀一讀阿里出的<Android開發手冊> ,裡面有講到一些命名相關的內容,應該會對面試有一定的幫助

後面又繼續問了:

1.多執行緒

2.自定義View

3.Activity 啟動模式

4.讀寫鎖

5.效能優化,耗電量優化

6.還有一些記不清了,但是都是Android中比較基礎的東西,但會問的比較深入,會直接問到原始碼的實現等等.

7.另外比較重頭的就是專案了.專案裡的各種細節都會在這裡被放大,這一塊佔了60%左右感覺

第一輪的電話面總共持續了90~100分鐘,感覺還Ok,面試官評價也還可以.~~~

-----------------------------------------------------------------------------------------------------------

阿里二面,現場面

不得不說阿里的效率真的很高,前一天晚上剛面完電話面,第二天早上就有了二面通知。於是約了晚上9點的現場面。

8點30左右早早的到了阿里的大樓,等了沒多久。面試官就拿著簡歷出來了。

進去一看,感覺架勢不對~竟然是三人的群面。瞬間壓力山大。。。

首先自我介紹,然後開始講做過的專案以及專案中負責的內容。

然後就開始對專案裡的內容進行深入的挖掘,這期間只要對專案足夠了解,應該是沒什麼大的問題。從效能調優、設計策略、實現細節、優化空間幾個維度展開討論,這個時候我覺得只要把你會的跟你做的內容能準確的表述給面試官就好了,千萬不要緊張。我剛開始的時候整個人有點僵硬,說話都說不利索。。。不知道面試官有沒有因為這個給我扣分。

到這裡為止大概已經過去30~40分鐘了,一切都還順利。在一些問題的深入上,還需要做提高。

接下來面試官問我還有沒有接觸過其他領域,比如前端開發啊、ios開發、java後臺開發啊等。

這邊很遺憾,只接觸過簡單的服務端開發,沒有深入的瞭解。然後面試官也就沒什麼可問的了,個人感覺這個時候面試官是有一點點失望的。或許我應該再多學習幾個技能。

既然我沒什麼可以一起討論的,索性面試官就拿釘釘來談。讓我設計一下釘釘(類似於微信)傳送訊息這個模組,包括從客戶端的資料結構、表儲存,以及怎麼傳輸到服務端並顯示在另一個客戶端的螢幕上。 讓我在白板上畫一下,把客戶端的資料庫結構、索引都畫一下。

現在看起來其實沒什麼難度,但是在現場的時候,拿著記號筆站在白板前,不知道怎麼的就腦子裡一片空白。巴拉巴拉的畫了一堆,看起來挺亂的。畫完後自己都懵逼了一會兒。。。現在想想真是後悔啊啊啊啊!!

面試的時候一定不能慌,一定要自信!!自信!!!自信!!!!!

面試官顯然對我的表現不太滿意,然後又出了一道演算法題:

給出2個數組,問通過將一個數組的元素整體的右移,是否存在等於另一個數組的情況。比如{2,3,4,5}  跟 陣列{5,2,3,4}就可以通過將左邊陣列元素整體向右移動一位等到。

我糾結了一會兒,開始在白板上寫程式碼了。大概思路是去遍歷左邊陣列中的元素,去跟右邊陣列中的元素進行對比,如果找到相同的,就基於此,雙方陣列開始++取餘進行後續元素的對比,如果都相同則返回ture。否則如果未找到或者遍歷結束則返回false。

面試官看完然後提問如果碰到一個數組中有相同的元素,你怎麼處理。我第一反應是,我這個演算法是不是寫錯了,因為剛剛上一道資料庫題目的失利,所以沒什麼信心,更加的緊張了。我開始否定我剛剛的演算法,嘗試尋找別的演算法。奈何過了一段時間,我放棄了。

後來面試結束後,我問其中一個面試官剛剛那個演算法的解法,然後面試官回答繼續遍歷就好了啊。  那我剛剛的演算法不是正確的嗎!!我只是沒有表述清楚而已!!!再一次深深的後悔!!!後悔!!

再次強調一下,一定要自信!自信!!

隨著兩道白板題的失利,我已經失去了接下去面試的信心了,心態已經崩了。後面面試官又問了設計模式,回答的一般般。。。此時已經認為自己涼了。

回家的路上一路在反思,當天晚上也是一晚上沒睡。心情很沉重。

然而第二天早上,意外的收到了三面的通知,驚喜!意外!!!

---------------------------------------------------------------------------------------------------------------------------

阿里三面,CTO電話面

我的三面已經是p10的CTO面了,這跟之前在網上看到的阿里5輪面試流程不太一樣,大概是為了提高效率吧。畢竟二面的時候直接來了三個面試官,應該是把二面、三面、四面合併到一塊了吧。

得知三面的面試官是個p10,又是緊張又是興奮!!第一次能見到這種大人物!!!

在期待跟煎熬中度過了三天,在第四天的晚上。大人物終於給我來電話了!!

CTO的態度跟語氣真是出奇的好啊!!!好有活力跟親和力的一個CTO啊,這是我的第一感覺。

在簡單的自我介紹以後,開始問專案裡一些實現細節。

包括 :

重連策略

耗電量優化

如何進行耗電量的測試

首次連線跟重連有什麼區別,有沒有做過優化

Http請求能否複用

Hashmap多個讀執行緒是否安全

HashMap多個讀現場一個寫執行緒是否安全

HashMap執行緒不安全的原因

有幾種方法實現HashMap的執行緒安全

Activity 之間進行通訊的方式,效能上有什麼區別

還有一些我沒接觸過的網路相關的問題,已經記不清楚了

CTO總體面下來,感覺沒有對一些問題研究的很深入。CTO問了很多網路相關的內容,但是這一塊一直是我比較薄弱的地方。另外還有一點就是太緊張了,一些本來能答的全面的問題答的很隨意,很多知識點在當時都想不起來。歸根結底還是知識結構不夠紮實。

--------------------------------------------------------------------------------------------------------------------------

總體面試總結

1.之前對演算法重視程度不夠高,而阿里是一個很注重演算法的公司,後續考慮開始刷leecode題

2.需要對一塊領域內容研究的非常的深入,比如網路、設計等 

3.對設計模式理解的太片面,沒有真正理解到裡面的設計思想

4.對專案掌握的程度不夠,很多依賴到別人的模組,沒有去詳細瞭解。要做到對依賴瞭如指掌

5.多研究世界上一流的開源專案

6.在深入某個領域的同時,對其他領域保持瞭解。比如做Android客戶端的可以對前端相關的做一些瞭解,畢竟現在很多的客戶端會嵌入H5模組

7.面試的時候無論如何,保持自信!相信自己!!會就是會,不會就是不會,