2016阿里巴巴面試經驗分享

才智咖 人氣:1.96W

以下本站蒐集整理的他人阿里巴巴面試的真實經歷,歡迎閱讀!

2016阿里巴巴面試經驗分享

九月九號真是個值得悲痛和總結的日子,阿里的一面掛了......以前從來沒有參加過面試,第一次面試就給了阿里,毫無經驗(當然這不是理由)。八月二十九號發的通知,預約的九月九號的下午面試,地點是哈爾濱的曼哈頓酒店(第一次去這麼高階的酒店),昨天中午,我去列印我的簡歷,準備下午面試,結果收到阿里的工作人員的電話,問我能不能提前去面試,所以就約的下午一點半,我吃過飯就打車去了,不到一點就到了指定的位置,我還以為我要等到一點半開始面試,所以還帶了一本書(完全是心理安慰),結果我的書包還沒放下,大螢幕就顯示我的名字讓我去面試......來的真快!!!!

面試官是看著有二十多歲,非常平易近人,相互問候以後就開始面試了,下面就是面試的經過(寫的不是那麼詳細)。我們暫且稱面試官為A先生,我就簡稱M吧。

A:你是C的吧?

M:對,我的方向是C/C++

A:那你先說說C++和java的區別吧

M:(我對java瞭解比較少,所以這個問題以前雖然聽同學說過,但是還是有點兒不知所措,所以就開始沒有條理的回答)java是面相物件的語言,封裝性比C++的好,另外java不允許多繼承,要實現多繼承的功能需要通過介面,而C++允許多繼承,C++的記憶體管理比java的更為靈活,java有垃圾回收機制而C++需要自己管理

A:還有麼?

M:(我想了一會兒,也沒想出來啥,還是漏了一點兒,C/C++中可以操作指標而java中不可以)大概就這些了

A:既然你說C++的記憶體管理比較靈活,那C++的記憶體管理上有什麼劣勢麼?(對於這個問題,我沒仔細考慮過)

M:額......(我就想記憶體洩露啊什麼的,但是我不知道該怎麼回答)容易有記憶體洩露

A:怎麼解決?

