本來是想穩穩地保研,在創業團隊好好幹的,沒想去 msra……因此直到申請截止前幾天,我才從班主任那裡知道這個訊息,班主任說有個「微軟小學者」獎,5000塊錢呢,我想這麼多獎學金肯定要啊,就用一天晚上用 ms word 趕寫了兩頁 resume,第二天去教學秘書處開成績單,比 deadline 晚一天提交了申請。後來才知道這個「微軟小學者」跟「實驗班」在某種程度上是綁在一起的,不過那個獎學金目前還沒有得到任何訊息。
由於知道面試是下午,面試前一天我熬得比較晚,手機又是靜音,中午爬起來就發現上午有那個老師的乙個未接來電,打過去一問才知道我錯過了單獨面試的機會……下午冒著雨,去西區科技實驗樓面試。面試是單人單間,跟被請喝茶差不多,沒有固定的時間限制,事情交代清楚了就可以出來了。
第乙個面試的是系統與網路組的張老師(也是我現在的 mentor)。首先是自我介紹,然後他就抓住我數學成績不好的小辮子開始問(都怪我當時沒刷吉公尺多維奇)。我在簡歷上寫了不少課外做的專案和課程專案,他就問我這些專案中感覺最有挑戰的乙個,我心想這些玩意有多少挑戰呢?於是就隨便說了說 blog.ustc.edu.cn 開發過程中,構造 php sandbox 的幾種嘗試,以及現在感覺不合理的地方。(這個不合理的地方現在還沒改,所以大家裝外掛程式經常會遇到問題)感覺分量有點不夠,就補充了做實時磁碟檔案系統課程實驗的時候嘗試的幾種優化(嗯,這個是郭家華寫的**,所以也不是我的功勞),總結得到「真理」:在做系統的時候要找到瓶頸進行優化,如果選擇了錯誤的部分則很麻煩且效果不好。
張老師拿來紙筆,讓我寫個 bcopy 實現 memcpy 的功能。我首先寫了個最簡單的版本,隨即改成了4位元組一組的版本。他說我的程式裡有 bug,我這才想到首尾不是4的倍數(即記憶體沒有對齊)時會有問題,於是就在首尾加上了特殊處理。他又說我的程式會 segmentation fault,我百思不得其解,他最後告訴我,如果目標位址沒有對齊,4位元組複製就成了非對齊訪問。我在32位 x86 上寫過非對齊訪問的程式,沒有 segmentation fault 啊。他說你回去試一試,一定會 segmentation fault。這場面試就這樣結束了……要是當初說學得好的課程時,說的是計算機網路而不是作業系統,估計回答起來就不這麼吃力了……
畫外音:面試全部結束後在lug活動室的32位 pentium 4 上做了個實驗,4位元組非對齊讀寫都不會 segmentation fault,而且結果是正確的。郭家華說,即使匯流排不允許非對齊訪問,cpu也沒做特殊處理,出現的也應該是 bus fault 而不是 segmentation fault。不過由於lug要貼海報,就沒回去跟面試官**。
從第一場面試出來,等了五分鐘,工作人員就把我叫到了第二個面試官的房間裡。面試官是做計算機圖形學的童老師。他看了我的簡歷,對 robogame 盲人閱讀器和 freeshell 比較感興趣。在聊 freeshell 的時候,我提到 openvz 可以實現熱遷移,他就問我熱遷移的原理,我剛好看過一本雲計算的書就答出來了,他問我是怎麼想出來的,我說這個不是我想的,是書上的,而且 openvz 也是現成的工具,我只是呼叫了它的api。他的結論是,「不說你這些專案結果怎麼樣,單是主動在課外去做這一點,就能說明很多問題」。
童老師接著問我,是喜歡做偏工程的研究還是偏理論的研究(具體的問法不記得了)。我當時答的是,比較喜歡通過理論推導和系統方法得到的結果,不太喜歡通過調引數「湊」出來的結果,順便扯了扯馬毅博士的**。然後他表示沒什麼可問的了,我就請教了他三維重建方面的問題(不過他說的那個演算法我出來就忘掉了,白問了)。這場面試比較快,20分鐘就結束了,至少比第一場面試短一半。
謝研究員問我前面兩個面試官分別是做什麼的,我如實招來。他接著問,你是喜歡做系統研究呢,還是做理論研究呢?好像跟童研究員問的問題差不多。他說看起來我比較喜歡做系統。下面的問題比較狠,如果在系統、計算機圖形學和資料探勘之間選擇,你更喜歡哪個呢?其實就我個人而言是比較喜歡人工智慧的,在學校的實驗室也是做智慧型機械人的,所以我就說是比較喜歡偏智慧型方向的,系統也不錯。圖形學裡全是數學,我估計玩不轉。他說我的想法比較矛盾,喜歡系統研究,但資料探勘屬於理論研究。20分鐘固定時間面試就在矛盾中結束了。
出來的時候,在電梯門口正好遇到乙個來參加面試的妹子,她特別緊張,擔心被問到跟上次面試不一樣的問題,我就安慰她內容都差不多的,跟面對面面試的形式完全一樣。似乎緊張會影響人的發揮,我高中的時候本來沒想來科大,面試的時候特別放鬆,結果面試成績挺好的。這次又是本來沒想去微軟。也許不準備就是最好的準備……
最後一場面試是張老師實驗室的乙個台灣人進行的**面試,我坐在電腦前面,在 collabedit 上現場寫**。心想這個老師真有意思,面對面的時候就讓寫**,還給安排了一次專門寫**的面試,而其他面試官都沒讓寫一行**。面試題是他臨時想的,我寫程式的時候,他也在寫同乙個程式。
第一題是不用遞迴,用 o(1) 的空間複雜度實現二叉樹的遍歷,二叉樹的每個節點有 parent 指標。由於一開始我沒想清楚,寫了又改,改了又寫,中間**還斷了一次,折騰了乙個小時才勉強交上去。
第二題是求乙個 n*n 的黑白點陣圖中,黑色連通片的個數(上下左右相鄰視為連通)。我覺得 floodfill 法太簡單了,於是就寫了個每個點只掃瞄一次的貪心演算法。按照行列順序掃瞄,當前方格為黑色時,若左邊上邊都是黑色,編號相同則複製,編號不同則複製左邊的,並增加 merge counter;若左邊是黑色或上邊是黑色,則複製其編號;不然,新開乙個編號。最後的連通片數就是 (分配出去的編號數 – merge counter)。過了好幾天我才想清楚,這個演算法是錯誤的,問題出在左邊上邊均為黑色且編號不同時,無論複製左邊的還是上邊的編號都不行。如果對編號改用並查集,上述情況下將兩個編號合併,以後判斷編號相等時從並查集裡找,好像就沒有問題了。
這麼簡單的兩道題,一共剛超過100行**,竟然耗了1小時45分鐘……到底是多年不搞oi,也沒參加acm,老了……當天晚上面試官發郵件(當然是英文)跟我說:我能理解你的基本思路,但程式裡有很多 bug,尤其是第二題,不過不要擔心,這樣兩道題本來就不是在短時間內能輕鬆解決的。
不知怎麼的,msra 的面試就水水的過了。我覺得要是碰上幾個 acm 大牛,再碰上幾個 gpa 神牛,我肯定不會被選中的。人力資源部的人跟我確認 check in 的時間,當時我正在去 lud(linux user dinner)的路上,沒聽清,她跟我說是「入職」,我想我又不是到微軟工作,怎麼變成「入職」了?後來才打聽到,我們實驗班是跟微軟實習生一樣的編制。
哇……總結超過3000字了。我們實驗班的18個人就要開始新的征程了,也祝願學弟學妹們在來年的msra面試中沉著冷靜,展現個性和風采!
頭條 msra幾道面試題
頭條 題目1,給定乙個無向圖,找兩個節點之間的最短距離,這個其實就是bfs就可以 題目2,給定100e長度的陣列,資料型別unsignedfloat64,你只有2g的記憶體,如何找出中位數。題目3,leetcode原題33.search in rotated sorted array。解決迴圈陣列的...
MSRA實習申請經驗分享
博主目前大四,因為大四下沒啥事想申請到msra實習半年,不久前成功申請到了msra的實習,這裡簡單分享一下經驗。首先自我介紹一下,本人本科是國內某top10的985高校,已保研至某top2高校讀研,有過一些競賽獎項 電賽方面的,和msra實習不相關,就不介紹了 在實驗室有過約兩年半的科研經驗,研究興...
mysql面試總結 MySQL面試總結
最近在面試,總結一下問的比較多的問題,持續補充哈!基礎varchar與char區別 首先你要知道的是varchar 20 這裡的20代表的是字元,而不是位元組,其次在mysql中,所有使用utf8字符集,無論是中文還是英文,都是按照3個位元組儲存 varchar與char都可以儲存字元,它們的區別是...