面試軟體工程師,這些準備工作你做了嗎?

發表於2017-12-16

本文作者 Connor Leech 是在灣區工作的一名 Web 開發人員,他在本文中面向那些正尋求找到一個軟體工程師崗位的求職者,探討了他們在面試環節可以採取的準備工作。雖然各個公司對於評估人才有自己不同的標準,但軟體工程崗位面試大致可分為兩類:特定領域知識面試和電腦科學基礎知識面試。求職者瞭解公司評估方式之後,也就可以有的放矢,分別採取相應的準備策略。

面試軟體工程師,這些準備工作你做了嗎?


作為一名軟體工程師,能否通過技術面試對於自己的職業發展至關重要,但是求職者往往很難知道具體怎樣去為面試做準備。因為不同的軟體公司採用不同的方式對工程師進行評估,而在這種壓力很大、同時又很重要的場合,毫無防備的前去面試似乎是最糟糕的一種狀態。

幸運的一點是,這些技術面試通常可以分為兩大類:特定領域知識面試和電腦科學基礎知識面試。對於想走上軟體工程師職業發展道路的求職者來說,瞭解這些評估人才的不同方法是很重要的一點,從而可以在他們最需要改進的地方採取措施進行進一步的提升。本篇文章介紹了每種面試型別可能出現的問題,以及你可以採取的準備措施。

特定領域知識面試

特定領域知識面試通常涉及到你最熟悉的技術領域的具體知識點。例如,如果你主要使用 Angular 1.x 進行前端開發,並且面試公司又有 Angular 前端,那他們就可能問你關於 Angular 控制器、指令和服務的相關內容。也就是說,你需要做好準備去建立、展示和討論 Angular。

特定領域的面試重點關注的是你已經實際構建起來的東西,因此要想順利通過這些面試,最好是你已經構建過相關技術的專案。你應該為自己的工作而感到自豪,不必感覺不好意思,而應該深入探討具體專案的技術細節。專案最好是近階段完成的,沒人會願意去聽你去年寫的那些程式碼,你自己也會對這種陳舊的專案感覺厭倦,面試效果也欠佳。

特定領域面試的另一個常見策略是看求職者能否構建一些非常棒的產品或者是排除實際存在的一些問題和故障。這通常是讓求職者帶回家去完成的一種測試,求職者一般有 24-48 個小時的時間來完成這些測試。例如,如果你是一名 Laravel 開發人員,並且你面試的公司恰好也使用 Laravel,那他們可能會要求你構建公司產品或者是公司定期建立的產品的微縮版本。對於這種帶回家做的測試,做好投入大量工作的心理準備。準備好啟動模板,不要抗拒去 Google 搜尋答案,傳送電子郵件尋求幫助和使用外部工具包這些做法。因為能否通過特定領域面試最重要的一個衡量標準是你能否構建出有效的產品。

電腦科學基礎知識面試

電腦科學和基礎程式設計面試明顯不同於上文所探討的特定領域面試。電腦科學和基礎程式設計面試是為了評估你解決問題的能力,更多的是關注找到最佳解決方案的能力,而不是簡單的去完成某些特定任務。因此,面試官通常也不會問關於你是誰、你過去的工作經歷或者你構建過的專案方面的問題。對於電腦科學基礎面試這一型別來說,面試官的工作就是評估你的原始程式設計能力,通常他們是通過資料結構和演算法相關的問題來進行評估。

電腦科學基礎面試的問題有章法可循。因為學習資料結構和演算法需要大量的準備工作和長時間的學習,你需要了解你所選擇的程式語言、資料結構和演算法來解決問題。電腦科學基礎知識面試通常可以用六種不同型別的演算法來解決:

  • 深度優先搜尋演算法/廣度優先搜尋演算法
  • 貪心演算法
  • 滑動視窗演算法
  • 分治演算法
  • 遞迴演算法
  • 動態規劃演算法

你需要研究每一種演算法,可以在 Pramp 上與其他軟體工程師一起練習面試和麵試問題。應對面試是一門獨立於軟體工程師之外的技能,你可以通過練習和重複來提升自己在面試時的表現。

