ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

科大讯飞2024秋招研发岗笔试全解析:题型、算法题与实战技巧

科大讯飞2024秋招研发岗笔试全解析:题型、算法题与实战技巧 每年秋招季技术岗笔试就像一场没有硝烟的战争。我今年参加了科大讯飞2024年秋招研发岗的笔试整个过程下来感触挺多从笔试通知到最终交卷每个环节都有不少值得复盘的地方。这篇文章我就从研发岗笔试的实际经历出发聊聊科大讯飞今年笔试的题型分布、算法题的风格特点、时间分配策略以及那些不真正上考场很难注意到的细节。内容不求面面俱到只求给后面参加讯飞或者其他AI公司研发岗笔试的同学提供一个真实可参考的视角。1. 笔试通知与岗位方向不同研发子方向的题目差异科大讯飞研发岗并不是一个大而统一的岗位池校招系统里研发岗会细分出多个方向比如后端开发、前端开发、算法工程师、测试开发、嵌入式开发等。不同方向的笔试虽然共用一套在线笔试平台但试卷内容差异很大。我投递的是后端研发方向所以这里重点聊后端这套题。如果你投的是算法岗笔试几乎全是机器学习、深度学习和NLP相关的内容考纲和研发岗完全不同。笔试通知一般提前三天到五天通过邮件和短信同时发送邮件里会写清楚笔试时间、在线考试平台地址、模拟笔试链接、设备要求以及违规行为说明。科大讯飞用的是第三方在线笔试系统支持网页端做题不需要额外安装客户端但要求摄像头全程开启。这个环节很多人会忽略一个重要点笔试通知里的模拟笔试一定要去做一遍。模拟题虽然只有几道分数不算但它能让你提前确认浏览器兼容性、摄像头权限、代码编辑器是否可用、复制粘贴是否受限等关键信息。我身边就有同学正式笔试时发现代码框无法自动补全、粘贴代码被拦截心态直接崩掉。另一个值得关注的点是笔试时间。不同批次的笔试安排在不同时间段有些批次甚至在工作日晚上。这个不是随机分配的和你投递简历的时间、内推码的使用、HR筛选节奏都有关联。所以如果你想多争取准备时间简历尽量早投提前锁定靠后的笔试批次这是完全合规的策略。2. 题型结构与作答顺序先拿稳分再啃硬骨头的实战节奏2.1 整张试卷的题型配比科大讯飞2024秋招后端研发岗笔试时长是90分钟总分100分。我拿到的这套试卷题型配比如下题型数量分值说明单选题10道每题2分计算机基础网络操作系统多选题5道每题3分错选漏选均不得分填空题4道每题2分输出结果/代码填空编程题3道每题15分左右核心得分区这个分值配比意味着一个关键结论编程题是绝对的大头。三道编程题加起来45分左右加上代码相关的填空题代码能力直接决定你能不能通过本轮筛选。选择题和填空题虽然单题分值不高但它们覆盖的知识面非常广错多了照样拉分。所以我的做题策略是先快速过一遍选择题和填空题控制在25分钟内完成剩下的时间全部留给编程题。2.2 选择题基础知识覆盖范围比想象中宽整套选择题覆盖了计算机网络、操作系统、数据库、Java基础/Go基础根据你选择的语言、Linux命令、设计模式、智力题等。有几道题印象比较深一道TCP三次握手相关题目问的是第二次握手时SYN和ACK标志位的状态组合选项里混了SYN1, ACK1和SYN1, ACK0这类容易混淆的细节。一道关于进程和线程的题目问哪个操作不会引起进程切换本质上在考用户态和内核态的切换时机。一道数据库索引题给了一个SQL查询语句问哪条索引能命中这里需要在脑子里过一遍最左前缀匹配原则。还有一道设计模式的题目考的是观察者模式的适用场景。这些题目难度不算高但非常考验基础知识的扎实程度。临时背八股文能覆盖一部分但像Linux命令那种具体到grep和awk区别的题目平时没有实际用过很容易选错。多选题的规则要特别提醒漏选不得分。这意味着拿不准的选项宁可少选不能为了冲高分而冒险。我在这块吃过亏有一道多选问了HTTP状态码的语义选项里301永久重定向和302临时重定向两个选项都在但还有一个选项304 Not Modified表示请求失败我当时犹豫了一下还是选了结果答案是错的。多选这种一票否决机制稳住比贪多重要得多。2.3 填空题考的是代码输出结果和边界条件填空题一共4道有两种形式。一种直接给一段C语言/Java代码让你写输出结果另一种是给一段不完整的代码让你填关键表达式。这类题目说难不难但有一个隐蔽的坑代码里有递归、自增运算符、浮点数精度这类容易看走眼的点。我记得有一道题是经典的递归调用函数内部有两个递归分支需要在纸上模拟整个调用栈才能得出正确结果。还有一道题考察浮点数在计算机中的表示问0.1 0.2 0.3这个表达式在Java中的输出结果。如果你不清楚IEEE 754浮点数存储规则大概率会答错。我的建议是填空题控制在5分钟以内不要在单道题上死磕。因为每道题分值只有2分耗10分钟去推理一道难题性价比太低了。这种题更考验的是一眼看到底的能力看到递归就画调用树看到浮点数就直接想二进制表示不要凭借直觉瞎猜。3. 编程题算法题的难度梯队与实战解法3.1 第一题字符串和哈希表的经典组合第一道编程题难度不高属于送分题级别给定一个字符串数组要求找出出现次数最多的前K个单词如果次数相同则按字典序排序。这道题本质上就是LeetCode 692的变体核心解法是用哈希表统计频率再用最小堆或者直接排序输出。这类题目考察的重点其实不是算法本身而是代码的熟练度和细节处理能力。写的时候要注意Comparator的写法Java里面可以用Map.Entry.comparingByValue()再链式调用comparingByKey()实现频率降序、字典序升序的组合排序。如果你用Gosort.Slice里的比较函数要特别注意相等时的处理否则很容易写反。// 参考解法Java public ListString topKFrequent(String[] words, int k) { MapString, Integer cnt new HashMap(); for (String word : words) { cnt.put(word, cnt.getOrDefault(word, 0) 1); } PriorityQueueString pq new PriorityQueue((a, b) - { int c cnt.get(a).compareTo(cnt.get(b)); return c ! 0 ? c : b.compareTo(a); // 堆内按频率升序频率相同则字典序降序 }); for (String word : cnt.keySet()) { pq.offer(word); if (pq.size() k) pq.poll(); } ListString res new ArrayList(pq); Collections.sort(res, (a, b) - { int c cnt.get(b).compareTo(cnt.get(a)); return c ! 0 ? c : a.compareTo(b); }); return res; }写对这道题的关键在于想清楚堆里最后留下的应该是前K大频率的单词所以堆顶要维护的是当前最小的元素比较器逻辑稍微绕一点就容易出错。建议平时就把这类堆排序的模板练熟考场上才不会慌了阵脚。3.2 第二题图论题题目包装很AI第二题开始上强度了。题目背景包装成了一种语音指令依赖关系的场景给定N个模块模块之间有依赖关系要求判断是否存在循环依赖。这本质上是拓扑排序的经典应用输入是有向图的边集输出是否存在环。这个题的坑不在算法本身而在于输入格式和节点编号规则。题目给的模块编号是从1开始的不是从0开始而且边的关系描述方式不是常见的[a, b]表示a依赖b而是b - a表示b在a之前执行。如果没仔细读题直接套模板很容易建错反向图。我在这个题上就踩了小坑第一次建图建反了跑了两个样例发现不对回头才看清输入说明。# 参考解法Python import sys from collections import deque def has_cycle(n, edges): graph {i: [] for i in range(1, n 1)} indeg {i: 0 for i in range(1, n 1)} for a, b in edges: # a依赖b graph[b].append(a) indeg[a] 1 q deque([i for i in range(1, n 1) if indeg[i] 0]) visited 0 while q: u q.popleft() visited 1 for v in graph[u]: indeg[v] - 1 if indeg[v] 0: q.append(v) return visited ! n拓扑排序的模板要背熟但更重要的是一开始读题时把依赖方向理清楚。建议在草稿纸上先画一个简单的依赖图确认输入边和图的邻接方向一致后再动键盘。这类题目一般数据量不大n在1000以内用O(n^2)的朴素算法也能过但拓扑排序O(NE)的写法更稳妥。3.3 第三题动态规划难度明显拉开梯度第三题是三道编程题里最难的考的是动态规划。题目背景是给定一个数组要求找出满足某种约束条件的最大子序列和。约束条件是选取的两个元素在原数组中的下标差不能小于某个值K。这个约束把它和经典的最大子数组和区别开来处理不好很容易写成O(n^2)超时。正确的思路是用前缀最优动态规划来优化。定义dp[i]表示前i个元素中以第i个元素结尾且满足约束条件的最大子序列和。状态转移时需要从[0, i-K]区间内找到一个最优的前缀状态这个区间查询可以用前缀最大值数组或者线段树来优化。考虑到笔试环境里不要求提交最优解很多人会用O(n^2)的暴力动态规划但是数据范围是10^5量级O(n^2)基本过不了全部用例。这里有一个小技巧题目通常会有部分用例数据量比较小暴力解法能拿一半分。如果你的目标只是通过笔试先把暴力版本写出来拿部分分再考虑优化这个策略更实际。// 参考解法前缀最大值优化 public int maxSubsequenceSum(int[] nums, int k) { int n nums.length; int[] dp new int[n]; int[] preMax new int[n]; int ans Integer.MIN_VALUE; for (int i 0; i n; i) { dp[i] nums[i]; if (i - k 0) { dp[i] Math.max(dp[i], preMax[i - k] nums[i]); } preMax[i] i 0 ? Math.max(preMax[i - 1], dp[i]) : dp[i]; ans Math.max(ans, dp[i]); } return ans; }这类约束条件下的动态规划是科大讯飞笔试算法题的一个明显倾向不直接考裸的背包/最长公共子序列模板而是把经典问题加上一层业务包装或条件限制。所以复习的时候不要死背模板而是要理解状态转移的本质这样遇到变种才能快速做出调整。4. 笔试过程中的操作细节与突发情况处理4.1 在线笔试环境的坑浏览器、摄像头、网络我就读的学校宿舍网络不稳定所以专门在笔试前找了个网速稳定的地方。但即使如此正式笔试开始后还是遇到了一个突发状况系统弹窗提示摄像头检测不到人脸。当时第一反应是摄像头驱动问题检查后发现是浏览器没有授权摄像头权限。在线笔试系统用的是Chrome内核如果之前没给考试网址授予摄像头权限系统就检测不到画面。解决办法是在地址栏左侧点击锁形图标进入网站设置把摄像头权限改为允许然后刷新页面重新进入考试。这里要提醒大家一个非常关键的操作顺序一定要先进入笔试等待页面完成设备检测再处理其他事情。很多在线笔试系统在开考前有设备检测环节检测通过后才能看到试题。如果你等到开考才进系统光设备检测就会耽误好几分钟白白浪费作答时间。如果笔试过程中真的遇到断网或者系统崩溃不要慌。一般情况下在线笔试平台会自动保存答案重新联网后可以继续作答。但你需要第一时间截图或录屏保存现场证据笔试结束后通过邮件联系HR说明情况很多公司会有补考或延长时长的机制。科大讯飞在笔试通知里明确写了异常情况处理邮箱这个是有用的。4.2 代码编辑器的使用体验在线笔试系统内置的代码编辑器功能比较基础支持语法高亮和代码自动缩进但没有代码补全。这对平时习惯了IDE智能提示的同学来说是一个很大的挑战。特别是Java和C这类需要写长类型名的语言没有补全的情况下手写很容易出现拼写错误。我的应对策略是提前在本地把常用算法模板拓扑排序、并查集、二分搜索、DP模板等打熟能闭着眼睛敲出来。笔试时先创建好每个题目的代码文件把包名和类名按题目要求提前写好。编程题通常允许选择语言我选了Python因为Python写起来短调试时间少。如果你平时对某种语言最熟悉就选哪种别为了看起来高级选自己不熟的语言。还有一个细节在线编辑器支持运行测试用例但它的测试数据不完全等于全部评测数据。如果你提交代码后看到部分用例超时或失败不要慌先看能不能优化一下明显的瓶颈。笔试系统每次提交都会记录反复提交但一直不通过会白白消耗时间。遇到错误时先在本地想想逻辑漏洞再运行测试不要盲目重复提交。4.3 时间分配90分钟如何花得值以我的实际体验来看每道编程题平均最多只能花20分钟否则选择题就容易写不完。理想的时间分配模型是时间段任务安排开考第1-25分钟完成所有选择、填空遇到不确定的题目先标记跳过不恋战第25-45分钟主攻编程第一题第二题争取拿到全部分数第45-70分钟主攻第三题先写暴力解保底再尝试优化第70-90分钟回头检查标记的选择题处理剩余问题实际操作下来我完成一张卷子的节奏基本符合这个模型。第三题比较难我在它上面花了接近30分钟最终只过了部分测试用例但前两题都全过整体得分结构还算健康。如果想在算法题上再拿稳一点可以在笔试前把LeetCode Hot 100里的字符串、链表、二叉树、动态规划、图论这几类题都过一遍不需要全刷完但每类题至少要能快速写出基础版本。5. 笔试结束后的复盘与面试衔接交卷之后很多人就彻底放松了但我建议趁着记忆还热乎立刻做一次复盘。笔试结果一般在一到两周内通过邮件通知如果通过紧接着就是面试环节这几天的窗口期非常宝贵。复盘的第一个动作是把三道编程题的思路回忆一遍对照网上同款题目的题解看自己当时的解法是否是正确思路。就算笔试已经结束这个过程对自己算法能力的提升帮助依然很大。我在笔试后回顾第三题时发现自己当时用O(n^2)的暴力解只过了30%的用例后来看了题解才明白前缀最大值优化才是正解这个知识漏洞如果不在面试前补上面试手撕代码大概率还会栽在同类题上。复盘的第二个动作是整理错题笔记。选择题里做错的题、不确定的题都要重新查一遍知识点。科大讯飞的面试环节经常围绕简历项目和基础知识展开笔试中暴露的知识薄弱点往往是面试官最爱追问的方向。我笔试时有一道关于索引失效的选择题做错了面试前专门把联合索引的最左前缀原则从头梳理了一遍后来面试时果然被问到了类似的场景题。笔试备考和面试准备其实是连续的。不要以为笔试完就万事大吉从笔试结束到正式面试通常只有几天到一周的间隔。这段时间内建议把剑指Offer里的高频题重新刷一遍同时整理好自己做过的项目准备一个2-3分钟的自我介绍。科大讯飞的技术面一般有两到三轮每轮都有手撕代码环节题目难度大约在LeetCode Medium水平笔试过程中练出来的手感和代码速度在面试时一样重要。6. 几个容易被忽视的隐性筛选维度聊完题型和技巧再说一个很多人不关注的维度在线笔试的隐性筛选逻辑。科大讯飞这类AI公司笔试不仅仅是筛技术能力也在筛态度和稳定性。比如笔试过程开摄像头全程录制后台会记录切屏次数如果切屏次数超过阈值系统会直接判定作弊。我考试时遵守一个原则只保留考试页面其他所有应用全部关闭。还有一点是你的代码风格。在线笔试系统的评测代码不只是看正确性后台的代码可能会被面试官在面试前翻看。如果在笔试时写出了命名混乱、逻辑结构不清晰的代码即便用例通过了面试官对你的印象也会打折扣。所以笔试时哪怕时间紧张也要保持变量命名有意义函数拆分合理这是一个职业习惯的问题。我听说过一个真实的例子有同学笔试三道题全过但面试官在拿到他笔试代码后发现他把所有逻辑全堆在main函数里循环套循环还嵌套了三层面试官当场就对他的代码质量产生了质疑。所以笔试时的代码规范一点不比正确性次要。另外如果你投递的是A研部门或核心业务部门笔试成绩在面试中也会有参考作用。笔试分数高在面试综合评定里是一个加分项。有些部门HR在约面时还会参考笔试薄弱点在面试中重点考察你的基础是否扎实。所以笔试备考质量直接影响后续面试节奏值得投入足够精力。科大讯飞2024年秋招研发岗笔试给我的整体感觉是难度中等偏上算法题的区分度明显基础知识覆盖全面。和我预想中AI公司会考机器学习基础不同后端研发岗的笔试更偏传统计算机基础算法、数据结构、网络、操作系统才是重心。如果有志于投递讯飞研发岗的同学重点把这两块打牢笔试通过概率会大很多。考完收到面试通知的那一刻我才真正意识到笔试只是这个漫长招聘季的第一道关后续还有更激烈的竞争在等着自己。但至少这一次我手里的牌已经打满了。
返回列表