微軟求職記

寫這篇文章的時候,面試結果還沒有出來,所以標題并不是“我軟求職記” <--但我的確想

對于微軟,當然最早從Windows 3.1開始,家里那一臺386,然后是Windows Me 和 xp,跑在賽揚333 和 Athlon xp (Barton 2500) 上,然后是用Word 97 編輯各種小報紙,文本框粘貼畫等等,再然后就是Frontpage,Dreamweaver...這寫下去就沒完了。

事實上,和微軟較為親密接觸應該說得上是Anders Hejlsberg,他發明了Pascal,成為我第一門語言,影響之深刻,直到我前幾天去微軟面試寫程序的時候都習慣i:=0。他還發明了C#,成為我每天使用的語言,也是我經歷過的最美的語言。后來,他還發明了TypeScript,前幾天的新聞說Angular2 基于TypeScript 開發。

編程語言學真正系統地學習是通過Coursera 上面的課程,來自U of Washington。課上分析了Lisp,Standard ML,Scheme,Racket等函數式語言,并且結合了Ruby 和 Java分析了面向對象的過程語言??梢哉f,只有少數時候提及Java時才會提到C#,上完課后,我就徹徹底底地谷粉轉軟狗,轉Anders粉,同時也解釋了為什么我無法愛上Python,愛上JavaScript。我讀到了Jon Skeet 的博客,后來買了他的書,他是谷歌員工卻又是微軟MVP和C#方面的專家。

我想說,我是真的因為是C# 粉才在半年前關注微軟近幾年的發展,關注C#的發展史,并渴望加入微軟。當然啦,你也可以辯解說,我只是因為去不到谷歌,才沒有投遞任何簡歷。

在今年年初我又來到了mitbbs,那里戾氣和怨氣太重,我基本上是不怎么去的。但聽說現在面試都要靠內推,我才來碰碰運氣。大概是因為我是非CS專業背景,并沒有太多“微軟內推”的樓主關心我。直到后來,我碰到了Yammer 的員工,這是微軟兩年前收購的公司,其產品是企業級社交網絡。他很樂意幫我做了推薦,很快就有負責內推的人聯系我,上來就說她不是HR,只是負責聯系HR和我的聯系人。

花了一個晚上填寫了長長的調查問卷,耗時最多的是為什么加入微軟,和自己的項目介紹。到頭來,我也不知道這樣的來自英語渣的文字有多少人看到。認認真真寫了,并選擇了5個崗位,我完全沒有概念,這些崗位包括孵化項目,瀏覽器渲染引擎,Visual Studio,Visual C#和 研究院的軟件工程師。很傻很天真,這些高不可攀的職位沒有給我任何回復,而后兩天,再補投兩三個Bing 和Azure 的職位。

兩周過去了,這個不是HR的聯系人說她工作職責完成了,在我投遞的崗位中,沒有HR愿意給我嘗試的機會,并鼓勵我繼續關注微軟的招聘網站。

這一切都好快啊,我寫了一封信感謝那位Yammer 的前輩,這事情大概就算結束了。

我還是太弱了,我還以為微軟能為我申請多一份H1B呢,好吧,讓我抽簽結束后半年好好再努力吧。

然后,我給這個論壇帶來了更多的怨氣,寫了一篇發牢騷的帖子。http://www.mitbbs.com/article_t/JobHunting/32885421.html

帖子除了幾個黑微軟 的跟帖,大部分都給我了鼓勵和支持。最幸運的是,居然還忽悠(打動)了Grace,她成了我的貴人。在她的幫助下,至少我坐上了前往西雅圖的航班,來到了微軟總部——我的朝圣地。

來自微軟的HR部門的Nitin幫我安排好了面試,機票和酒店,從下飛機租車到面試當天,幾乎所有人都知道我是來面試的,估計飛機上坐我旁邊的大哥也這么認為的——飛機上我看完了半本《Pragamtic Thinking & Leaning》

一路都很順利,住得很舒服,酒店吃得略貴,以至于面試結束后就再也沒去吃過。下面流水帳說說面試的過程吧,就當是面經了。

面試的組是Azure相關的,本來安排了J先生第一輪,但他沒能趕來。在我等待十五分鐘后,R先生補位迎接我來到了他們的辦公區域。雙方自我介紹后,R問了我一個設計題——設計一個Car Pooling 的App,我從底層開始寫每個類如何定義,并且我提出說使用Actor Pattern來做到,數據和操作分離,在數據上采用讀寫分離,我還為此定義了Actor 和 數據層。大約寫到70%,他讓我停止,并詢問我如何實現前端的交互,我提出用Microsoft Web API,來提供Rest API,還提供Swagger UI做documentation,并把這個Web API 發布成Windows Services (原諒我沒有說發布到Azure,因為我的確沒用過)。前端的實現就和后端形成了弱耦合的連接,前端可以是Angular,可以是MVC,甚至是流行的Ruby on Rails。這樣的設計題就算是到此結束了,R先生又寫了一個JQuery 的語句,語句大概是$('MyControl').val(123). 問我,為什么123 無法賦值,我直覺覺得這個不可能,后來又想到如果是下拉菜單,有一個煩人的selected tag,我就提出說應該下拉菜單應該先去除selected,然后再賦值。他進一步告訴我這不是下拉菜單,并寫了一句html 的tag,我在他寫了一半后就說這個要用 符號# ,他就再細問了我# 的含義,以及其他selector 如何使用等等。我猜這道題的答案大概就是沒有用何時的selector 吧。

