兩年前寫的文章,現在讀來雖然有點幼稚但是還是很有價值的,希望能夠幫助到大家。^_^
經過近半年的辛苦面試,總算簽約dream company。整理下思路,把自己的情況寫出來,只是為了給大家做個參考,希望能幫助到需要的人。
簡介:
2010年國內一本本科畢業(大學排名30以外),四年左右iOS相關開發工作經驗的女程式媴。有多家公司的工作經驗,囧。期間做過free lancer一年,和多家公司(團隊)合作過,認識了不少朋友。從2012年年底開始嘗試面灣區工作,G、F及多家startup全部都是一兩次電話面試就直接失敗,之後開始做各種online程式設計比賽,看Cracking the Coding Interview,每天關注@陳利人 的微博及評論,和@待字閨中 的微信,並Crack了所有Leetcode的題(開始花了一個多月做完大部分題,等到昨晚剩下的難題一共花了3個月左右)。2013年夏天進入國內某top網際網路公司,9月份只花了兩個多禮拜重做Leetcode,發現自己的程式碼越來越簡潔了。之後開始面G,11月初面完進入漫長等待,12月中去美國onsite FB,直接悲劇。回國後,焦急的等待G的結果很久都沒有任何進展,覺得不能坐以待斃,14年1月底辭職飛去灣區集中精力找工作一個月,最終拿回LinkedIn,Amazon,Google,Twitter,和一個startup Tango的五個offer,因此標題簡稱為FLAGT。之後和各公司hr、hiring manager周旋兩禮拜,總算塵埃落定。
剛回國後,感覺所有公司的反饋都是非常好,心情非常激動。好像一切都來得太容易,突然覺得自己找到了成功的方法。在和小夥伴們分享面經的時候,解釋什麼情況要怎麼做、怎麼說,好像按照自己說的去做就一定能成似的。其實現在冷靜思考後,才發現,我這一路走來,有很多很多不可或缺的因素,履歷、工作領域、性別、人脈、努力,還有運氣,不過總體感覺確實沒有我之前想象的那麼遙不可及。
但是找工作的過程確實很痛苦,希望大家能找到自己的“組織”,有小夥伴們一起努力,互相分享經驗、互相打氣。從去年10月開始到2月,小夥伴們是越來越焦急,但是確實是很多人都在最後的時刻拿到了dream offer!貌似這趨勢還是越到最後的拿得越好。畢竟從國內招過去的人最好情況都要10月份才能開始幹活,所以很多公司到2月份才開始啟動海外招聘。只有Google和Facebook的校園招聘是最早的,大概每年8、9月就開始啟動了。所以請堅持到底,笑到最後的人笑得越好。
現在我很多面試的題目都記不太清了,面得實在太多,有時候都只是慣性的回答問題,慣性的寫出程式碼。但是面下來看和別人分享的面經裡說的內容確實沒什麼差別。所以我就以問答方式分享下我的一點體會吧。
1.灣區公司的面試題都很難?
我都沒有碰到特別難的演算法題目,印象出現很多二叉搜尋樹的問題。在Leetcode上難度排行的話,大部分也就中等水平。因為Leetcode上的題我都認真做了,很多題我都知道不只兩種方法的解答。就算面試不一定出原題,但都是一些同樣的套路。關鍵是簡單的題,要能寫出漂亮且bug free的程式碼,這個能力是需要花時間去鍛鍊的,而且一定能練出來。那些一直做題,一直找新題、難題做的朋友,也許到最後的收益就不會太多了。不如再花點時間提高其他方面的能力。
系統設計題也大部分都是我沒做過的,我完全沒有經驗,就按自己的思路去說,也能過關。
要說難題,只有Twitter第一面碰到一個ACM拿過金牌的面試官,前面兩個簡單題我做得特別快,他很高興,而且之前我們的聊天中他透露到中國區的ACM金牌在世界上算最難拿的,他很想挑戰我,出了道稍微難的題。我花了幾分鐘努力確定我正確理解了題目意思,之後反正就那套路,brute force,或者greedy,他或許也忘記具體怎麼做了,反正就是一起探討,由於時間不多,他提示說動態規劃。我立馬就反應過來,然後列出狀態轉移方程。他看起來很享受討論難題的過程,自己也接過來寫下去,我就在旁邊叫好。
所以,遇到難題並不用慌,尤其在那一面最後的時候碰到難題,時間肯定不夠,面試官也是知道的,所以一般就要個思路而已,那思路就那麼幾個套路去想就是了。就算做錯了其實影響也不會很大吧。最後這個面試官很高興的和我握手,祝我好運!
2.前面的熱身問題不重要?
有些面經說前面的熱身問題不要花太多時間了,免得影響後面的面試。我看倒也不全對。確實別花太多時間,但也要重視這幾分鐘。Google的前幾面我都非常緊張,一開始面試官想用幾個熱身問題讓我放鬆,但是發現我沒太多話和他們聊也就作罷。最後兩面,我當時已經自我感覺很良好,面試開始進入狀態了,所以開頭能和麵試官聊上來幾句。面試官介紹自己做了哪些Google產品,我表示非常喜歡用,之後我透露了自己簡歷中“豐富”的專案經驗和“多次跳槽經驗”-_-,之後才有了strong hire,因為他們覺得我比較有眼光和系統設計答得很好。(我也不記得自己系統設計是怎麼答的了,反正是cache相關的。就記得他從很小的一個case開始問,然後不斷提出新的需求,然後我反應很快的給出新的解決方案,也許是因為整個流程比較順暢吧)。
之後去灣區的面試中,就更熟練了,他們首先會介紹自己做什麼的,然後我會表現很感興趣,適當問幾個問題。之後輪到我說,就說自己之前做了什麼什麼專案,我甚至拿了很多iOS裝置去給他們做demo,有的面試官開玩笑問我到底有多少iphone。其實十分鐘時間能展現很多亮點。比如startup面試我會展現我之前和startup團隊合作的艱苦歲月,比如一個禮拜和CEO、CTO一起工作90個小時之類的。和twitter我會說自己特別喜歡用weibo,然後weibo和twitter不同的地方,然後weibo特別的地方,那個manager聽了看起來挺驚訝的(畢竟Twitter多少年來都沒什麼花樣嘛)。其實我主要就是做demo,因為做過很多app,不同面試官我還會換個app來介紹什麼的。
3.最後問面試官的問題不如不問?
每輪面試的最後,一般面試官都會問,你有什麼問題問我嗎?有的面經上說最好不要問什麼問題啦,因為面試官並不是真的感興趣去回答你的問題。但我覺得不對。我第二次去灣區的時候,幾乎每個面試官最後我都會問好幾個問題,包括電話面試,而且他們都非常認真的回答我,一個問題都要回答好長一段,有時候我真的沒大聽懂,但也不好意思打斷。我覺得最後這個環節,如果能問比較好的問題,或者有趣的甚至有挑戰的,會讓面試官喜歡你。灣區人才緊缺,他們願意花時間來回答你感興趣的問題表示尊重,也是給你一個更多瞭解公司的機會。有的面試專門是為了考察你對公司的感興趣程度的,你如果沒有任何問題問他們,也許他們會認為你沒太多興趣,會懷疑你的求職動機,很多人只是想拿個competing offer不是麼?所以要表現自己的熱情。哪怕是帶我吃午飯的,也許都不列入最後評分的,我都會努力和他們交流,雖然其實我真的很想休息一會,節省體力。
Amazon onsite的午飯是我和一個組的hiring manager訂了盒飯在面試會議室裡吃的,整個午餐過程他都一直問我,還有什麼問題嗎?然後我擠一個,他回答。之後他吃幾口飯繼續問,還有什麼問題嗎?我又再擠一個。當時真的快崩潰了,幾乎把我常備的問題都榨乾了,而且我平時吃飯都不喜歡太動腦子的。
其實就抓住這個機會,側面反應你的思考能力,求職所關心的內容,和對他們的熱情程度。比如我會問code review的情況,team有多少人,有時候開玩笑問幾男幾女呀?What kind of people are you looking for?這些公司我都應聘的是iOS開發,所以我還會問那個iOS app團隊怎麼分工合作的?現在team裡有多少人是熟悉整個專案的?像Twitter的app太大了,manager直接回答一個都沒有,我表示失望和理解。然後LinkedIn有個面試官說,只有他一個是懂整個iOS專案的,我表示很崇拜⋯⋯還可以問,你對這個公司喜歡或者不喜歡的地方分別有哪些。或者先問你最喜歡的地方是什麼,他回答完立馬問那你最不喜歡的是什麼呢?有時候我會針對面試官自己問一些問題,因為你對他們感興趣,他們也會覺得開心吧。比如問他之前在哪個公司,為什麼來這個公司的,來多久了,發財了沒有(不要每個面試官都問這樣無聊的問題,換不同問題去問)。我還問過一個L的面試官,Do you think LinkedIn is better than Facebook?他聽了哈哈大笑,其實我不理解他為什麼笑,也許外國人就是那麼容易笑吧。他想了想覺得這個問題很大,問我具體什麼樣,我覺得他笑了就達到目的了,就讓他介紹從engineer的角度來分析吧。然後他就說了一大堆Facebook的壞話,哈哈。其實面試官肯定是多說自己公司的好話的,至於不好的地方還是要靠自己私底下多做調查。
所以,多準備一些好的問題。
4.面試過程中需要謙虛嗎?
我覺得一定要自信,態度要不卑不亢。哪怕自己回答錯了也不要緊。自信真的太重要了,就算你面失敗了,也並不代表真就是你能力的問題,不要看輕自己。很多面試官進來會握手問候,然後問你目前都進行得怎麼樣?我一般想都沒想就說,I think it’s good!我猜他們也許就相當於問how are you一樣,並不真的關心你怎麼回答,就是禮貌問候,那麼回答how are you一般都是Good how are you?那麼回答目前順利嗎?也要說Good。我猜的-_-
然後就是在討論問題的時候,也要敢於提出疑問。Facebook有一面我當時就是明知道自己對的,但是英語又解釋不清楚,那面試官又很堅持自己的觀點,然後我當時時差沒倒好特別困,意志力一薄弱就妥協了。掛得心甘情願。尤其是面試官剛把問題提出來,其實一開始的問題都很簡單,你就得提出疑問,說什麼情況怎麼樣。當時Amazon問我關於Goodreads的問題,類似於豆瓣讀書,我當時說我非常喜歡那個app,那個在Amazon的kindle組待了8年半的女principle engineer聽了深表欣慰說她自己也超級喜歡啊。她問要推薦書,所以求出一個person 2度關係以外的圈子內的星級最高的書。我當時問,有的書很popular但是評分不夠高也可以推薦啊,有的書只有一個人給5 star也不一定那麼好。然後她很高興我說出這個,回答說那就求最popular的。
有個視訊說,兩腿開啟站直,抬頭挺胸,兩手叉腰,然後用這種伸展的姿勢保持五分鐘,你就會變自信很多。我一開始緊張的時候會用,好像有點用^_^
還有個視訊說,和別人交談的時候,可以有意的去模仿別人的動作,能增加好感。當然要做得自然。比如說當他們突然把手在胸前交叉,那你也做個類似的動作,比如他們一開始是趴桌子上討論,突然向後靠了,那你也邊說話邊自然的向後靠。如果一開始你們倆的姿態都比較拘禁,比如都頷首、前傾,然後慢慢他們開始變得放鬆、自然了,你也要跟著改變。比如他們一開始是坐著的,然後站起來走到白板前面開始寫,你也站起來跟在旁邊看著。如果他們開始擦白板了,你也找個刷子一起擦。如果他們在找筆,你也幫著一起找。
所以,面試的時候哪怕自己真的很緊張,也請努力催眠讓自己變得無比自信吧!
5.只要能做對題就能有offer,沒有offer一定是題做得不夠快、狠、準。
顯然不是。我認識有個朋友一面能秒殺三道題的演算法大牛都被Google無視了(不點名,偷笑ing)。借我一朋友的話來說,面試不如說是種社交。藉著討論演算法、設計題,來社交。要和麵試官溝通,要和他一起討論問題,要把你的思路簡潔明瞭的解釋明白,要讓他們覺得你很聰明。
你拿了題就開始coding,面試官在旁邊看著其實很無聊的,根本不知道你在幹嘛,也不知道你是不是已經做過在背答案。我一般會簡單畫個圖解釋下我的思路,然後中途有問題就請教面試官,有時候他們高興了會故意提示你讓你別卡住的。當然如果你們確定了思路,你就開始coding,就可以一句話都不用說了,最好是一氣呵成,如果你突然斷了,在思考一些問題,最好think aloud,讓面試官知道你在想什麼。
把面試官當作朋友吧,平等對待,朋友是願意幫你的。
6.如果自己狀態不好了要繼續撐下去嗎?
如果是因為累的,沒有辦法,面試確實很消耗體力,你得自己扛著,但是我建議可以稍微透露給面試官。我非常後悔2012年Google電話的時候,前一天晚上加班到很晚,然後大清早狀態很不好,卻沒有主動要求reschedule。還有13年底的Facebook onsite也是,時差倒得一塌糊塗,只想睡覺。但我看開了,相信一切都是上帝最好的安排,There is a purpose behind every delay。後來有經驗了,Twitter onsite,一天六面,最後一面我在coding的時候,發現自己頭腦出現了短暫的空白,然後我就敲了敲自己的腦袋,說OMG I am too tired…然後面試官表示理解立馬說可以用一些虛擬碼什麼的。但是我休息了會還是繼續寫了完整的程式碼。之後他就不讓我寫code題了,改為聊天,哈哈。
Amazon的onsite也是六面,是我onsite的最後一個公司,我學聰明瞭,每次面試開始之前,我都要求去上洗手間,然後在裡面整理幾分鐘,哈哈,對自己說,上一面已經過去,把它拋到腦後,現在focus到當前這一面。
有時候我非常緊張,思路亂七八糟也不知道什麼才是他們想要的答案的時候,我乾脆就停下來,不說話,看著窗外思考一分鐘,面試官會等你的^_^有時候靈感真的就突然出現了。
LinkedIn第一面的系統設計短url系統,我從來沒接觸過,一開始我給的設計他們(有兩個面試官)總是給我提出新的問題,如果request很多很多怎麼辦?你的設計在什麼什麼情況下會出現什麼問題?我都快崩潰了,但是我後來望著窗外思考了的那一分鐘內,整理了下,就把之前的設計全部推翻,重新快速設計了一個,之後他們特別滿意,主面試官還謙虛的說他剛進LinkedIn的時候都不懂這些的。
Amazon第一面也是系統設計,park車的計費machine的系統設計,寫類和介面,我也沒做過類似的,不知道到底答到什麼程度才算對。我自己一個人在白板上寫了又寫,然後擦了又寫,自言自語的,中途發現自己已經面紅耳赤了,乾脆停下來故作深思,喝口冰水(美國大冬天都喝冰的嗎?!)。真的是喝了那口水,自己的心跳立馬就恢復正常了,然後就想到自己要加一個和機器互動的模組。加了之後,我發現面試官們還是沒有任何反應,就回過頭問他們,還有什麼其他需求嗎?然後他們說哦,沒了,你已經做了很多了。囧。
7.你之前的跳槽情況那麼多,他們不反感嗎?
他們不反感。有些人完全不care你之前的經歷,我猜是,在國外找工作是平等關係,你幹得不開心了,覺得公司不合適就走,很正常。另外我的工作經歷都是一個比一個好。
但是他們確實會有顧慮,其實現在跳槽是很正常的事情,所以前面提到很多公司面試會專門考察你的熱情程度和求職動機。LinkedIn的最後一面仔細問了我每家公司離職的原因。我解釋清楚當時的各方面原因,有公司不好的地方,也有自己不成熟的問題。但是我強調這次我去找美國的工作是我花很多精力去認真挑選的,而且由於身份問題,我一定會把下一份工作當作長期的事業。
話說回來,由於我的工作經歷豐富,所以我也許比別人多一些推薦信,每段經歷都有一封。這個對我的幫助太大了,Google是我面得最差的一個公司,搞不好沒有這些推薦信我就掛了。謝謝你們!不過也只有Google要了這麼多東西,其他公司什麼都沒要,就因為我有Google的pending offer,他們就都搶著要,可見Google招聘的品牌效應之大。