今日頭條主端后端研發實習生崗:
(面試已經結束快半年了,憑借記憶來寫一下)
一面:
- 自我介紹一下。
- 根據我的空間數據庫項目,提問我項目中有關R樹,B樹等數據結構方面的問題,由於項目那個時候還沒有做,就憑着項目立項答辯之前查的資料答了一些我知道的。
- 算法題目只有一道:給n個數字,求所有兩兩組合中異或和最大的值。這是一道經典的字典樹問題,我首先答了O(n2)的暴力算法,然后裝作思考一陣並略有所悟的樣子回答了字典樹的思路,並說明了其復雜的為O(nlgn)。然后面試官要求開始寫代碼,由於長時間沒有手寫字典樹,寫的磕磕絆絆,最后把大概思路算是基本寫出來了。
- 你的簡歷中ACM獲獎比較多,那么課內成績如何呢?這個就是一個裝逼的點了,低調的告訴他,成績還行,GPA目前專業第二名吧。
- 對TCP和UDP了解嗎?簡單說一下他們的區別。我主要答了TCP是可靠的連接,UDP只能盡最大努力交付,然后面試官問為什么TCP是可靠的連接,那時候因為長時間沒復習也沒准備面試,一時忘記了TCP的流量控制,滑動窗口等,然后支支吾吾答了一些,后來面試官提示了一下如果TCP對端收到了報文怎么辦,我就把滑動窗口、確認報文、流量控制方面的東西都說了一遍,最后解釋了一下之前忘記了這些東西,有點小尷尬。
- 對數據庫了解嗎?數據庫的底層實現用的什么數據結構?回答B+樹,繼續問:為什么使用B樹而不是平衡二叉樹等其他數據結構?這個我確實不知道,就說了自己不太了解。
- 進程間通信的方式都有哪些?由於那時候剛開始學Unix的課程,憑借對之前翻書的記憶回答上了消息隊列、管道和信號量,然后解釋了一下這門課這學期剛開始學習。
- 你有沒有什么問題要問我?我回答沒有,他說那你稍等一會,一會會有二面。
一面總結:這次面試比較簡單,據說面試官是本校畢業的bcz學長,感謝學長高抬貴手不殺之恩,主要問的都是些基礎知識,算法題比較經典,但是對於沒學過ACM的人來說已經很難了,總體來說對於自己的表現比較滿意,沒有太大的紕漏,但是還是有些遺憾。
二面:
- 自我介紹一下。
- 還是先問項目,我有點后悔把一個目前啥也不會的項目寫到簡歷上了,只能繼續憑借之前的記憶一頓胡說八道應付過去。
- 算法題:給你兩個大小分別為n和m的有序的數組,找出這兩個數組放在一起后第k大的數。第一反應就是歸並排序的合並過程,然后繼續開始裝作恍然大悟,先說出暴力的寫法,然后說了歸並的思路,此時復雜度O(k)。本以為這已經是最優的解法,面試官問還有沒有更優的,瞬間蒙了,開始繼續優化,努力了大概20分鍾,最后宣布想不出來了,然后面試官讓我寫了一下歸並那個思路,憑記憶把歸並的過程寫了一遍,沒什么瑕疵。這個題在面試后我查了一下,更優的解法是二分,有興趣的可以去百度學習一下。
- 算法題:給你很多個數字,可能有幾百億個,讓你找出其中最大的1000個。經典的topK問題,但是可惜那時候我根本沒聽過。想了一會給出了直接排序然后找前面1000個的尷尬答案。面試官讓我繼續想,想了一會我突然想到了用一個只能保存1000個元素的大頂堆來保存值,然后直接把n個元素挨個扔到堆里進行篩選,這樣復雜的就是O(n*lg1000)的,有了一些優化(最開始我把大頂堆想成了單調棧,然后還給面試官講了一會單調棧是怎么樣的,講了一會發現我想錯了,尷尬)。面試結束后我查了一下topK,這個確實是一種經典解法。
- 說一下網絡編程時候的過程,都調用什么函數?這個比較簡單,不說了。
- 后面好像是問了幾個不太難的基礎知識問題,但是時間太久就不記得了。
二面總結:二面時間不長,一小時左右,由於我下午有課不能三面,面試官說等hr消息再約三面。總體來說二面答的比一面好些,現在想起來頭條的面試難度相對來說確實簡單了一些。
三面:
- 自我介紹一下。
- 算法題:給你一個無序數組,對於區間[l,r],求所有區間中sum(l…r)乘以min(l…r)的積最大的值。想了一會,我給出了O(n3)暴力的解法、O(n2)預處理暴力的解法、O(nlgn)線段樹和O(nlgn)RMQ預處理的解法,面試官和我說他不太懂線段樹和RMQ,我稍微解釋了一下,然后他告訴我可不可以想一個O(n)的辦法。想了很久都沒有想出來,然后他給我了一個提示:如何求數組中的一個數的后面第一個比他小的數在哪?在紙上寫了一會發現維護一個單調棧即可,隨即說出了自己的想法,然后他說那你再想一下和這個題有什么關系,沉思一會想到:對於數組中的每一個數,所有以它為最小值的區間里sum最大的一定是它左邊和右邊分別到比他小的第一個數那里,這個顯而易見,所以枚舉一遍所有的數就可以了。先預處理出前綴和,然后用單調棧正着和反着各走一遍找出每個數左邊和右邊第一個比他小的數,最后枚舉每一個數算sum*min即可。
- 對於目前的火車售票系統,有沒有什么想法如果讓你來設計12306的售票和安排座位系統,你怎么做?這個題我答的像X一樣,一頓胡說,現在我也不知道應該咋設計,總之答完這個題我覺得我涼了。
三面總結:
三面給我的游戲體驗極好,因為三面面試官簡直太可愛了,無論是問問題的時候還是提醒你的時候語氣特別和藹而且全程在笑,只是我自己不爭氣,最后一個問題答的太爛,總體來說對頭條的印象不錯。
HR面:
這個就不說了,基本就是一個吹牛逼的過程,對於吹牛逼我還沒怕過誰,感覺HR已經被我忽悠得一愣一愣了。
結果:
在剛到青島比賽的第二天就接到了HR的電話通知我面試通過,和我商量了報到日期。一度以為自己涼涼了,但是結果還是好的。雖然最后沒有選擇去頭條實習,但是還是挺喜歡這家公司的。