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:那沒了(真囧)
然后我就被通知今天的面試行程已經結束,然后就沒然后了......回來的時候梳理了一下面試經過,覺得一是自己的面試經驗不足,二就是準備的不充分,
所以分享給大家,對于面試要認真準備,如果有機會盡量參加幾次面試總結經驗(我春招的時候有機會去面試一下,但是覺得沒必要就沒去)。
對于昨天的事情,要總結經驗向前看,如果面試失敗也不是什么大事(貌似有點兒自我安慰的意思,哈哈),借用毛主席的一句話:春天我不先開口,哪個蟲兒敢做聲!!
總有自己的一碗飯吃。
【2016阿里巴巴面試經驗分享】相關文章:
阿里巴巴五輪面試的經驗分享01-16
2016平安銀行面試經驗分享12-14
分享面試經驗12-04
360面試經驗分享12-17
面試的經驗分享01-16
面試技巧經驗分享12-28
建行面試經驗分享12-21
小升初面試經驗分享12-13
空姐面試經驗分享11-12
MBA面試經驗分享11-05