3年編程經驗無名校背景,全棧小哥是如何拿下Twitter Offer的?

2020-06-30     AI科技大本營

原標題:3年編程經驗無名校背景,全棧小哥是如何拿下Twitter Offer的?

作者 | zhiachong

責編 | Aholiab

頭圖 | CSDN 下載自視覺中國

出品 | CSDN(ID:CSDNnews)

外國小哥zhia是個有面試絕技的人,他只有三年的編程經驗,並且沒有任何名牌大學的光環,兩年多以前,他同時獲得了Facebook、谷歌、亞馬遜、微軟等眾多「矽谷豪門」的offer。不久前他以如何獲得Twitter的offer為例,講解了他從準備到面試的全部經過。

對於那些想要獲得大廠offer的開發者來說,他的經歷和入職前的一些列準備、心理活動,都十分具有參考價值。

接下來我們就一起來看看他的經歷吧(以下為原文)。

深夜,在這個每月租金600美元的地下室里,迴蕩著我手指「啪啪啪」猛敲鍵盤的聲音。我從電腦螢幕上抬起頭,瞥了一眼牆上的掛鐘——凌晨2點。你或許會以為我熬到這麼晚一定是在寫軟體或者處理重要工作。

但其實並沒有。我是準備即將到來的技術編程面試。

在Twitter指定的技術測試網站leetcode上,我發現自己無法完成「簡單」級別下的一個題:反轉鍊表,一股挫敗感隨之而來。題目是這樣的,感興趣的小夥伴也可以自己嘗試一下:

那麼我是如何得到這次面試機會的?我又是如何準備的?本篇文章就來一一告訴你。

3年全棧,得到Twitter面試機會

在這次面試之前,我曾在一家初創公司做了3年的全棧工程師,主要負責在AWS堆棧上構建微服務和API開發,側重於PHP、NodeJS、作為消息隊列的AWS SQS、用於資料庫的Postgres以及用於長期存儲的AWS S3。

在此之前,我沒有任何的工作經驗或實習經歷,這家初創公司的工作是我第一份真正意義上的軟體工程師職位。

我本科就讀於華盛頓州一所小型私立大學,4年的本科獲得了計算機科學學士學位。現在回想起來,我覺得當時在大學的學習時光是一段非常寶貴的經歷,也學到了很多。我想說的是,我不建議想學技術的人去參加短期的編程訓練營,如果再來一次的話,我還是會選擇接受正規教育,而不是參加編程訓練營。

在投Twiter之前,我申請了30多家公司,面試了15家,收到了6個offer,包括Facebook、谷歌、亞馬遜、微軟等,並最終選擇了Twitter。下面我就從Twitter的例子,講講我是如何獲得這個offer的。

面試內容

起先我收到了一封Twitter 招聘人員發來的郵件,問我是否願意和他們的工程師安排一次電話篩選。收到郵件後我既興奮又緊張,因為幾年前我曾經申請過Twitter的一個軟體工程職位,但沒能成功。

招聘人員發了一張非常全面的準備表給我,上面有可供練習編程和算法技能的連結。其中就有leetcode(一個編程挑戰網站)的測試,所以為了準備接下來的技術面試,我在leetcode上花好了幾個小時。

準備技術面試並非易事。對於我這樣一個已經畢業很長時間的人來說,要想通過技術編程面試的話,需要花大量的時間來複習相關技能和基礎知識。招聘人員曾明確強調,面試將側重於技術基礎,比如 map、二叉樹、鍊表、二叉搜索樹、圖表等等

面試準備

面試前的準備,簡單來說就是多做練習。把自己沉浸在解決具體的技術問題上面。

我把大部分時間都花在了leetcode和一本名為《編程面試寶典》(Elements of Programming Interviews)的書上。我還花了約10%的時間在Youtube上瀏覽了一些關於系統設計面試的視頻。此外,我常用的另一個網站是DailyCodingProblem,它每天都會給我發一個編程相關的問題,這樣我就能一直接觸到新的問題。

我花了大約一個月的時間進行持續練習。注意,一定要制定不間斷的持續計劃。我過去常常間歇性發奮圖強:花3個小時硬核編碼,然後休息一周。結果發現這完全是在做無用功,我也為此付出了沉重的代價,即這次做過的練習,下次經常接不上。

整體而言, 工作日我每天花約3個小時進行準備,周末一般花4 - 6個小時。在這一個月里,我每周準備約20個小時。

這裡還有一個大家非常關心的問題,即我是如何申請Twitter職位的?我是通過Twitter的「職業生涯」頁面遞交申請的。不過事後看來,直接從LinkedIn上找推薦人或招聘人員可能會更好一些,因為這樣大機率會加快申請過程。

申請的過程並不複雜,提交簡歷和基本信息即可。但簡歷一定要優秀。特別是對於通過線上求職頁面進行申請的求職者來說,如果簡歷不夠亮眼,那麼很大可能是無法得到面試機會的。

