何謂演算法技術面試?讀《Cracking the Coding Interview(提升程式設計師的面試力)》

Published on
Currently displaying Chinese version content. This article doesn't have a English version yet. Please stay tuned!

軟體工程師想要精進職涯,跳槽去頂尖外商公司 FANNG(Facebook、Amazon、Apple、Netflix、Google)的話,除了英文能力要能應付工作上溝通需求外,另一個大魔王就是演算法技術面試了。

在準備過程中必讀的聖經就是這本:《Cracking the Coding Interview(提升程式設計師的面試力):189 道面試題目與解答》。

這裡讓我們一起來讀它的第一到第三章,介紹何謂技術面試?會有哪些流程?要以何種心態面對?

備註:我讀的是第六版之修訂版。

Cracking the Coding Interview the book

《Cracking the Coding Interview》書籍架構

書中分為兩大部分。

前面 100 頁的篇幅在介紹整套面試流程,從前期履歷準備、面試中解題技巧、到面試尾聲談薪水,從軟性職涯規劃講到硬性技術面試,具體涉及內容如下:

  • 面試流程
  • Microsoft、Amazon、Google 等各大公司面試差異
  • 各類面試情境準備要點:已有工作經驗的求職者、面試測試工程師、PM、管理職位、新創公司面試、收購面試、或你自己就是面試官
  • 面試準備:累積經歷、履歷撰寫、時程規劃
  • 行為面試 Behavioral Interview:如何突出個人優勢、自我介紹
  • 技術面試 Technical Interview:準備、解題思路
  • 聘用相關問題:談薪水、評估工作
  • Big O 表示法:描述演算法效率

後面 800 頁則列出了 189 道技術面試題目,依照題型、資料結構、難度分類,介紹解題思路和詳細解答,主要用 Java 和 C++ 來解題,章節分類如下:

  • 資料結構
    • Array & String
    • Linked List
    • Stack & Queue
    • Tree & Graph
  • 概念和演算法
    • Bit Manipulation
    • Math & Logic
    • 物件導向
    • 遞迴、Dynamic Programming
    • 系統設計
    • 排序和搜尋
    • 測試
  • 知識基礎
    • C/C++、Java 知識基礎
    • 資料庫設計和 SQL
    • Thread & Lock
  • 更多問題
    • 中等難度問題
    • 困難問題
  • 解答
  • 進階主題(拓墣、DIjkstra、AVL Tree 等)
  • 常用函式庫

這篇文章會講到前半部分面試流程的內容。

關於作者 Gayle Laakmann McDowell

本書作者在 Microsoft、Apple、Google 擔任過軟體工程師,並在 Google 招募委員會任職,面試過數百名面試者、及評估過數千份面試資料及履歷。

她也創立了 CareerCup,提供面試資料庫,幫助面試者在面試中得到最好的表現。

本書就是以她身為求職者及面試官的經驗寫成的。

Gayle 還著有另外三本書《Cracking the Tech Career》、《PM 職涯發展成功手冊 (Cracking the PM Career)》、《Cracking the PM Interview》,對經營科技職涯,或 PM 從業人員也是非常值得一看的書籍。

什麼是技術面試

技術面試目的是評估求職者的演算法和寫程式能力。

以 Google 為例,第一關 Phone Interview 的內容就是線上跟面試官視訊面試,並在 45 分鐘內解出 2 道演算法題目。

題目可能是如何在一個陣列裡找出第五大的數字?或給定一個股市漲跌圖,在哪幾天買進賣出才能收益最大?諸如此類的題目。

你需要在聽完題目後,主動詢問面試官更多細節,把問題的目的、邊界和限制條件釐清。

接著在線上 Google 文件裡發想測試資料、畫圖、和寫虛擬碼,勾勒出演算法的框架,並且同時口頭跟面試官講解你的思路。

確認演算法方向正確後,在用程式語言寫成實際的程式碼,最後手動編寫測試資料,一行一行驗證程式執行結果是否正確。

面試官會根據你的解題速度、演算法效率、溝通能力、程式正確性,決定你能否進入後續流程。

各個公司內容和難度有些許差異,但大致流程就是如此。

要在時限內解完題目是很有挑戰性的,並且正常軟體工程師在平常工作中,也不會如此大量碰到演算法,如果毫無準備就開始技術面試的話,一定會碰壁。但大型科技公司如 FAANG 等,都會有一到多輪技術面試,因此若想讓職涯更上一層樓的話,技術面試是需要重點練習的!

《Cracking the Coding Interview(提升程式設計師的面試力)》就是攻克技術面試的武功秘笈,建議可以入手一本,搭配實際動手刷 LeetCode 上的題目,一起讓自己的職涯更近一步!