天天看點

一位友人做足這些準備,終于拿到了FaceBook的offer

微信搜尋【程式員小躍】,和優秀的你,一起奔跑

Slogan:當你的才華還無法撐起你的野心時,那應該靜下心來好好學習

今天開篇,躍哥想問下大家,你學習程式設計的時候,最初的夢想是什麼?化作更簡單的描述就是,你學習程式設計,最想去的公司是什麼?

我先來說說我的,我剛進入實驗室的時候,學長學姐拿到了大唐電信的offer,那時候感覺很厲害。

有一句話,大家不知道還聽沒聽過——“巨大金中華,烽火普天下”。說的就是本世紀初,以巨龍、大唐、金鵬、中興、華為、烽火、普天為代表的民族通信裝置商企業,共同開創了中國通信行業的繁榮時代。

是以嵌入式專業的我們,能進入大唐也是一個不錯的選擇。我因為選了Android開發,智能手機剛起步,覺得能去一家外企或者阿裡這樣的大公司就很不錯了,甚至是找到一份能在杭州這個網際網路的搖籃中也不錯,好在最後圓夢,滿足了内心小小的虛榮心。

現在的同學們,選擇的公司就多了,阿裡、騰訊、百度,小米,頭條,拼多多,京東,美團,滴滴,華為等等網際網路企業。這是我們國内程式員高水準的聚集地。

而在遙遠的矽谷,優秀的企業也是數不勝數,那些都是世界級的Top公司,能去那邊那更是一件更爽的事情。谷歌、FaceBook、蘋果、甲骨文、特斯拉、英特爾、思科、雅虎等等。看看富豪排行榜你就更加明白,或者躍哥推薦吳軍老師的《浪潮之巅》帶你走入矽谷,走入這些網際網路企業的發展,肯定能給你一番鼓勵。

今天我們就來聊聊一位澳洲的朋友,是如何得到FaceBook 的 offer。

我剛在Facebook找到一份開發工作。我是這樣的為我的面試做準備

作者:Andyy Hope

我剛剛在矽谷科技公司完成了七個現場面試,最終接受了 Facebook 的軟體工程工作邀請。

這是我為這些面試做準備的方法,以及我在此過程中學到的知識。

我多年的矽谷之旅

當我在澳洲的大學學習計算機科學時,我總是憧憬着隻是能作為作為一名矽谷軟體工程師。

躍哥感慨:這個目标,躍哥在讀大學的時候也有類似的,比如在杭州找到一份計算機開發的工作,還好最後也算是圓夢了,在杭州菊廠待了3年,感受了中國矽谷的氛圍,尤其是濱江一條街:阿裡、網易、華三、華為、海康、大華等等。

我喜歡成為所有科技行業創新核心的想法,以及它的缺點。這個目标使我充滿動力,使我更加專注。

我離開了我在墨爾本一家令人驚歎的公司擔任iOS首席工程師的職位,然後回到我的家鄉珀斯讀書。我在那裡準備我在矽谷的面試過程。我知道這會非常困難和艱巨。

如果你在一個軟體工程師的房間裡提到技術面試過程,很多人會公開反對常見的面試做法。很多争論來自于這樣的推理:在白闆上求解算法實際上并不代表或轉化為軟體工程師的日常任務。

(躍哥感慨:我一開始作為面試官的時候,也很喜歡讓候選者手撸代碼,擺脫編譯器的困擾,主要是考察思想過程,以及基礎算法)

為了本文的目的,我将不進行讨論。相反,我将探索這些從候選人的角度來看,不同類型的面試方法,我還将重點介紹我從這個過程中學到了什麼。

面試是一種技巧

在準備過程中,我始終知道面試會充滿挑戰。但是我老實說,直到我深陷于自己的第一個困境中之前,我不知道這會有多困難。

在面試之前,我使用了付費和免費服務,通過電話進行模拟編碼和白闆面試,主要是一些有行業經驗的人來進行。那些練習面試對我應對壓力至關重要。但後來我意識到,它們隻相當于真實面試的一部分。

(躍哥感慨:現在國内也有很多優秀的面試分享,比如公衆号裡,或者牛客網等等,準備面試的同學不能錯過呀)

我建議不要在你夢想的工作中面試,也不要在有阻礙下進行一些模拟或真實的面試。這種緊張情緒會讓人難以置信地難以抑制,而且隻能通過練習來消除。

與生活中的許多其他事情一樣,練習會增強你的自信心。

我遇到的不同類型的面試

如果你在初步的電話螢幕中做好準備并表現得足夠好,那麼您将有機會到現場進行整天的面試。這些面試通常會持續四到六個小時,具體取決于你正在面試的公司。

在我去矽谷的旅途中,我總共安排了七個現場面試。這給了我關于面試現狀的獨特視角。