M:可以通過用物件管理資源的`方式,比如如果我們用malloc來申請一塊記憶體,如果程式的執行流在free執行之前丟擲了異常,那麼free就不會執行,從而引起記憶體洩露,我們可以將其封裝到解構函式中,當物件超過作用域時自動呼叫解構函式從而資源能得到釋放

A:嗯,這個方法可以,那麼我們來假設這麼一個場景,現在有一個服務器程式,上面有若干個物件,其中有三個物件的訪問頻率是百分之九十,而其他的物件訪問頻率是百分之十,請你給出一個記憶體的設計方案來管理這些物件

M:(聽到這個問題,完全蒙圈,不知道如何回答,可能是緊張,不知道往STL的記憶體設計這裡想,平時挺熟悉的記憶體池也沒想到,開始隨便說了.....)以物件管理資源吧

A:你剛才已經說過了,你還有其他的什麼想法麼?沒事,能說多少是多少,這個問題比較大

M:(我忽然想到這是不是多工啊)那執行緒池可以麼?

A:執行緒池?(我聽到這麼一句反問,大概是方向不對,就沒接著說)

M:這個問題不大清楚.....

A:給你點兒提示吧,怎麼能減少malloc的呼叫

M:(真是完全蒙圈,大腦已經不思考了,這應該就是考慮的記憶體池,怎麼也沒想起來,開始瞎扯,想到核心態和使用者態的切換需要時間)記憶體對映可以麼?

A:這個可以,但是不能每次都記憶體對映吧,還有其他的方法麼?

M:不清楚了

A:(可能有點兒失望)你都能想到執行緒池,想不到自己管理物件的記憶體麼?可以有物件池啊(我覺得這應該就是記憶體池吧),這樣可以減少malloc的次數,降低系統開銷(然後就在電腦上打字)

M:嗯,對(真無奈啊)

注:對於第一個問題的總結,C++的記憶體管理,我覺得SGI中的STL兩級記憶體分配完全可以解釋這個問題,在SGI中,如果申請空間大於128B,那麼直接malloc,如果小於128B,呼叫二級分配方法,從記憶體池中取出來一塊記憶體(這裡不需要使用malloc,更有效率,其實也就是更快)

A:那我們來寫一個小演算法吧

M:(前一個問題沒回答好,我也有點兒失落,更緊張)

A:(略作沉思),有這樣一顆二元樹,它是有序的,也就是類似於二叉搜尋樹,但是有一個條件,給定一個節點A,A的左子樹的根節點的值小於等於A的值,A的右子樹的根節點的值大於等於A的值,(特點就是節點值可以相等),那麼在中序遍歷中,樹的值應該是有序的對吧?假設遍歷的結果是1,2,2,3,4,4,現在給你一個樹的根節點的指標,給定一個關鍵值K,求序列中值等於K的第二個樹節點的指標,如果不存在返回NULL即可

M:(聽完這個題,我感覺天黑了,我該回家了,開始思考)我的第一種思路是先比較當前節點的值C,如果給的值K大於C,那麼如果存在第二個節點,那麼該節點肯定在該樹的右子樹上生長,反之如果小於C,則在左子樹上,然後遞迴呼叫,如果等於呢?我怎麼能夠確定它是第二個我要找的呢?這個節點可能就是我要找的第二個節點,也可能它是第一個(那麼第二個應該在右子樹上),同時我們要找的節點也可能是在左子樹上(貌似有點兒困難啊,其實這個時候我已經把程式碼寫完了,不過我再檢查的時候發現不對,然後就沒然後了)

A:(發現有點兒困難,開始給我降難度)如果找不到第二個,能不能先找第一個呢?

M:嗯,第一個的話比較簡單(我嘴上說簡單,我也知道簡單,但是大腦已經不聽使喚了.....),然後想了一會兒(其實經歷了挺長的時間)我就想出來可以先中序遍歷,將節點壓棧,然後出棧判斷節點的值是不是和給定值K相等,如果相等則找到了第一個節點,如果不相等,則沒找到

A:嗯,(面試官想了一會兒),這個方法可以,但是不是我們想要的,你這個方法需要遍歷這顆二元樹,而有更快的方法不需要遍歷整個二元樹,可以這樣做,假設當前節點的值是C,如果如果K和C相同,那麼我們先標記一個當前節點,因為它肯定是我們要找的候選節點,再來判斷左子樹的根節點的值L,如果L的值和K相同,則遞迴呼叫左子樹,如果L和K不相同,是否可以判斷C一定是第一個節點呢?不能,因為L的右子樹也可能包含我們要找的節點,接著遞迴呼叫左子樹的右子樹即可,如果C大於K,遞迴呼叫左子樹,如果C小於K,遞迴呼叫右子樹,這個思路比較清晰把,你開始的時候應該就是這麼想的吧

M:是,但是寫到後面就有點兒亂了......

A:那我們來點兒C++基礎吧,說說const的用法吧,可以用在哪裡

M:我就把const能用到的地方都說了一下,最後強調了一下在類中const static int可以在類中初始化(有一點兒沒說,就是const可以作為函式的返回值和修飾形參,面試官說了一句,我就補充了一下)

A:嗯,這個回答的對

A:嗯,那來說說你的專案吧(最怕的來了,沒做過什麼專案,當時就隨便說說,由於專案都不出眾,所以也沒大準備,不再寫了)

注:這兩個問題考察是基本資料結構和演算法,還有專案,其實如果靜下心來想想也不難,但是就是在當時的情況下,很難有正常水平的發揮,而且我是第一次面試,結果就比較明瞭了

A:你有什麼問題要問我麼?

M:(其實我能去參加面試挺驚訝的,因為很多比我牛的人都沒接到面試通知,我就稀裡糊塗的去了,所以我想知道一下我的筆試成績和狀況),您這裡有筆試的成績麼?我能知道一下麼?

A:我看看,我這裡能夠看到你的筆試成績,不過這是保密的,所以不能給你.....

M:哦,(這個問題我也沒準備.....)那今年支付寶招多少個人啊?

A:這個我聽說是縮招了,但是具體情況我也不清楚

M:那沒了(真囧)

然後我就被通知今天的面試行程已經結束,然後就沒然後了......回來的時候梳理了一下面試經過,覺得一是自己的面試經驗不足,二就是準備的不充分,

所以分享給大家,對於面試要認真準備,如果有機會盡量參加幾次面試總結經驗(我春招的時候有機會去面試一下,但是覺得沒必要就沒去)。

對於昨天的事情,要總結經驗向前看,如果面試失敗也不是什麼大事(貌似有點兒自我安慰的意思,哈哈),借用毛主席的一句話:春天我不先開口,哪個蟲兒敢做聲!!

總有自己的一碗飯吃。