伯樂線上注:本文來自文章作者@QAMichaelPeng 的推薦投稿(原文連結)。
緣起
在這個城市(北京)求學,戀愛,工作,生娃,笑過也哭過。十多年最好的青春都扔在這裡了,也曾經以為會在這裡終老。但豐滿的理想最終不敵骨感的現實,帝都的房價和PM2.5完全無視地心引力,新高之後再創新高,無情的粉碎了我對這個城市的最後一絲幻想。
神州雖大,可需要碼農的城市沒幾個,PM2.5和房價都不高的就更沒有過了,無奈之下只好放眼海外,盯上了三面環海人少地多PM到100就覺得非常惡劣卻需要碼農的美利堅。加州矽谷雖然陽光燦爛且有Apple、 Google、 Facebook、Oracle等巨頭,但人生地不熟且房價不菲。如果是十年前青春年少且光棍一條還可以考慮,如今娃都快能打醬油了,還是找一個熟人多的地方比較合適。這樣就只有微軟一個選項了。這些年原來的朋友同事們一個一個的出去,過去倒不愁太寂寞。
去年11月底和微軟總部一朋友通過電話,瞭解了那邊的生活狀態,兩年左右能買上房這一條還是很有吸引力的。至於那句有名的“好山好水好寂寞”我倒不放在心上,反正在國內也是宅男。定了回微軟之後就有兩條路可走,一條是直接投簡歷到美國總部,走H1B簽證直接出去,另一條是先加入微軟中國,呆夠一年再通過L1出去。前一條雖然比較快捷,但沒有直接面試國外職位和全英語面試的經驗,有一定風險。後一條拿offer基本無風險,但等待時間要長一些。但諮詢了STC的朋友,據說因為前兩年transfer出去的人太多,現在policy規定必須呆夠三年才能transfer,不能忍。只好選擇第一條路。
簡歷與電面
於是開始準備簡歷,強烈推薦lynda.com上的這個課程”Create an Effective Resume”, 非常實用。基本資訊哪些需要寫,哪些不用寫或不最好不寫,如何確定簡歷中的關鍵字,如何使用行為動詞,如何使用PAR(Problem-Action-Results)表述,如何寫專案經驗,如何格式化等等。
簡歷寫完就託朋友內推。建議大家能走內推的儘量內推。起碼能拿到一個電話面試的機會,不至於直接被HR過濾掉.這時已經12月中,正好走上美國聖誕季,一直沒有訊息。直到1月中才有兩個電話面試,一個在collabedit上寫程式碼,問題很簡單。然後一直沒有下文。問朋友才知道面試的不錯,可那個組的lead已經去了facebook,悲催。另一個主要問了些搜尋引擎架構方面的問題,沒寫程式碼。感覺也還成,2月一整月沒有訊息,3月初又一個電話面試,problem solving和搜尋引擎架構,都不難。然後又一週沒訊息。已經快到4月1日申請H1B的時候了,我開始著急,發信給幾個電話面試官催。最後一個面試官比較nice,幫我催了一下,HR很快出了interview的schedule, skype面試,因為時差原因,不能一天面試 ,要面兩到三天,前兩天每天Redmond時間16:00-18:00,北京時間8:00-10:00,第三天如果有的話Redmond時間16:00-17:00.
面試
面試第一天最悲催,和HR定schedule的時候美國還沒有實行夏時制,北京時間8:00-10:00am對應美國西部的4:00-6:00pm, schedule上也是這麼寫的。於是我早上雖然5點多就起來,但一直沒開電腦連skype,打算到7:30左右才上線。7點過幾分被老婆催著開機上線,上了skype就見右下角圖示在閃,點開了果然是面試官的訊息,當時腦袋就嗡的一聲,我還沒換正裝啊,時間也不對啊。沒工夫再想下去了,接通視訊對話,先問問schedule的事情,人家告訴我美國夏時制,時間早了一個小時。暈,1/52的機會被我給趕上了,真是好運阿。接著就是自我介紹,專案介紹。面試官對我現在的東西也沒太多瞭解,就問了一下現在我們產品地位肯使用者數怎麼統計的。然後問了一下有沒有machine learning相關背景,汗,搜腸刮肚才想到好多年前寫過的一個黑白棋程式對形勢的評估是用程式從幾萬局棋譜裡學來的,扯了了一通。接著問Why bing. 其實我很想說在北京呆不下去了,可還是扯了些別的。然後一道problem solving的問題,兩三分鐘沒有思路,突然想起在@陳利人 的微博上看見過一道類似的問題,用堆來解的。用堆試了一下,秒殺!下面是一道簡單的程式設計題,可時間已經不多了,頭上有點冒汗,沒寫程式碼,給個一個O(n)的解法思路,可是要掃描兩遍陣列。面試官又問有沒有隻掃一遍陣列的。一時沒想出來,就說面試開始的晚,時間不夠了,一會兒寫晚了發他郵箱。然後是我的提問時間,就用了準備的兩個問題,你現在的工作是什麼,主要的挑戰又是什麼,既可以瞭解將來的工作,表現出對工作和技術的興趣,第一輪結束。
休息了十分鐘,一個mm call進來,直接出題。熱身題超簡單,和mm澄清了幾個疑點後秒殺。第二題是併發相關的程式設計題,給了個非最優解,優化時涉及到讀寫鎖的實現,腦子有點混,沒寫出來。
第二輪結束後繼續補第一輪的程式設計題。給了兩個解,一個是掃描一遍陣列的,加上註釋說明了loop invariant,第二個是掃描兩遍的。並且說了我偏向於第二個,因為易於維護,不易出錯。
第一天面試就這樣了,感覺很糟糕。
第二天早上7點第三輪面試,抽樣問題,各種形式的變換,複雜度的要求,前面幾個都很簡單,看過《程式設計珠璣》的都能秒殺。最後在一個特定的時間複雜度要求下卡殼了,,半天沒有思路,向面試官要hint,只說聽到了,就是不理我,鬱悶,接著自己想。突然想到這個和RMQ(Range Mininum Query)有點類似,就向tree的思路發展,搞定。
第四輪面試,一個簡單的字串問題的併發擴充套件,不難,只是漏了一種case,在面試官的提醒下迅速修復了。最後一個優化問題居然是改變字串的儲存方式,這個真沒想到。不過應當不影響整體面試結果。
第二天面完,感覺比第一天好多了。
第三天早上起來先給HR發了封郵件確認今天還有沒有面試,要沒有,就是掛了。HR很快回了,說找了老大7點面。心裡踏實了。老大通常比較忙,晚了十五分鐘左右才開始。還是先自我介紹,然後,老大居然問了一個技術問題……完全沒有心理準備。一般老大都是喝喝茶,聊聊三觀。好在問題不難,很快給出了思路。老大接著要數學推導,倒也不難。最後程式碼實現,特別強調了要bug free,十來行程式碼,檢查兩遍也沒什麼問題,通過。然後被問了一個很尷尬的問題,你覺得你哪方面是專家?這些年做的事情太雜,linux到windows, hook API,crack到ASP.NET MVC , RoR做網站,搜尋引擎到嵌入式裝置,啥都做過,都是蜻蜓點水。說啥可能都會被老大challenge,就挑了一個比較偏門,被挑刺可能性小的crack說了說。老大也沒難為我,就問了都用什麼crack工具。事後在linked in上才瞭解到老大居然實現了win8上的memset/memcpy/memmove,比win7上快了一倍,悲催的又撞槍口上了。然後又被問了一次有沒有machine learning的經驗。接下來就聊簽證和入職,塵埃落定。
當天HR就給我電話討論offer了,效率超高,和先前安排面試的節奏簡直有天壤之別。不知道是老大push的原因還是為了趕簽證申請。
接下來就是出offer,準備簽證材料了。level不算高,我如果當初一直呆在微軟,肯定不比這個低,這些年做的事和職位相關度太低,沒辦法。慢慢來吧,不管level,能逃離帝都才是第一要事。悲催的趕上今年H1B要抽籤,祝自己好運吧。
反思
- 1 雖然已經老大不小,入行也十年了,可做事不專,什麼都知道一點,什麼都不精。一定要改變這種狀況。成為某個有前景領域的專家。
- 2 提高表達能力,把一件事情講清楚。講東西的時候,你明白的聽眾不一定明白,不能想當然的把自己認為沒必要講實際上聽眾可能不明白的東西忽略。
- 3 找工作時一定要注意是否能在工作中學到新的東西,且工作中用到的東西是正在過時還是會永續性的有前景。比如MFC, 嵌入裝置相關的知識正在迅速貶值,而machine learning, big data方興未艾,也不會因為框架或技術的升級而被淘汰。
- 4 面試準備,各種OI、 ACM、 OJ中的演算法都不會用到,把《程式設計珠璣》和 @陳利人 的微博上的每道題都做出來,北美求職就不是問題。
- 5 英語不是問題,可以讓面試官說慢一點,再不成就 pardon, excuse me, 實在不行就請面試官把你聽不清的內容寫出來。
- 6 不要說沒時間,在創業公司上班且每天要做兩頓飯洗碗刷鍋洗家裡所有衣服尿布且看一小時娃的奶爸每天早上還能抽出3小時左右看書寫程式,大家肯定時間更充裕了。
致謝
感謝幫我投簡歷以及提供各種資訊的朋友,因為你們的幫助,才能拿到這個offer,離開帝都。
感謝多看的同仁,將近兩年的時間,我們的軟體從單一平臺到跨平臺,從上線第一本單行本到今天6月一萬本書的目標,一起奮鬥的日子永遠難忘。
感謝親愛的老婆,為了家庭辭去工作全職看孩子兩年多,還幫我準備面試著裝,除錯攝像頭麥克風等裝置, 此岸到彼岸,我們要一直相伴。