通常,一個現場将涵蓋三個主要主題:算法,架構設計設計和行為,這是我學習和準備過的。但是,有一些似乎正在逆轉這種趨勢并将面試擴充到涵蓋更多實用技能。

我将簡要介紹我遇到的每個主題。

算法面試

這是你遇到的最常見的面試類型。面試官會要求您在白闆上解決問題,該問題将評估您對資料結構的了解,排序算法,遞歸,時間/空間複雜度分析以及模式和邊緣情況識别。在這次采訪中,您通常會想到一個蠻力強制解決方案,然後嘗試改進該解決方案并讨論取舍,如果是這樣的話,有很多不同解決方案。

這是我準備的過程,六個星期以來,我每天都在一個廉價的白闆上解決算法,分析其時間/空間複雜度為以及真正試圖了解每一行代碼會發生什麼。

就個人而言,我真的很喜歡在白闆上寫算法,因為我不必擔心(大部分時間)編寫可編譯文法,這讓我隻專注于關于眼前的問題。其他人可能不喜歡白闆,但是我要對他們說堅持練習,可能會改變主意。

(躍哥感慨:算法真的是大公司的最愛,尤其是現在的頭條這種公司,靠着算法推薦。還有大資料、人工智能沒有優秀的算法,那推薦起來可就一塌糊塗了)

架構設計面試

這是一次有趣的采訪,我非常低估了這一采訪。面試官會要求您設計一個系統(當然是在白闆上),例如停車場售票系統,聊天程式,Twitter 回報以及其他常見系統。

你被評估的是你如何接受一個廣泛的概念,設計一個滿足所有需求和限制的系統。但這取決于候選人提出正确的問題,這些問題定義了需求和限制。這次面試更多的是一次對話,其中夾雜着一些圖表,甚至可能是課程結構。一切都是非常進階的,是以您不會編寫任何實際的實作代碼。

當然,你應該引導對話内容涵蓋系統知識工作。如果你是後端工程師,則不會真正涉足客戶應用程式詳細資訊,除非你以前在該領域有過專業知識。我是一名 iOS 工程師,是以我談到了架構模式,功能子產品化,設計模式,而不是如何擴充API接口,而是 worker ,AWS 這種。

行為面試

面試官會問你關于自己的問題以及你如何處理某些問題情況類型。這次的準備工作沒有其他的困難,但是為了你自己需要更多檢討。

這些問題通常遵循以下方面:

  • 如何處理失敗?
  • 您最大的弱點是什麼?
  • 如何解決沖突?
  • 面對困難如何解決?

我覺得這件事很難搞砸,但我聽說很多人都這麼做。他們試圖把自己的優點僞裝成缺點,對面試官想聽到的事情做出反應,甚至把失敗項目的責任推給别人。

  • “我的弱點是我太專心”
  • “這全是 Jerry 的錯,他在大部分項目中都錯了”

這些面試官都經過教育訓練和校準,以識别糟糕的人,并對胡說八道有敏銳的注意力。這是把你的候選資格抛到九霄雲外的捷徑。隻要真誠,對工作表現出熱情,承認自己的缺點,表現出改進的主動性,你就會做得很好。

(躍哥感慨:這個在之前的面試技巧裡也和大家提到過,針對這類面試都需要怎麼做,文末會給大家一些往期連結)

文化契合

這通常與行為面試相結合,重點在于發現你是否與公司的價值觀相一緻。例如,Facebook 遵循的是一種類似黑客的文化,即大膽創新、不斷嘗試、不怕破壞。而 Airbnb 則希望創造一個讓人們無論走到哪裡都感覺自己屬于自己的世界,是以他們會尋找具有良好接待技巧的人。

許多大型科技公司都非常重視文化并雇用員工根據該人與他們的價值觀的一緻性。如果你在以下其中之一進行面試這些公司,重要的是你要查找他們的價值并找到過去的經驗你可以與你的面試官建立聯系并進行溝通。

(躍哥感慨:這其實也是需要養成的一種習慣。你去目标公司面試,多多少少都要對這個目标做一些功課,知道目标公司的業務,特點,才能更好的應對)

配對程式設計

一個有趣的類别,你将參與一個有趣的類别配對,你可以面對有開發環境的計算機,非常類似于你平時使用的計算機環境。您将獲得基本任務以及一系列要求完成每項任務時必須完成的任務,面試官會要求你實施更多功能,直到達到時間限制。你可以自由使用所需的任何資源,例如 Stack Overflow 或線上文檔。

我覺得應聘者在這次面試中的成功很大程度上取決于接觸現實世界的經驗。與白闆不同,文法寫法正确代碼是必需的,是以你應該從内而外了解你的語言和環境因為你不想在網際網路上花費太多時間,或者文檔尋找答案。