電腦科學基礎知識面試通常遵循的那些問題結構對於求職者來說只有通過幾個小時的練習和準備才能發現。即便這些知識中的一部分並不適用於日常的程式設計任務,但只要你堅持這樣做,你就能抓住更多的面試機會,就能收到更多公司發來的 offer。如果你的目標是獲得更多的工作機會,那你一定要看一下《Cracking The Coding Interview》這本書,並且檢視這一免費的面試資源來進行相應的準備工作。

哪種方法適合你?

作為一名正在尋找工作的軟體工程師來說,在構建產品、學習新工具和練習面試之間存在著一定程度的相互衝突。選擇關注哪一點其實取決於你所尋找的工作型別,如果你想進入 Google、Twitch、亞馬遜、Uber 或 Square 等大型知名科技公司工作,那你基礎知識一定要過關。在這樣的情況下,你是否構建過最好、最複雜的產品其實並不重要,如果你無法通過電腦科學基礎知識面試,那這些大型科技公司是絕對不會僱用你的。

相比較而言,小型初創企業通常是在與時間賽跑,他們會爭取快速的構建出產品、推出產品並且推向市場。因此,這些公司通常會實行特定領域面試方式,因為他們希望瞭解捏可以構建什麼樣的產品,你最拿手的技術又是什麼。

如何瞭解公司面試型別

在進行公司面試時,與你對接的招聘人員或者公司聯絡人就是你最好的朋友。你可以直接向他們詢問關於公司的招聘流程以及他們用於評估候選人的標準等方面的問題。對於求職者來說,瞭解公司在招崗位的資訊是非常重要的一點,因此他們需要主動提出這方面的問題並且仔細研究招聘職位描述資訊。軟體工程崗位招聘通常有好幾個環節,可能包括電話面試、共享桌面遠端面試和現場面試環節。

如果面試環節包括共享桌面遠端面試這一環節,那最有可能考察的是求職者的電腦科學基礎知識。他們會提供給求職者一個需要解決的問題,面試官會在這個過程中觀察求職者的操作,求職者也可以解釋自己的想法。

帶回家做的專案通常考察的是特定領域的具體知識,這在一些機構和初創企業的招聘中比較常見,求職者需要在 24-48 小時內有所成就,之後再對你的程式碼進行展示。

普通的電話面試通常瞭解的是求職者的態度,進行相應的溝通並瞭解一些背景資訊、招聘人員很難通過這已通電話獲得有關你能力方面的資訊。

現場面試可以涵蓋任何問題,但通常是整個面試過程的最後一個環節。所以到這一環節,你應該是對你面前的這個機遇以及求職公司所用的評估方式有了一個清晰的認識。

想了解各個公司使用的是哪種型別的面試,你可以通過瀏覽 Glassdoor、Angel.co 上的評論或者是通過 Linkedin 聯絡公司當前員工的方式來獲知。

小結

求職者可以通過與求職公司的招聘人員和聯絡人員交談,來了解大致的面試過程。如果你不熟悉資料結構和演算法,可以通過 Pramp 進行練習。做好心理準備,你可能需要細數你過去的工作經歷和你已經構建而成的軟體。要想在軟體工程領域找到一份新工作,構建過令人驚歎的產品與瞭解計算機課科學基礎知識這兩方面同等重要。

“你越是不自信,就越是需要認真地採取行動。” – Tara Ploughman

記住這一點,並不只是公司在面試你,同時你也在面試這個公司。面試過程中你需要去處理的問題和工作往往與你被聘用之後,在這個崗位上需要去完成的工作類似。所以,你需要思考這樣幾個問題:他們為你安排的挑戰是你所喜歡的工作型別嗎?這個公司的人好嗎?他們尊重你的時間和能力嗎?如果這些問題的答案都是否定的,那你可以考慮尋找別的工作機會了。瞭解自己的長處和短處,並且享受這個找工作的過程。面試是一個很好的認識人的方式,也可是一種學習到新技術並且瞭解自己需求的途徑。

失敗和被拒本來就是生活的一部分,所以在任何時候,都要保持積極的心態,努力爭取那些你所能控制的部分,對於超出自己控制的部分不要去過多的理會。

相關文章