微軟面試經歷和相關思考總結

說明:微信公衆號不方便插入外鏈,需要查看文章鏈接的讀者請直接點閱讀原文看我博客……

 

這篇文章介紹我面試微軟的完整經歷,以及相關的思考總結。文章字數1.3w+,閱讀全文大約需要半小時。斷斷續續寫了一個月,可能是市面上最良心的面試經歷文章了吧。

一方面是做個記錄,另一方面是給有意向進微軟的小夥伴們提供一些參考,特別是多關注平時需要注重哪些方面的能力鍛鍊和知識積累,面試前臨時抱佛腳的做法還是不太好。

文中部分觀點比較主觀,有不同看法歡迎討論。

 

背景

先簡單介紹我的情況,西安電子科技大學(211,非985),15年本科畢業,進入美團外賣Android團隊,18年國慶離職。之後一年多的時間,一方面是嘗試創業,另一方面也是給自己充電的過程,包括學習思考、鍛鍊身體、相親交友(劃掉) 等。

本科剛畢業的時候就聽說過谷歌、微軟等外企,當年只知道外企一般都要求英語口語和算法,感覺難度較大沒去深入瞭解和嘗試(尤其是英語口語沒有經過訓練真的有點難)。作爲對比,國內的很多互聯網公司也不差,並且薪資待遇很有優勢,也沒想過要進外企。

19年底脈脈上好多微軟同事發的內推廣告吸引了我的注意力,之後就開始了簡單的調研,發現了微軟這樣的外企的一些優點,所以有了嘗試進外企的想法。

 

初期調研

在介紹面試經歷之前,先探討一下關於選擇的話題。求職是雙向的,公司面試考察個人能力,求職者也可以反過來調研公司和團隊情況。對具體面試情況更關心的讀者,可以先跳過這部分。

這部分內容,是根據各種渠道獲取的信息以及自己思考所得,儘量客觀。不少人聽說過外企如何如何,但是道聽途說不如實地考察,還是得親自體驗了才能瞭解更多。從開闊視野的角度來看,在國內企業體驗過,再到外企體驗一下,感受一下各自的優缺點,還是比較有趣和有意義的,對於個人的長期發展也能起到一些作用,這也是我想進微軟的一個重要原因。

獲取信息的渠道包括:

  • 面試的經歷

  • 就職微軟的一個大學同學

  • “微軟招聘”公衆號

  • 微軟舉辦的Tech Talk活動,可以線上提問

  • 和朋友聊天,主要是獵頭、HR、同行

  • 網上的文章和觀點

  • 微軟招聘官方網站

 

微軟的特點

列舉微軟的一些特點,儘可能客觀全面,但主要還是說優勢吧。

1、微軟近年來更加開放,擁抱開源,認可度越來越高,例如VS Code、TypeScript的流行、收購GitHub和NPM等。微軟的市值在上升,微軟中國也一直在招人,HC很多(HC = Head Count,即職位的空缺人數)。

2、整體而言,外企更注重以人爲本(任何事情都有兩面性,對員工更友好,有時候對企業發展則相對不利,各有利弊)。對於研發崗位,微軟沒有國內公司的加班文化,提倡Work Life Balance,加班相對少(具體要看團隊、項目進度等),上下班不打卡、彈性工作時間;遠程辦公很完善,配套的協作軟件也齊全,比較容易申請work from home(畢竟跨國公司,跨國合作的情況也挺多);沒有辭退35歲以上員工的文化,可以一直工作到退休;注重新員工培養;福利更加完善,例如每年至少15天年假和15天帶薪病假;工資按時薪計算還可以(也要看城市,根據我自己的面試結果,稅前年薪摺合成時薪,蘇州微軟和上海頭條接近,具體的就不透露了)。

在查看微軟招聘官網時,意外發現每個JD(JD = Job Description,職位描述)中都有下面這樣一段話。作爲對比,一些國內公司會直接在招聘要求中對年齡性別做明確限制。

Microsoft is an equal opportunity employer. All qualified applicants will receive consideration for employment without regard to age, ancestry, color, family or medical care leave, gender identity or expression, genetic information, marital status, medical condition, national origin, physical or mental disability, political affiliation, protected veteran status, race, religion, sex (including pregnancy), sexual orientation, or any other characteristic protected by applicable laws, regulations and ordinances.

示例鏈接: https://careers.microsoft.com/professionals/us/en/job/794944/Android-Software-Engineer-Microsoft-Edge

3、面試難度適中。難度相對國內一些公司更高,意味着更有機會認識到優秀的人。而在外企當中,可能是因爲微軟HC較多,所以要求又相對寬鬆,這讓更多人有機會嘗試。例如不少外企 JD 中的要求都是5年工作經驗起步、英語流利,而微軟社招有些崗位1年經驗即可,英語口語方面,一些崗位要求能逐漸適應英語環境,還有的崗位不要求口語,面試寫代碼也比想象的容易一點。

4、由於企業歷史更長,管理經驗比國內公司更加成熟完善;但由於流程過於嚴格和繁瑣,容易帶來一定的效率問題,難以兩全。具體來說,微軟成立於1975年,而國內互聯網公司普遍是90後甚至00後、10後。

