
大疆的笔试尤其是计算机视觉算法岗在业内一直以“硬核”著称。我去年秋招时参加了大疆的计算机视觉算法B卷笔试从收到邮件那一刻到最终交卷整个过程印象非常深上周还有学弟问我要经验干脆把那次笔试的完整复盘和备考思路整理成文给后面要投大疆CV岗的朋友做个参考。先说结论大疆CV算法笔试题量不小覆盖范围非常广风格也很“大疆”——极度看重工程实现能力不是那种刷完LeetCode就能轻松搞定的卷子。它考察的不是单纯的算法技巧而是计算机视觉综合基础、数学功底、代码功底以及你对图像处理底层原理的理解。这篇文章我会从题型构成、视觉基础知识考察点、手撕代码思路、备考资源和实战节奏几个维度完整还原那次笔试体验同时附上我作为过来人的避坑建议。1. 大疆CV笔试的定位不是刷题机器是工程能力试金石大疆的笔试题和很多互联网大厂的出题思路有明显差异。互联网大厂笔试更侧重数据结构和算法硬功夫比如动态规划、贪心、复杂数据结构设计等大疆的笔试虽然也有纯算法题但比重和深度不一样它会围绕图像、视频、点云、相机模型这些和业务强相关的内容出题甚至编程题都可能直接考你实现一个图像处理算法。1.1 题型构成与时间分配我参加的那次B卷整体结构大致包括单选、多选和两道编程题不同批次可能有差异但整体框架是稳的。选择题覆盖计算机视觉、机器学习、线性代数、概率论和传统图像处理编程题则是在线OJ模式需要处理输入输出限时完成。我当时遇到的情况是选择题难度中等偏上存在大量“看似见过、但选项挖了坑”的题编程题不是LeetCode风格的“给定数组、求XX”而是更偏向图像处理的具体实现题目描述长要求非常明确时间反而成了最大敌人。时间分配上我的策略是选择题控制在50分钟以内编程题预留至少60分钟。不要在一道选择题上死磕大疆的选择题有些计算量不小比如让你算一个透视变换矩阵或者给定相机内外参求投影点坐标这种题如果3分钟内没思路果断跳过后面编程题的分值远比一道选择题值钱。1.2 与传统互联网笔试的核心差异大疆的岗位描述里通常写得很清楚要求扎实的计算机视觉基础熟悉常用图像处理算法具备较强的工程实现能力。笔试题目完全扣着这个要求来出。比如选择题里会直接出现SIFT特征描述子的维度、高斯金字塔的构建过程、RANSAC迭代次数选择这类偏工程的问题编程题甚至直接让你实现NMS非极大值抑制这在视频流检测场景里是家常便饭。这一点提醒所有准备大疆笔试的人纯刷LeetCode是不够的必须专门过一遍计算机视觉基础知识和传统图像处理算法尤其是那些“你自己能推导、能实现”的算法而不只是会用OpenCV的API调用。2. 视觉基础题型一份“既要广度又要推导能力”的试卷大疆笔试的选择题部分是我做过的CV岗笔试题里范围最广的之一。从信号处理到多视图几何从传统特征点到深度学习几乎每个主流方向都会涉及。以下是我那次考试中印象深刻的几个考察方向。2.1 相机模型与多视图几何大疆笔试的“特色菜”大疆的业务核心是无人机和影像相机模型、标定、双目视觉、SFM这几块内容出现在笔试里几乎是必然的。我记得当时有一道选择题是关于对极约束的给定基础矩阵F和一对匹配点判断哪个约束关系正确。这种题如果只背书上的公式到考场上很容易被选项中“是不是转置”“是不是用齐次坐标”这类细节搞懵。我复习的时候习惯把经典公式全部自己推导一遍比如本质矩阵E和基础矩阵F的关系、极点与极线方程、单应矩阵H的适用场景这样考试时看到变形公式就不会慌。还有一道题涉及相机内参矩阵K问的是像素坐标系到归一化坐标系的变换。这种题本质就是考察对相机模型的熟悉程度建议大家把针孔模型里各个坐标系之间的转换关系练到条件反射的程度——世界坐标到相机坐标、相机坐标到图像坐标、图像坐标到像素坐标每一步的数学表达都要能默写出来。另外大疆笔试很可能考畸变模型。我当时就遇到一道关于径向畸变和切向畸变参数个数的问题。这种题不难但容易因为“感觉见过”而掉以轻心。建议把Brown-Conrady模型里k1、k2、k3、p1、p2的含义和图像效果理清楚。2.2 传统图像处理与特征点基础不牢地动山摇传统图像处理在大疆笔试里占比不低。SIFT、HOG、LBP、Canny边缘检测、Hough变换、图像金字塔这些内容都很可能出现。我那次就遇到了关于Canny双阈值设置的题还遇到了一道问SIFT特征维度为什么是128的题。这里我想强调一个备考方法不要只背“SIFT是128维”要能解释“为什么是128维”。大疆的题很少直接考记忆性知识很喜欢在理解层面做文章。比如SIFT描述子为什么选择4x4网格、每个格子8个方向最终得到128维向量这些数字背后都有逻辑理解了就不需要死记硬背。同样容易考到的还有图像金字塔和光流法。Lucas-Kanade光流的基本假设是什么、为什么需要金字塔做多尺度、Harr小波和Gabor滤波器的区别这些都是视频和影像相关业务里高频使用的知识建议复习时不要遗漏。2.3 深度学习与目标检测紧跟前沿但基础扎实深度学习相关题目在大疆笔试里也占了不少分值。卷积核尺寸、感受野计算、BN层的作用、Dropout在训练和推理时的区别、常见激活函数的优缺点这些都是选择题的常客。我当时遇到一道关于BatchNorm在训练和推理阶段行为差异的题考的是推理阶段必须使用全局统计量而不是batch统计量这件事。这道题看起来基础但如果平时只是调包不读源码细节的话很容易选错。目标检测相关的内容也要准备。IoU计算、NMS原理、Anchor的概念、评价指标mAP的计算方式、FPN特征金字塔、FPN中高低层特征的融合方式这些内容在单选多选中都可能出现。大疆笔试对目标检测非常看重毕竟无人机巡检、智能拍摄都离不开检测和跟踪。我还遇到过一道关于Focal Loss的题问的是它解决了什么问题和核心思想。这个考点不偏属于当前目标检测领域绕不开的概念备考的时候建议把RetinaNet、Faster R-CNN、YOLO系列的核心思想都过一遍不需要背网络结构细节但要知道设计动机和关键技术点。3. 概率、线代与优化数学题是决定分数上限的关键除了视觉专题大疆笔试还有相当比例的纯数学题主要是线性代数、概率论和数值优化。这部分是很多人的短板但恰恰是拉开差距的地方。3.1 线性代数矩阵运算与SVD分解的直觉大疆的业务涉及大量几何计算和数值计算线性代数的考察力度比较大。我当时遇到一道关于SVD分解的题不是简单问SVD是什么而是给了一个应用场景问应该用左奇异向量还是右奇异向量。这种题目需要你真正理解SVD的几何意义而不只是知道PCA和SVD的关系。建议重点复习矩阵的秩与线性方程组解的关系、特征值分解与SVD的联系、最小二乘解的推导、协方差矩阵的物理意义。大疆笔试很喜欢考“一个公式的实际应用”而不是公式本身。3.2 概率论与数理统计贝叶斯和最大似然的综合运用概率题在大疆笔试里通常不会太偏但计算量可能会有。我记得有一道题是给定两个高斯分布问两个分布之间的KL散度表达式这种题需要你记得高斯分布的KL散度公式并且能做一定的推导变形。贝叶斯公式几乎是必考的。特别是先验、似然、后验的关系以及最大后验估计和最大似然估计的差异。我当时复习时特意把高斯朴素贝叶斯的推导过程过了一遍没想到真在考场上遇到了类似的思路题。另外还有一个容易被忽视的考点概率分布与噪声模型。大疆做相机和图像处理高斯噪声、椒盐噪声、泊松噪声这些模型的基本性质以及对应的滤波方法建议一并复习。我甚至遇到过一道“给定噪声模型选择最优滤波器”的题这就需要你理解高斯滤波、中值滤波各自适用的场景。3.3 数值优化与经典算法别只会梯度下降优化方法也是大疆笔试里的一个隐性考点。我当时遇到一道关于RANSAC的题问的是为了达到某个置信度最少需要迭代多少次。这题如果没看过RANSAC论文里的理论公式现场很难推出来。建议把RANSAC、最小二乘、高斯牛顿法、LM算法的基本框架过一遍尤其是它们各自的适用场景和优缺点。这不仅仅是应付笔试也是后续面试中经常会被追问的内容。4. 手撕代码图像处理算法的工程实现才是重头戏编程题是大疆笔试的压轴重头戏。和互联网大厂考“数据结构和算法设计”不同大疆的编程题更倾向于让你实现某个具体的图像处理或几何计算算法需要你具备纯熟的代码能力同时还要能处理输入输出的细节。4.1 高频题目的两类方向从我了解的多个批次笔试和身边同学的经验来看大疆编程题通常有两大类。第一类是图像处理算法的基础实现比如实现双线性插值、实现NMS、实现高斯滤波、计算两个多边形的IoU。这类题看起来不难但坑很多。比如实现NMS时排序、循环删除、阈值选择、边界情况处理每一步都有细节问题。如果你平时只是直接调cv2的API从没自己写过NMS现场很可能因为某个索引越界或排序错误卡很久。第二类是几何计算类题目比如计算两条线段的交点、判断点在多边形内、计算凸包面积、给定相机内外参求投影点。这些题目考察的是你的计算几何基本功和代码实现能力同样需要提前练习。我当时遇到的编程题之一和图像插值相关需要实现双线性插值对图像进行缩放。这类题的关键在于坐标映射——原图像坐标和目标图像坐标之间的对应关系究竟是使用中心对齐还是角点对齐会直接影响到输出结果。我建议你把最近邻插值、双线性插值和双三次插值都手写一遍写熟了再上考场心里才有底。4.2 从“写出来”到“写得对”的细节坑位这里分享几个我踩过的编程题细节坑希望大家能引以为戒。输入输出格式是大疆OJ非常看重的地方。图像处理题经常会给出多组测试数据第一行就是测试组数T你需要循环读取、循环输出。有些同学在IDE里调试时用本地文件路径读图习惯了到了OJ上忘了处理标准输入输出直接丢分。浮点精度也是重灾区。图像缩放、双线性插值、IoU计算这类题都会涉及浮点数。如果你的输出要求保留几位小数一定要严格按照题目要求格式化多打印一位少打印一位都可能导致判题不通过。我当时就遇到一个需要输出浮点数并保留两位小数的题目答题时尽量用double而不是float减少精度损失。边界条件的处理也要特别注意。比如实现高斯滤波时图像边界的像素怎么处理是补零、重复填充还是只计算有效区域这直接关系到输出数组的大小和数值。我建议复习时写一个通用模板把三种边界处理方式都实现一遍考试时按题目要求切换。4.3 一个典型的NMS实现拆解非极大值抑制是目标检测里最常用的后处理算法我强烈建议每个人都手写一遍。这里我给出一个我自己常用的Python快读实现帮助大家理解核心逻辑import numpy as np def nms(dets, thresh): x1 dets[:, 0] y1 dets[:, 1] x2 dets[:, 2] y2 dets[:, 3] scores dets[:, 4] areas (x2 - x1 1) * (y2 - y1 1) order scores.argsort()[::-1] keep [] while order.size 0: i order[0] keep.append(i) xx1 np.maximum(x1[i], x1[order[1:]]) yy1 np.maximum(y1[i], y1[order[1:]]) xx2 np.minimum(x2[i], x2[order[1:]]) yy2 np.minimum(y2[i], y2[order[1:]]) w np.maximum(0.0, xx2 - xx1 1) h np.maximum(0.0, yy2 - yy1 1) inter w * h ovr inter / (areas[i] areas[order[1:]] - inter) inds np.where(ovr thresh)[0] order order[inds 1] return keep这段代码里最容易写错的是索引偏移当计算完交并比后inds是针对order[1:]得出的索引要从order里取对应元素必须加1否则会把当前框自己当成候选框保留下来。这个细节我见过很多同学在面试时翻车笔试现场更容易因为紧张写错。4.4 双线性插值的标准实现框架双线性插值也是图像缩放类题目的常客核心是“四个邻域像素的加权和”。我给出一个清晰的实现思路import numpy as np def bilinear_interp(src, dst_size): src_h, src_w src.shape[:2] dst_h, dst_w dst_size dst np.zeros((dst_h, dst_w), dtypenp.float32) for y in range(dst_h): for x in range(dst_w): # 目标图坐标映射到原图坐标中心对齐方式 src_x (x 0.5) * src_w / dst_w - 0.5 src_y (y 0.5) * src_h / dst_h - 0.5 src_x max(0.0, min(src_w - 1.0, src_x)) src_y max(0.0, min(src_h - 1.0, src_y)) x0 int(np.floor(src_x)) y0 int(np.floor(src_y)) x1 min(x0 1, src_w - 1) y1 min(y0 1, src_h - 1) wx src_x - x0 wy src_y - y0 dst[y, x] (1 - wx) * (1 - wy) * src[y0, x0] \ wx * (1 - wy) * src[y0, x1] \ (1 - wx) * wy * src[y1, x0] \ wx * wy * src[y1, x1] return dst注意坐标映射方式很多笔试题不一定会明说需要你自己判断。大疆的题我遇到的是默认中心对齐即将像素看作一个点而不是小方块如果你用角点对齐结果会有细微差别可能被精度判定卡住。备考时把两种对齐方式都写一遍理解它们的区别考场上遇到任何描述都能快速切换。5. 备考路线与资源推荐三个月足够但方向要对很多同学问我大疆笔试到底要准备多久。我的体会是如果你计算机视觉理论基础扎实大概一个月的集中刷题和专项复习就能应付如果是零基础或基础较弱建议至少准备两到三个月而且方向要对——不能只刷LeetCode也不能只看论文要“理论代码实战”三者并进。5.1 计算机视觉核心体系怎么补我给自己定了一个复习框架分四个层次第一层是数学基础线性代数矩阵、SVD、特征值、概率论高斯分布、贝叶斯、极大似然、数值优化最小二乘、RANSAC。这个层级的复习资料我强烈推荐《计算机视觉算法与应用》这本书的第二章和附录部分里面的数学基础总结非常精炼适合笔试前快速过一遍。第二层是几何视觉相机模型、坐标系变换、标定、对极几何、立体匹配、SFM。这部分内容最枯燥但大疆考的概率非常大。复习时可以配合OpenCV官方文档里的Calibration和MultiView模块示例代码一起看把概念和代码对应起来。第三层是传统图像处理图像滤波、边缘检测、特征点检测与描述、图像金字塔、光流、Hough变换。建议把OpenCV里常用函数的源码思路过一遍尤其是SIFT和ORB的流程不要只停留在调用层面。第四层是深度学习与检测分割卷积网络基础、常见Backbone、目标检测系列、分割系列、跟踪系列。复习时不需要读太多论文原文找个综述文章或者技术博客把发展脉络理清就够笔试用了。5.2 手撕代码的专项练习方式编程题的练习不能靠临时抱佛脚。我建议制定一个“每日一算法”计划内容不限于LeetCode的高频题还要加上图像处理和计算几何专项题。LeetCode部分重点刷以下几类数组和矩阵操作特别是原地操作、边界处理、双指针和滑动窗口处理区间问题、BFS和DFS用于理解像素连通域、区域增长、排序和优先队列用于理解NMS、TopK、基本数据结构栈、队列、哈希表。动态规划大疆笔试考的倒不多但也不排除准备一下最基础的背包和最长子序列即可。图像处理专项则需要自己写一些OpenCV内部函数的简易版本我建议至少手写实现以下10个常用算法并整理成自己的工具库均值滤波、高斯滤波、中值滤波Sobel算子、Canny边缘检测中的非极大值抑制步骤最近邻插值和双线性插值直方图均衡化Otsu大津法自适应阈值NMS非极大值抑制IoU和GIoU的计算RANSAC拟合直线或平面判断点是否在多边形内射线法两个矩形的交集面积计算把上述算法全部手写完成并调试通过你的编程题部分基本就稳了。5.3 经典备考资料与刷题渠道关于资料除了《计算机视觉算法与应用》之外《多视图几何》第二版是相机几何和双目视觉的经典参考不需要整本读完重点看相机模型、对极几何、单应矩阵和三角化这几章就够了。算法题方面LeetCode热门100题是基础大疆常考的图像处理类题目没有太多现成题库建议去GitHub搜“计算机视觉面试题”或“CV-interview”很多仓库里有整理好的面经和代码题汇总。还有牛客网的大疆笔试专区往年的笔试题目回忆版很有参考价值虽然不保证原题重出但能帮你摸清出题风格和难度。6. 考前一周与笔试当天的实战建议最后分享一下考前的准备节奏和考场上的操作细节。这些内容看起来琐碎但关键时刻真的能救命。6.1 环境与设备调试不要败给临门一脚大疆笔试通常用牛客网或赛码网平台需要开启摄像头和屏幕录制。考前两天一定要做以下事情确认摄像头、麦克风、屏幕共享权限全部开启。找一个网络稳定的环境进行模拟测试确保不卡顿。提前把本地IDE我习惯用VS Code或PyCharm调好配好Python3和常用库numpy大疆编程题通常支持Python但有的时候第三方库如OpenCV不一定可用所以手写算法时要避免依赖cv2。准备一个草稿纸和计算器选择题可能会有计算量较大的题目草稿纸非常有用。笔试当天建议提前15分钟登录系统把设备测试跑一遍。我见过有同学因为摄像头迟迟无法打开白白浪费了十几分钟直接影响答题心态。6.2 答题顺序与时间分配技巧大疆笔试题量不小我建议答题顺序总体遵循“先易后难、先分高后分低”的原则。选择题部分遇到不会的先标记控制单题时间不超过2分钟。编程题部分我习惯拿到题目先花3-5分钟读题和手动推演示例不要直接上手敲代码。因为很多图像处理题的第一步是搞清楚坐标系定义和边界条件如果理解错了写完全部代码才发现方向不对就非常被动了。编程题如果遇到完全没思路的情况至少把题目要求的输入输出框架写出来并写一个暴力解能过部分测试用例也算拿分了。大疆的判题系统通常按用例算分暴力解拿到的分也不低。另一个实用的技巧是编程题可以先写一个最朴素的实现把框架跑通再优化。比如让你实现高斯滤波你不一定非要用分离卷积做两次一维卷积直接用双重循环加二维卷积核也能通过数据量较小的测试点。先把正确性做出来再谈效率。6.3 考后复盘笔试真正的价值笔试结束后我建议趁记忆还热着立刻把考点和题目方向记录下来。特别是选择题里你没有把握的知识点回去逐一查漏补缺。大疆的笔试往往不只是筛人更是一张很好的知识图谱告诉你这个岗位重视什么、需要补什么。我那次笔试后记录下自己在以下内容上存在知识盲区多视图几何中的F矩阵、SVD在几何问题中的具体应用、传统特征点描述子的数学原理。后来的面试中果然被追问了几何视觉相关的问题。笔试暴露出的薄弱点很大概率就是你后续面试会被深挖的地方。另外如果笔试通过好好利用笔试题目中暴露出的“你所不熟悉的知识点”来准备面试。大疆的面试官都很专业问的问题通常比笔试更深但方向是同源的。笔试做得越差的地方面试越要提前补强。大疆的CV笔试确实有一定门槛但它考察的内容方向非常清晰可以被系统性地准备。只要把计算机视觉基础、几何视觉、手撕代码这三块抓牢再辅以计算和工程细节的打磨我相信你也能顺利通过初筛进入后面的面试环节。