资讯动态

网易3D视觉实习生笔试解析:几何基础与算法能力并重

发布时间:2026/8/30 5:59:25 来源:尧图企业网站定制
1. 网易3D视觉实习生笔试到底在筛什么人每年到了春招和暑期实习的节点总有一批准备投递计算机视觉算法岗的同学过来问我网易这种级别的公司笔试到底考什么是不是要刷爆LeetCode是不是得把深度学习模型背得滚瓜烂熟我用网易2018年这场面向计算机视觉算法实习生、3D视觉方向的笔试题做了个样板分析结论可能和很多人想的不太一样。先说个反直觉的地方这场笔试的核心关键词虽然是“计算机视觉”但从实际考察内容看它筛的不是“谁会调参”而是“谁真正理解三维视觉背后的几何原理和数学推演”。换句话说你TensorFlow玩得再溜如果对相机模型、对极几何、点云配准这些概念说不出个所以然笔试照样容易翻车。为了把这个问题说透我特意把题目考察范围拆成了几个模块下面这张表可以帮你快速建立整体认知考察模块大致占比典型题型核心能力图像处理与特征25%左右特征点提取、图像变换、滤波原理基础扎实度三维几何与相机模型35%左右相机标定、对极约束、PnP、三角化数学与几何直觉算法与数据结构25%左右手写排序、字符串匹配、图论、DP代码基本功机器学习/深度学习基础15%左右损失函数、反向传播、网络结构理解模型理解深度注意上面只是我根据当时笔试反馈整理的参考占比不是官方数据。但方向上很明确3D视觉方向真正拉开差距的恰恰是很多人忽视的“三维几何”部分而不是发论文必备的深度模型。还有一个值得注意的点这类笔试虽然挂着“实习”两个字但难度并不低它本质上是先用一场笔试把你大学三年积累的数学功底、编码能力、专业视野全部铺开看一遍。所以准备时千万别把“实习”和“简单”划等号。2. 3D视觉专业题的复习主线从相机标定到位姿估计既然3D视觉方向的核心考察点在三维几何那这条复习主线就必须捋清楚相机模型是地基多视图几何是骨架位姿估计和点云处理是应用出口。下面一个一个拆开讲。2.1 相机模型与标定最基础也最容易被追问笔试里但凡涉及3D视觉第一道关卡几乎都是相机模型。你需要把针孔相机模型的整个投影过程写清楚世界坐标系下的点经过外参矩阵变换到相机坐标系再经过内参矩阵投影到像素平面。公式长这样s * [u, v, 1]^T K * [R | t] * [X, Y, Z, 1]^T其中K是内参矩阵焦距fx、fy主点cx、cyR和t是外参s是尺度因子。这个公式几乎百考不厌但很多人只知道背公式不理解为什么有个s在前面。我建议你一定亲手推一遍理解齐次坐标下尺度等价性的含义。笔试中常见的追问方式有两种。第一种是给你一组3D点和对应的2D像素坐标让你算内参或外参第二种是问畸变模型也就是径向畸变和切向畸变怎么建模、怎么标定。前者考的是DLT算法的思路后者考的是张正友标定法的流程。我当时复习的策略是在OpenCV里用棋盘格照片完整跑一遍标定流程跑完再看理论理解会深很多。2.2 多视图几何对极约束与三角化到了两张图关联这个层面对极几何就绕不开了。你需要能画出这张关系图两个相机中心、空间点、两个像点这五个点构成对极平面极线约束描述的是左图上的一个点在右图上对应的匹配点一定落在一条极线上。这个约束关系用数学表达就是x2^T * F * x1 0其中F是基础矩阵Fundamental Matrix如果两个相机已标定像素坐标可以归一化到相机坐标系这个矩阵就变成了本质矩阵EEssential Matrix。笔试常考的方向包括已知一组匹配点怎么求F、怎么用E分解出R和t、怎么通过三角化求空间点深度。这里有个最容易踩的坑很多人知道八点法可以求F但不知道实际求解时需要对坐标做归一化否则数值稳定性差得离谱。这在笔试的简答题里可能不显眼但如果你在面试环节被问到“为什么八点法要先归一化”答不上来就很尴尬。2.3 PnP与位姿估计笔试中的计算题常见来源PnPPerspective-n-Point解决的问题是已知空间中的3D点及其在图像上的2D投影求相机在世界坐标系中的位姿也就是R和t。这是3D视觉笔试里的高频计算题来源。经典解法有DLT直接线性变换、P3P、EPnP以及以BABundle Adjustment为核心的非线性优化方案。笔试不会让你从头实现EPnP但很可能考你DLT的基本思路将投影方程改写为关于R和t元素的线性方程组然后通过SVD求解。我自己的感受是这一节复习的关键不是记住每个算法的名字而是理解“为什么需要这么多方法”。DLT对噪声敏感P3P需要最少点但易受错误匹配影响EPnP在点较多时效率高BA则负责做全局精化。这种“懂取舍”的思维恰恰是笔试和面试都看重的。3. 3D视觉笔试中的代码题怎么答才能多拿分笔试的代码题和面试手撕代码不太一样它往往和视觉场景绑定得比较紧而不是纯粹的LeetCode题。我在下面整理了最常见的三种题型和对应的答题策略。3.1 手写代码的主要题型点云变换与ICP第一种常见题型是点云变换。给你一个3D点的数组和4x4变换矩阵T要求把每个点做变换并输出。这题听起来简单但考察点很细你是否知道齐次坐标表达是否处理了变换矩阵的最后一行是否考虑了旋转部分应该取R还是RT我见过不少人把矩阵乘法写反导致整个点云被错误变换。第二种高频题是ICP迭代最近点算法的核心步骤。笔试一般不要求你写完整的ICP因为迭代收敛要时间但会要求你实现“给定两组已配对的三维点求它们之间的刚体变换”。这一问考的是SVD分解求旋转矩阵的方法先计算两组点的中心再对协方差矩阵做SVD得到R V * U^T。完整代码思路大概是// 输入对应点集 src, dst // 输出旋转矩阵 R平移向量 t Point3f c_src mean(src); Point3f c_dst mean(dst); Mat H (src - c_src) * (dst - c_dst).t(); SVD svd(H); Mat R svd.vt.t() * svd.u.t(); Vec3f t c_dst - R * c_src;这里有个容易忽略的点SVD分解后要检查行列式如果det(R) 0说明R是反射而不是旋转需要取负。这个细节非常容易被笔试官拿来做追问。3.2 从接口设计到鲁棒性代码题拿分的细节很多同学答代码题只顾着贴核心公式忽略了工程实现的基本功。我的经验是代码题拿高分的关键在于三点。第一输入校验。给的3D点是不是Nx3的矩阵给的图像坐标是不是齐次坐标如果输入是float还是double这些都会影响结果。笔试时可以在答题开头写清楚“假设输入为Nx3矩阵第0行为x、1行为y、2行为z”给阅卷人一个清晰的接口约定。第二边界情况。n0、n1、所有点重合这些情况都要有分支处理。尤其是ICP的SVD解法当所有点重合时协方差矩阵秩为1SVD结果不稳定你要么抛异常要么返回单位矩阵。第三代码可读性。笔试答题不是让机器运行而是让人看所以变量命名尽量语义化不要满屏的a、b、c关键步骤要写注释。这既是给阅卷老师看也是给自己在后续面试环节留退路——面试官很可能会拿着你笔试时的代码问细节。3.3 常用工具函数与伪代码不会手写时怎么保底坦率讲3D视觉涉及很多复杂算法笔试现场你不可能什么都能从零写出来。这时候有两个保底技巧。一是用伪代码表达你的思路。只要把输入、输出、关键步骤、复杂度写清楚阅卷老师能看出你确实理解算法流程就能拿到大部分分数。比如让你实现Delaunay三角化你不可能现场写完整但可以写“先构建超三角形逐点插入维护边表最后删除含超三角形顶点的三角形”这比空着不写强太多。二是在合适的地方引用标准库或成熟API。比如提到SVD就直接写SVD::compute()提到特征点提取就直接说“用ORB提取特征”并标注输出维度。这不算作弊因为实际工程中你就是这么做的笔试考察的是你“知不知道用”而不是“能不能造轮子”。4. 通用算法题才是拉开差距的地方关于笔试很多人有一个误区以为只要把3D视觉相关的专业课复习好就万事大吉结果一上考场发现还有不少题目和“视觉”一点关系都没有。计算机视觉、算法、3D视觉这几个关键词放在一起往往意味着笔试也会出现纯算法题这才是真正拉开差距的地方。4.1 3D视觉笔试里会出现哪些通用算法题从当时的热搜词和笔试反馈看高频出现的通用算法考点包括字符串匹配KMP、排序算法、图论算法Dijkstra、拓扑排序、动态规划、贪心算法等等。这些算法看起来和3D视觉毫无关系但它们共同考察的是“计算思维”和“代码基本功”。举个例子KMP算法在图像特征匹配的暴力匹配比较中就有理论上的对应关系——暴力匹配是O(n*m)而KMP通过next数组跳过无效比较。虽然视觉特征匹配实际很少用KMP但“利用已知信息减少无效计算”的思想是相通的。笔试出这类题本质上就是在看你有没有这种优化意识。还有一些智能优化算法比如粒子群算法PSO、模拟退火、遗传算法也偶尔出现在选择题或简答题中。这类题不会让你手推但可能会问你粒子群算法的速度和位置更新公式是什么模拟退火为什么以一定概率接受更差解这些题考的是“知识面”和“概念理解”。4.2 高频算法考点梳理与应对策略结合我看到的笔试反馈下面这张表可以当作通用算法部分的复习清单算法类别高频考点应对策略排序算法快排、归并、堆排的复杂度与稳定性手写一遍背复杂度表格字符串匹配KMP的next数组构建原理自己推导几个例子理解失配跳转图论Dijkstra、拓扑排序、并查集看板刷题掌握网格图和稀疏图的写法动态规划背包、LIS、编辑距离理解状态定义与转移方程切忌死背贪心算法区间调度、哈夫曼编码会证明或至少能说明贪心选择性质智能优化算法粒子群、模拟退火、遗传算法的基本流程记住核心流程和关键公式复习时我建议别追求“全”而是把每个类别的最经典两三种题型吃透。因为笔试时间有限能稳稳拿下中等难度的题比死磕一道压轴题性价比高得多。4.3 算法题和视觉题的时间分配策略笔试通常是限时进行的如何在视觉题和算法题之间分配时间很讲究。一般建议按分值比例来分配但如果某道算法题卡住了千万不要死磕超过15分钟。我的做法是先快速把视觉题里会做的选择填空做掉然后做两道大代码题中最有把握的剩下时间用来攻坚一道中等难度的算法题。这里有个容易忽略的点代码题不要追求一次写对而是要先写主体框架再补细节。比如写ICP时先把SVD求解的几行核心代码写出来再回头补中心和协方差矩阵的计算这样即使时间不够关键得分点也已经拿到了。5. 我当时备考的路线与踩过的坑很多同学觉得笔试准备是“玄学”其实只要路线对三周时间完全够用。下面把我在备考这类3D视觉方向笔试时的安排和血泪教训分享出来希望能帮你少走弯路。5.1 三周备考时间怎么分配第一周主攻三维几何基础。花两天把相机模型、内参外参、张正友标定过一遍三天刷多视图几何对极约束、基础矩阵、本质矩阵、三角化剩下两天专门补PnP和点云基础。这个阶段时间紧千万不要只看书不做题强烈建议用OpenCV写一遍标定三角化的流程哪怕只是跑通demo印象都会深刻很多。第二周主攻代码题和算法题。每天白天刷两到三道视觉相关的代码题点云变换、ICP、图像缩放等晚上刷算法题重点看排序、字符串匹配、DP。这周的关键是“限时训练”模拟笔试环境每道题控制在30分钟以内。第三周进入真题和复盘模式。把前面两周的笔记集中起来看一遍重点看错题、推导不顺畅的公式、容易混淆的概念。可以自己列一个“容易忘的知识点清单”比如SVD分解求旋转、特征矩阵的秩约束、极线约束的自由度等等考前反复看。5.2 容易踩的坑与应对方法第一个坑是只刷深度学习不看几何。我见过太多同学准备了大量CNN、Transformer的题结果笔试里三维几何占大头直接懵了。应对方法很简单动手画一遍相机成像的几何关系图自己推导一遍对极约束公式比背十篇Transformer论文都管用。第二个坑是C基础不牢。笔试代码题可以用Python但很多3D视觉算法在工程落地时都是C且有部分公司会指定C答题。平时建议至少能用C写好点云结构体和基本的vector操作别等到笔试才发现自己连std::vector的声明都要想半天。第三个坑是推导题只背不练。对极约束、PnP、SVD解算旋转矩阵这些推导题如果只看不写考场上很容易卡壳。我的经验是把每个关键公式在白纸上独立推导三遍第一遍照着笔记推第二遍合上笔记推第三遍限时推直到形成肌肉记忆。5.3 笔试之后面试环节会更看重什么笔试通过之后面试环节通常会围绕三个方向展开第一问你笔试里的某道题是怎么想的这属于压力型追问第二问项目经历看你在真实场景中处理过什么问题第三给一道更偏应用的场景题比如“无人车上的3D障碍物检测怎么做”。针对第一类笔试答题时的思路清晰度就变得很重要这也是为什么前面反复强调笔记和推导痕迹。针对第二类即使你只是在校学生也可以准备一个和3D视觉相关的小项目比如校园场景的稀疏重建、基于深度相机的目标位姿估计哪怕是复现开源项目都行关键是你真的跑通过能讲清里面的坑。针对第三类考的是综合能力这时候你对相机模型、多视图几何、点云配准这些基础知识的理解深度决定了你的上限。回到最初那个问题网易3D视觉实习岗的笔试到底筛什么人我的回答是它筛掉两种人一种以为“视觉深度学习”而忽视几何基础的人另一种只会背题、对公式和算法一知半解的人。只要把三维几何主线捋清楚把代码基本功打磨到位再把通用算法题刷到中等水平通过笔试的概率会大很多。最后再分享一个小技巧备考期间一定要试着用自己的话把“相机标定在做什么”“对极约束解决什么问题”“ICP为什么能收敛”讲给别人听。能不能清楚地讲出来是你有没有真正理解的最好检验标准。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价