投完簡歷等待的過程,大約是幾周的時間。我的入職過程是從2月持續到6月的,從2月投簡歷到多輪面試,6月正式入職。具體時間線如下:

  • 2月 — 招聘人員主動安排TPS
  • 3月— 初次TPS
  • 4月初— 二次TPS
  • 4月中— 現場面試
  • 5月初 — 收到offer
  • 5月底— Twitter確認
  • 6月 — 正式入職

面試過程

前兩次電話面試主要涉及對共享在線文檔(例如Google Docs)進行編碼的問題。我們探討了幾種不同的方法,光實施階段就討論了半個多小時。

兩輪之後,我進入了下一輪現場面試。

招聘人員給我發了一個在線編碼存儲庫的連結,讓我進行代碼審查,提出改進建議,並在面試現場與面試官進行討論。

我花了約一天的時間來檢查代碼:把它列印在紙上(10pt字體,約5頁),並且在紙上記下需要改進的地方。事實證明,這一步非常有用。

現場面試

現場面試總共進行了3輪,中間吃了一頓午餐:

  • 一輪(廣度),75 分鐘
  • 二輪(深度),75 分鐘
  • 午餐
  • 三輪(頂級評級),90 分鐘, 可選

需要注意的是, Twitter的現場面試每輪都是2名面試官。剛開始的時候感覺有點嚇人:被兩名面試官盯著,自己的一舉一動都被盡收眼底。但實際上,最終體驗還不錯,因為這種形式讓我感覺更有團隊感,大家可以互相交流想法。

一輪系統設計

第一輪面試內容較為廣泛,主要是 了解你對「從零開始設計系統」知道多少。這樣做是為了看看應聘者的知識廣度極限在哪裡。

核心問題是: 從設置UI到通過HTTP API進行通信,再到構建後端服務,你是否能夠構建一個停機時間合適的可靠系統?

這些都是可能會被問到的題目類型。因為我總是喜歡鼓搗各種不同的技術,所以我還挺喜歡這次談話的。如果你喜歡構建東西的話,應該也會喜歡這一輪。面試官非常友善,一直禮貌地引導我進行回答。

最後,我們以一個編碼問題結束了這場面試。老實說,我已經記不清問題具體是什麼了,但應該也沒什麼特別的,沒有超綱。

二輪:個人履歷

第二輪面試更多地關注於我過去曾參與過的項目和專業知識。說實話,這輪面試會更激烈和更具挑戰性,因為面試官會深入了解我曾參與構建的項目的各方面問題,並對設計提出質疑。包括: 你最近做了什麼項目?為什麼做這個項目?考慮過哪些備選方案?最終成功了嗎?

鑒於我初創公司的工作背景,有很多東西都是需要我從零開始進行構建的,比如創建AWS集群,設置用於處理任務的SQS等。

儘管我對這些項目都非常熟悉,但這一輪還是讓我有些筋疲力盡。我必須回顧過往經驗,然後從自己的角度來講述這個故事——為什麼我們要用這種特定的方式來設計,我們有沒有想過更好/更壞的方法。

這一輪沒有任何編碼問題。

三輪:文化

第三輪,也是最後一輪,是和HR經理以及高層領導進行的90分鐘面試。

我後來才發現,如果能成功進入這一輪,就表示你在技術上已經做得不錯了,而他們是在尋找雙方的文化契合度——你能否能融入他們的企業文化,以及他們是否有適合你的工作機會。

這一輪也沒有編碼問題。

回顧

Twitter的面試主要 側重於計算機科學領域內的基礎知識,所以要確保自己從上到下、從左到右全方位了解數據結構,以及你在CS課上學過的基本算法。

此外,還要理解 如何權衡時間複雜度和空間複雜度。如果能 掌握一種語言的話會非常有幫助。我建議是像Python、Java或C++這樣非常實用的語言。我個人更喜歡用Python,因為它易於閱讀,易於解釋,並且還有一堆內置的數據結構。

一定要回顧一下自己簡歷上列出的那些項目。要理解 自己負責的端到端軟體的整個設計,了解 系統中所做的權衡,能夠解釋 為什麼要以這種方式構建系統以及有什麼替代方案。

在準備階段要嚴格要求自己。提前找出自己的不足,並制定練習計劃。堅持不懈、不間斷練習非常重要。我一開始就做錯了,真希望之前能早點意識到,這樣就不用把時間浪費在錯誤的事情上了。

想想你每天與之交互的系統。弄明白權衡取捨、替代方案、利弊,以及如何構建更好的系統。這一技能將助你在軟體工程這條路上走得更遠。

文章來源: https://twgreatdaily.com/zh-hk/yQqKB3MBnkjnB-0z2TkX.html










CSDN湘苗培優

2020-12-24