资讯动态

商汤科技校招笔试题型全解析:多岗位合并出题与备考指南

发布时间:2026/8/29 16:52:56 来源:尧图企业网站定制
2018年秋天我在牛客网上点开商汤科技校招笔试第一场的时候怎么也没想到这份卷子后来会成为我总结面试经验时翻看最多的材料之一。那会儿AI公司笔试普遍刚起步各家都在摸索怎么用一场在线考试筛出基础扎实、工程能力过硬、又懂算法原理的人商汤这份卷子几乎是当时多岗位合并出题的典型代表——一张卷子同时覆盖C /算法开发、大数据、后端、运维、测试、数据挖掘六个方向考察逻辑和出题风格都很有参考价值。虽然过去几年了但如果你正在准备AI公司或大厂技术岗的校招笔试这份卷子的题型结构和考察思路依然值得拿出来逐题拆一拆。很多同学拿到这种多岗位合并卷的第一反应是懵岗位这么多到底按哪个方向准备实际上商汤这种出题方式有一个明显的底层逻辑——所有岗位都要考数学、C 语言基础和数据结构然后再按方向加考专业题。也就是说第一场笔试卷子的核心不是筛选你会不会某个具体框架而是看你在计算机基础、算法思维和逻辑推导这些底子上过不过关。这篇文章就按我当时真实的做题顺序和复盘笔记把这份卷子的考察结构、典型题目类型、每个方向的准备重点从头到尾拆一遍。1. 2018年商汤多岗位合并笔试的出题逻辑与考察结构先说一个判断2018年那批AI独角兽的笔试题商汤出得不算最难的但一定是最散的。散到什么程度七个岗位方向共用一张卷子的前半部分后半部分才会进入岗位相关的专业题。这种结构对候选人有一个隐性要求——基础能力必须全面不能有明显短板。我当时参加的这场笔试整体结构大致分为三个部分模块考察内容题量占比覆盖岗位通用基础数据结构、算法、C 语言、数学约40%全部岗位方向专业机器学习/深度学习、大数据、后端、运维、测试约40%对应岗位编程实战手写代码题约20%全部岗位这个结构放在今天看依然很典型。通用基础部分考察的是所有技术岗必须具备的计算机核心知识而方向专业部分则是各岗位的分水岭。值得注意的是商汤作为AI公司算法开发岗和C 开发岗共用的是同一套基础题但算法开发岗额外多了深度学习原理题C 开发岗则更侧重内存管理和底层机制——这个细节说明商汤对算法岗的定位不是会调包就行而是要求候选人既有理论深度又有扎实的工程实现能力。笔试的时间安排也值得说一说。整场考试大概两个小时选择题约40道编程题3道。如果按部就班从头做到尾大概率会在编程题上时间不够。我当时比较幸运提前了解过商汤笔试的风格所以采取了先做编程题再回头做选择题的策略。为什么因为编程题分值占比虽然只有20%但一道题的区分度远高于十道选择题而且先做编程题能在精神最好的时候把思路理清。这个策略在后面会详细展开。还有一个容易被忽略的细节商汤的在线笔试系统会开启摄像头监控考试期间不允许切出浏览器编程题的环境是牛客网的在线OJ支持C /Java/Python三种语言。这意味着如果你平时习惯用本地IDE调试考前最好先熟悉一下牛客网这种不带自动补全的裸编辑器环境不然光是手写循环和头文件就可能浪费不少时间。2. 通用基础选择题数据结构、C 语言与数学功底的真实占比进入选择题之后第一个感受就是——题量大、覆盖广、但深度不夸张。和很多大厂不同商汤通用基础部分的选择题没有太多偏题怪题考的基本都是你应该会但未必完全掌握的知识点。这一部分如果基础扎实拿满分不是没有可能。2.1 数据结构考点链表、二叉树、栈与队列的实际题目形态数据结构在通用基础选择题里的占比最高大概有10到12道。当时印象比较深的几类题目包括链表的逆转、删除节点的边界处理比如删除单链表中倒数第k个节点要求只遍历一遍二叉树的遍历序列还原比如已知前序和中序遍历序列求后序遍历结果栈和队列的混合应用比如用两个栈实现队列的出队复杂度分析哈希表的冲突处理方法与查找效率对比其中有一道题让我印象特别深刻给出一棵完全二叉树的数组存储方式要求计算某个节点父节点和左右孩子节点的下标。这道题和LeetCode的堆排序题如出一辙但很多人第一次接触时会在数组下标从0开始还是从1开始这个细节上栽跟头。我当时在这道题上多花了30秒确认下标规则因为数组从0开始时节点i的左孩子下标是2i1而从1开始时是2i——这恰好是出题人最容易埋的坑。2.2 C 语言必考点指针、内存管理、虚函数与const机制C 方向的选择题考得非常商汤。为什么这么说因为商汤的核心产品是计算机视觉SDK和AI平台底层大量使用C 做高性能计算和内存管理所以笔试题对C 的考察偏向底层机制和工程陷阱而不是语法糖。我复盘了一下高频考点集中在几个方向指针与引用的区别指针数组与数组指针的混淆new/delete与malloc/free的异同内存泄漏的成因虚函数表vtable的布局、多重继承下的菱形继承问题const修饰变量、指针、成员函数时含义的层层递进智能指针unique_ptr、shared_ptr的底层引用计数机制构造函数、析构函数、拷贝构造在临时对象传递时的调用次数有一道题当时难住了不少人——类中定义了虚函数且该类包含一个int成员和一个double成员求sizeof该类的值。这道题考察的是内存对齐和虚函数表指针的综合知识因为虚函数会让对象开头多一个虚表指针64位系统下是8字节int通常占4字节、double占8字节在默认8字节对齐下整个对象的大小是24字节8字节对齐后。如果没考虑到虚表指针很容易算出16字节的错误答案。此外笔试中还出现了关于重叠内存的memcpy与memmove的题目这属于Windows底层开发和高性能计算的高频坑。比如下面这行代码char *p (char *)malloc(32); strcpy(p, hello world); memmove(p, p 3, 5); // 重叠拷贝题目问的是执行后p指向的内容是什么。如果不理解memmove为什么能处理重叠地址答起来会很吃力但实际手推一遍就明白了。2.3 数学与概率为什么AI公司笔试离不开这些商汤作为算法驱动的AI公司在通用基础题里塞了一道概率题是意料之中的事情。这类题目不需要太多高等数学功底但概率直觉必须在线。当时让我印象最深的是这样一题一个袋子里有3个红球和5个蓝球每次随机取出一个球不放回问第二次取到红球的概率是多少很多人第一反应是条件概率、要用贝叶斯公式但其实这道题考的是基本的全概率公式。由于第一次取球可能是红也可能是蓝所以第二次取到红球的总概率就是取红球的总数除以球的总数依然是3/8。抽签的先后顺序不影响最终概率这在算法面试中是一个非常重要的直觉。当时和几个同学对答案还真有人选错了。线性代数的考察相对少一些但这几年开始逐渐增加。2018年当时考了一道矩阵乘法的计算题要求估算两个常见矩阵乘法的复杂度算是入门级。但可以预测的是如今再考的话大概率会加入特征值分解、SVD奇异值分解这类和机器学习PCA直接相关的内容。3. 编程实战题复盘字符串逆序、链表操作与动态规划商汤这场笔试的3道编程题难度阶梯非常分明——一道简单、一道中等、一道偏难整体上比LeetCode的Easy/Medium难度稍高一点但不会出现Hard级别的压轴题。这种设计意图很明显先确保你能写对基础题再用中等题考察代码质量最后用难题区分高分段。3.1 第一题字符串逆序输出的边界与陷阱第一道编程题是最经典的字符串逆序输出。输入一行字符串要求按单词逆序输出。也就是说I love coding要输出成coding love I而不是把整个字符串直接翻转成gnidoc evol I。这道题对于有一定基础的同学来说不难但它真正考察的是边界条件的处理能力具体包括如何处理字符串中间有多个连续空格的情况如何处理字符串首尾有多余空格的情况如何处理空字符串和只有空格的字符串我当时用的是C 先按空格split到vector再逆序拼接的写法这样最简单也不容易出错。但如果用C语言的话就得先翻转整个字符串再逐单词翻转这时候对指针边界的把握就更重要了。这种出题思路和LeetCode上的Reverse Words in a String几乎一模一样所以我建议准备商汤这类公司笔试时先刷一遍LeetCode的字符串类题目性价比极高。3.2 第二题链表中环的入口节点快慢指针的数学原理第二道编程题考察的是链表操作——判断一个单链表中是否存在环如果存在则返回环的入口节点。这道题是链表题里的经典老题解法也很固定快慢指针。快指针每次走两步慢指针每次走一步两者如果相遇则说明链表有环。但问题是怎么返回环的入口节点我当时在考场上推导了一遍这个数学原理设链表头到环入口的距离为a入口到相遇点的距离为b环的长度为c。慢指针走了ab步快指针走了2(ab)步快指针多走的部分就是环的整数倍即ab n*c。再设相遇点继续走到入口的距离为c-b所以头节点走到入口的距离a与相遇点走到入口的距离有什么关系呢慢慢推就会发现只要把慢指针拉回链表头快慢指针同时以一步的速度走它们一定会在环入口相遇。这个结论虽然常见但推导过程其实有讲究笔试时不一定要默写结论但最好能用自己的语言解释清楚。3.3 第三题动态规划进阶从最长公共子序列到编辑距离第三道编程题考的是动态规划当时的具体题目是求两个字符串的最长公共子序列LCS长度。def longest_common_subsequence(text1, text2): m, n len(text1), len(text2) dp [[0] * (n 1) for _ in range(m 1)] for i in range(1, m 1): for j in range(1, n 1): if text1[i - 1] text2[j - 1]: dp[i][j] dp[i - 1][j - 1] 1 else: dp[i][j] max(dp[i - 1][j], dp[i][j - 1]) return dp[m][n]上面这段代码是标准的DP表格实现如果把空间优化成一维数组就需要额外用一个变量记录左上角的值这也是常见的进阶考点。其实最长公共子序列和编辑距离Edit Distance共用同一套DP框架如果能把状态转移方程推导过程彻底弄清楚这类题目基本可以秒杀。我个人的建议是别背模板试着从子问题是什么、状态怎么转移的角度推导一遍这样换个题目也不怕。4. 算法开发与数据挖掘方向深度学习笔试的经典考点如果你投的岗位是算法开发、数据挖掘那么过了通用基础题之后会进入一个有AI公司特色的专业题环节。这个环节的考察重点是你对机器学习基本概念的理解深度、深度学习中反向传播的具体推导能力以及特征工程和模型评估的实操经验。4.1 机器学习基础偏差方差困境、过拟合与正则化2018年商汤算法岗选择题中有不少关于机器学习基础概念的题目这些题目现在回头看依然是高频考点偏差与方差的权衡Bias-Variance TradeoffL1正则化为什么能产生稀疏解L2为什么不能过拟合的常见原因与应对手段增加数据、降低模型复杂度、Dropout、早停交叉验证的几种方式与适用场景K-Fold、留一法、Stratified K-Fold其中有一道多选题是这样的以下哪些方法可以缓解过拟合选项包括增加训练数据、增大模型参数、添加L2正则化、使用Dropout、降低学习率。正确答案是增加训练数据、添加L2正则化和使用Dropout。但当时有不少同学把降低学习率也选上了这就是对概念理解不够透彻的表现——降低学习率只是让训练更稳定它本身阻止不了模型过多拟合训练数据中的噪声所以算不上正则化手段。4.2 深度学习必考推导Softmax交叉熵损失反向传播如果只是准备选择题深度学习部分其实还好但商汤这种AI公司笔试选择题通过之后还可能有在线笔试中的简答题或者是面试时的现场手推环节。我当时在备战时反复推导过Softmax 交叉熵的反向传播结果笔试和面试真的都用上了。Softmax函数的形式和参数如下如果某个样本的logits输出为z1, z2, ..., zk则Softmax输出为p_i exp(z_i) / Σexp(z_j)。交叉熵损失为L -log(p_y)其中y是正确标签对应的类别。那么这个损失对logits向量第i个分量的偏导是什么推导结果是如果i是正确标签对应的位置偏导是p_i - 1如果i不是正确标签对应的位置偏导就是p_i这个结果极其优雅也难怪各大公司都爱考——因为它一石二鸟既考察了链式法则的数学基本功又考察了Softmax与交叉熵搭配时梯度化简的直觉。笔试题中偶尔会出现请写出Softmax交叉熵损失对z_i的偏导这种简答题如果你能现场推导而不是背答案会加分不少。4.3 数据挖掘方向特征工程与海量数据经典题数据挖掘方向的题目更多偏向特征处理和经典机器学习。我当时遇到的这类题目中有几个值得单独拎出来的连续特征离散化的好处增强鲁棒性、降低过拟合风险、便于逻辑回归等线性模型表达非线性关系类别特征的编码方式One-Hot、Label Encoding、Frequency Encoding各自的适用场景如何处理缺失值删除、均值/中位数填充、模型预测填充、单独标记缺失和业务结合的场景题比如如果CTR预测样本中正样本占比只有1%应该如何处理——这考察的就是数据不平衡问题手段包括欠采样、过采样、调整损失函数权重、使用AUC等对不平衡不敏感的评估指标。这里有一个很多同学容易忽略的考点线下评估与线上效果不一致时怎么排查。往细了说可能是训练集和测试集特征分布不一致、特征穿越label leakage、采样逻辑不同、离线评估指标选择不当等。这类问题在笔试中偶尔以简答题出现在面试中出现的频率更高。准备时最好准备一个自己完整做过的特征工程模型评估案例能讲出我做了什么、为什么这么做、效果如何、踩过什么坑非常加分。5. 大数据开发方向的题源Hadoop生态、Spark原理与TopK问题大数据开发方向的题目在商汤这场笔试中占比不高大概5到8道但很有代表性。商汤作为AI公司它的数据平台要支撑海量图片、视频数据的存储与计算所以大数据题目的考察重点非常明确基础组件原理 分布式思维 海量数据处理经典方案。5.1 Hadoop体系考点HDFS读写机制、MapReduce执行流程当时选择题里直接考了HDFS的块大小默认值64MB/128MB以及Block副本机制——为什么要存3份副本这涉及机架感知Rack Awareness的基本原理第一份副本放在客户端所在节点第二份放在同机架的不同节点第三份放在不同机架目的是兼顾写入性能和容灾能力。MapReduce的考点则集中在Shuffle阶段的具体过程Map端输出后如何分区Partition、排序Sort、合并CombinerReduce端如何拉取对应分区的数据。这种题如果只是背概念很容易漏掉细节建议动手跑一个简单的WordCount任务打开日志看每个阶段的状态流转印象会深很多。5.2 Spark与MapReduce的对比为什么能快那么多Spark相关题目更侧重理解RDD的两种操作算子Transformation和Action、窄依赖与宽依赖的区别、Spark为什么比MapReduce快基于内存计算、DAG优化、避免反复落盘。这里有一个商汤笔试很爱考的知识点哪些操作会触发Shuffle答案包括groupByKey、reduceByKey、distinct、join非广播场景等。而map、filter、union这些窄依赖操作不会触发Shuffle。我当时就在一道判断题上栽了跟头——题目说Spark的map操作会触发Shuffle这显然是错误的但如果不熟悉宽窄依赖的概念很容易被带偏。5.3 海量数据处理经典题1亿个整数找Top100最后一道大数据方向的题目是经典的海量数据TopK问题一亿个整数找最大的100个内存不足以全量排序怎么办标准解法是维护一个容量为100的小顶堆遍历所有数据如果当前元素比堆顶大就替换堆顶并调整堆。时间复杂度是O(n log k)空间复杂度是O(k)而k100非常小。这个问题还有一个变体如果数据是分布式存储在多个节点上的可以先在每个节点上求局部Top100再对所有局部Top100做全局归并。这在思路上就是MapReduce里的Map阶段求局部TopKReduce阶段求全局TopK。这种题目考察的核心不是你会不会调Spark API而是你有没有分布式计算思维。准备大数据方向笔试时建议把TopK、中位数、去重计数基于BitMap/BloomFilter这类海量数据经典题都整理一遍基本上到哪儿都能用上。6. 后端、运维与测试方向工程能力与系统思维的较量如果你投的是后端开发、运维开发或测试开发那么在专业题环节看到的就是另一套东西了网络协议、操作系统、数据库、Linux命令、测试用例设计。这些题目更偏工程实践和算法岗的数学推导路线形成鲜明对比。6.1 后端必备TCP三次握手与四次挥手、HTTP与数据库索引后端方向的选择题逃不开计算机网络的核心考点。当时考了关于TCP的这样一个问题TCP连接建立为什么需要三次握手而不是两次答案是三次握手是为了防止失效的连接请求报文段突然又传到服务器端从而产生错误连接。简单来说如果只有两次握手客户端发出的SYN由于网络延迟很久才到达服务器服务器会认为这是一个新连接并发送确认此时客户端已经放弃了这个连接——两次握手就会造成服务器资源的浪费和连接混乱。数据库索引的考点也很典型覆盖索引的底层原理——一个索引同时包含查询字段和返回字段这样查询时不需要回表减少了磁盘I/O。笔试题往往给一个表单和多条查询语句问你哪条查询能命中覆盖索引。这需要你理解B树的结构、联合索引的最左前缀原则以及回表的判断逻辑。建议准备时手画一棵B树把索引叶子节点存的是什么这件事彻底搞清楚。6.2 运维必考Linux进程/内存管理命令和系统排查思路运维方向的考题集中在Linux操作系统基础。比如ps aux和ps -ef的区别top命令里的load average三位数字分别代表什么free命令行里buff/cache和available的区别查看端口占用用什么命令netstat -tlnp或ss -tlnp如何统计日志文件中出现次数最多的前10个IP这类题目不偏不怪只要你平时真的在服务器上排查过问题基本都能答上来。但如果只是背命令参数很容易把ss和netstat的用法混淆。我建议准备运维岗的同学把Linux命令按进程管理、内存管理、磁盘管理、网络管理、文本处理五个类别整理一遍每个类别记三到五个最常用的命令及参数效率最高。6.3 测试开发视角设计测试用例的经典场景题测试开发方向的笔试通常会有这样一道场景题给你一个登录页面包含用户名和密码输入框以及登录按钮请设计测试用例。这道题考察的点非常全从功能测试到异常测试、从安全性测试到性能测试都有发挥空间。我当时在答题时把测试用例按层次写了四层测试类型测试用例示例正常功能正确的用户名和密码登录成功并跳转到首页输入边界用户名/密码为空、超长输入1000字符、特殊字符异常处理密码错误提示是否友好、连续输错5次是否锁定安全与性能密码是否明文传输、注入攻击是否被拦截、多人同时登录的响应时间注意这种题目是没有标准答案的关键是看你的测试思维是不是系统化、有没有边界意识和安全敏感度。商汤这类AI公司有大量面向开发者和企业用户的平台测试开发岗的核心能力就是能设计出覆盖各种真实场景的测试用例。7. 笔试复盘与准备路径当时踩过的坑和优化后的备考顺序考完商汤这场笔试之后我给自己做了一次完整复盘发现有几个坑是我当时的临场表现和准备方式里可以明显优化的。这些经验不只是对商汤这场笔试有用对后来参加其他AI公司和大厂的校招笔试也适用。7.1 踩坑实录时间分配、语言选型与不熟悉OJ环境第一个坑是选择题卡时间太久。当时遇到一道关于C 虚函数表布局的选择题我忽然不确定虚函数表指针放在所有成员之前还是之后结果在这道题上纠结了将近5分钟。这本来是送分的基础题但由于我对C 的内存布局细节掌握不够牢固白白浪费了时间。复盘之后我给自己定了一个规矩选择题单题超过90秒先标记跳过绝不恋战。因为商汤的笔试题量大、分值分散为一道两分的选择题牺牲后面一道20分的编程题太亏了。第二个坑是编程题的输入输出处理。我平时在LeetCode上做题时习惯了函数式编程只需要实现核心逻辑即可。而商汤用的是牛客网OJ需要自己处理stdin/stdout的格式。我第一道编程题就浪费了5分钟在如何按行读取包含空格的字符串上。正确的快速写法是#include iostream #include sstream #include string using namespace std; int main() { string line; while (getline(cin, line)) { // 读入一整行 stringstream ss(line); string word; while (ss word) { // 按空格拆分单词 } } return 0; }这段代码里值得一提的几个细节是第一getline能读取含空格的完整行而不被空格截断第二stringstream可以用运算符自动跳过空格正好满足按单词处理的需求第三while循环处理多行输入时逻辑可以保持简洁。如果考前不熟悉这类输入输出写法笔试现场很容易手忙脚乱。第三个坑是语言选型摇摆不定。我本人主攻C 和Python但笔试中有一个编程题我犹豫了——动态规划那道题用Python写更简洁但商汤在线OJ对Python版本的兼容性我拿不准。后来我确立了一个原则编程题第一选熟悉度和正确率第二选语言本身。准备笔试时每种常用语言至少有一道完整的OJ输入输出示例明确哪个场景用哪个语言最顺手不要到考场上才临时决定。7.2 有效的备考路径从知识清单到模拟训练基于这次笔试的复盘我后来总结出了一套更适合自己的备考顺序分享出来供参考第一周按方向梳理知识点清单。如果你是算法岗就把机器学习基础、深度学习基础、C 基础、数据结构列个清单如果是大数据岗就把Hadoop/HDFS/MapReduce/Spark/常见海量数据处理题列清楚。目标是把考试范围具象化不要漫无目的地刷题。第二周专项突破最薄弱部分。用牛客网或LeetCode的数据结构、算法题组做专项训练每天固定做3到5道题。重点不是刷数量而是每道题都能讲清楚思路、复杂度、边界条件。我当时的薄弱环节是动态规划所以连续一周每天做4道DP题从LCS到编辑距离到背包问题最后再做这类题基本不需要在草稿纸上推状态转移了。第三周限时模拟整套笔试。在牛客网或赛码网找一间安静的教室严格按照考试时间做一套完整试卷。模拟时开启免打扰模式不查资料还原真实考试状态。我当时这样模拟了3套最大的收获是适应了与时间赛跑的压力考场上不会因为题目多而出现焦虑性失误。考前两天只复习错题笔记和手推公式。把之前做错的选择题、没写出来的编程题、推导不流畅的机器学习公式重新过一遍。考前不要再接触完全没见过的难题这样反而会打击信心。这里有一个心态上的建议商汤这类公司的笔试其实不是让你拿到满分的而是让你尽量在区分度高的题目上拿分。遇到不会做的题目很正常关键是不要把时间无谓地耗在没思路的题上。我见过不少同学在第三道DP题上卡了20分钟结果第一、第二道编程题反而没时间仔细检查最后提交的代码里还有低级错误。合理的时间分配是三道编程题按照难度递增的顺序分配约15分钟、20分钟、25分钟留出15分钟做检查和回头补选择题。8. 后续扩展这份卷子对当今AI与科技公司校招的参考价值最后说一点个人体会。虽然这份卷子是2018年的但在我看来它的考察框架放在今天依然不过时——甚至可以说现在的AI公司笔试本质上还是在用类似的方式筛选候选人。一个明显的变化是深度学习的比重更高了。2018年商汤笔试里还会考Softmax和交叉熵的推导放在现在的AI算法岗笔试题里这已经是默认掌握的级别更多题目开始偏向Transformer结构、注意力机制、分布式训练、模型量化部署这些实际应用层面。如果你是现在准备商汤这类AI公司的算法岗笔试除了传统的机器学习基石和深度学习基础还建议补充当前大模型相关的技术栈Tokenization、Positional Encoding、KV Cache、LoRA微调、多模态对齐等。另一个变化是纯工程岗位的竞争越来越看重项目实战。2018年那份卷子里的选择题只考了命令和概念现在的后端/运维/测试岗位笔试题往往会给出一个线上故障场景要求你从日志、监控、调用链中定位问题原因。这种题目靠背题是答不出来的需要你平时真的有排查故障的实战经验。如果你还是在校生建议尽早参与真实的开源项目或自己搭建一套完整的个人项目比如基于Node.js或Spring Boot的前后端分离应用把环境搭建、编码开发、测试部署、上线监控整个流程走一遍。如果现在让我对准备第一场商汤校招笔试的学弟学妹说一句最实在的话那就是别把注意力放在猜题押题上把计算机基础打扎实把算法题的正确率提上去比什么都重要。商汤这场笔试之所以值得回顾不是因为它有多难而是因为它用一份卷子清晰地告诉你——在任何AI公司做技术岗数据结构、C 语言、数学功底、算法思维这四样东西是永远绕不开的基本功。把基本功练好不管笔试出什么题你都有底气。

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

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

免费获取报价