2024年秋招扑腾了一圈,科大讯飞的“飞凡计划”研发岗笔试算是我印象比较深的一场。这个计划听名字就知道是冲着“未来研发骨干”去的,和普通校招批次分开招聘、分开培养,所以笔试题目风格和筛选逻辑也跟大厂通用卷不太一样。
我尽量把还记得的题型分布、考点侧重、做题思路,包括考场上的一些临场判断,完整复盘出来。主要面向准备明年春招或下一届秋招、想投讯飞研发岗的朋友,另外对想了解AI公司校招笔试出题风格的人也有参考价值。
1. 飞凡计划到底是什么级别,笔试筛人逻辑如何
先说一个容易被忽视的背景:飞凡计划不是普通校招。它的定位是科大讯飞内部面向研发体系的高潜应届生招聘项目,进去之后培养路径、带教资源、项目参与深度都和统招岗有明显区别。也正因为如此,它的笔试和面试筛选标准要严格不少,笔试环节就会刻意拉开区分度。
1.1 与普通校招笔试的区别
普通校招笔试一般是“大而全”,就是尽可能覆盖多数岗位方向,题目难度天花板不会太高,核心目的是筛掉完全不准备的人。飞凡计划这类顶尖人才项目的笔试,则更接近于“能力基准线测试+方向潜力测试”,不追求让你全做完,而是追求在有限时间里判断你的上限在哪里。
具体到研发岗,它给你设置的题量和难度分布是不均匀的。一般会出现几个“压轴题”,这些题不是靠背题能解决的,而是要现场拆解问题、设计算法、权衡复杂度。我第一次做完甚至有种“完了时间不够”的虚脱感,后来看看周围进面的人,基本都觉得题量偏大,说明这类笔试本身就是按“做不完才是正常”来设计的。
1.2 笔试考什么,信息系统如何操作
我当时通过邮件收到笔试链接,用的是科大讯飞自家的在线笔试系统,支持代码自动判题。系统界面比较干净,左边是题目描述和示例,右边是代码编辑区,支持的语言包括C++、Java、Python、Go。这里有必要提醒一下:进笔试前一定先看清楚它要求的语言版本和运行环境,比如Python是不是3.9,Java是不是JDK8,别因为这些细节影响调试。
笔试整体的结构分成两个部分:第一部分是通用能力测试,有点像行测,但会嵌入计算机基础逻辑;第二部分是研发专业题,包括单选题、多选题、问答题和2-3道编程题。整个考试时间大约120分钟,但由于题量不小,时间压力很大。如果投递的是AI算法方向,专业题里还会有不少机器学习和深度学习相关的知识题,这点后面细说。
2. 题型结构解析与核心考点拆解
这部分是整篇文章的重点,我尽量按记忆把题型分类讲清楚,并补充每一类背后的考察意图。
2.1 技术选择题:不偏难怪,但覆盖面极广
技术选择题大概有20-30道,覆盖数据结构和算法、操作系统、网络、数据库、编程语言基础。说实话,单看每一道题都不算偏,但是胜在范围广,有些知识点如果你长期不用是容易忘的。
举个例子,我印象里有一道题考察的是操作系统中的“页面置换算法”,给了四种算法的缺页次数让你判断分别对应LRU、FIFO、OPT中的哪一种。类似题目不要求你背概念,而是要求你在脑子里模拟整个过程。如果平时不关注虚拟内存的管理细节,当时很容易蒙圈。
还有一道网络相关的题,考察TCP拥塞控制的慢启动阈值变化。它给了一个简化的演进过程:拥塞窗口从1增长到16,发生超时后阈值设置成8,然后问下一次拥塞避免从哪个窗口开始。这道题难点不是概念,而是你对“拥塞避免阶段线性增长”和“慢启动阶段指数增长”的具体边界是否清楚。
数据库方面则考了索引失效的场景,比如“对索引列使用函数后是否还能走索引”、“LIKE查询以通配符开头时索引是否会失效”——这些都是实际开发里会遇到的问题,不算难,但如果你只背过“最左前缀原则”的结论,没有真正理解B+树的查找逻辑,很容易被变种问法绕进去。
2.2 编程题:四道题拉开差距,压轴题很考验综合能力
编程题是我觉得飞凡计划笔试中最见功力的部分。和普通校招每道编程题都比较模板化不同,飞凡计划的题目设置更有层次感:前面一两道是热身题,中间一道是常规的中等难度题,最后一道则是压轴的综合题。
我记得其中一道题是给一个字符串,求不包含重复字符的最长子串长度。这题算法本身不难,滑动窗口加哈希表就能解决,但它会加一个限制:字符串长度可能达到10^5级别,且字符不仅是小写字母,可能包含所有ASCII可见字符,甚至中文。很多同学在LeetCode上刷过这题,但默认字符集是26个小写字母,思路就局限在固定数组上。如果你在考场上一看条件变化就懵了,说明对算法本质理解还不够透——本质是维护窗口内字符的频率,而不是实现某个特定写法。
另一道题考察的是“多线程交替打印数字”。看到这个题目时我有点意外,因为纯算法题里很少考线程协作。它要求两个线程分别打印奇数和偶数,数字范围到100,最终输出顺序必须是1到100。这道题考验的其实是对并发原语的理解:用synchronized加锁配合wait/notify是最基本的解法,也可以用AtomicInteger加自旋。更关键的是,题目允许提交完整可运行的Java代码,所以你要考虑可见性、线程安全等问题,不是写个伪代码就能糊弄过去的。
压轴题我记得是一个关于“任务调度”的变种题,它把每个任务描述成带有依赖关系的有向图结构,每个任务有执行耗时,不同任务可能并行执行,要求求出所有任务完成的最短时间。这题本质上是最长路径问题,需要拓扑排序加动态规划,比普通的最短路径难在一个“如何表达任务间的最长路径依赖”。
这题它不会直接告诉你“请使用拓扑排序和DP”,而是把场景包装成一个看起来很现实的系统调度问题。解法上需要完成以下几个步骤:
- 建立邻接表,存储每个任务依赖哪些后续任务;
- 计算每个任务的入度;
- 入度为0的任务先入队,并初始化它们的最早开始时间为0;
- 依次弹出任务,更新其后续任务的最早开始时间(取当前任务最早开始时间+当前任务耗时的最大值);
- 最终取所有任务最早开始时间加上自身耗时的最大值作为答案。
关键是第4步为什么是取最大值,而不是求和。因为一个任务必须在所有前置任务都完成后才能开始,所以它的最早开始时间取决于耗时最长的那个前置链。这和我们日常估计一个项目工期时说的“关键路径”是同一个概念。
2.3 算法方向附加题:NLP/语音相关基础不可忽视
如果你投递的是算法岗,笔试内容还会多一块专业知识测试。科大讯飞的核心业务是智能语音和人工智能,所以它的算法岗笔试对NLP和语音技术方向的知识特别看重。
我印象里有一道简答题,要求描述Transformer中自注意力机制的计算过程,并说明为什么需要做缩放(scale)操作。自注意力公式本身不难:Q和K做点积,除以根号dk,再经过Softmax,最后和V相乘。难点在于“为什么除以根号dk”的解释要到位:当dk较大时,点积结果的方差变大,导致Softmax函数的梯度趋于消失,缩放可以维持梯度稳定。面试官希望看到的不只是“背公式”,而是理解公式背后的数值稳定性和梯度流问题。
还有一道题问的是“语音识别中,如何解决重叠说话人问题”。这个题目开放性很强,没有标准答案。可以从端到端模型的角度回答,比如用包含说话人分离模块的多任务学习框架;也可以从信号处理的角度,提到波束形成技术;还可以从训练数据增强的角度,提到模拟重叠语音混合。我当时直接结合了讯飞提出的声学模型优化思路,提到了“基于感知空间的语音分离”方向。尽管理论上不一定完全对,但至少表明我对这家公司技术路线有自己的理解。
2.4 行测与性格测试:虽然占比不高但不要翻车
很多人一看到“性格测试”就放松警惕,觉得随便选选就行。但在飞凡计划的笔试里,它不仅仅是判断性格,而是通过连续题目的逻辑一致性来判断你是否诚实。
这部分题目确实不难,但有些思维题值得注意。比如“一间房子5个人,分别来自不同城市,穿不同颜色衣服,喝不同饮料,养不同宠物,每人有不同职业,问谁养鱼”这类逻辑推理题。它考的其实是耐心和细心,和技术的关联不大。如果平时不训练这类题,很容易在一道很长的条件推理上浪费10分钟,反而挤压了后面编程题的时间。
性格测试部分我的经验是:不要刻意把自己塑造成“完美人设”去选那些极端上进的答案。现在很多公司的性格测试会做前后对照,如果前面选了“喜欢团队协作”,后面又选了“更愿意独立完成任务”,系统会标记为矛盾作答,反而不利。真实、稳定地选择即可。
3. 实操过程与几个题型的现场复盘
只讲题目不聊考试现场的节奏,等于没讲。我这一部分完整还原一下我是怎么分配时间、怎么处理卡壳、怎么排查错误的。
3.1 我的时间分配策略,如何在120分钟内稳住
我的策略是:先做编程题的第一道热身题,然后立刻跳到后面的压轴题,不能按题目顺序做。为什么这样排?因为热身题通常比较简单,能快速建立答题信心和节奏;而压轴题分值和难度最高,如果你放到最后,大脑已经被前面的选择题磨累了,再面对复杂题目很容易短路。
具体来说,我用了约15分钟做热身题和中等题,40分钟留给压轴题。这个节奏仅供参考,但核心思路是“分值越高的题越早做”。剩下的时间再回头做选择题和问答题。因为选择题是不定项,有些选项会消耗大量时间,所以一定要学会“不确定就先标记,最后统一处理”。
这里有一个踩过的坑:我花了太多时间在一道关于B+树删除操作的选择题上,原因是题目给出了一个B+树的删除过程,每一步都要判断删除后是否合并、是否借位、中间节点如何调整。这道题的细节太密集,很容易钻牛角尖。后来我意识到,这种题即使做对了也只值2分,但若是花掉10分钟,就会耽误后面的编程题。所以我的建议是:遇到明显过于耗时的选择题,果断先跳过,不要有“不做完不甘心”的执念。
3.2 编程题环境调试实录,从编译错误到通过
在线编程平台的调式环境和本地IDE差别不小。它没有自动补全、没有变量预览、报错信息也偏简略。我第一道题很快就写完了,但提交后显示“编译错误”。本来以为是大意拼错了变量名,后来仔细排查才发现是导入包的问题——LeetCode上刷题习惯了系统自动带上import java.util.*,但讯飞的笔试环境不会自动导入,需要手工加。
这个细节很值得提醒:考前一定要去它的模拟环境里试一次,至少确认三件事:
- 代码编辑器的缩进字符类型,是空格还是Tab;
- 输入法是否自动切换成中文状态,这会导致分号、括号变成中文全角,编译器直接报错;
- 提交结果的分级,是否区分“编译错误”“部分用例通过”“运行超时”“内存超限”。
另外,代码里不要写任何无关输出,包括“测试一下”之类的print。判题系统会按标准输出解析结果,多余输出会被当成答案的一部分,直接判错。我见过有人就在代码里留了个调试用的System.out.println,结果“误判”为错题,血亏。
3.3 压轴题“关键路径”的完整推导
拿“任务调度”这道题来说,直观感觉是一个带依赖关系的并行执行问题,不能用简单递归处理。因为一个任务可能有多个前置任务,递归会重复计算,复杂度会爆炸。更稳妥的思路是把它看成一个有向无环图的最长路径问题。
我在考场上是这么推的:
- 定义
dis[i]表示任务i最早可以开始的时间; - 定义
time[i]表示任务i自身的执行耗时; - 那么任务i的最早开始时间等于所有前置任务j的
dis[j] + time[j]取最大值; - 最终所有任务完成的最短时间是所有
dis[i] + time[i]的最大值。
拓扑排序在这里的作用,是保证处理到任务i时,它的所有前置任务都已经被处理过了。配合一个队列维护入度为0的任务,就可以从源点开始一层一层推进,整体时间复杂度是O(N+E),N是任务数,E是依赖边数。
这个思路想清楚以后,代码实现大概只需要30行左右。如果不熟悉拓扑排序,那就需要先复习一下图的入度、出度、邻接表这些基础概念。核心代码结构大概是这样的:
from collections import deque def min_time(n, times, deps): graph = [[] for _ in range(n)] indeg = [0] * n for a, b in deps: graph[a].append(b) indeg[b] += 1 dis = [0] * n q = deque() for i in range(n): if indeg[i] == 0: q.append(i) while q: u = q.popleft() for v in graph[u]: dis[v] = max(dis[v], dis[u] + times[u]) indeg[v] -= 1 if indeg[v] == 0: q.append(v) return max(dis[i] + times[i] for i in range(n))这段代码要注意的地方是,初始化入队节点时,所有入度为0的节点都可能是起点,不能漏。另外,用max更新dis[v]时,要保证同一个节点被多个前驱节点依次更新时取的是最大值,而不是被覆盖成最后一个前驱的值。
4. 科大讯飞业务方向与笔试考点可能性的关联
聊完具体的题目复盘,我再补充一些可能需要留意的大背景,帮助理解“为什么飞凡计划笔试会考这些东西”。科大讯飞在校园招聘中高度强调自己在人工智能领域的业务布局,尤其是智能语音和认知智能。这些业务方向会直接反映到笔试和面试的题目设计上。
4.1 智能汽车与车载语音交互方向
“科大讯飞智能汽车”是比较值得关注的方向。它的智能座舱语音交互方案在多个汽车品牌中都有落地,比如车载语音助手、多音区声源定位、方言识别等。这些业务特点带来了一些潜在的考点方向:
- 语音前端信号处理:包括回声消除、噪声抑制、麦克风阵列波束形成;
- 多模态交互:语音、手势、视线等多通道信息的融合;
- 车机场景下的低资源推理:模型如何压缩、如何部署到车规级芯片上。
如果笔试中出现“如何降低语音识别模型的推理时延”这类开放题,不妨从模型量化、剪枝、知识蒸馏、流式识别、端侧推理框架优化等几个维度来组织答案。这类题目没有标准答案,但会考察你是否有工程化落地的思考,而不是只懂理论。
4.2 智能车竞赛与产学研结合的项目背景
“智能车竞赛科大讯飞国赛名单”能看出讯飞在产学研一体上的投入。它经常与高校合作举办智能车竞赛,参赛者需要在真实的车模平台上完成车道识别、交通标志检测、语音控制等任务。这类竞赛的设置和飞凡计划笔试的压轴题有一些气质上的相似:不直接告诉你“用哪个算法”,而是让你在真实约束下设计方案。
如果你参加过类似竞赛,笔试时可以把这些实操经验写进解答。比如谈到模型压缩时,可以说参赛时因为车端算力有限,把YOLOv5s剪枝后再量化到INT8,推理速度提升了3倍。这种真实数据比干巴巴背概念有说服力得多。
5. 备考资料与笔试前一周的冲刺清单
如果你已经决定投飞凡计划,这里列一个可以照着做的复习清单,全是我亲自验证过的方向。
5.1 数据结构与算法怎么刷效率最高
不要盲目刷题,要针对高频考点定向训练。飞凡计划笔试里出现概率较高的算法题型包括:
- 滑动窗口类:最长无重复子串、最小覆盖子串;
- 拓扑排序类:任务调度、课程表;
- 动态规划类:最长上升子序列、编辑距离、背包问题;
- 二分搜索类:旋转数组找最小值、搜索插入位置;
- 模拟类:大数相加、字符串乘法。
刷题的时候可以按“题型-模板-变种”的思路来。比如滑动窗口题,先掌握“右指针扩张、左指针收缩”的模板,再通过几道经典题熟悉窗口计数、窗口内状态维护等变体。LeetCode的Hot 100加上剑指Offer的核心题足够覆盖大部分笔试场景。
5.2 计算机基础知识的查漏补缺重点
- 操作系统必看:进程与线程区别、死锁条件与避免、内存分页与页面置换、进程调度算法;
- 计算机网络必看:TCP三次握手与四次挥手、拥塞控制、HTTP/HTTPS、DNS解析过程;
- 数据库必看:索引失效场景、事务隔离级别、MVCC原理、最左前缀原则;
- 编程语言必看:Python的GIL机制、Java的垃圾回收、C++的智能指针。
这些知识基本上是“背了不一定考,但不背一定会遇到”。飞凡笔试的选择题分布相对均衡,你很难预判多选会出哪个方向,所以全面过一遍很重要。碎片时间可以用“八股文”类的资料来刷,但不要花太多时间死记硬背,重点是理解原理。
5.3 开放型简答题的作答策略
开放型简答题往往让很多人头疼,因为它没有标准答案,也不知道该写多少。这类题通常集中在AI算法岗里,可能让你设计一个智能客服系统、分析一个推荐模型的冷启动问题、或者讨论语音识别中如何处理噪声。
我的答题策略是“三段式”:先说清楚问题定义和约束,然后给出主方案,最后点出方案的局限性和优化空间。比如回答“如何提升语音识别准确率”时,可以这样组织:
- 约束分析:需要区分近场和远场、实时和非实时、资源充足和资源受限;
- 主方案:数据层面增加数据增强(加噪、混响、语速扰动),模型层面采用端到端架构,解码层面引入语言模型 rescoring;
- 局限性:数据增强不能完全覆盖真实噪声分布,端到端模型在低资源场景下可能不如混合模型稳定,需要结合业务场景权衡。
这样的回答,既展示了知识广度,又体现了工程思维,比单纯罗列“使用更深的模型”要有说服力。
6. 常见问题与心态调整,来自考场上的真实教训
这一部分记录一些大家在准备和考试过程中常遇到的问题,也是我自己踩过的一些坑。
6.1 编程题做不出来怎么办,直接放弃还是硬磕
我的经验是:先写暴力解保底,再优化。很多编程题判题系统是分布给分的,暴力解能过一部分小测试用例,也能拿到一笔分数。硬磕最优解的代价是可能连保底分都拿不到。
还有一招是“多写注释说明思路”。虽然在线判题只看代码运行结果,但科大讯飞这类公司会在笔试结束后人工复核部分试卷,尤其是那些代码没跑通、但思路接近正确解法的答卷。如果你在代码里写了清晰的注释,说明你理解了问题本质,只是时间不够没有写完,复核人员有时会给一些“过程分”。
但是注意,注释不要写“我不会”之类的大白话,而是要写清楚你的推导步骤:“1. 先按依赖建图;2. 用拓扑排序逐层推进;3. 对每个节点取前驱最大值。”这样既能梳理自己的思路,也能让阅卷者明白你的能力边界在哪里。
6.2 多选题拿不准,选还是不选
很多公司的多选题都采用“少选得分,多选不得分”的计分规则,科大讯飞也是类似机制。这意味着如果你对一个选项只有七八成把握,最好只选那些百分百确定的,宁可少得分也不能错选失分。
不过这里有一个细节:有些题目会标注“本题有两个或两个以上正确答案”,这种情况下至少选两个肯定更稳。如果没有标注,保守策略优先。
6.3 笔试中途断网或系统卡死怎么办
在线笔试最怕的就是考到一半断网。我的处理顺序是:先截图保存当前已填写的答案区域,然后立刻举手示意(如果是在远程监控环境下,系统中有在线客服),描述问题并请求重新进入考试。技术层面,建议提前准备手机热点作为备用网络,避免路由器波动导致的一切麻烦。
另外,浏览器建议使用Chrome或Edge的普通模式,不要开无痕窗口。有些在线笔试系统在无痕模式下无法正常保存答题记录,甚至摄像头监控组件无法运行,直接影响考试资格。
6.4 如何看待“全做完了反而没进面”
我身边有朋友总是倾向于“题目全做完”就很稳,但现实可能相反。飞凡计划的笔试核心在于区分度,它通过部分非常规题目来观察你的上限。如果你能在数量上做完,但正确率不高,反而说明你在“快而浅”的模式下工作,这在研发岗里并不占优势。
相反,如果你只做完了一半,但每一道题都提交了正确或接近正确的答案,说明你的准确率和深度理解能力更强,更符合“高潜”的培养定位。所以考场上别被没做完的题带崩心态,最重要的还是把自己会做的题做到万无一失。
7. 笔试通过之后,下一步准备建议
很多人笔试完了就彻底放松,等面试通知时才仓促准备。但有些内容是可以在笔试和面试之间这段空窗期提前做好的。
7.1 复盘笔试中出现过的知识盲区
笔试结束后,趁记忆还热乎,立刻把遇到的不会的知识点记下来,哪怕只是几个关键词。比如我当年考完后记下的就是“TCP慢启动阈值”、“B+树删除合并”、“Transformer缩放因子”,后来面试时问了Transformer相关内容,幸好当时已经复盘过,不然面试就尴尬了。
建议建立一个文档,分方向整理:算法与数据结构、操作系统、网络、数据库、AI基础、业务理解。每一条记录下“考点是什么、我当时怎么答的、正确答案应该是什么、类似题还会怎么出”。这个复盘文档的价值不只在秋招,春招、提前批都还能用。
7.2 了解AI大模型与讯飞星火的业务方向
2024年这个节点,AI大模型可以说是各大厂笔试面试的热门话题,科大讯飞在这方面也有自己的布局,“星火认知大模型”就是它的核心产品之一。面试环节很可能会问“如何评估大模型的生成质量”“大模型幻觉问题怎么缓解”“如何压缩大模型推理成本”。
准备这块时,不要只停留在“用过ChatGPT”的层面,而是要从工程视角去理解。比如“幻觉问题”,可以结合检索增强生成(RAG)的思路,先说如何把外部知识库切入生成过程,再说如何通过约束解码和事实核对降低幻觉率。这种回答把一个开放式问题落回到具体技术方案上,会给人留下很深的印象。
7.3 简历与项目经历如何对应笔试考点
飞凡计划笔试中出现的开放题,往往是你简历项目经历的延伸。建议重点准备1-2个最有代表性的项目,把它讲透。讲的时候注意这个结构:项目背景→个人负责部分→技术难点→解决方案→量化结果。
最好能给每个项目准备一张“考法地图”:这个项目里有哪些细节可以出笔试开放式题、哪些点会被追问。比如你的项目用了多线程,那么面试官几乎必然会追问线程安全、锁竞争、性能瓶颈,这些都要提前准备好。
8. 写在最后的个人建议
如果只给一条建议,我会说:不要把笔试当考试,要把它当一次开卷的技术对话演练。题目表面是考察你知不知道某个算法、某个概念,本质上是在看你面对一个不熟悉的问题时,能不能快速建模、分解、实现、验证。这种能力不靠短期抱佛脚,而要靠在平时项目中不断练习。
准备考试的时候,不必追求题海战术,更重要的是针对薄弱项去补漏。比如你对动态规划不熟,就把背包类、区间类、状态机类问题各练几道,形成肌肉记忆;你对网络不熟,就学一遍TCP/IP协议栈,画几遍三次握手和四次挥手的流程图,直到你能凭记忆讲出来为止。这个过程中不用焦虑,因为你每弄懂一个问题,都离那张面试通知近了一步。
笔试只是秋招路上的一个关卡,不是终点。哪怕你这一场发挥得不是很好,后面的机会还有很多。我见过太多人因为一次笔试失利就情绪崩溃,最后连后续批次也错过。稳住,把经验总结好,后面每一场都会一次比一次熟练。