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