1. 程式人生 > >微軟亞洲研究院實習生面試

微軟亞洲研究院實習生面試

      上週說到微軟亞洲研究院(MSRA,一下就簡稱MSRA吧)網路面試我這邊因為連不上而要重新安排面試,週五HR就給我電話約好今天中午1:00-3:00重新面試。於是提前做好各種準備,找了個拉ADSL的宿舍來上網,然後用了人家帶攝像頭的筆記本。還好,今天一切都比較順利。

      MSRA的面試是網路面試,使用Office Live Meeting,算是一個挺formal的即時通訊軟體。一個下午連續面兩輪,每輪一個小時,都是技術面,內容差不多但面試官不同,莫非這個就是傳說中的一票否決?

      一面:

      1. 一面開始問了語言,是關於C++的虛擬函式的,問C++虛擬函式有什麼用,怎麼實現的,為什麼要用多型等等;

      2. 然後是關於資料結構的問題,一個數組,取前k大的數(程式設計之美2.5),之後又是問假設是一個無限長度的單向連結串列,要求只遍歷一次就得到前k大的元素該怎麼辦?其中讓我印象最深刻的就是我每提出一個演算法面試官都會問我時間複雜度是什麼,有點尷尬,有時候連自己提出的演算法時間複雜度都說不清楚;

      3. 還是和上一個問題差不多,面試官說這是他最近遇到的一個實際問題,需要只遍歷一次無限長度的單向連結串列,然後從中等概率的隨機抽取k個元素。

      總體來說,一面磨來磨去還是把所有的問題都答得差不多了,感覺還好。

      一泡尿的工夫時候之後是二面:

      1. 第一個問題就比較囧,問長度為n的陣列,遍歷得到陣列最小值的那個臨時變數被update的期望次數是多少。其實這是一道數學題,面試官的目的是要寫出遞推公式,我在紙上算來算去才在面試官的再三提醒下得到了結果,原來如此簡單;

      2. 關於程序和執行緒的問題,它們之間有什麼區別;程序之間是怎樣通訊的,執行緒之間又是怎樣通訊的;

      3. 虛擬記憶體是什麼,為什麼要有虛擬記憶體,如果要申請的空間超過了記憶體上的剩餘空間會怎樣;

      4. 怎樣判斷無向圖中的兩個點是連通的,要求寫程式碼。

      二面就很悲劇,第一個簡單的問題就在面試官的再三提醒下才得到結果,中期的一些小問題也答得一般,最後的程式碼也寫得很亂。

      上週的微軟工程院面試到現在都沒有結果,應該被鄙視了,今天的MSRA也面得不好,還是不要對微軟抱太多幻想,畢竟自己能力有限。