時間:2019-12-21 來源:互聯網 瀏覽量:
作者 | Ashwin Goel
譯者 | 彎月,責編 | 屠敏
以下為譯文:
大約在2-3個月前,我在Linkedin上看到了微軟員工發布的一係列消息。當時正值微軟招聘大三的學生作為軟件工程師的暑期實習生。看到這些消息後,我非常興奮,而且我不想錯過這次機會。
我將簡曆(包括我的所有項目、成就和經驗)發給了微軟的15-20個人,希望至少能有一位可以推薦我參加在線編程測試。
重點:
勇敢地和陌生人聯係,這隻是構建關係網的一種方式。你擁有的關係網越強大,就越容易找到工作。
在與某人聯係時,不要簡單地打招呼並要求對方做推薦人,你可以寫一封信詳細介紹你的項目、經驗、成就,並寫出他們推薦你的理由。
郵件剛發出去1-2個小時,我就收到了微軟的第一輪麵試邀請,這是一次純粹的編程測試。
第一輪麵試
2019年9月22日,我參加了第一輪麵試。
我拿到了三個解決問題的題目,而且給出的時間也夠。
其中一個問題是:
給定大小為n的數組,請以偶數和奇數交替的方式升序排序數組。
注:這是最簡單的一道題。
在麵試僅剩5分鍾的時候,我的筆記本電腦崩潰了。這可能是最糟糕的情況了,但很幸運的是,過了一會兒後我可以繼續測試了。
我寫出了三道題的代碼,並通過了所有測試用例,包括邊界情況和複雜的測試用例。
我對第一輪麵試充滿了信心,並熱切期待結果。
第二輪麵試
10月11日,結果宣布了,我成功地進入了第二輪麵試。
第二輪麵試應該是視頻麵試,我認為麵試主要是數據結構,所以就開始為此做準備。
這次麵試定在了10月14日。首先簡單地做了介紹,然後麵試官開始測試OOPS的概念。我很高興,因為從大學開始我就不需要為這個話題發愁了,因為我很早就搞清楚了這個概念。
他們問了我有關繼承的一些概念,例如多態性、方法重載和方法重寫之間的區別、virtual關鍵字和抽象。
重點:
1. 如果你不了解某個概念,那也不要給出不相關的答案,乖乖承認就好。然後詢問更多有用的信息。這可以表明你願意學習新事物,給麵試官留下好印象。我並不了解virtual關鍵字,但我沒有給模糊的答案,而是告訴他我沒聽說過,後來我們就這個問題討論了2-3分鍾。
麵試的第二部分是解決問題。他們的主要目的是測試我們思路以及解決新問題的方法。因此,說出你的思路非常重要。
我拿到的問題如下:
假設有一個3維數組,且按照如下螺旋方式排序:
01 02 03 04
12 13 14 05
11 16 15 06
10 09 08 07
請問,從這類數組中搜索某個數字的最佳方法是什麼?
起初,我沒有想到好的解決方案,所以我提出了最差的解決方案(O(n²)),然後開始考慮優化解決方案。
我一邊想,一邊說出了我的方法,所以麵試官也給予了我幫助,並給了我很明顯的提示,最後我找到了正確的方法。
重點:
說出你的思路。讓麵試官知道你在想什麼,他可能會引導你朝正確的方向思考。
跟麵試官提出問題,進一步闡明問題。
從最糟糕的解決方案開始,然後開始對其進行優化。
無論你提出怎樣的解決方案,他們都希望你寫出代碼,因此需要為此做好準備。
注:我開始想到的解決方案非常複雜O(n²),最後優化到了O(log(n)),我心中的喜悅難以用文字描述。
對於這輪麵試,我也非常樂觀,而且很幸運,我接到了下一輪的複試。
第三輪麵試
11月17日,我在學期末考試期間抽空來到了微軟的班加羅爾辦事處,因為我不想錯過這個大好的機會。
老實說,他們的園區是一個理想的工作場所。真的很棒!
由於我提前到了,所以一直在前台等候,一邊研究GeeksforGeeks上常見的數據結構問題。
很快我們就被帶到了會議室,並得知我們這20名學生是從1萬1千名在線申請人中篩選出來的,頓時讓我感覺良好。
在簡單的介紹開始後,麵試正式開始。
第一回合
本回合主要是看簡曆。麵試官說他們真的很喜歡我的簡曆。他們詢問了我有關項目的問題,並了解了我以前做過的工作。
重點:
1. 你必須熟知簡曆中的每個詞。
2. 不要寫任何你不是十分清楚的東西。
很快他們就開始測試我的思維能力,並提出了兩個常見的數據結構問題。
其中一個問題是如何反轉鏈表。前一天晚上乘坐公交車的時候,我剛剛在GeeksforGeeks上閱讀了有關這個問題的文章,而且我記得部分解決方案。經過一番思考後,我向他們解釋了算法。他們還讓我們用C++寫出正確的代碼,還通過示例進行了測試。
注:微軟追求完美,每個麵試官都表現出了這一點。每個算法和代碼都需要通過測試用例驗證正確性。
另一個問題是,假設你有一個改進的鏈表,鏈表中的每個節點除了正常的數據變量和指向下一個節點的指針之外,還有另外一個指針,可能指向鏈表的任何一個節點。現在你的任務是克隆這個數據結構。
在上圖中,每個節點都有一個指向下一個節點的指針,一個數據項(即Node1,Node2…Node5),以及一個指向任意隨機節點的隨機指針。
我發現這個問題很棘手,需要一些思考。
第二回合
本回合主要是測試更深的編程技巧和更快的思維。
我拿到了兩個問題:
1. 編寫代碼,檢查二叉樹的高度。
2. 編寫代碼,檢查二叉樹是否是二叉搜索樹。
我寫出了兩道題的代碼,但不得不多花點時間調試一些小錯誤。
這兩個問題都需要利用遞歸來解決。
重點:
1. 寫完代碼後,還有非常重要的一步:驗證!
第三回合
這是最後一回合,麵試官是微軟的一位高級專業工程師,他已經在微軟工作了8年。麵試開始的時候,他首先問了一些關於我的簡曆的問題。他對我做過的一個項目IGBTQ CPU調度算法很感興趣。我在白板上向他解釋了這個項目。
下半場是解決問題。他給我的問題是:
考慮一個從1到n的數字序列。
接下來,在迭代(i)時,我們刪除第(i + 1)項。
例如:
考慮 n = 20
迭代1:刪除第二個元素
1 3 5 7 9 11 13 15 17 19
迭代2:刪除第3個元素
1 3 7 9 13 15 19
迭代3:刪除第4個元素
1 3 9 13 15
以此類推……
最後剩下來的數字稱為幸運數字。
任務是檢查給定的數字“ n”是不是幸運數字。
在經過反複思考後,我說出了解決方案,並得到了麵試官的反饋,然後我根據反饋找到了解決方案的模式,並寫出了代碼。
接下來是一些常見的問題,有關我個人以及我想從事的工作。
重點:
1. 你需要清楚為什麼想進這個公司。你需要對他們的產品和計劃進行足夠的研究,並清楚地了解你的動機以及為什麼想在這裏工作。
2. 在麵試前,你需要準備明確而清晰的答案:為什麼你想進這個公司,而為什麼這家公司應該雇傭你。
3. 不要說“我有信心”或“我正在努力”之類的話!具體說明你的答案,並舉例證明你的觀點。
總結
最後,我想說這是有史以來最好的麵試經曆之一。我曾接受過多家頂級公司的麵試,但以前從未感覺自己和麵試官和麵試過程如此親近。別的公司可能會測試你的知識,並期望獲得行業水平的答案,但微軟更注重你的思維過程和編程技巧。我在整個過程中就感受到了這一點。
另外,我沒有被錄用。我想在本文最後說明這一點,因為對於我們這個年齡的人來說,最重要的是學習經驗以及提升自我。我們的職業生涯才剛剛起步,被拒、薪水和便利性沒那麼重要。但是,我為什麼被拒仍然是一個謎,我本人毫無頭緒。我感覺麵試非常順利,本來也以為會有好結果。
然而,我失去的隻是暫時的,但我獲得的卻是永久而無價的。
原文:https://medium.com/better-programming/my-interview-experience-with-microsoft-754039df9103
本文為 CSDN 翻譯,轉載請注明來源出處。
【End】