看板 Oversea_Job 關於我們 聯絡資訊
這個月開始上工,在這邊分享一下找 new grad software engineer 工作的經驗。 先介紹個人背景,我在美國某 College 拿到 CS Ph.D. (花了將近六年)。 研究方向是機器人學的理論部分,論文的程式部分只有數千行而已。 因為曾經換過老闆,學術發表僅達勉強畢業的程度。 沒有實習/業界工作經驗, Ph.D. 就學期間沒上要寫程式的課程。 結果: 拿到 offer 的:Square、LinkedIn 和 Google,最後決定去 Google 。 On-site 之後被拒絕:Facebook、LiveRamp、Anki、Energid (後兩者是機器人相關) 電話面試之後被拒絕:Uber Online assessment (OA) 沒通過:VMware HR 打電話之後被拒絕:Akamai、Leap Motion 履歷直接被拒絕:Airbnb、MS、Amazon、Yahoo、Twitter、Oracle... 族繁不及備載 其中 Uber、Facebook、LinkedIn、Google、VMware、MS、Amazon、Yahoo和Twitter 都是找朋友內部推薦的。 想要知道 Facebook、Linkdein 和 Google package 內容的可以參考 http://www.1point3acres.com/bbs/thread-154736-1-1.html 而 Square 的 package 比 LinkedIn 和 Google 少。 我先分享各家面試過程: 大致上的流程都差不多,先有一個 HR 打電話作背景調查,詢問想要申 請的職位。有些公司會有 OA ,之後會有一至二輪電話面試,通過之後 就再 onsite 面試,過一陣子就知道結果。 我個人沒寫過網頁程式,也不會手機程式開發,更不要說是網路/資料庫 應用了,因此前後端的工作我都沒辦法找。所以我都找不特別限定經驗 的工作。而大公司像是 Facebook 和 LinkedIn 在投履歷的時候會選擇 組別,儘管我開發大系統的經驗是零,我都選擇投 infrastructure 組。 因為所居住的地方是在東岸的鄉下,要去西岸面試很不方便,所以我把 六個 onsite 面試安排在連續的七個工作天之內,以求一次搞定。不過 很慘的是我在出門搭飛機的時候感冒了,連續的面試也沒辦法好好休息, 還得要被迫一直講話,幸好最後還是找到工作了。 Square (SF): Square 的面試特別的地方是用 pair programming,面試官和你一起寫 程式,所以過程比較輕鬆,壓力比較小。儘管是 pair programming, 當然主要還是要你寫,除非你是不想要 offer ,不過你的 partner 會 幫你除錯或是 code review ,我覺得考官人都很好。 先有兩個電話面試,一次一題,會真的執行程式碼,還要寫測試資料。 電話面試通過之後,有詢問有興趣的職位,我就回 infrastructure 。 Onsite 總共兩輪,都是 coding ,但是其中一輪比較偏系統。 那天總共有 15 個人一起面試,通通集中在公司的一個區域寫程式。電 腦上面已經灌好不同種類的 IDE ,可以自己挑擅長的用 (雖然我最常用 vi,不過當天還是挑了 Eclipse)。 LinkedIn (infrastructure 組, Mountain View): 一開始有 HR 背景調查和介紹 LinkedIn 職位。 再來一個電話面試,共三題,不用編譯,只需要講解就好。 Onsite 總共五輪,兩輪是 design ,兩輪是 coding ,一輪是跟 host manager 談。 不過 LinkedIn 忘記幫我安排午餐了,害我要一邊面試一邊吃午餐.. 最後錄取 storage infrastructure 組。 Google (Mountain View): 先有一個電話面試,只有一題 (但是這題比較長), 不用編譯 ,只需要講解就好。 Onsite 總共五輪,一輪是 research ,四輪是 coding 。 最後錄取 Google Ads 組。 Facebook (infrastructure 組, Seattle): 先有兩個電話面試,一次兩題,不用 compile ,只需要講解就好。 Onsite 總共有四輪,一輪是 research + coding ,一輪是 design , 然後兩輪純 coding 。 Seattle 的 Facebook 午餐沒有想像中的好,因為他們沒有廚房。 不過他們說就快要搬到新大樓了,之後食物會好很多。 Uber (SF): 一輪電話面試,只有一題,但是要執行還要寫測試資料。 電話面試後就被拒絕了。 Anki (AI Software Engineer, SF): 這是一家做遊戲的 startup,目前的主打是 Anki Overdrive。 一開始他們的技術主管先打電話詢問背景,之後會給一份作業, 作業做的好就可以得到 onsite 的機會。 Onsite 有超級多輪,總共花了我快要八個小時, 遊戲組、機器人組和 AI 組都個別跟我談,因為這份工作需要跟不同的 組都有交流。 最後他們的創辦人跟我談了一下,他說公司還在草創期,所以招人要非 常謹慎,我的面試不算長的了。 Energid (Senior Robotics Research Engineer, Boston): 這是一家小的機器人公司,主要的業務是幫政府執行研究計畫。 有三輪電話面試,主要是問背景知識和 C++。 Onsite 時給一個 jobtalk,接著繼續考 C++ 和一些相關知識。 Leap Motion (Algorithm Engineer, SF): HR 先打電話詢問背景,然後寄給我一台 Leap Motion controller,要 我先試著玩玩看,接下來的技術面試會問你的感想。 但是當 controller 寄出之後,HR 又寄信說公司覺得我不適合,所以就 不用聯絡了。但我還是免費得到一台 controller.. Liveramp (SF): 先有 OA ,然後一輪電話面試考 design 。 Onsite 第一輪是他們技術高層面試我的,面完之後他就叫 HR 跟我說他 覺得我技術太爛,不想浪費工程師的寶貴時間面試我,就把我轟出去了。 接下來我分享找工作的心得: 找工作的前置作業 對於學生來說,從入學到真的工作至少都有一年的時間,其實可以利用 這段時間好好思考自己的興趣,然後培養自己的專長,找適合自己的工 作,這樣會比亂槍打鳥容易許多。 另外要了解,公司是要找人來工作,不是找人比賽解題,解題只是面試 的一部分,並不是全部,面試要考量的面向很多,除了展現程式設計功 力,也要展現自己的溝通能力,對寫程式的熱情等等。 網路上大部分的文章都是單純以面試者的經驗來討論面試的過程(包含 我這篇),我建議要先研究一下公司以及面試官看重什麼,再來思考該 如何準備。可以參考下面這兩個影片 What I Learned Doing 250 Interviews at Google https://www.youtube.com/watch?v=r8RxkpUvxK0
Google 面試官分享他在 Google 面試程式設計師的經驗。 What to Expect During the Recruiting Process https://www.facebook.com/video.php?v=10152735806862200 Facebook 介紹自己的 interview process 。 以 signaling theory 的角度來看面試過程的話,就是面試者需要釋放 出一些訊號,讓面試官認為面試者是真的有實力而不是假貨。所以重點 是要提供面試官可靠且可以驗證的訊號,不要提供任何人都可以說的訊 號。舉例來說,每個人都可以號稱自己喜歡寫程式,所以宣稱自己喜歡 寫程式對面試官來說並沒什麼意義,除非面試者可以提供有力的證據。 傳統上面試官參考的訊號大多是學歷、GPA、或是比賽得獎。因為要達 成這些成就代價很高,想要走捷徑的人不會選擇這條路走。而且對於面 試官來說,驗證這些資訊不難,所以傳統上很常用。但是 grade inflaction 越來越嚴重 [10],因為學校知道公司都看 GPA ,而學校要美化就業率 或是 graduate school 錄取率,所以分數越給越高。另外,好成績不 代表可以勝任程式設計師的工作,所以這訊號雖然容易驗證,但是並沒 有那麼可靠。 因此,如果面試者可以提供一些額外的訊號,讓面試官相信面試者是真 的有能力勝任這份工作,像是積極參與 open source 開發的工作,就 會比其他競爭者來的有優勢。研究指出,在 GitHub 上面積極的參與 open source 開發是很正面的訊號,甚至比學歷要來的可靠 [7] 。而且 如果可以參與有名的專案的開發,會特別有用。而 project 的 watchers 的數量反而沒有用,因為是有可能是作假的 [6] 。我想同樣的道理, LinkedIn 上面 skill 的 endorsement 和 recommendation 的可靠度都不高。 GitHub 帳號只是一個例子,應該還有很多方法是可以讓面試官認可面 試者的實力。當然,現階段可靠的訊息,不代表未來還可靠,因為只要 競爭越激烈,就會有愈多投機客想辦法要操弄這些訊號,然後這訊號就 不再被面試官相信了,以前的 brain teaser 和移動富士山問題,都慢 慢地被淘汰了,現在的各種面試題庫也不知道何時會被淘汰。但是無論 如何,面試者都要好好思考如何展現自己的能力,讓面試官可以輕鬆的 驗證和相信。 建議在開始找工作之前,要好好思考一下自己的特長,找到適合自己的 戰場,然後想辦法凸顯一些自己與其他人不同的地方,如果你已經找到 了興趣,同時這興趣是業界很需要的,那恭喜你,只要順著你的興趣, 發展出自己的專長,要找工作是很容易的。但是如果像我一樣,專長不 是業界需要的,又或是沒有特別的興趣,那找工作就沒那麼容易了,要 更多花心思。 準備履歷: 首先是準備履歷,然後同時更新一下自己的 LinkedIn 檔案、個人網站、 GitHub、Stack Overflow Careers 等等資訊(不知道 Stack Overflow 的 reputation 對於找工作有沒有用)。因為不少公司是使用 application tracking system 來審核申請者,所以履歷的部分有針對 ATS 來最佳化一下,我是用 LaTeX 加 moderncv 套件來製作。 履歷的重點是簡單且清楚的介紹自己,以求可以通過 HR 的篩選。進入 面試階段之後,履歷就沒那麼重要了,不可能因為履歷做的好面試就給 offer,但是有可能會因為履歷與實力不符而被拒絕,所以誠實的呈現自 己過往經歷就好。 準備面試: 我個人熟的程式語言是 C/C++/Java ,但是用 Java 來面試比較方便, 所以我首先複習了一下 Java 的資料結構、 Java 8 新功能和各種 idiomatic 用法,以求可以寫出專業的 Java 程式。 雖然並不需要把 API 都背下來,但是常用的一些 API 還是得記好,有 時候會有多個 API 都可以完成同一個功能,像是 Integer.valueOf(int) vs new Integer(int) ,此時可以上 Stackoverflow 看一下這些類似功能的 API 的差異性和使用時機。 當然,畢竟 API 實在是太多了,面試官自己也未必記得全,所以 API 不熟也不用太擔心。如果是上機考一般可以跟面試官說讓你翻一下 javadoc, 不過我猜應該沒辦法要求上 Stackoverflow 。如果是白板考,面試官 不介意的話你可以自己假設某種 API 存在,直接使用就好。 另外,面試大多是沒辦法使用 debugger 的,不管是白板或是上機。因 為面試官預設你可以用看的找出錯誤。所以要訓練自己在寫程式的時候 要想清楚 precondition 和 postcondition ,同時訓練自己用肉眼看出 loop invariant 來驗證程式的正確性或是除錯。 除此之外,我也花了點時間準備系統設計面試,從 OOP 、design patterns 到如何設計 scalable 的系統等等。可以參考這個 http://www.hiredintech.com/system-design 複習完程式設計技術基礎之後,就要複習資料結構和演算法,網路上很 多人的建議都是把精力放在練習題目上,不建議看書的原因是因為書本 很厚,沒那麼多時間去看,而且有一堆內容面試也不會考。但是這些練 習題只是演算法基礎中很小的一部分,就算練熟了充其量也只是一些很 片段的知識。所以我建議要先複習教科書再練習題目,而且教科書上一 般有比較詳細的解釋,這可以幫助你思考該如何解釋你的程式給面試官 聽。 當掌握好上述幾點之後,可以開始有系統地練習面試題目,我主要練習 以下幾個網站: 1. LeetCode, 用 JavaScript / Python 解 2. LintCode, 用 Python 解 3. CodeEval, 用 Ruby 解 4. Codility, 用 C/C++ 解 5. HackerRank, 用 Java 解 因為這些題目都很類似,所以就使用不同程式語言來解,比較不會太無聊。 1 是最多人練習的,2 和 1 很多題目一樣。 4 和 5 則是許多公司 OA 的 平台,所以需要熟悉一下。 其他還有幾個網站像是 HackerEarth、Interview Cake、InterviewBit, 有興趣的人可以自己看看。 另外還要熟悉一下 CoderPad 和 Collabedit,因為有時候電話面試會用到。 之前我還有在 Talentbuddy (已倒閉)上練過 Haskell (主要是在練習 point-free style ),也在 HackerRank 上的 functional programming section 練過 OCaml 。不過除了 Jane Street 之外以 FP 為主力的公司很少, 所以為了找工作學習 FP 的投資報酬率可能不高。另外面試一般公司也 不建議使用 FP ,因為還要多花時間解釋語法,而且有時候面試官也未 必能了解 FP 的意義。 練習題目難度其實都不高,許多高中生比賽的題目都比這些面試題難。 所以只要耐著性子慢慢的作,終究是可以做出來的。 而當基礎知識和實作能力慢慢提升,自然可以在時限內解決問題。 重點是在增加自己的實力,而不是增加解題數或是強記奇技淫巧。 我建議是按照由簡單到難慢慢練習,而且一次集中練習同類的題目。 自己幫題目分類和分難度,把需要特別注意的地方記錄下來,面試前 可以翻自己筆記來複習,而不用浪費時間在自己一定做得出來的題目。 簡單的題目寫過之後,我會上網看看有沒有比較好的實作技巧。 比較難的題目我會找文獻來看看理論上的最佳解法,儘管最佳解不可能 被實現,但是研究者思考問題的深度和廣度可以增進思考能力。 我做了一些文獻整理,發表在 Prob_Solve 版,有興趣的人可以看看。 我個人建議是教科書和練習題目之間要取得平衡,雖然看書有點像是在 浪費時間,不過我覺得長遠來看是值得的,畢竟是增強基礎知識。 先看書複習一下基本的資料結構和演算法。然後在用這些題目來測試自 己的了解以及實作能力,藉由這些題目來找出自己不懂的地方,然後回 頭看書並且思考。 參考資料 書單: 1. Cracking the Coding Interview, by Gayle Laakmann McDowell 2. Elements of Programming Interview, by Adnan Aziz, Tsung-Hsien Lee, Amit Prakash 3. Coding Interviews: Questions, Analysis & Solutions, by Harry He 4. Programming Interviews Exposed - Secrets to Landing Your Next Job, by John Mongan, Eric Giguere, Noah Kindler 5. Puzzles for Programmers and Pros, by Dennis Shasha 6. Algorithmic Puzzles, by Anany Levitin, Maria Levitin 前四本是介紹程式面試,後兩本是介紹數學謎題。 網站: 1. GeeksforGeeks 2. CareerCup 3. Glassdoor 4. HiredinTech 5. 演算法筆記 http://www.csie.ntnu.edu.tw/~u91029/ 其他人的心得: 1. 半路出家軟體工程師在矽谷 http://brianhsublog.blogspot.com/ 2. Wei-Chiu http://goo.gl/2eiXd2 投履歷: 雖然一開始有試著找機器人的公司,但是很多公司都要求公民身分, 另外我研究的子領域太過理論,業界幾乎沒需求,所以很難憑著自己研 究成果來找工作。 所以我的計畫是第一輪先投跟自己專業相關,或是一些小公司。 因為我從來沒找過工作,所以我需要一些面試的經驗,這樣當面試想要 去的公司的時候比較不會緊張。在這輪我沒拿到任何 offer 。 第二輪是找 Ph.D. 限定的工作,當時投的時候很擔心下列三點 1. 業界 Ph.D. 需求量最大的是 ML/Big Data 領域,我的研究方向完全 不相關。 2. 許多公司都希望 Ph.D. 是即戰力,所以有實習經驗,或是作相關研 究的 Ph.D. 比較吃香。不少公司跟我明言,我的履歷上看不出來我 會寫程式,而且公司也用不到高深的數學或是理論。 3. 今年我也三十好幾了,對於應徵 new grad software engineer 算是 很老了,很擔心公司不收老人 [2] 。 我都是請在各公司的朋友幫我內推,不然就是在 LinkedIn 上面搜尋工作 然後上公司網頁投履歷。 我本來是打算還拿不到 offer 的話,就用 Hired.com 來找工作, Hired.com 是把程式設計師當作是商品,讓各公司競價搶標程式設計師的 網站,有些朋友就是用這個平台找到工作的。 不過後來有了 offer 之後就沒使用這網站了。 面試技巧: 面試問題可以分兩種,一種是非技術面試,另一種是技術面試。 非技術面試 如果面試官是 HR 的話,一般都是問問背景資料、可以上工的日期和簽 證狀態。HR 會詢問希望的工作內容,來決定要給你應徵哪個職缺。 為了確認符合需求,有些 HR 會詢問是否有具有某種技術,但是我感覺 HR 好像是拿著一張評分表, 一題一題的問然後填表。畢竟 HR 畢竟不是 技術人員,所以這階段不要講太技術的內容,不然 HR 會搞不清楚。 有一個 HR 要我對自己 C++ 能力評分,滿分十分,我還真不知道要怎麼 回答。 非技術面試中最難回答的就是 behavioral 問題,像是為什麼想要加入 本公司? 理論上最好的方法是只申請自己有興趣且了解的公司,這樣這類問題就 很好回答了。但是實務上大部分人只是想要有個工作,就算不了解這公 司也會投履歷。 所以在面試前需要去網路上搜尋一堆資訊,研究公司的產品。有時候會 事先知道面試官的名字,可以先人肉搜尋面試官,找出面試官可能有興 趣的方向回答,而且答案要針對不同公司的特點特製化。 我自己在面試過程中被問到:假設你遇到一個 bug ,公司已經到了下班 時間且其他人都走了,你會怎麼辦?(我可以回答說我也要回家嗎?) 技術面試 面試一般會有三個階段,雙方自我介紹、面試官提問、面試者提問。 雙方自我介紹: 主考官會先介紹他的工作內容,然後接下來要面試者自我介紹和簡介自 己的學經歷。 自我介紹只是一個暖身,而且這部份是可以事先練習的,所以要好好把握。 面試官已經有你的履歷了,雖然他們可能沒認真看,所以自我介紹除了簡 介履歷的內容之外,試著把自己的一些人格特質、熱情所在或是沒辦法 在履歷上凸顯的特長包裝進去。 要避免滔滔不絕的講個沒完,先簡單介紹自己,看面試官哪部分有興趣 再講細節,不然講一堆面試官也沒興趣聽。跟履歷一樣,不可能因為你 講的好就給你 offer ,接下來的 coding 面試才是關鍵,所以誠實且自 信的展現自己即可。怕緊張的話可以擬個草稿,然後練習一下怎樣可以 說的比較自然。 因為一般面試官不會了解我的專長,所以我被深入追問的機率很低。問 題大多都是你用什麼程式語言寫、有沒有使用過某種技術、總共多少行、 寫那麼少啊,那我怎麼相信你可以當 software engineer 。 面試官提問 技術面是問題主要有三類,解題、系統設計、research。 如果面試官要求解題,首先要搞清楚問題在問什麼,然後問問面試官要 不要考慮非法輸入,如果是需要真的 run 程式的,還會詢問有沒有程式 語言的要求,如果可以選的話,就挑一個比較適合這個題目的程式語言來用。 寫的一手好程式固然重要,說的一嘴好程式更重要,尤其是不需要真的 上機執行的面試。如何清楚的呈現想法,然後 high level 的解釋演算 法,之後邊寫 code 邊講解是如何實作解法,這是展現自己溝通能力的 好機會。 寫程式難免會有 bug ,所以適當的除錯也是很重要的,不過在除錯的同 時也是要解釋自己的想法,讓面試官知道你是有系統的在找 bug ,而不 是隨意亂改程式寄望 bug 自己消失。 有時候也會遇到一些難題是不知道怎麼回答的,可以先提出一個暴力法, 然後思考改進方法或是跟面試官要求提示。面試官出難題有可能是想看 看你思考難題的過程,倒也不是真的要你找出答案。 我被問過一個問題:在三維空間中有兩個相同大小的圓盤位於不同位置 (朝向也可能不同),求這兩圓盤間的最短距離。除了暴力法我還真想 不出來怎麼作.. 如果問題是系統設計,同樣的也是要先搞清楚題目在問什麼,詢問一下 系統的需求,以及系統設計的目標,然後適當的使用圖像來解釋你的設 計,同時與面試官討論你設計的系統的優缺點,並且逐步改進。這部份 其實沒什麼正確答案,只要你設計的系統是合理的就可以了。而且也沒 什麼完美的系統,系統設計到最後就是不同目標間的 trade off 。 系統設計重點其實是在溝通,因為問題本身的定義是很模糊的,了解面 試官到底是想要問什麼,以及找到面試官可以了解的解釋方法和討論細 節度。 因為我是 Ph.D. ,有些公司會專門問 research 的問題。所以要好好準 備如何介紹自己的研究,重點是要先讓主考官聽的懂,之後才能展現自 己的貢獻。 在這階段讓我最難回答的問題是: 你的 research 提供了一個理論上的最佳解,但是你的模型跟現實差距 很大,而且速度比工程上用的方法慢太多,你的研究到底有何用處? 在面試的時候總會碰到各種不同類型的人,會問各種不同面向的問題, 所以對自己履歷上或是面試中說過的任何一句話都要有被問的心理準備。 我遇過幾個面試官是抱持 數學/理論 無用論的。其中一個人對我說: 你喜歡理論是不是,但是程式設計師工作用不到,不然你給我一個在一 般寫程式時必須使用高深數學的例子。 但是也有幾個是喜歡 數學/理論 的。其中一個面試官要我舉一個自己 覺得最有趣的演算法。 我想說要給一個在一般教科書中少見但是簡單又有趣的演算法,就給他 舉了判斷串列是否有環的問題(雖然這問題在 CLRS 裡面有,但是應該 不多人知道)。面試官之前並沒聽過這個問題,但是他聽完我的解說之 後也覺得這問題和解法很神奇。 面試者提問 面試最後可以問面試官問題,如果有事先查詢過公司或是面試官的資料, 可以提一些相關問題。如果面試官是你應徵的組的成員或是經理,就問 一下工作內容,問問組裡面的文化,以及績效是如何計算的。 如果面試官只是單純被找來作技術面試的,我就請他們介紹自己工作最 困難的部分,然後適當的討論。 Negotiate offer 技巧 面試過, HR 會通知你面試的結果,如果錄取了, HR 會找時間打電話 跟你談 package ,然後寄給你 offer letter。因為一般拿到 offer 之 後必須在限定時間內作決定。所以可能的話,在拿 offer 之前先詢問 可以考慮多久,然後安排 HR 給你 offer letter 的時間,盡量把所有 deadline 控制在差不多的時間。不過有時候 HR 是直接把 package 寄 給你,上面寫明了 deadline ,那你只能問問看 HR 可不可以把 deadline 延期了。 拿到了一家 offer 之後可以試著把這 offer 報給還在 pending 的公司, 讓他們必須在一開始就給一個更好的 package ,接著把這 package 報 回已經給你 offer letter 的公司要求 match 。個人建議是只要有拿到 offer ,都要盡量把 package 談高,最後再下決定。 有 competing offer 是最有效增加薪資的方法,但是有時候 base salary 比較難談,可以試著從簽約金或是股票下手。公司一般可以接受 match 其他家公司 offer 一次。而如果你的談判技巧好加上經歷夠顯赫,讓 公司 match 多次也不是不可能。 而 HR 的抵抗 competing offer 的慣用伎倆就是用不同的方式計算薪資, 把 bonus 當成是底薪的一部分,股價永遠上升,公司每年都加薪,然後 經理會打電話來說公司的未來多好多好,你在這邊可以晉升很快,說你 到大公司去就是當小螺絲釘,去小公司沒有先進技術可學也沒有保障, 只有他們那裡最適合你。基本上這種話聽聽就好,找認識的朋友問問內 情比較可信。 除了薪水之外,有些福利雖然未必可以談判,但是也可以詢問一下。 基本的有休假天數、醫療保險(還要考慮 HSA、HRA 或是 FSA)、 簽證(能不能在上工半年內辦綠卡)、 401k 的 match(有些公司可以 match 到 50%)。 常見的還有交通補助、健身中心會員和房屋補助(像 Facebook [12], Google 只有提供短期的免費公寓方便員工找房子)。 此外還有托兒服務、學費補助和 529 plan ,也可以問問。 雖然公司會給簽約金,但是一般都會先預扣所得稅,在加州可能會預扣 個 46 % 左右。而薪水也會扣很多稅,federal tax 28% 、 social security 6.2% 和 medicare tax 1.45% 是跑不掉的,在加州還要加上 state tax 9.3% 和 disability insurance 0.9% 。 稅法很複雜,我也不知道實際到手會剩多少。 結語 現在美國 CS 業界需要的人數大於學校的畢業生人數 [11],所以要找工 作不是那麼的難。要進 Google/Facebook 等大公司的話,雖然他們每年 招的人都很多,競爭還是不小。但是那種有潛力的未上市小公司更難進, 像是 Airbnb ,畢竟他們工作環境很好 [3] ,招的人又少,要求非常高。 給不給 offer 其實是有很多因素的,雖然題解不好拿到 offer 的機率 就低,但並不是解的好就直接給 offer ,不然 HR 只要上 topcoder 去找人就好了。面試官出題的難度,以及在有時間限制和面試壓力下的 臨場發揮,都有很大的不確定性,連 Homebrew 的作者都被 Google 拒 絕 [5] ,所以被一家公司 reject 也不需要太難過,再找下一家就是了。 如果被 reject 多了,也不要都怪在解題上面,好好思考一下到底哪裡 出了問題。 我在準備面試的時候常常在想,到底一個公司要怎樣才能挑到適合的員 工,像 Google 或是其他大公司這樣主要考演算法和資料結構,真的可 以挑到好的工程師嗎?而且也只用白板考,不用真的執行。以前 Google 常考 brain teaser 或是如何移動富士山這種題目,但是後來發現這種 問題找到的工程師並不合需求 [1] 。也嘗試過用 foobar 這種秘密徵才 法,分析使用者搜尋的關鍵字來判斷是否為好的工程師 [4] , 但是通 過的人似乎不多,我想未來應該還會再改變吧,或許未來會使用 自動化 技術 [8] 或是 ML 技 術來找人 [9] 。 [1] Google doesn't care where you went to college http://money.cnn.com/2015/04/09/technology/google-people-laszlo-bock/index.html [2] Don’t Hire Anyone Over 30: Ageism in Silicon Valley http://anewdomain.net/2014/12/11/dont-hire-anyone-30-ageism-silicon-valley/ [3] Glassdoor: Airbnb #1 Best Place to Work 2016 https://www.youtube.com/watch?v=KB2RVkTrvog
[4] Google Has a Secret Interview Process… And It Landed Me a Job http://thehustle.co/the-secret-google-interview-that-landed-me-a-job [5] https://twitter.com/mxcl/status/608682016205344768 [6] Activity traces and signals in software developer recruitment and hiring http://dl.acm.org/citation.cfm?id=2441794 [7] Open Source Software Development Experiences on the Students' Resumes: Do They Count?--Insights from the Employers' Perspectives http://eric.ed.gov/?id=EJ868861 [8] Gradberry Unveils A Recruiting AI That Analyzes Engineering Candidates And Their Code http://goo.gl/aW6xue [9] Can an Algorithm Hire Better Than a Human? http://goo.gl/wofVlr [10] Ivy League grade inflation Grade expectations http://goo.gl/JOFWbV [11] Where The Jobs Are – 2016 Edition http://www.cccblog.org/2016/03/31/where-the-jobs-are-2016-edition/ [12] Facebook offers workers $10K to cut the commute http://goo.gl/yfpHHG -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 98.248.209.13 ※ 文章網址: https://www.ptt.cc/bbs/Oversea_Job/M.1461635151.A.466.html
alpina0114: 推強者 04/26 09:53
painkiller: 賀 辛苦啦 XD 04/26 09:54
Luos: 太強了 當一下再來看完 04/26 10:03
tiiu: 推!好詳細 04/26 10:18
tedi: 04/26 10:22
jeffraptor: 推!恭喜,謝謝分享 04/26 10:26
FatHouse: 推 04/26 10:29
drajan: 繁體中文的面經! 讚 04/26 10:36
kenki98: 強者!好用心的文章 04/26 10:38
q1q1w1w1q: 推 04/26 10:41
fr373969: 推 04/26 10:50
davidlhs: 恭喜您,也感謝分享 04/26 11:09
umum29: 感謝分享! 04/26 11:47
tokei927: 推 04/26 11:53
hotdog5478: 原po背景的超強的的!太謙虛了 恭喜 04/26 12:10
yotsuba1022: 謝謝~ 04/26 12:26
Tony: 感謝分享! 04/26 12:27
mieki: 好有用的經驗感謝分享 04/26 12:30
faze: 好精彩 04/26 12:54
parkerliu: 強者!謝謝分享 04/26 12:55
frank11118: push 04/26 13:18
yoyoyo1011: 感謝分享! 04/26 13:44
warrenchen: 感謝詳細及強大的分享~ 04/26 14:27
bluebluelan: 好認真的一篇 04/26 14:32
linsou: 強大推!認真文推! 04/26 14:52
UYC: 用心文 謝謝分享! 04/26 15:14
UYC: 謝謝你抽空寫這篇文 真的很棒! 04/26 15:32
virdust2003: 強大分享 04/26 17:35
deanwish: 推 04/26 17:41
punk86862001: 太用心了,感謝分享!! 04/26 18:48
Dartmoor: 太強啦~ 感謝分享~~很實用!!! 04/26 19:24
sivid: push 04/26 19:46
Fjallravens: 推 04/26 20:03
ykshih: 推 另外你的稅率是邊際稅率,最後不會被抽那麼多的 04/26 20:15
terranhardy: 感謝分享,另存新檔。 04/26 20:30
howardtzou: 好文 04/26 21:52
karmen: 很用心的分享 謝謝 04/26 22:23
Utah1: 感謝分享 04/26 22:34
krauserq: 推 04/26 22:35
obov: 真好QQ 04/26 22:43
krauserq: 教主耶 04/26 22:50
wixter: push 04/26 23:27
starmovie: 感謝分享!! 04/26 23:35
shiangenlu: 詳細推 04/26 23:55
grtfor: 推分享~~ 04/27 00:08
coolmannctu: 推 猛又謙虛 04/27 01:43
runnial: 推!強者!感謝分享 04/27 02:11
bb1168kk: 推 04/27 02:23
chucheng: 感謝分享 04/27 02:44
seeking214: 推 04/27 04:41
colza: 太用心了,非常感謝! 04/27 06:25
ccas: 推 04/27 06:33
x51811danny: 精華了 04/27 07:28
Ouranos: 感謝分享! 大推~~~ 04/27 07:50
aznchat100: 謝謝你 非常實用的文章 04/27 09:44
developers: 感謝分享 04/27 10:12
red0423: 謝謝分享 04/27 10:25
henry22: 用心分享 04/27 11:05
vincentlin25: 強者~ 04/27 11:22
a616: 感謝分享 04/27 11:32
giveme520: 太神拉 04/27 12:54
squeegee: 強者 04/27 13:44
smallmac: 推 真詳盡 04/27 13:50
joybee: 感謝分享 04/27 14:07
wmja4387: 推分享 04/27 16:03
cybergenie: 紅明顯.若公司用ATS的話,最好是不要用LaTeX.作出來的 04/27 16:24
cybergenie: 檔案ATS看不懂.用docx最佳. 04/27 16:24
NOYUYU: 感謝分享 04/27 20:50
goldduck: CS不用寫程式的PHD真好 04/28 01:59
CHeagleeye: 大推強者!!感謝分享!! 04/28 04:23
choulu: 強到不行... 04/28 11:32
kingnamefu: 推!實用的分享! 04/28 18:56
dslin: F大推呀~強者~! 04/28 20:22
sevenw: 推 強者 04/29 23:14
sbL: 推 04/30 01:03
bab7171: 推實用 04/30 09:06
harry0890: 推強者 04/30 11:38
parite: 推 強者 05/01 11:56
mayfour: 推詳細分享 05/02 01:01
jammy50605: 太用心的分享了 恭喜大大 05/02 09:05
Daredevil316: 推!! 05/02 19:27
peace305: 加油啊, 為台爭光! 05/06 18:09
smallmew: 好詳細的分享~推 05/08 01:23
bug2: 非常感謝詳盡的經驗分享!! 05/16 23:29
morrislek: 太強了,推到底! 05/25 11:04
bluefish520: 07/12 23:16
leokane999: 台灣之光 07/15 18:06