旷视科技研发工程师春招笔试复盘:算法与工程思维的双重考验

发布时间:2026/9/1 20:34:03
旷视科技研发工程师春招笔试复盘:算法与工程思维的双重考验 旷视科技2019实习生春招研发工程师笔试一次完整的复盘与思考那年的春招我投了旷视科技Megvii的研发工程师实习生岗位。原因很简单——人脸识别、计算机视觉、AI落地这些词在2019年正热得发烫而旷视作为“CV四小龙”里技术氛围极浓的一家自然是很多同学挤破头想进的地方。笔试通知来得比预期快是一家在线笔试平台发来的链接规定时间、摄像头监控、两小时整。我提前一天把LeetCode高频题过了一遍又把《剑指Offer》翻了几页但坦白讲心里没底。考完之后发现这场笔试真正考察的不只是你会不会写代码而是你在面对陌生问题时能不能快速拆解、合理取舍、用工程思维给出方案。这篇复盘写给当年和我一样在焦虑中刷题的人也写给接下来要面旷视的研发岗候选人尤其是视觉算法、后端研发、C/Python工程方向的同学希望对你们有实际的参考价值。1. 笔试前夜我如何判断旷视对研发实习生的真实要求1.1 从公司业务倒推岗位画像旷视起家于Face人脸识别2019年前后的业务重心已经不止于算法本身而是在往“AIoT”“城市大脑”“供应链物流”这些方向扩展。这就意味着它招的研发工程师绝不只写算法原型还需要能把模型部署到实际系统里能设计服务端架构能在嵌入式平台上优化推理速度能搭建数据管道。所以笔试的考察点也必然绕不开三个核心词算法功底、代码工程、基础理论。我当时在牛客网上翻了不少用户分享的旷视笔经。综合来看研发工程师岗在线笔试通常包含以下几个方面基础知识选择题覆盖数据结构、操作系统、计算机网络、C或Python语言特性。编程题一般是两道到三道难度从LeetCode Medium到Hard不等看具体岗位方向。算法岗会偏动态规划、DFS/BFS、数学推导工程后台岗则会多一些字符串处理、哈希表、高并发场景模拟。部分方向会有机器学习/深度学习基础题比如反向传播、损失函数、卷积核计算等。搞清楚这个结构之后我的准备重心就很明确了选择题靠日常计算机基础积累临时抱佛脚效果有限但也能过一遍错题编程题才是拉分项必须投入大部分复习时间。1.2 针对性的刷题策略很多人刷题喜欢按题号往后刷或者每天随机来几道我试过效率不高。面向春招笔试我给自己定了一个T字型策略广度上覆盖高频考点深度上吃透每类题的通用解法。数组、链表、栈、队列、哈希表必须闭着眼都能写。二叉树遍历、层级遍历、公共祖先类问题必考概率极高。动态规划重点复习背包类、序列类最长上升子序列、最长公共子序列、区间DP。二分搜索注意边界条件和单调性的判断。字符串处理KMP、前缀和、双指针、滑动窗口。图论基础Dijkstra、拓扑排序、并查集。在语言选择上我建议优先用自己最熟练的语言。旷视的研发岗基本上两种语言走天下——服务端和算法原型用Python底层和性能敏感模块用C。笔试如果明确规定只能用C那你无论如何都得用C但如果可自选就选自己写得更稳的那个不要因为“听说旷视内部用C多”就临时换语言。1.3 资料取舍与时间安排我复习的核心资料就三样LeetCode精选高频题约150道、《剑指Offer》中简单/中等题、常见的计算机网络和操作系统面试题汇总。深度学习部分我用的是自己平时课程的笔记和几篇经典博客。刷题时间大概持续了十二天每天白天在实验室做毕设晚上雷打不动刷三四个小时。周末会做一次全真模拟——找两小时的空闲不开IDE提示限时完成三道中等偏上的题。这个阶段最大的体会是不要贪多。同样的时间把一类题型吃透比囫囵吞枣刷十道不同类型的效果好得多。尤其是树和DP睡前过一遍思路早起在脑海里复现遗忘率会低很多。2. 笔试现场的流程复盘题型、节奏与取舍2.1 考试环境与通用规则旷视那场笔试是在牛客网平台上进行的要求摄像头全程开启网页不能切走一旦切出界面系统就会记录切屏次数。我印象很清晰笔试一共120分钟总题量不算大但编程题占了大头。刚开始有一个环境检测环节测试摄像头和麦克风这里有同学因为没有授权浏览器权限折腾了好几分钟很影响心态。建议提前半小时进入环境把设备调试好把所有能关掉的无关软件都关掉尤其是那种偶尔会弹出广告的软件。关于语言环境当时平台支持C、Java、Python候选项还是比较友好的。读题时可以先快速将整套试卷过一遍对题量和类型心里有数。2.2 题型分布与分值结构根据我的记忆和同场同学的交流整张卷子大概是这样的结构题型题量难度建议用时单项选择题计算机基础10-15道中等20分钟不定项/填空语言细节5道左右中等偏难10分钟编程题一基础算法1道中等20分钟编程题二进阶算法1道较难30分钟编程题三思维/综合1道难30分钟简单问答/设计题选做1-2道主观10分钟这个结构在不同批次可能会有浮动但总体逻辑是一致的先用选择题快速筛掉基础不牢的人再用编程题按难度梯度筛选编码能力和算法思维。2.3 时间分配这门“隐形的技术活”说实话大家做题能力差距没有想象中那么大但时间分配能力的差距能直接影响10%以上的得分。我当时的策略是拿到卷子先看编程题给自己一个大致预期。先做选择题控制在25分钟以内不确定的题目先标记不纠结。编程题从最简单的开始做先把必得的分拿到手。第二道编程题给足30分钟如果20分钟还没思路立刻转战第三题的“暴力解”。最后留5分钟检查选择题的标记项顺便确认所有代码题有没有语法错误或拼写问题。这里的核心思路是宁可部分得分不可整体崩盘。一道编程题只写对了部分case也能拿一定比例的分数而如果时间不够交白卷那才是真的亏。3. 编程题复盘从题面到思路完整还原推导过程3.1 第一道题字符串相关的基础算法题作为整份试卷的第一道编程题它的难度设定很友好大致会考察到字符串处理中的双指针或哈希表。我记得当时遇到一个和字符重组相关的题题面大意是给定一个字符串需要判断它能否通过重排变成一个回文串如果能输出任意一个可行的重排结果。初始很容易想到“统计字符频率如果有超过一个奇数次字符就无法构成回文串”但第二问“输出任意一个可行回文串”才是完整题解的分水岭。我当时的思路分两步走统计每个字符出现次数。如果奇数个的字符数量 1直接返回空字符串。构造回文串把每个字符的前一半放到结果串前半段后一半倒序放到后半段。如果存在一个奇数字符把剩下的那个放在正中间。我当时用Python写的核心代码大概长这样def construct_palindrome(s: str) - str: from collections import Counter cnt Counter(s) odd_char half [] for ch, num in cnt.items(): if num % 2 1: if odd_char: return odd_char ch half.append(ch * (num // 2)) left .join(half) right left[::-1] return left odd_char right这道题本身没有什么坑但确实能筛选出平时写代码是否细心。例如Python中字符串是不可变对象直接原地修改会报错必须用列表或拼接处理再比如字符频率统计的边界条件空字符串怎么办如果只有一种字符怎么办这些细节都占测试用例的分数。3.2 第二道题动态规划的标准套路第二道题难度明显上了一个台阶是比较经典的“最大子段和/最长公共子序列”的变种。我记得类似这样给定一个序列可以删除至多一个元素求删除后连续子数组的最大值。原题如果只是“求最大子段和”那Kadane算法是模板级解法。但加了“删除至多一个元素”这个条件动态规划的维度就从一维变成了两维。我的推导过程是这样的定义状态dp[i][0]表示以位置i结尾、且没有删除过元素的连续子数组最大和dp[i][1]表示以位置i结尾、已经删除了一个元素的连续子数组最大和。状态转移时考虑两种情况不删除当前元素dp[i][0] max(nums[i], dp[i-1][0] nums[i])删除当前元素dp[i][1] dp[i-1][0]这是因为删除第i个元素后“以i结尾”其实是用前i-1个位置的最大值来延续。不删除当前元素但之前已经删过dp[i][1] max(nums[i], dp[i-1][1] nums[i])在代码实现时还要注意dp[i][1]的取值应该涵盖“删的是当前元素”和“删的是之前的元素当前元素正常加入”这两种情况。这道题的核心不在于能否写出暴力解而在于能不能把“删除一次”这个条件编码到状态里。笔试现场的紧张氛围下想出两维DP本身就是一个分水岭。3.3 第三道题读题能力比代码能力更重要的综合题第三道题的题干往往较长会模拟一个真实的业务场景。记得那场笔试有一道关于任务调度的题多个任务、每个任务有执行时间和依赖关系要求输出在单线程下最小完成时间之类的。说白了就是拓扑排序加贪心或DP的综合应用。这类题有一个共同点信息密度大废话也多。如果你逐字逐句读会花掉大量时间而且越读越慌。我的做法是先跳到输入输出示例从样例倒推题目要求再回头看题面里和样例相关的条件描述。这样能快速抓住核心约束条件。对于这道题拓扑排序是跑不掉的。在拓扑排序过程中要同时维护每个任务的最早完成时间。某个任务必须等所有前置任务完成后才能开始所以它的最早开始时间是所有前置任务完成时间的最大值再加上它自己的执行时间就是它的最早完成时间。最后所有任务完成时间的最大值就是答案。这道题我并没有在笔试时做到最优解只完成了拓扑排序和基本的时间累计漏掉了一些边界情况。但即使是部分case通过也能拿到一些分数所以做题时“先跑通样例再优化边界”的策略是对的。3.4 选择与填空那些容易翻车的知识点选择题覆盖的面很广我回忆几个方向基本都是高频考点进程和线程的区别、死锁的必要条件、页面置换算法。TCP三次握手、四次挥手状态变化、TCP与UDP的区别。C里虚函数表、构造函数顺序、深浅拷贝Python里可变与不可变对象、装饰器的执行顺序。数据结构的查找/插入/删除时间复杂度、哈希冲突的处理。有一道不定项选择让我印象很深问Python中在列表遍历时删除元素会出现什么问题A. 报IndexErrorB. 漏删元素C. 死循环D. 程序正常。看似简单实际上考察的是对迭代器内部机制的理解。正常情况下列表迭代删除会出现漏删元素因为删除后索引会前移如果边遍历边用list.pop()且循环条件依赖len则可能出现IndexError。这种题没有商量余地只有对语言特性和底层机制有清晰认知才能拿全分。4. 笔试结束后的复盘如何把一场笔试的价值榨干4.1 趁热打铁把每道题重新实现一遍出考场之后很多人第一反应是“终于结束了我要休息两天”。我的习惯恰恰相反——笔试结束后的两小时是最宝贵的复盘时间。记忆还新鲜思路还热乎趁这个时间把每道题重写一遍效率远高于过两天再回头看。我当时把三道编程题重新整理了一遍每一道都写了两种解法一种是考场上用的解法一种是自己能想到的最优解。然后把核心思路记录在自己的面试笔记里包括状态定义、转移方程、边界条件、复杂度分析。这些笔记后来直接成了面试复习的资料比市面上任何面试题集都更贴合自己的弱点。4.2 从笔试题目反推面试问题旷视的面试官风格整体上会比较深他们很喜欢顺着你笔试时的思路往下追问。比如你笔试用了动态规划面试时就被问过“这道题的状态定义还能不能优化滚动数组怎么实现如果数据规模变成10的9次方怎么办”所以笔试复盘不能只停留在“题目做出来了”而要尝试站在面试官的角度给自己出几个延伸问题。我自己会习惯性地做这个动作每道题都问三个“如果”——如果数据范围变大怎么办如果约束条件变了怎么调整如果让我给别人讲清楚这个算法我能不能讲明白别看这个动作简单它能逼着你把知识从“会做”变成“会教”这中间的距离恰恰是面试时拉开档次的差距。5. 给后来的同学关于旷视笔试的几组实在经验5.1 准备方向上要抓大放小如果你正在准备旷视或者其他AI公司研发岗的春招笔试我的建议是把时间花在下面这些“大到不能倒”的内容上数据结构栈、队列、链表、哈希表、二叉树、堆。算法双指针、滑动窗口、二分、DFS/BFS、动态规划、并查集、拓扑排序。语言细节你选择的那门语言至少要对自己使用的容器/API的底层实现有基本认知。计算机基础操作系统、计算机网络这是选择题的主要来源。很多同学喜欢研究冷门的算法和底层的源码细节比如红黑树的左旋右旋、跳跃表的实现逻辑。这些内容不是没用但它在笔试中覆盖率极低。性价比最高的策略是先保证高频题绝对不出错再考虑给非高频题留出时间。5.2 笔试现场的一个救命技巧分步提交在线笔试平台的评测逻辑常常是分测试用例给分的。即使你的解法不是最优完全可能拿到80%甚至90%的分数。这里的关键是要做到“能跑通一部分就先提交一部分”。有些同学觉得自己的代码不够优雅非要等完全调通了再提交结果时间耗尽一分没得。更好的做法是先写一个暴力解确保小规模数据通过提交拿到基础分然后再优化算法提交改进版本。只要还有时间就持续推进。平台会取最后一次提交的成绩吗不同平台规则不一样有的是取最优一次有的是取最后一次。不管哪种先交一个能得分的版本都稳赚不赔。5.3 关于“遇到原题却不会做”这件事笔试时最崩溃的瞬间不是看到完全不会的题而是看到一道“明明在哪里刷过原题但记不住解法”的题。这种时候最忌讳的是原地自闭。我的做法是先写出所有能想到的代码框架哪怕不完整也要把思路写在代码注释里然后尝试用暴力解先拿基础分。事后你会发现很多“做不出来”的题其实是当时太紧张把状态转移方程写错了或者把边界条件搞混了。本质上还是对这类题的套路不够熟练。所以准备阶段不要只追求“把题看懂”要追求“闭卷五分钟内写出核心步骤”。5.4 笔试和面试的衔接千万别断档笔试结束之后如果收到了面试通知那面试官手里大概率会有你的笔试作答记录。不要以为笔试成绩过关就万事大吉面试中完全可以围绕笔试题来展开。你在笔试里选用的算法、暴露的语法错误、甚至注释里写的思考过程都是面试官的问题素材。收到面试通知后我做的第一件事是把笔试时没解出来的题重新做一遍然后把每道题的时间复杂度、空间复杂度都背到滚瓜烂熟。果然面试时有一道题目就是笔试第三题的变体。所以说笔试不是终点而是给面试官递的第一张名片。6. 写在最后面试心态比刷题数量更值得修炼如果只让我总结一句给后来者的话那就是春招笔试考的不只是知识更是你在压力下拆解问题的能力。旷视的研发岗笔试题目难度在全国AI公司阵营里属于中上但它并没有到“不看运气就过不了”的地步。那些能通过的候选人几乎都有一个共同特质能在有限时间里把能拿的分都拿到不纠结、不恋战、不轻易放弃。我后来也没有拿到旷视的实习offer那一届竞争确实激烈。但这套笔试复盘的方法我在之后的几场面试中一直在用让我在后来的面试中明显从容了许多。把每一次笔试都当成一次系统训练你会发现真正重要的不是某个公司的通过率而是你在这个过程中的进步幅度。祝看到这篇文章的你笔试顺遂offer入手。