5、內部Transfer(轉崗)方便,微軟中國的團隊不少,能嘗試的方向較多,還有機會出國工作。

6、有練習英語的環境,能認識國外同事,開闊視野。

7、世界知名企業,對於個人履歷有加分作用(跳槽、創業、相親 等)。

8、不排除一些人對微軟一類公司有情懷上的考慮,或是對某些產品和團隊非常感興趣。

9、關於城市。微軟在北京、蘇州、上海都有。上海目前主要是Azure,主要是後臺崗位,能選擇的比較少;北京和蘇州崗位較多。

蘇州簡單分析一下。好處包括環境好,房價不貴,然後是大家尤其男生普遍很關心的找對象話題,據說蘇州微軟找對象比較有優勢(畢竟隔壁就有好幾個大學,微軟在蘇州目前也是最好的互聯網公司了,面試剛通過就有HR來介紹對象了哈哈哈)。蘇州的問題是目前互聯網行業一般,如果定居了蘇州,跳槽的選擇不多(一個選項是蘇州定居,上海工作);考慮到小孩教育的話,江蘇高考據說是地獄模式(反正又不是我考???)。

 

英語問題

語言問題是包括我在內的很多人沒有嘗試外企的重要原因(流下了沒技術的淚水.jpg)。雖然進了外企的人都說英語要求不高,能讓人聽懂就行,即使語法錯誤、中式英語也沒關係,只要能講清楚自己做的東西就可以了(這個時候就想到了幾個大佬:悔創阿里傑克馬,不知妻美劉強東,普通家庭馬化騰,一無所有王健林)。

不少人的英語問題在於,雖然很多單詞都認識,但是到自己用的時候想不起來,畢竟不能邊說邊查詞典。也就是說,被動詞彙量沒問題,但是主動詞彙量太少,解決方法就是經常練習。

微軟的英語要求有三個等級:

  • low:會讀寫即可,基本沒有口語要求(我面試的時候是全程中文)。

  • middle:簡單交流,能表述清楚自己做的東西。

  • strong:英語流利,例如產品崗、全棧開發崗、高職級崗位,通常口語要求高,因爲要和外國同事交流。

如果對語言沒有把握,可以嘗試英語能力要求低的崗位,畢竟如果因爲口語導致面試沒過有點虧。口語有困難的人,可以先進去了慢慢適應,以後可以再轉崗。長期來看,英語口語能力最好要有,否則有一天可能會成爲限制你成長的瓶頸。

在外企有更好的環境練習英語,和國外的同事合作,甚至Transfer到國外,接觸不同的文化,培養國際化視野,這些優點是國內大部分公司所不具備的。

在面試時就開始感受到了英語能力的鍛鍊。例如簡歷要翻譯成英文,面試和Offer流程中,正式的郵件和文檔也是英文的,還得英文填表和回覆郵件。翻譯簡歷的時候,發現一些特殊詞彙不太知道怎麼表述,查了詞典還是不太肯定,只好網上搜英文文章,看外國人是怎麼表述的,還請了一個英語學得還行的朋友幫忙檢查,面試完了這個朋友還問我英文簡歷有沒有因爲翻譯問題被嘲笑 →_→

 

關於加班

外企最廣受關注的一個特點大概就是加班少了,這也是很多人想進外企的原因。

加班問題可以從兩方面來看。

正面分析

好的一面,適度且有效的加班可以提高生產率。

  • 新冠病毒爆發期,中國用幾天的時間就能建起一座醫院,即使過年期間,防疫健康碼、疫情實時地圖等也很快推出。網上很多人提到外國的公交、外賣等服務遠不如中國……如果不靠一些人的勤奮和加班,實現這些都有困難。

  • 適度加班會讓人更快的成長,畢竟要解決更多的問題,壓力催人奮進。

  • 從企業和社會角度來看,適度加班可以節省成本、提高生產率。根據《人月神話》一書的結論,不加班意味着需要更多的人才能完成一項工作,人越多溝通成本越高,1個人10個月能解決的問題,換成10個人用1個月並不能完成。

一些人也並不排斥加班,網上有的狠人說了,只要錢給夠,他可以一天24小時都上班,加班加到公司破產 ????

負面分析

壞的一面,加班過多會影響心情,影響健康,降低工作效率,影響生活幸福度等,技術人員猝死的案例也頻繁發生,很多人深受其害,不細說了。

關於無效加班。18年下半年開始由於大環境的影響,經濟整體下滑,導致了很多企業的恐慌,互聯網行業加班也越來越嚴重。

  1. 真實的案例,有些管理者爲了拯救公司下滑的業績,或者說其實只是緩解內心的焦慮,強制要求員工加班,但是員工並沒有更多的事情可做,很多人只是耗着等下班。

  2. 另一個案例就是有些公司會把工作時長作爲KPI的參考指標(這和把代碼行數作爲參考指標有點類似),導致了一個尷尬的局面,到了下班時間,儘管一些人已經幹完該乾的工作了,但是看到領導和同事都沒下班,也不好先下班,也擔心影響KPI。既然不能早下班,索性幹活慢一點,或者是喫飯時間出去多玩一會再回來繼續工作。最後惡性循環,下班時間越來越晚,而實際產出增加很少。

  3. 無效加班問題通常反映了公司和團隊管理能力不足,或是對管理能力缺乏自信,缺乏科學有效的方法激勵員工努力工作,以及量化員工業績。特別是國內不少擴張非常迅速的公司,管理能力提升很難跟上公司規模的擴大。

