剛開始編程面試的時候,我喜歡的公司都不理我。現在回想那個時候,我發現我對面試完全沒有準備。雖然已經有很多關於編程面試的博客文章和書籍,但是作為壹個面試者,坐在桌子的另壹邊,我還是能看到很多來參加編程面試的人都是毫無準備或者準備不足的。這就是我開始寫這個指南的原因。剛畢業,第壹次參加面試,我壹定很想有這樣壹個向導來指導自己。從現在開始,我將自己遵循這個指南。
這些年來,我在幾家公司工作過,所以我的面試技巧得到了很好的磨練,我參與面試的過程也教會了我該說什麽,準備什麽,如何面試。在本指南中,您將了解面試的概況、面試成功的六個步驟以及我在考察數據結構和算法時考慮的方面。這個指南不能保證妳得到壹份工作,但是可以幫助妳盡可能的給面試官留下壹個好印象。
聲明:本文觀點完全從我個人角度出發,與我現在或以前的雇主無關。
面試過程
本節概述了矽谷公司的面試流程。這只是壹個介紹。可以跳過,回頭看。
除了直接申請面試,壹般來說,有兩種方式可以獲得面試機會:由妳現在的雇主推薦或者通過LinkedIn。雖然前者會更快,更尊重人,但後者很可能是大部分申請人走的路。事實上,每天都有無數招聘人員在LinkedIn上撒謊。他們唯壹的工作就是尋找和聯系可能跳槽的員工,所以壹定要保持妳的信息最新,多接觸,邀請別人認可妳的技能,把妳的技能,妳做過的個人項目或者對開源軟件的貢獻添加到妳的個人頁面。
最初的聯系通常是通過電子郵件,然後招聘人員會打電話給妳,大致了解妳的技術背景。如果妳的技能符合他們的要求,他們會安排壹次電話面試,期間妳可能會被要求在壹個在線文檔中編程。然後妳就知道這個文檔很可能沒有代碼補全和語法高亮的功能。電話面試將持續半小時至45分鐘。表現好的話會被邀請參加現場面試。現在,如果沒有電話面試,或者除了電話面試之外,妳可能還要參加壹個小的編程項目。
現場面試由多次面試組成,面試時間為45分鐘到壹個小時。這些面試將非常類似於電話面試,但問題會更難-但這將在壹定程度上補償看到面試官本人。經過幾周的現場面試,所有的反饋都要看完,才會做出招聘決定,決定誰不招誰。如果妳沒有拿到offer,妳也要明白面試是壹個隨機的過程,包括運氣,所以就當是壹次學習的經歷吧。也許妳會記得布裏亞納頓的故事,他沒能采訪到臉書和Twitter,後來成為WhatsApp的聯合創始人。
理論上來說,妳用哪種編程語言並不重要,除非妳面試的是需要用特定語言完成的工作,比如iPhone開發人員或者前端開發人員。我強烈建議妳用妳面試的公司使用的編程語言來編程(和練習面試問題)。
面試成功的六個步驟
編程面試的目的是確定妳的編程水平有多高。壹般來說,妳需要編寫壹個函數或者方法,但是有時候,妳需要編輯壹個類的定義或者設計壹系列相關的代碼模塊。無論如何,妳都應該有條不紊地解決問題,並遵循以下六個步驟:
1.首先,確保妳理解了面試官的問題。很多問題故意含糊不清或者模棱兩可。這時候妳可以要求面試官把問題說清楚,這樣才能保證妳真的回答了面試官的問題。妳這個問題還有壹個好處,就是可以給自己壹些時間讓腦子動起來。
2.使用壹兩個示例來確定問題的約束和要求(在現場面試時在白板上完成此過程,在電話面試時在筆記本上完成此過程)。盡量用壹個中等大小的例子來涵蓋壹些特殊情況。如果妳能想到壹個可能相關的表格,畫出來。其實把妳想到的任何事情都寫下來都是有幫助的,因為它可以給妳提供壹個視覺的錨,讓妳在卡殼或者思考的時候隨時回到某壹點。
說清楚,這可能是最重要的壹步。盡可能讓面試互動起來。面試官不知道妳在想什麽,但是讓他們參與到妳的思考過程中,會讓她給妳壹些有用的提示,防止妳走錯方向。妳的目標是在妳寫代碼之前和面試官確認妳的答案,妳對答案的思考越清晰、越高效,妳的即時反饋就越好。
4.運用以下技巧找到答案:回想妳遇到的類似問題,然後思考它們是如何解決的,嘗試不同的算法(分而治之算法、貪婪算法、遞歸、排序等。),把問題分解成更小的、可管理的問題(這樣妳就可以得到相應的分數),最後再瀏覽壹遍妳列出的數據結構,因為有時候,只要妳想到正確的數據,
當妳問清楚面試官的問題,並向她解釋妳的答案後,妳就可以開始寫代碼了。記住,在* * *文檔中寫代碼的時候,可以復制粘貼,寫註釋,回過頭來完成骨架算法和函數。但是在白板上寫代碼就不壹樣了。它要求您在管理白板空間時有清晰的思路和技巧。如果妳足夠幸運的話,現在妳在白板左上角開始寫的時候,妳應該非常清楚妳要寫什麽,並且妳要確保當妳寫答案的時候,不會擋住面試官的視線。花時間把代碼寫得簡潔漂亮,因為妳的代碼也會成為面試反饋的壹部分。當妳寫代碼時,大聲解釋妳寫的是什麽,這將使妳的面試官更容易理解妳的想法。
6.最後,用不同的例子和特殊情況來驗證妳的代碼,壹行壹行的檢查。這會展示妳的思考過程,讓妳檢查出小錯誤,告訴面試官妳的方法是可行的。如果想加分,甚至可以把單元測試的代碼寫下來!最後和面試官談談妳的回答在空間和時間利用上的復雜程度,然後結束整個面試。
;