微軟面試經歷分享
第二位面試官是一位資歷稍淺的工程師,一上來就需要你做英文的自我介紹,你說什么不重要,重要的是看你的英文口語表達能力,別太蹩腳就行了。接下來還是會看你的簡歷,如果對你做過的東西都不是太了解的話,可能會讓你直接做題,題目不會太難,你需要先講講自己的解決思路,然后寫code,仍然是考察你的code能力,假如有循環,要注意上下界,假如有遞歸,要注意退出情況。這里他要求寫一個函數,去除數組中重復的元素。在你寫好之后,他會著重看你的邊界是否存在問題。之后會將這個問題進行發散,很可能會往海量數據上引,讓你提解決方案,然后對每種解決方案讓你評估其復雜度,比如有100T個數,讓你去除其中所有重復的數等等。給我的感覺是,一定要有你自己的想法,展現自己的思維能力,就是拿到一個問題之后你通常會如何思考和尋求解決方案,這是非常關鍵的,是否能達到最終的最優解決方案這倒不一定很重要。所以,思維要活躍和發散一點。接下來會繼續給你做另一個題目,主要是考察你的raw intelligence,比如可以將其轉化為數學問題,進行數學推導,然后就可以通過編程解決問題了。這里他問給定任意一個正整數,是否可以表達成若干個連續的正整數之和,如果可以請編程求解。這個問題記得在《編程之美》上看過。在和面試官討論找平方根的過程中,我指出了一個細節,可以讓程序至少省了一半的時間,這個細節連面試官都貌似沒想到,所以從他眼中散發的光芒中我看得出他很滿意。
假如通過了前面兩輪面試,就會進入第三輪,其實和前兩輪差不多,只是不同的面試官其面試風格不一樣吧。不過給我感覺,他們都很nice,畢竟大家都是從學生過來的,不會故意為難你的。不會的地方坦誠自己不會,OK,沒問題,畢竟每個人都有自己側重的地方,不可能面面俱到的。重要的是展現你的能力,你的思維能力,學習能力,表達能力等。
終面通知來得挺突然的,晚上天黑了才來通知,蛋疼的是騰訊的面試通知也來了,都安排在第二天中午,基本上沒法準備,不過有了前兩次的教訓,我專門對海量數據的處理方面好好地研究了一下,不敢說很透徹,但至少又獲得了許多解決問題的新思路,這在之后的終面中證明是很有效的。
終面,首先還是問你項目的問題,可能會問他比較熟悉的項目,然后會提一個類似的問題,讓你分析可能導致該問題的原因,讓你談談自己的解決思路。這里他問假如取款機突然響應很慢,你覺得為什么會這樣?請你提出解決方案。接下來會讓你做題,會有一個應用場景,讓你大致寫一下偽代碼。一定要確認自己明白無誤地理解題目的意思,面試就好在這,可以當面和面試官互動。這里他問了一個網頁的抓取和分類的問題,有點像網絡爬蟲,需要遞歸地掃描所有URL并進行分類,并且還要防止有環路。之后仍然會將該問題往海量數據上引,套路還是一樣,內存不夠了,硬盤不夠了,僅限于單機等等。如果暫時沒有思路也不要緊,可以讓他給你些提示。思維可以發散一點,不一定總要死盯著某種算法,有時候會難以突破瓶頸的,不如換一種思路試試,說不定會有所突破呢,我就是如此,突然靈光一閃,就想到了解決方案,看得出面試官挺滿意的。其實沒什么高深的,關鍵還是在于自己平時的積累。接下來呢就談了一下我的專業,我不是學計算機的,所以就談一談我的專業主要是干嘛的,其實還是考察表達能力吧,然后問一下你做過的自己專業的一些項目,都挺輕松的,最后就是看你還有沒有問題了。
比較蛋疼的是,不論是騰訊還是微軟的面試官,都不止一次地問我既然你喜歡計算機,為什么本科選擇電子,碩士也選擇電子?年輕時小盆友不懂事也罷,為什么都研究僧了還繼續不懂事呢?尤其是騰訊面試,一輪三面,包括HR,這個問題都問了一遍。看來,所有的人都覺得我腦子有問題吧。
最后總結一下,感覺微軟挺重算法的,不知是否跟我搞服務器有關,面試官都很喜歡問海量數據處理方面的問題,還有個人的思維能力也是相當重要的,畢竟這個東西是個長期培養的過程,不是短期培訓就能搞起來的,我挺喜歡與工程師交流的,不論是技術還是人生,總覺得很暢快,我就喜歡這種感覺。
談談接下來的打算吧,過去一年主要精力都放在engineer上了,算法還是不夠扎實,這次以去實習為契機,好好狠抓算法,現在看來,算法才是王道啊。