Meta 的 SDE VO 一輪約 45 分鐘,常常一道開胃菜 + 一道硬菜。這篇按 oavoservice 學員的一輪複盤,面試官是常駐倫敦辦公室的資深工程師,節奏不急、很看你解釋思路的清晰度。兩道題:開胃菜判定 Toeplitz 矩陣,主菜是 0/1 矩陣裡的多邊形內外判定——後者如果沒專門刷過計算幾何,臨場挺容易卡住。文末附 VO輔助 / VO代面 的對接路徑,給正在大廠求職、查漏補缺的同學一個實戰參考。
一、Meta SDE VO 概覽
| 維度 | 詳情 |
|---|---|
| 形式 | 遠端視訊 / onsite(Coderpad / 共享編輯器) |
| 單輪 | 約 45 分鐘,1–2 道程式題 |
| 語言 | 自選,Python 最常見 |
| 考察 | 演算法功底、幾何/數學直覺、dry run、口頭表達 |
| 風格 | 面試官常駐不同辦公室(含歐洲),重視思路解釋勝過單純 AC |
Meta 的程式輪不只看你能不能寫出來,更看你講不講得清。面試官會讓你對著具體 case 手動走一遍演算法(dry run),最後還要給出時間複雜度。能邊寫邊說清每一步的人,明顯佔優。
二、題一(開胃菜):判定 Toeplitz 矩陣
題目
給一個矩陣,判斷它是不是 Toeplitz 矩陣——即每條從左上到右下的對角線上的元素全部相等。
思路
不用想太多,這題的理論下界就是把矩陣掃一遍。對每個非首行首列的元素 matrix[i][j],只要它等於左上角的鄰居 matrix[i-1][j-1],整個矩陣就是 Toeplitz。先把這個判定條件講清楚,再實作遍歷就過了。
def is_toeplitz(matrix):
rows, cols = len(matrix), len(matrix[0])
for i in range(1, rows):
for j in range(1, cols):
if matrix[i][j] != matrix[i - 1][j - 1]:
return False
return True
print(is_toeplitz([[1, 2, 3],
[4, 1, 2],
[5, 4, 1]])) # True
時間複雜度:O(m·n)(每個元素看一次,已是下界)。空間複雜度:O(1)。
三、題二(主菜):矩陣中點的多邊形內外判定
題目
給一個由 0 和 1 組成的矩陣,其中 1 表示多邊形的邊。再給一個 0 的座標,判斷這個點是在多邊形內部還是外部。
拆題:先選對演算法,再講得清
這道題沒專門刷過計算幾何的話挺難的,刷題時也很少碰到掃描線。一開始可能會想到掃描線演算法,但它對沒接觸過的人理解成本高、臨場也不好解釋。
更穩的選擇是射線法(ray casting / 奇偶規則):從待測點向某個固定方向(比如向右)引一條射線,統計它穿過多邊形邊界的次數。穿越奇數次 → 在內部;偶數次 → 在外部。這個直覺非常好講,面試官和你都不容易繞暈。
在這個離散的 0/1 矩陣裡,做了一個簡化:從該點所在列向右走,數沿途連續 1 段(每段算一次邊的穿越)的個數,按奇偶判定。
def is_inside(grid, r, c):
cols = len(grid[0])
crossings = 0
j = c + 1
# 從 (r, c) 向右發射線,統計穿過的邊界段數
while j < cols:
if grid[r][j] == 1:
crossings += 1
while j < cols and grid[r][j] == 1: # 跳過整段連續的邊
j += 1
else:
j += 1
return crossings % 2 == 1 # 奇數 → 內部
grid = [
[0, 0, 0, 0, 0],
[0, 1, 1, 1, 0],
[0, 1, 0, 1, 0],
[0, 1, 1, 1, 0],
[0, 0, 0, 0, 0],
]
print(is_inside(grid, 2, 2)) # True,(2,2) 在方框內部
講完思路後,面試官給了幾個 case,對著演算法 dry run 一遍,確認奇偶規則在每個 case 上都對,最後報複雜度。一遍過。
時間複雜度:O(cols)(單條射線掃一列)。空間複雜度:O(1)。
註:連續
1段當一次穿越是離散網格的實用簡化;真正穩健的射線法還要處理射線正好擦過頂點的退化情況。面試時把這層假設講清楚,比悶頭寫更重要。
四、臨場提醒
- 選演算法先考慮能不能講清:掃描線雖強,但解釋成本高時,射線法這種直覺清楚的解法更穩。
- 主動對著面試官給的 case 做 dry run,把奇偶 / 邊界規則走一遍,可信度遠高於「我覺得對」。
- 計算幾何、射線法是刷題盲區,平時很少練——專門查漏補缺,別等面試才第一次見。
- 開胃菜題(如 Toeplitz)快速拿下,把時間留給主菜和 follow-up。
FAQ
Q1:Meta SDE VO 一輪考幾道題?
程式輪通常一輪約 45 分鐘、1–2 道題,難度集中在 LeetCode 中等、偶有中上。不同輪面試官可能來自不同辦公室(含歐洲),普遍重視思路解釋和 dry run,而不只是 AC。
Q2:多邊形內外判定為什麼用射線法而不是掃描線?
射線法(奇偶規則)直覺清楚、好口頭解釋:從點引一條射線,數穿過邊界的次數,奇數在內、偶數在外。掃描線雖強但理解和講解成本高,臨場容易繞暈。能講清的解法在面試裡更佔優。
Q3:Toeplitz 矩陣判定有沒有更優解?
沒有更低的時間下界——必須把每個元素至少看一次,所以 O(m·n) 已是最優;空間可以做到 O(1)。判定條件就是每個元素等於它左上方的鄰居。
Q4:計算幾何這類盲區怎麼準備?
按專題查漏補缺:射線法、凸包、線段相交、掃描線各做幾道並講清思路。需要按 Meta 題型做限時 mock、逐題講解或 VO輔助 / VO代面 全程對接,可以走下面的路徑客製。
正在準備 Meta SDE VO?
Meta 程式輪看的是思路表達和盲區覆蓋。oavoservice 提供 Meta 全流程陪練:矩陣 / 計算幾何 / 射線法 / 圖與樹高頻題限時模擬,dry run 與口頭表達逐題打磨,按大廠崗題型做預測。教練含大廠背景資深工程師,支援 VO輔助 / VO代面 全程對接。
立即加入微信 Coding0201,取得 Meta 真題與陪練。
聯絡方式
- 微信:Coding0201
- Email:[email protected]
- Telegram:@OAVOProxy