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

Published on

軟體工程師想要精進職涯,跳槽去頂尖外商公司 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 上的題目,一起讓自己的職涯更近一步!