在我之前的工作中,我會在處理任務時編寫幹淨的代碼,然後在感覺任務完成時進行優化。這樣的工作流程不利于這種面試。我通過過早地優化代碼,把代碼清理到了一個子產品,這使得恢複代碼變得更加困難。我發現,寫一些零碎的代碼,并向面試官提到我會在生産中以不同的方式來做,這比寫得幹淨和優化好很多。

查找和修複 bug

我們作為工程師所做的很多事情都圍繞發現和修複 bug,這些 bug 是從各種來源向我們報告。在這次面試中,你将獲得一個 bug 清單查找和修複以及識别沿途的其他潛在問題代碼。

我隻看到過這種面試的一個執行個體,我覺得這樣做很難,尤其是他還是初級的時候。每種編碼環境有自己的小怪癖和細微差别,我所做的很多拼湊都是來自以前的IDE(內建開發環境)及這些年來我積累的架構的相關經驗。

測試領域知識

我們看到的大多數常見語言的程式設計基本相同。如果你知道一種語言的面向對象程式設計,那麼可能技能大多會轉移到另一個技能上。

但是,此次面試的重點是無法在語言或架構。你将面對有關環境特殊性的API,記憶體管理,功能,限制,曆史記錄等等。

對于這個特定主題,練習可能具有挑戰性。類似于錯誤查找和面試打更新檔,我覺得很多答案都來自以前的經驗。根據你所申請職位的級别,你提供的答案可能是權重不同。例如,如果某人申請初級職位不知道API為何以特定方式建構的曆史,可能會給它們一個讓步。但是,如果申請進階職位的候選人不知道,那麼他們可能會遭到更嚴厲的标記。

了解作業系統

根據你要面試的角色或團隊,你可能會進行僅專注于作業系統的面試。在這次面試中,你會被問到一些問題這将評估你對計算機底層機制的了解作業系統的認識。

誠然,這次面試使我措手不及。作業系統是我在大學的早期就學過,但是我的知識在我的表現上回報出來是如此的匮乏。

(躍哥感慨:我也是科班出身,但是現在作業系統的知識真的恐怕已經還給老師了。但是,其實當你了解一門語言到底層的時候,還是需要了解作業系統,了解裡面的機制,對你程式設計,程式思想是一個很好的幫助)

你應該如何準備

我之前寫過,面試本身就是一種技巧。即使你已經是一個出色的程式員在你的日常工作或在你的學習中取得了很好的成績,這些技能不會完全轉移1:1當你在一個小的面試室。堅持、重複以及與面試準備和實踐的一緻性将是決定你面試結果的關鍵因素。

基本知識

如果有人要問我,我覺得應該重點關注什麼,我建議以下:

  • 首先學習在紙上和白闆上手寫代碼,然後将其扔掉內建到 IDE 中以突出顯示文法,這應該成為您的第二天性。
  • 深入了解資料結構及其優勢和劣勢彼此比較。我發現實作資料結構及其從無到有的行為教給我的不僅僅是我從他們的了解抽象的概念。
  • 完全了解Big O符号在時間和空間上的複雜性,這将與 算法和排序問題完美搭配。
  • 掌握所有主要的排序算法,因為時間/空間上的差異複雜性可能會破壞算法的最佳解決方案當你正在嘗試解決。

什麼時候開始

根據你的時間軸,你可能希望盡早開始。很多我面試過的公司在失敗的候選人之前有12個月的冷卻期可以重新申請。另一方面,如果你知道一年之内無法準備就緒,則可以并立即開始該過程,并略微了解一下面試過程,是以當你準備就緒時,它幾乎不會那麼恐怖。

(躍哥感慨:這個冷卻期其實在國内也是有的,是以還請讀者朋友們需要關注下。有些公司校招期間并不會占用冷卻期的名額,是以其實校招是一件很劃算的事情,不管成功與否,都是一次難能可貴的經曆。)

最後作者其實還推薦了一些準備面試的網站,我這裡就不進行翻譯了,還是根據我們自己的實際情況來,我就推薦下我之前的面試專題吧。

《手把手教你如何面試,你要的我都有(履歷篇)》

《手把手教你如何面試,你要的我都有(技術篇)

手把手教你如何面試,你要的我都有(工作項目篇)》

《手把手教你如何面試:面試過程》

《程式員不能錯過的20個學習網站》

是以,正如開頭所問的那樣,你有明确的目标嗎?你有明确的計劃了嗎?你有明确的奮鬥榜樣嗎?如果還沒有,那麼請你趕緊建立起來;如果已經有了,請你朝着目标奮勇向前;如果已經在目标裡了,那就進行享受程式設計的世界吧。

更多精彩内容,請關注躍哥,和大家一起奔跑!

繼續閱讀