程式題#

不是所有 PM 面試都會考程式題,但在 Google、Facebook 等技術導向的公司,程式能力是基本要求。即使不需要寫 production code,理解資料結構和演算法能幫你與工程師更好地溝通。

誰需要會寫程式?#

公司程式面試要求
Google幾乎所有 PM 都需要通過程式面試
Facebook技術 PM 需要,一般 PM 也會被問基本題
MicrosoftProgram Manager 需要基本的程式能力
AmazonTechnical PM 需要,一般 PM 較少
Startups視產品性質而定,技術產品的 PM 通常需要

需要掌握的知識#

資料結構#

資料結構核心概念常用操作的時間複雜度
Array連續記憶體、固定大小存取 O(1)、搜尋 O(N)
Hash TableKey-Value 對應存取 O(1)、插入 O(1)
Linked List節點串連存取 O(N)、插入 O(1)
Tree階層結構搜尋 O(log N)(BST)
StackLIFO(後進先出)Push/Pop O(1)
QueueFIFO(先進先出)Enqueue/Dequeue O(1)
Graph節點 + 邊依實作方式不同

樹的重要概念#

類型定義
Binary Tree每個節點最多有兩個子節點
Binary Search Tree(BST)左子節點 < 父節點 < 右子節點
Balanced Tree樹的高度保持 O(log N)

Binary Search Tree 範例:左子節點 < 父節點 < 右子節點

排序演算法#

演算法平均時間複雜度最差時間複雜度空間複雜度
Merge SortO(N log N)O(N log N)O(N)
Quick SortO(N log N)O(N²)O(log N)
Insertion SortO(N²)O(N²)O(1)
Bubble SortO(N²)O(N²)O(1)

搜尋演算法#

演算法說明實作方式
Binary Search在已排序的 array 中搜尋,O(log N)迭代或遞迴
DFS(Depth-First Search)深度優先搜尋Stack
BFS(Breadth-First Search)廣度優先搜尋Queue

Big O 表示法#

Big O 描述演算法效率如何隨輸入規模增長而變化:

複雜度名稱範例
O(1)常數時間Array 存取
O(log N)對數時間Binary Search
O(N)線性時間遍歷 Array
O(N log N)線性對數Merge Sort
O(N²)平方時間雙重迴圈
O(2^N)指數時間遞迴 Fibonacci

O(N²) 的增長曲線:隨著 N 增大,執行時間急遽上升

重要觀念#

  • 捨棄常數:O(2N) 簡化為 O(N)

為什麼捨棄常數:y=x 與 y=x² 的增長差異遠大於常數倍數

  • 多變數:如果有兩個獨立的輸入 A 和 B,寫成 O(A + B) 或 O(A × B)
  • Log 與 Big O:每次將問題對半切,就是 O(log N)
  • 空間複雜度:除了時間,也要考慮記憶體使用

遞迴(Recursion)#

  • 每次遞迴呼叫都會在 call stack 中占用記憶體
  • 遞迴深度 N 層 → 空間複雜度至少 O(N)
  • 很多樹和圖的問題天然適合遞迴解法

面試中怎麼寫程式#

六步驟方法#

步驟名稱說明
1Clarify(釐清)確認你理解了問題和邊界條件
2Whiteboard(白板)用例子在白板上推演
3Talk Out Loud(大聲思考)讓面試官跟上你的思路
4Think Critically(批判思考)想想有沒有更好的方法
5Code Slowly(慢慢寫)寫清楚比寫快重要
6Test and Fix(測試修正)用例子跑一遍你的程式

發展演算法的策略#

六種策略
  1. Use an Example — 用具體例子推導通則
  2. Optimize Brute Force — 先寫暴力解,再優化
  3. Solve for Base Case — 先解決最簡單的情況,再擴展
  4. Think about Similar Problems — 這個問題和你解過的哪個問題相似?
  5. Simplify and Tweak — 簡化問題,解決簡化版,再處理完整版
  6. Record Insights — 記下推導過程中發現的任何規律

如何被評估#

面試官評估的面向:

評估面向說明
問題理解你是否正確理解了問題?
演算法設計你的方法是否高效?
程式碼品質邏輯清楚、命名合理、處理邊界條件
測試能力你能不能自己找出 bug?
溝通能力你能不能清楚地解釋你的思路?

PM 的程式面試通常不會像 Software Engineer 那麼難。重點是展現你的技術理解力和與工程師溝通的能力,而非寫出最優化的程式。