考慮的因素

  1. 實際情況和宣傳信息不符。有些公司在招聘信息中聲稱不加班,進去了發現其實會加班。看看BOSS直聘App裏一些996公司的信息,就會驚奇的發現,上面赫然寫着工作時間是965。有些不瞭解情況的HR和你說不加班,可能說的只是HR崗位不加班 (⊙ˍ⊙) 就像中學老師都說大學很閒,大概是師範專業比較閒吧,我們理工專業累死人。

  2. 現在不加班,不代表以後不加班。比如大老闆突然給部門安排了額外的任務導致加班,領導安慰大家說,“最近公司業務緊急,有點忙,大家放寬心態,堅持一下”,然後剛忙完又來了一個緊急的新任務,領導也很無奈,又來安慰大家……後來加班慢慢成了常態,領導也不好一直這麼說了,尷尬……

  3. 同一個公司不同團隊加班不一樣,這是個明顯的問題,但是容易被遺漏。核心團隊加班多,邊緣部門加班少。

  4. 幾個特殊的加班原因。

  • 招不到人導致的加班。招不到人有時候也是加班的一個原因,由於業務發展過快,團隊急需擴張,短時間內還沒招到合適的人,導致加班。

  • 發版導致加班。由於人類共有的拖延症,常常會在項目發版的前一段時間裏加班,這在外企也很常見。

  • 值班制度。產品需要長期運行(特別是後臺服務),需要有人24小時持續關注運行情況,國內公司有輪流值班的制度,而微軟等外企則有on call的制度。

  • 相對而言外企不加班的可靠性更高,大致做了一點分析,不知道是否準確。

    • 一些優秀的外企已經積累了充分的資源和核心競爭力,更注重把產品做得可靠,而不是加班快速開發出產品功能以及迫切實現盈利。尤其是創業期的公司,如果沒有資源積累也沒有錢,無論國內公司還是國外公司,不加班都比較困難。

    • 根據網上的資料,外企很看重法律,工作時間基本遵循955的原則。

    • 管理經驗上,歷史更長的外企對工作時長的問題,必然會有更多的探索和思考。

    • 價值觀方面,國內一些公司宣傳“996是福報”的同時,外企宣傳 “Work Life Balance”,“員工的健康是公司最大的財富”……

    關於選擇

    價值觀問題。人應該追求相對安逸和健康的生活,還是追求更快成長、掙更多錢?追求成長,是追求本職工作上的能力提升,還是其他工作方向的提升,或是個人綜合素質的提升(例如身體素質)?在國內的互聯網環境下,加班幾乎成了一個默認的事實,知名靠譜一點的公司大多都加班,主流價值觀也在過度強調勤奮,攀比收入,自媒體也總是販賣焦慮,導致求職者沒有太多選擇的餘地。好在現在有越來越多的人認識到了事物的兩面性,看待問題更加全面。

    對於加班問題,我的想法是希望“加班自由”,追求完全的不加班是不現實的(也沒必要),並不排斥主動加班,但不喜歡被動加班尤其是無效加班。所謂加班自由,就是在有想解決的問題、有想學的東西、特殊情況時,可以選擇主動加班(也確實會有主動加班到晚上11點之後的經歷);而在沒啥事情可做,身心狀態不佳,或是有其他事情時,可以準時下班。

    加班少意味着時間更加自由,空閒時間既可以繼續學習和提升本職工作上的技能,也可以用來做其他事情。例如我看到不少有趣的開源項目,優秀的技術公衆號,甚至還包括一些創業項目,其作者都來自於外企。畢竟人的精力是有限的,每天忙於加班,肯定不會有太多精力做其他事。

    如何調研

    如果希望找加班少的工作,除了外企也有一些國內公司可以選擇(就不在文章裏公開說了)。具體的調研,我的建議是儘量不要道聽途說,至少多問幾個瞭解大概情況的人,最好能直接聯繫到目標公司目標團隊當前在職員工(脈脈是個好東西),有條件還可以實地考察。

    關於加班的更多看法還可以參考知乎:有沒有不用加班的程序員?- 知乎

     

    技術成長

    關於核心技術

    計算機和互聯網領域,很多基礎設施和核心技術都是國外(特別是美國)創造出來的,例如操作系統及其生態、編程語言、軟件開發工具等。

    國內大部分企業核心技術較少,更偏重於技術的實際應用,沒有實力研發基礎技術,也難以承擔基礎技術研發的風險,程序員一不小心就會變成“調庫工程師”,或者偏管理方向的“Wiki工程師”,技術天花板較低,容易遇到中年職業危機。基礎技術薄弱一直是國內的一個問題,特別是在中美貿易戰期間,這些問題就更加明顯的暴露出來了。

    知名外企掌握了一些核心技術,例如微軟的Windows系統等,也是這些企業的核心競爭力之一。可惜的是,外企最核心的技術必然是優先在本國發展,在中國發展的業務還是相對邊緣化。如果對技術確實有更高的追求,可以考慮進外企轉崗出國鍛鍊。

    關於新人培養與轉崗

    新人培養是一個很重要的話題。新人培養制度如果不完善,一方面工作經驗少的人特別是應屆實習生不容易成長,另一方面,想借助公司內部轉崗,學習其他項目,轉其他技術方向(例如客戶端轉後臺開發),甚至相關行業的轉換,也會面臨新環境下難以成長的問題。

    相對而言,國內公司節奏更快,更加急功近利,會更希望人選入職後很快就能幹活,畢竟大家都太忙了。雖然知道新人培訓的重要性,但老員工自己也忙,可能根本沒有多少時間培養新人,也沒有完善的新人培養制度,因此新人可能是“散養”狀態,全靠主動。

    外企新人培養制度相對健全。另外一方面,拋開制度因素,由於空閒時間更多,實在不行還能自己學,也不用過於擔心轉方向之後完全跟不上節奏的問題了。

    關於學習環境

    一些獵頭朋友說了,從技術成長和工作跳槽角度來看,國內大廠並不比外企差。因爲有不少案例,有些人進外企之後就出不來了,完全沒法適應國內公司加班的氛圍,或者是能力提升慢,跳槽後工資待遇不高。

    由於外企節奏比較慢,壓力相對小,加班更少,在這種環境下確實更容易讓人放鬆。而如果進入了非常邊緣化的團隊,做一些不被公司重視的事,可能就更沒有成長了。

    如果你追求的是本職工作上更快的成長,拿到更高的工資,進國內大廠確實是很好的選擇;如果有比較明確的目標,也不容易受環境影響,在外企一樣可以快速成長;如果是想養老,當然是帶一把躺椅來外企比較好了……

     

    前期準備

    從19年底的時候開始萌生了嘗試去微軟的想法,就開始針對性的做準備。前期準備我畫了一個思維導圖,主要分爲三部分:

    • 簡歷準備

    • 博客建設

    • 面試準備

    現在回顧起來,準備的過程也是個人成長、提高自我認知的過程。需要了解公司的需要,梳理過去的成果,思考未來的規劃,對欠缺的基礎知識查漏補缺等,收穫挺多。

     

    簡歷準備

    簡歷部分單獨寫了一篇文章:技術崗位如何寫簡歷 。

     

    博客與GitHub

    好的博客和GitHub開源項目,對於求職面試有很大的加分作用。甚至有一些人認爲,面試不用太關注簡歷和麪試情況,因爲簡歷可以造假、面試全靠發揮,但是要看博客和GitHub,看候選人實際做過什麼、寫過什麼、代碼寫的如何,這些纔是能真正體現能力的東西。

    我在面試準備的過程中,回顧之前做過的東西,補了一些基礎知識,發了一些博客,還把近幾年沒整理完的博客順便整理髮布了。簡歷中也插入了一些博客鏈接。

     

    基礎知識查漏補缺

    開發相關的基礎知識,網上有很多文章,也有一些書可以看,就不展開寫了。如果項目經驗沒有亮點,基礎知識還是多補一補吧,不然面試聊項目又聊不起來,不聊基礎知識還能聊啥。

     

    面試常見問題

    面試的時候會問一些常見的非技術問題,可以自己提前思考一下,避免被問到一時想不起來,如果面試需要英文,還要考慮一下英文怎麼表述。如果之前沒有完全想清楚這些問題,進行思考也是個人成長的過程。

    例如:

    • 上一份工作爲什麼離職

    • 爲什麼想來我們公司

    • 未來職業規劃

    • 你有什麼優缺點

    • 有什麼想問的

     

    算法刷題

    刷題部分單獨寫了一篇文章:技術面試刷題思路總結 。

     

    面試流程

    總共進行了6輪面試:電話面試 + 3輪技術面 + Leader面試 + Manager面試。每一輪的面試內容都是技術爲主,每一輪都會考編程。和國內公司不同,沒有HR面,談薪資發Offer等流程都是之後郵件、電話等方式進行。

    梳理一下大家最關心的時間:

    • 3月5日:投簡歷

    • 3月11日:微信電話面試

    • 3月17日:3輪技術面+Leader面試

    • 3月19日:Manager面試

    特別提醒,微軟面試如果沒有通過,會有一定的“CD時間”,也就是這段時間內即使再次投簡歷,面試官根據你之前的面試評價,也大概率收不到面試邀請。具體要看面試評價,通常是間隔半年時間,當然如果面試在某些地方只差一點,有機會很快就被推薦到其他崗位。

     

    投簡歷

    因爲在脈脈有註明微信號,有微軟的HR加了我微信,投簡歷我是直接微信聯繫了HR,因爲得知有個大學同學也在微軟,就說明了是讓他幫忙內推。

    有人問我怎麼才能讓微軟HR主動加自己微信,其實不復雜,考個211或者985學校,進國內大廠,應該就可以吸引到HR的注意力了 →_→

    簡歷是PDF格式的英文+中文簡歷,投簡歷時間是3月5日(週四),崗位是MMX團隊Edge瀏覽器Android客戶端開發(畢竟英文要求不高,畢竟目前最熟悉的是Android開發方向,處於程序員鄙視鏈底層,流下了沒技術的淚水.jpg )。

    微信電話面試

    投完簡歷比較慌,沒事就會去騷擾一下HR,然後HR告訴我簡歷已經過了,之後會安排面試。3月9日(週一)的時候微軟的同事給我打電話,預約了3月11日(週三)的微信電話面試,讓我準備好紙筆用於算法。

    週三下午兩點,面試官非常準時的給我打了微信語音電話。

    前半小時照着簡歷聊項目經驗。我的項目比較多,聊的時間比較久,所以最後只問了個別基礎技術問題,簡單回答了一下。本來準備問ConcurrentHashMap,我說我不瞭解這塊,然後就沒有問(之前做項目真的沒接觸過這個,只知道是線程安全的HashMap,基礎知識還得再補補)。

    後半個小時問算法題。

    一開始問我是不是對圖論有了解,我說我不瞭解(當時還沒刷到圖論,大學也沒怎麼學過),所以沒問圖論。之後一共問了四道題,沒有實際寫代碼,只需要講思路,或者口頭描述僞代碼即可。

    因爲在LeetCode上都有原題,所以就公開聊一下了。

    前兩題比較簡單,一個是數組相關的,一個是樹相關的,想了一會就解決了。

    第三題是經典的最大公共子串,名字聽說過,要用動態規劃解決,但是很尷尬,我當時刷題纔剛刷到動態規劃,完全不知道怎麼做(不過自從後來刷了動態規劃,現在感覺可簡單了),提示了一下還是不會,最後勉強說了個不是特別清晰的思路。。。當時的心理活動是:“臥槽,準備了這麼久,第一面竟然就這麼掛掉了,虧大了……”

    之後面試官又問了我第四題,還是樹相關的,最大二叉搜索子樹(LeetCode 333,會員可見),直接用暴力法其實很容易,但思路不清晰的話,優化解法有點小麻煩。當時本來想直接給出優化解法,但是一邊分析一邊發現有問題,所以就說了一下暴力解法,答的也不是特別好。

    面試結束後又想了一下,思路清晰的解法可以看我的博客 最大二叉搜索子樹 。

    最後面試官問我有沒有什麼想問的,我就問這輪面試回答的如何。面試官說在最近面試的候選人中,項目經驗算中等偏上水平,但是算法回答的不好,算中等偏下水平,因爲看我第三題答的不好,所以加了第四題。問我平時刷LeetCode多不多,我說之前因爲做項目幾乎用不到算法,所以沒太研究,最近兩個月纔開始刷題。面試官說也還好。

    郵件預約面試

    一面算法回答的不太好還是通過了,看來項目經驗和博客還是重要的。第二天(3月12日)上午收到了英文的面試邀請郵件,問我什麼時候有空進行4輪大概4小時的線上面試(疫情期間都是線上面試)。

    Outlook郵箱網頁版有個BUG,北京時間上午十一點多的郵件,顯示的是UTC時間半夜三點多。一開始沒發現是BUG,一臉懵逼的我還以爲是半夜的時候微軟美國的HR給我發的,畢竟名字也是英文名。。。於是又去騷擾微信HR,說要英文回覆郵件預約面試時間,時間用北京時間即可(此處記一個TODO:給Outlook團隊反饋這個BUG)。

    因爲算法沒太準備好,所以回覆郵件說要再準備幾天,回覆如下(英文溝通真沒怎麼實踐過,如有語法錯誤請大家指出,但不要嘲笑我謝謝 [ 微笑.gif ] )。

    I will be available from next Tuesday (March 17) because I need a few days to prepare. And afternoon will be better, thanks.

    最後預約了3月17日下午2-6點的面試,收到的面試邀請郵件裏給出了四輪面試的時間和麪試官的英文名,還有一個Microsoft Teams軟件的會議鏈接。Teams軟件之前聽微軟的Tech Talk時用過,所以使用沒什麼問題。

    距離面試還有幾天,趕緊繼續刷算法。這就到了發揮學習能力的時候,動態規劃、圖論,都大致刷了一下,感覺踏實了一點,只是到最後揹包問題還是沒完全搞明白(過陣子繼續研究好了)。

    三輪技術面

    3月17日下午提前一會進入了Teams軟件會議室等面試。

    我一直在會議室裏,每輪面試都是大概一個小時的時長,每輪面試官基本都是準時進會議室,面試完了再退出。

    前面三輪技術面只開了語音沒有開視頻。每一輪都是先簡單的自我介紹,大概聊十幾分鐘的項目經驗和技術知識,剩下的時間寫代碼。

    項目經驗因人而異,討論項目的時候會討論到一些相關的技術知識,也可能會單獨問一些基礎知識。可能是因爲我的項目經驗比較多,所以基本是以項目涉及到的技術知識爲主,問到其他基礎知識,有些知識我瞭解不多,就直接說了不瞭解,面試官也就沒有再問。

    面試的重點是寫代碼。遠程面試寫代碼的具體形式是,瀏覽器打開一個 Codeshare 窗口(相當於有代碼高亮功能的記事本),或者是其他代碼編輯器,用Teams軟件的Share功能共享窗口給面試官。

    介紹完題目,面試官都會說有任何疑問隨時可以提。

    第一面出完一道題的時候,我問了一下面試官有幾道題,需不需要考慮時間問題儘量做快一點,面試官說時間不用擔心。

    所以每一輪寫代碼,都會一邊思考一邊說我的分析過程,題目不明確的地方也會提出來。面試官也會對我的思路給出反饋,或者給一些提示。整體思路確定了就開始寫代碼,寫的時候也是一邊寫一邊和麪試官討論。面試官也會提出一些疑問,這裏爲什麼這麼寫,或者是有些地方沒考慮到也會問,然後我會去想一些辦法來完善。題目不算太難,但是基本上40分鐘也就剛好只做了一道題。

    我刷的題不算多,面試的時候也沒有遇到原題,但是現場基本都想出來了思路,大概說下題目類型(具體題目就不公開了)。

    1. 第一面的題是字符串處理相關的,用到了DFS算法。代碼基本寫出來之後,討論了一下能想到哪些測試用例。

    2. 第二面是數組子序列相關的問題。剛看到題我提出應該可以用動態規劃思路解決,面試官說沒這麼複雜。所以想了一下,可以用雙指針解決,有些場景沒考慮全,面試官給了我一些具體Case的提示,花了一點時間想到了怎麼解決。

    3. 第三面,面試官說寫點代碼看看,可以用熟悉的工具不管是記事本還是什麼都可以,我問IDE也可以嗎,面試官說可以,於是我就拿出來IDEA了。題目是一個修改字符串的問題,要求原地算法。聽完題目之後分析討論了挺久,只想到了一個性能比較差的辦法,面試官讓我分析了一下複雜度是 O(N^2) 。又想了一會還是沒想到怎麼優化,然後面試官說,還是優先解決問題,就按照現有的思路寫一下代碼。用IDEA寫完代碼之後,面試官讓我寫個測試用例調試一下代碼(誰讓我用了IDE呢……)。於是寫了一個 main 方法和一個測試用例,說明了一下因爲時間關係配置環境比較費勁,不然可以寫單元測試,也先只寫一個用例測試下看看。第一遍運行的結果果然不對,打斷點找到了大概的問題所在,但是當時腦子有點轉不動了,畢竟連續面試了三個小時,一時不知道具體怎麼改,看時間也快到了,就和麪試官說了一下情況,也總結了一下,狀態不太好,但是思路肯定是沒問題的,要多花點時間調試一下,還有就是沒想到複雜度更好的解法。

      後來有天晚上回想起這道題,突然發現這題好簡單,O(N) 複雜度輕輕鬆鬆就能解決,代碼也會短很多,但是當時就怎麼都沒想到,果然靈感還是很重要的

    面試聊項目和寫代碼都有一定的偶然性,但是如果每一輪都回答不好,每道代碼題都做的不好,那就有點說不過去了。這也是微軟會有三輪並列技術面的一個原因,不是爲了增大面試難度,而是降低偶然因素對面試效果的影響,最後會綜合多輪面試的結果來考慮,而不會因爲某一輪沒發揮好直接淘汰候選人。

    總的來說,遇到的編程題比較注重邏輯,難度沒有想象的大,刷了不少動態規劃和圖論都沒用到。

    Leader面試

    三輪技術面結束,緊接着就是Leader面試,開了視頻。主要是聊技術相關話題,都是面試比較常見的問題,例如個人的技術棧,爲什麼換工作,爲什麼想來微軟,之後的計劃,簡單聊一點項目,在之前的工作經歷中比較有成就感的事,有沒有據理力爭最後解決了的問題等。

    討論了一點相對複雜的算法問題,地圖應用相關的,討論了挺久,我提出了一些我的看法,最後給出了大致的僞代碼。在討論相關話題的時候,圖論算法總算派上了一點用處,沒白學……

    時間快到了,面試官說本來準備再寫個代碼,但是時間關係就不寫了。問我有沒有關注過有意思的Android新技術,最好是能具體到技術細節的。提到了Flutter,說了一下大致的原理,又聊到Flutter的缺點和解決思路。問到RN和Flutter的相同點和區別,比較尷尬的是我沒了解過RN,但是做過前端開發,瞭解React和Vue,猜測RN是React運行在WebView中(後來看了一下,RN的原理是用React語法寫JSX代碼,實際上還是解析成了Android原生的View組件)。

    最後面試官問我有什麼想問的,我還是問這一輪面試回答的如何。面試官說本來對我挺感興趣,但是感覺有點浮於表面,RN不是網頁。這下我有點慌,趕緊解釋了一下,RN確實沒用過,也沒了解過原理,所以都是猜測的,要是問我Gradle相關的技術,瞭解的會深入一點(當時的心理活動,好不容易面試了這麼多輪,要是這麼掛了還是太虧了)。

    面試結束託HR幫忙把我寫過的一篇關於Gradle的博客鏈接轉發給了面試官,面試官說“小夥挺好”。還是感覺有點慌,好在當天晚上HR就告訴我面試過了,已經準備安排下一輪面試了。

     

    Manager面試

    還是郵件預約,Manager面試安排在3月19日,Teams遠程面試。

    面試的內容還是技術爲主。一開始是瞭解技術上比較擅長的方向,問到了未來職業規劃,我說先繼續做Android,之後可能想試試其他方向,面試官介紹了一下微軟內部轉崗的情況。還問到了住在哪(因爲面試的是微軟蘇州,而我當前在上海,要搬家)。問我有什麼想問的,就問了一下上升空間方面的問題,具體一點例如升職級應該注意哪些方面的能力,面試官也做了比較詳細的回答。

    然後又到了寫代碼的時間……微軟面試真的是很注重寫代碼的能力。具體題目就不公開了,有一點難,屬於分支場景比較複雜的,不至於完全想不出來怎麼寫,但是不容易考慮全面。情況很多,所以我先把能想到的所有情況都一一列舉出來,對照着這些用例就想到了大致的思路,還是一邊討論一邊寫代碼。最後代碼基本寫出來了,正常參數輸出正確結果沒問題,還差異常參數的校驗部分不太完善。這個代碼又寫了45分鐘的樣子,面試結束。

     

    面試總結與技巧

    整個面試過程,因爲狀態不是很穩定,加上刷題不多,有一些代碼個人覺得寫的不太好,不過在面試官幫着分析的情況下倒是也基本解決了問題。

    好在我過去的項目經歷比較多,博客和開源項目也確實是自己做的,所以問到相關的技術細節也都沒啥問題,簡歷裏也貼了一些相關鏈接,HR反饋面試的評價都還不錯。

    總的來說,我的感覺是學歷(211或985)、工作經歷(大廠經驗)、項目經驗(面試聊的、博客寫的、GitHub開源項目)、面試表現(基礎知識+算法),至少要有一部分亮點,如果都沒有,那就要多積累經驗之後繼續嘗試了。

     

    面試評價

    根據我的經歷,點評一下微軟的面試。微軟面試整體給人的感覺還是很好的,大公司的面試流程確實很完善。總結了幾個點:

    1. 準時。除了網絡環境問題帶來的影響,多數面試官都是準時開始了面試,誤差不超過兩分鐘。整體面試節奏控制的也比較好,連續四輪面試的時候,前面幾輪基本上是55分鐘左右結束,避免影響到後面的面試,當然最後一輪就無所謂一點了,多聊了一會。

    2. 禮貌。面試官說話都很禮貌,不會問比較隱私的問題,每輪面試結束都會說感謝參加面試。

    3. 可以提問。每一輪面試,面試官都會主動問我有沒有想問的(當然大部分公司面試,面試官不一定會主動提這個,但候選人可以主動提問題)。我一般關心的問題就是面試流程,以及這一輪面試回答的如何,面試官也都正面回答了我的問題。

    4. 預約面試時間很順暢,面試官整體精神狀態好。不像國內大廠,面試官常常要在百忙之中抽空面試,預約時間要協調多次(特別是最後一兩輪面試),還可能要安排到上午比較早的時間或者晚上,面試官的精神狀態也看得出來會比較累。這其實可以反映出來,微軟內部研發人員確實加班不多(但是微軟的HR不一樣,晚上也要回消息處理問題,心疼一下)。

    5. 注重能力,尤其是通用能力和潛力,我理解具體包括溝通能力、邏輯思維能力、考慮問題全面性、鑽研能力(在某個技術上有一定的深度)、技術熱情等。六輪面試都是技術爲主,從時間佔比也能看出來,大部分時間都用在了考察通用的代碼能力上。基礎知識方面,數據結構、設計模式一類通用能力也會做一些考察。到Manager面試的時候會問到職業規劃,想嘗試什麼技術方向可以提出來,通用能力足夠了,換其他方向問題也不大(這裏又要提一下新人培養的重要性了)。

    6. 能力以外的東西不會特別關注。我的經歷比較特殊,中間有裸辭一年半嘗試創業的時間,網上有觀點說這種情況面試容易受影響(一般是擔心候選人不穩定很快又去創業)。但是實際面試過程中,沒感覺到什麼影響,我簡單介紹了一下情況,面試官也沒怎麼問。但是放到國內公司,HR面一般還是會問很多相關情況。

     

    Teams軟件評價

    遠程面試使用的Teams軟件界面很簡潔,習慣了國內軟件多大全甚至花哨的功能,Teams軟件初看起來讓人覺得有點簡陋。實際用的時候,發現其實該有的功能也都有,語音、視頻、文字聊天,屏幕窗口共享,通過鏈接或撥號進入會議,手機電腦各種平臺都有客戶端,基本夠用了。把核心的音視頻通話質量優化好,比開發不常用的附加功能還是更重要吧。

     

    寫代碼關注點

    總結一下面試時寫代碼要注意的點:

    1. 溝通能力很重要。注重溝通,搞清楚需求,說清楚自己的思路,及時得到面試官的反饋和提示也能幫助寫代碼。如果聽完題目二話不說就寫好了代碼一遍通過,誰知道你是不是單純記性好又遇到了原題呢?如果沒有很快想到完整和最優的解法,把想到的部分思路說出來,也比一直埋頭想不說話好多了。

    2. 重點是把題做好,時間上稍慢一點也沒問題,慢工出細活,外企尤其注重代碼質量,開發效率相對好一點(當然也不能太過分,好歹基本做完一道題吧……)

    3. 寫代碼需要靈感,一時想不出來很正常,要注意心態,不用太慌,可以舉一些實際例子來思考,從暴力法逐漸優化的角度思考,或者和麪試官討論討論,可能就有進展了。

    4. 重點關注考慮問題全面性、邏輯能力等,形式和某些細節並不重要。例如忘了某個API的名字或者參數細節。再例如某些地方知道要做判空處理,但是寫起來比較費時間,直接寫個TODO示意一下也沒問題。用什麼工具寫問題也不大。遠程面試直接在自己電腦上寫還是方便很多(畢竟實際寫代碼都是要反覆修改完善的,紙上寫受限太多了)。現場面試沒參加過,不過如果候選人想在自己電腦上寫,應該也是沒問題的。

    5. 面試的時候儘量保證比較好的精力狀況,放寬心態,儘量不要給自己太大壓力。

     

    面試小技巧

    1、充分溝通。面試的過程就是溝通的過程,溝通很容易出現誤解,消除誤解促進溝通,幫助面試官瞭解自己很有必要,特別是對於能力強但是溝通能力相對薄弱的候選人而言。

    我的建議是,除了回答問題時的充分溝通,在每一輪面試結束前如果有機會,可以和麪試官交流一下這輪面試的整體情況。如果確實是沒表達清楚,面試官對你產生了誤解,或是其他問題(例如碰巧不瞭解問到的內容,但很擅長其他的東西),可以適當說明一下,提高成功率。當然有意弄虛作假,或是找藉口爲自己辯解的說辭還是不提倡了。

    2、盡人事,聽天命的心態。準備的時候要盡全力,而到了面試的時候要放鬆心態,緊張只會影響面試發揮。說到這又想說了,面試心儀的公司真和找對象一樣,沒成功的時候容易把對方想象的過於完美,患得患失,更加緊張了哈哈哈……

    3、注意精力管理。微軟的面試輪數比較多,而且常常會有連續很多輪的情況,如果是現場面試還要坐車,管理好個人精力還是很重要的。

    4、面試策略。只專心面試某一個公司,不給自己選擇的餘地,還是廣撒網,面試很多公司,積累經驗,最後還方便談薪資選一個最好的呢?

    多面試幾次確實會積累經驗,比如在經過了微軟的考驗後,面試頭條時算法題感覺有點太簡單了。但是面試太多會很累,不管是跟進流程還是面試準備都很容易讓人分心,面試的過程也很累。所以我個人更傾向於前期多花時間調研和準備,儘量只面試少數不錯的公司,微軟面試全部結束,再面試了頭條,兩個典型公司基本上可以瞭解市場行情了。

     

    後續流程

    面試完後,當天下午就收到了面試通過的郵件,微軟的另一個HR加了我微信。

    之後的流程:填表提交基本信息,口頭Offer,正式Offer,提交各種證明材料,背景調查,入職手續辦理,最後入職。

    口頭Offer環節,如果覺得工資和之前的工資有落差,可以嘗試聊一下,主要是強調個人對公司的價值,注意方式。不過據說外企的薪資一般比較固定,所以提升空間不大。

    提交材料環節,需要一些電子文檔。小技巧是掃描件可以直接用手機App(例如Android中的Simple Scanner)掃描成PDF。需要打印、手寫簽名、再掃描的,直接在原始PDF裏插入手寫的電子簽名即可,同樣具有法律效應。疫情期間也不用跑去打印店了,還省了錢。

    背景調查環節,職級越高調查越嚴格。因爲微軟用了第三方公司的背景調查服務,流程更長(需要3~4周),也更嚴格。調查內容主要是學歷、最近7年的工作經歷、有無違法犯罪記錄。只要簡歷等材料如實填寫、遵紀守法,基本不會有問題。

    需要注意的是,即使面試通過了,在正式入職前,中間的流程還是有可能出問題影響入職的,特別是籤正式Offer之前,如果拖太久或是溝通問題,是有可能取消Offer的。

    總的來說,從投簡歷一直到入職,整個流程的時間還是挺長的。投簡歷是3月5日,收到正式Offer郵件的時間是3月27日,之後還要經過接近一個月的背景調查流程,記錄下來供讀者參考。

     

    致謝

    從最開始有了想找工作和嘗試微軟的念頭,一直到寫完這篇文章,經歷了三個多個月的時間,中間得到了不少幫助和支持,一併表示感謝。包括不少關心和鼓勵我的人,幫忙分析某幾個公司優缺點的高中同桌,某個和我一起刷題還幫忙看英文簡歷的小夥伴,在微軟就職的大學同學,全程在老家面試期間家人的支持,獵頭朋友們提供的信息和建議,面試官和HR(特別是被我在微信上反覆騷擾的HR),網上其他人提供的各種文章資料等。

     

    ◆ ◆ ◆ ◆ 

    推薦閱讀:

    HJ說

    大廠內推 · 職業規劃 · 業界資訊

    韓老師,一位斜槓青年

    作家/老師/佈道師/職業規劃師/HR/PR/PM

    其實,他是一位純純正正的軟件工程師

    發表評論
    所有評論
    還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
    相關文章