稍微休息兩分鐘后,一個年輕的三哥進來了。他似乎沒有什么耐心聽我介紹我的項目,很快就讓我開始寫代碼。第一題是給予一個隨機數產生函數,他會生成一個32位正負整數,讓我寫一個函數,利用這個函數來產生區間【a, b】的函數。我的直覺就是映射,因為我原先設計一個智能鼠標,讓鼠標跟蹤到老師手上的教鞭,靠得就是映射——從攝像頭的識別坐標映射到顯示器的坐標。很自然的,我說先除以 Int.MaxValue * 2, 然后,此時產生的數一定是0 到0.5 的數字,如果原來的數是整數,再增加0.5. 阿三哥就愣了。他問我怎么可能,我費盡解釋并投入一個數字跟蹤后,他問我有沒有什么問題,我說我們應該考慮邊界問題,還有你原來的隨機函數產生的都是偽隨機數,我就解釋偽隨機數產生的原理,這是蒙特卡羅方法的重要部分。他暈了一下之后問我,有沒有更簡單的方法。我想了一分鐘,告訴他可以取余數,例如5 - 14 的話,范圍是10,除以10 取余就得到0-9的數字,然后加上5就可以了。
第一題就這樣稀里糊涂的各種數學推理中完成了。阿三來了第二個題目,讓我復制一個鏈表,鏈表的元素還有另外一個指向非相鄰元素的支鏈。我很快寫了一個,此時他自信很多,他回應這個只是復制了引用,在內存上并不是克隆。于是我寫了一份,直接掉入他的陷阱,他提出支鏈無法指向這些沒有生成的元素??磥泶颂幬乙脙蓚€循環了,第一個循環生成元素和主鏈,并存下支鏈的相對位置,第二個遍歷再拷貝支鏈。大概時間不是很夠,他沒有再讓我檢查數據,考慮邊界,進一步優化,就說了一句大概就是這個意思,他的這一輪就結束了。這一輪,可以說真正體會到了論壇常常說的“阿三的難題”,難題不至于,我自己沒有發揮好,而且有意思的是這個面試官基本沒有提示,我寫的時候,他在看自己的手機,只有我提到我寫完后,他才指點一二。當然啦,技不如人也是要承認的。

第三個面試官是阿三J先生,他是真的是一名技術上大牛。出的題目都是當下想出來的,合并排序,控制內存合并排序,鏈表合并排序,然后請我到樓下吃飯聊人生,聊職業發展,聊西雅圖的生活。一切都進展得很順利,可以說我很享受和他聊天的每一分鐘,在結束后我都覺得時間走得太快,我還想多回答幾道問題。當然啦,一路也都不是順順利利的,在控制內存合并排序中,我思考了有五分鐘,在他提示后完成的。在最后十分鐘最后一題的hashing conflicts 的時候,他提出可以再次使用鏈表來實現contains,而我卻沒能想出來。

最后一個面試官是大老板N先生,N對我的項目背景是很感興趣的,在我講述了我的分布式權限系統后,他覺得好笑,像個玩具一般。因為如果這個系統直接應用Azure 的 Active Directory,很多模塊是完全沒有必要重復造輪子的,而且Azure 還能提供更優化的網絡會話連接。我同樣能理解他的意思,但我也提到,我連Windows Server 2012 的VM 都無法分配得到,我連實驗都無法完成,架構那邊,可能因為監管問題,對于Azure 的認識總是滯后的。我們的云端都還是自己維護的服務器,而不是采用IaaS。這部分結束后只剩下半小時時間了,他讓我完成一個矩陣的劃零問題,這是經典面試題,如果一個矩陣有一個元素是0,那么把所在的行和列的元素都設置成0。在圖像處理里面,這樣的應用可以很快地發現極值0所在位置。題目很簡單,很快寫出來了,雙循環,第一個找0,第二個設0。但第二個設0的時候,遍歷走錯了,馬上很快改了過來。然后N先生問了List 和Array哪個更優的問題,還糾正了我的代碼風格。我的代碼使用了較多的Error Code, 這是C++常用的處理異常的手法。他讓我回去好好學習在現代語句中,避免Error Code,而更好地處理異常。

流水帳在這里結束,大老板N先生告訴我上周二或者周三就有結果。遺憾的是,至今我沒有收到任何信息,我的猜想是可能我沒有優秀到可以馬上錄取吧,現在我大概在幾位“差不多”的候選名單當中,他大概在等待最佳的出現。如果他仍未出現,再從“差不多”名單挑一個吧。讓我好好等待吧。

微軟夢,希望能成吧!求祝福!

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 173,381評論 25 708
  • 從下定決心要改變自己,到現在不到一個月的時間,感覺時好時壞,從最初的抓狂不能接受,到現在看上去還算平穩,過程只有自...
    郝桐閱讀 218評論 0 0
  • 小甘出差,下榻xx酒店 夜里有人敲門,他沒敢開 從門縫里遞出來一張小卡片 上面寫著 「MB(money boy)援...
    陶知府閱讀 201評論 0 1
  • 最近找到了心儀的工作,準備提前結束產假復工!單獨練習線條畫的話時間太緊張了,還想多陪陪寶寶,但是“畫”不能停呀...
    一張葉小繪閱讀 257評論 0 5