当前位置: 首页 > news >正文

商汤校招笔试复盘:AI公司笔试考点与备考策略全解析

2018年我参加了商汤科技校招笔试第二场,投递的是后端方向,但卷子拿在手里一翻:C/C++、算法开发、大数据、数据挖掘、运维、测试的题目全在里面。很多同学考完回到群里第一句话都是"这考的是同一个岗位吗"。其实这场笔试很典型,它不会只考你投递的那个方向,而是把计算机基础、数据结构、算法、机器学习基础和工程经验全部压在两个小时里。距离现在有些年头了,但当年这套笔试的考点结构、难度层次和坑点,对今天准备AI公司校招笔试的同学依然很有参考价值。我结合自己的回忆和后来复盘整理的笔记,把这场的考点、答题策略和备考思路完整梳理一遍,适合正在准备算法、后端、大数据、运维或测试方向校招的同学参考。

先说结论:这场笔试的考点可以大致分成四类——C/C++与算法题、数据挖掘与机器学习基础题、大数据与分布式原理题、后端/运维/测试的工程基础题。不同岗位的侧重点不同,但底层要求是一致的:代码能力过关、基础概念扎实、能在有限时间内做出取舍。下面我按实际做题的顺序和优先级逐块拆解。

1. 一张卷子筛七个岗位:命题逻辑其实很清晰

1.1 岗位标签不同,公共考点高度重合

笔试通知上写了C、算法开发、大数据、后端、运维、测试、数据挖掘七个方向,看起来很分散,但商汤这类AI公司有天然的命题逻辑:不管什么岗位,都需要候选人具备基本的编程能力、数据处理能力和系统认知。所以整张卷子虽然分模块,公共考点却异常集中。

选择题部分几乎绕不开这几类:C/C++语言细节、数据结构与算法复杂度分析、操作系统进程线程、网络协议基础、数据库SQL、概率统计与机器学习基础。这些在七个岗位里都会出现,只是权重不同。比如C岗和算法开发岗对C++语言细节考察更深,大数据和数据挖掘岗会多出分布式原理和特征工程的题,运维岗在Linux命令和网络排查上更细,测试岗则集中考用例设计和边界分析。

我当时的判断是:试卷命题人是按"统一命题 + 岗位侧重组卷"的方式出题的,不是每个岗位单独出一套完全不同的题。这意味着你哪怕只复习自己投递的那个方向,公共基础部分也会占掉至少一半的分数。所以备考重点不是死磕某一门,而是先把公共底子打牢。

1.2 为什么AI公司这么执着于C/C++

很多同学不理解:商汤是做计算机视觉和AI平台的,为什么笔试要考C/C++?其实很简单,AI框架的底层推理引擎、训练框架的算子实现、数据预处理的管线,大部分是用C++写的,某些性能关键路径甚至直接写CUDA。后端服务虽然可以用Python/Java写业务逻辑,但上层框架调用的底层库就是C++。所以C/C++是AI公司技术栈的地基。

我当时投后端,也拿到了一张需要写C++的卷子,没有任何"因为投后端就可以绕开C++"的空间。建议不管投哪个方向,C++的基础语法、指针与内存管理、STL容器、类与继承、智能指针这些内容必须过一遍。这对后端、算法、数据岗位都通用。

2. C/C++与算法题:笔试里最硬的一块骨头

2.1 数据结构与算法的高频考点分布

这一部分我回忆里占比很重,至少有30%到40%的分数分布在算法题和数据结构选择题上。高频考点大致是:链表相关操作(反转、环检测、合并有序链表)、二叉树遍历与重建、动态规划(背包、最长递增子序列、编辑距离)、字符串处理(逆序、匹配、最长回文子串)、排序与二分查找变体、哈希表应用。

商汤笔试里比较有区分度的是字符串处理与模拟题。因为视觉AI公司处理大量非结构化数据,字符串操作是基础中的基础。像"字符串逆序输出"这种经典题,虽然简单,但笔试里会包装成"字符串按单词反转,且不改变单词内部字符顺序"之类,考察对边界情况的处理。

我印象里有一道类似的题目分值不小,当时要求写完整函数而不是写伪代码,还要注意原地操作和空间复杂度。这类题如果平时刷过LeetCode,基本拿到就能写,所以刷题量在这一轮里是硬通货。

2.2 语言细节比LeetCode更刁钻

LeetCode刷习惯了,最怕的是笔试选择题里的C++细节题。商汤的C++题目不考"这份代码输出什么"这种简单题,而是考为什么。比如拷贝构造函数和赋值运算符重载在什么场景下会被隐式调用、浅拷贝和深拷贝在容器中会引发什么问题、虚函数表在继承链上如何分布、智能指针的引用计数是否线程安全。

有一道题我一直记得,问的是"下面哪种情况下拷贝构造函数会被调用",选项里有函数传参、函数返回对象、直接用另一个对象初始化、赋值操作。正确答案是前三个,赋值操作调用的是赋值运算符重载而不是拷贝构造。这类题如果不把C++对象模型搞透,很容易栽。

还有一类是内存管理题,问野指针、悬空指针、内存泄漏的成因和排查方法。这些在笔试里是送分题,但很多刷题刷得多、工程经验少的同学反而答不准确。我的建议是笔试前系统过一遍C++内存模型和对象生命周期,比多刷20道LeetCode更划算。

2.3 手写代码题的"考场边界"

笔试的编程题和LeetCode有一个很大区别:考试系统不会给你友好的编译器提示,边界条件错了就是错了。我参加的那场笔试用的是在线OJ系统,代码写完提交直接判分,用例跑不过就是零分,没有"部分通过"的梯度(部分系统可能按例给分,但不确定的最好事前确认)。

所以手写代码时,边界条件必须自己提前想清楚:数组为空、链表只有一个节点、目标值不存在、字符串里有空格、整数溢出。我当时的策略是:先写暴力解保证拿分,再在当前代码上优化,而不是一上来就写最优解。因为在线OJ的重点是AC,不是炫技。暴力解能过部分用例,比一个写不完的最优解强得多。

另外注意编译环境。当时考场的编译器版本比较老,C++11的特性部分支持,autounordered_map这些能用,但C++17的结构化绑定就别想了。考前最好用和在线OJ一致的编译器版本跑一跑,避免出现在本地跑得好好的、考场编译不过的情况。

3. 数据挖掘与大数据方向的题目:考的不是调参

3.1 概率统计和机器学习基础题复盘

数据挖掘和算法岗位的公共部分,集中在概率统计、机器学习和基础数学上。商汤作为AI公司,这部分很看重,尤其是概率题,几乎年年有。比如:朴素贝叶斯分类器中的条件概率计算、贝叶斯公式应用题(先验概率加观测结果求后验概率)、期望与方差的计算、常见分布(正态、伯努利、泊松)的性质。

我考场上遇到了一道贝叶斯公式的题,给了一个分类场景的混淆矩阵,要求计算精确率和召回率,再结合先验概率算后验。这道题本身不难,但时间紧容易慌,平时如果不熟悉"精确率、召回率、F1、ROC"这些评估指标的公式和实际含义,很容易在选项里绕晕。

机器学习基础选择题的范围我整理了大概:监督学习与无监督学习的区别、过拟合与欠拟合的成因和应对方法(正则化、交叉验证、数据增强)、损失函数的选择与梯度下降的关系、KNN的K值选择、决策树的分裂准则(信息增益、基尼指数)、SVM的核函数。这类题不深,但覆盖面广,考前把常见算法的原理过一遍很有必要。

3.2 SQL与特征工程题:容易被低估的实战项

数据挖掘的笔试里偶尔会穿插SQL题,比如经典的学生选课表查询:找出所有选了某两门课的学生、统计每门课的选课人数、用窗口函数算排名。商汤那场笔试的SQL题难度不高,考的是基本的JOIN、GROUP BY、子查询,以及窗口函数如ROW_NUMBER()、RANK()的用法。

如果你投的是大数据或数据挖掘岗位,SQL几乎是必考的。这里有个容易被低估的点:很多人会写单表查询,但一到多表JOIN和子查询就容易卡壳。建议把"三张表以内、带聚合和条件过滤"的SQL题刷熟,窗口函数单独练一遍。笔试界面不支持本地调试,SQL写得对不对全凭经验,所以考前尽量在本地用真实数据库练,别干看题目。

特征工程的题也有,我记得给了几个特征,问哪些属于类别特征、哪些需要归一化、缺失值用什么方式处理比较好。这题考的是工程经验,不是在书本上能背到的。基本共识:数值型特征通常需要归一化或标准化;类别型特征用one-hot或标签编码;缺失值不多时可以用众数/中位数填充,缺失多时可以考虑单独作为一类。

3.3 大数据组件与分布式原理:从MapReduce到Spark

大数据方向的题,比想象中更偏向"原理理解"而不是"框架API记忆"。比如MapReduce的shuffle过程、数据倾斜的解决方案、HDFS的读写流程、Spark RDD的依赖关系与血缘、宽窄依赖的区别、checkpoint的作用。这些题的核心是用一种组件问分布式系统里最本质的思想:数据分片、并行计算、容错、数据本地性。

商汤笔试的大数据题量不算特别大,但每一道都问得比较深。比如"Spark中宽依赖和窄依赖的区别"这道题,很多人答得出宽依赖是多个子RDD分区依赖同一个父RDD分区、窄依赖是每个父RDD分区最多被一个子RDD分区使用,但要再追问"宽依赖为什么会导致stage划分、为什么会产生shuffle",就容易卡壳。所以复习时不要只记结论,要把结论背后的原理链条打通。

大数据常规考点还有:HBase的RowKey设计原则、Kafka的消息可靠性保证、Zookeeper在分布式协调中的作用、数据仓库分层(ODS/DWD/DWS/ADS)的设计思路。这些内容在"大数据面试题"这个热搜词里被反复提及,说明大家普遍觉得不好准备。我觉得关键是建立一个完整的分布式系统认知框架,再往框架里填组件细节,而不是一个组件一个组件孤立地背。

4. 后端/运维/测试方向:看似送分实则容易翻车的考点

4.1 网络协议与Linux命令:必须拿满分的模块

后端、运维、测试方向有一块公共内容,就是网络和操作系统基础。TCP三次握手和四次挥手、TCP与UDP的区别、HTTP/HTTPS的握手过程和状态码含义、DNS解析过程,这些基本必考。商汤笔试在这方面没有出太偏的题,都是经典中的经典,但正因为经典,很多人一眼瞄过去以为会,真正做起来才发现细节记混了。

我印象比较深的是HTTP状态码的题,问"301和302的区别""403和404的区别""500和502的区别",选项里混着一些比较冷门的状态码。这类题没有技巧,靠的就是准确的记忆。建议把常见的1xx到5xx状态码完整过一遍,尤其要分清301、302、307、308这四个重定向状态码在语义上的差别。

Linux命令也是必考项。运维方向会更细,比如查找文件用什么命令、查看端口占用用什么命令、查看进程用什么命令、df和du的差别、grep/awk/sed的用法。这里我提醒一句:这些命令在真实工作中和笔试里完全是两回事。笔试考的是"选项里哪个命令能实现XX功能",你必须准确知道每个命令的细节,不能靠猜。考前把常用的文件操作、网络排查、进程管理、磁盘管理命令过一遍,性价比很高。

4.2 数据库索引与事务:后端必拿分项

后端岗位的笔试里,数据库占比不低。高频考点是:索引失效的场景(最左前缀原则、隐式类型转换、like以%开头)、聚集索引和非聚集索引的区别、事务的ACID四特性、四种隔离级别以及各自能解决什么问题(脏读、不可重复读、幻读)、MVCC机制。

我记得有一道题给了几条SQL,问哪些会走索引、哪些不会。这种题很容易错,因为"会不会走索引"取决于执行计划,跟数据分布和优化器有关,笔试只能按“最典型的情况”来答。比如WHERE name LIKE '%abc%'这种前模糊匹配,通常不会走索引,这个结论要记住。但实际工作中,如果数据量特别小,MySQL可能全表扫描比走索引还快,优化器会选择不走索引。笔试看的是通用结论,别拿个例较真。

事务隔离级别的题,我建议用表格梳理一遍:

隔离级别脏读不可重复读幻读
READ UNCOMMITTED可能可能可能
READ COMMITTED不会可能可能
REPEATABLE READ不会不会可能(InnoDB下可避免)
SERIALIZABLE不会不会不会

MySQL InnoDB引擎的默认隔离级别是REPEATABLE READ,但它通过间隙锁和MVCC在多数情况下也能避免幻读,这个点如果面试被追问到,是很好的加分项。

4.3 测试岗位的用例设计思维:不写代码也能拉开差距

测试方向的笔试,关键在于"有没有测试思维"。商汤的测试题不会问你"要不要做自动化测试",而是给你一个功能场景,让你设计测试用例。比如一个登录接口,你在有限时间内能写出多少用例,里面有没有考虑SQL注入、密码明文传输、账号锁定策略、验证码过期、并发登录——这些全是加分项。

等价类划分和边界值分析法是笔试里最常用的方法。边界值几乎逢考必出:一个输入框允许1到20个字符,那你至少要测0、1、20、21个字符这四种情况,外加全角半角、中英文、特殊字符、超长字符串、纯空格。这类题只要平时建立过"正常流+异常流+边界情况+安全测试"的用例框架,基本能拿七成以上的分。

很多投测试的同学会担心"我不会写代码,笔试会不会吃亏"。实际上商汤那场笔试的测试方向,编程题难度略低于C/算法岗位,更看重逻辑性和覆盖度。但如果你会Python,写几个基础脚本会大大加分,比如用requests库模拟接口请求、用pytest写简单断言。测试工程师不是“不写代码”,而是“写更偏业务逻辑的代码”,这个观念要提前转过来。

5. 考场上的时间分配与答题顺序:我踩过的坑

5.1 先全局扫题,再按投入产出比排序

笔试两个小时,时间分配是决定成败的关键。我当时的策略是先花三分钟把整张卷子扫一遍,搞清楚题目分布和分值,再决定做题顺序。这个策略很重要,因为试卷把难点放在前面还是后面不一定,闷头从第一题做到最后一题,很容易卡死在前面某道难题上,后面明明有简单的题却没时间写。

我的做题顺序是:先做有把握的选择题,再做熟悉的简答题和编程题,最后啃难题。选择题里有一种情况很头疼——多选。不确定的选项宁可不选,也不要选错。很多在线笔试的多选题是"少选得部分分,错选得零分",所以不确定的选项不勾比勾上更划算。

5.2 编程题卡住时的"抢分"思路

编程题卡住是最痛苦的。我当时遇到一道链表相关的题,本来以为简单,结果写着写着发现漏了一种情况。这种时候我的做法是:先在注释里把思路写完整,再实现一个能过基础用例的版本,最后再补优化。哪怕优化的部分没写完,至少能保证拿基础分。

还有一点:如果编程题实在做不出来,不要空着。把题目要求读完,把输入输出的边界条件写在注释里,或者写一个只能处理部分情况的解,很多评分系统是按通过的测试用例数量给分的,暴力解能过几个用例也比交白卷强。我曾经参加过一场笔试,有一道动态规划题没写出最优解,但暴力递归过了50%的用例,最后照样进了面试。

5.3 环境与工具的坑

在线笔试的环境问题也值得一提。当时有同学反映本地编译可以通过,提交后却编译失败,原因是头文件引用路径不同、编译器版本不支持某些语法,或者代码里用了本地才有的配置。建议考前提前熟悉在线OJ的界面和提交逻辑,哪怕只是做一道"a+b"测试一下环境,也能避免考场上手忙脚乱。

还有一个容易被忽略的坑:输入输出的格式。有些题目要求输出保留两位小数,有些要求字符串按字典序输出,有些要求多组输入以EOF结束。这些细节写错了,哪怕算法完全正确也拿不到分。平时的刷题习惯要养成"用标准输入输出写题"的模式,不要依赖IDE的断点和调试。

6. 笔试之后:从考场复盘反推系统准备路线

6.1 一面大概率从你的错题开始,复盘比分数更重要

笔试结束后,很多人就开始等通知,完全不回顾自己哪里做错了。我的经验是:笔试之后的复盘,对你的面试价值比笔试本身还大。因为面试官手里是有你笔试答案的,面试开场很可能会挑你答错或答得不好的题追问。

我当时笔试在"Spark宽窄依赖是否会影响stage划分"这题上回答得不够准确,面试时真的被追问了。好在笔试结束后我翻了资料把这个点补上了,面试时能够说得比较完整。所以考完不管自我感觉好坏,趁记忆还在,第一时间把题目回顾一遍,尤其是自己不确定的选择题和编程题,去查清楚正确答案和原理,这比打开面经背题有用得多。

6.2 不同岗位的后续复习侧重点

复盘完错题,接下来就是按岗位方向、针对性地补课。给一个可以"抄作业"的路线参考:

方向复习重点建议资源
C/C++指针与内存、STL、对象模型、编译链接《深入理解计算机系统》相关章节 + 刷题
算法开发数据结构、动态规划、图论、机器学习基础LeetCode + 《统计学习方法》
大数据分布式原理、Spark/Hadoop/Hive、SQL组件官方文档 + 大数据面试题整理
后端网络、操作系统、数据库、Redis、Linux《图解HTTP》 + 牛客网后端题库
运维Linux命令、网络排查、Shell脚本、监控体系实操为主,在虚拟机里多搭环境
测试用例设计、接口测试、自动化基础一门Python + pytest + 常见用例设计题

这个表格不是让你逐项无脑执行,而是结合自己的薄弱项挑重点。如果你的目标是后端,那么网络和数据库是必须拿下的;如果你的目标是数据挖掘,那么SQL和机器学习基础不能拖后腿。

6.3 用"真题复盘法"代替无脑刷题

最后想分享一个我的备考思路转变。刚开始找工作时,我的方法是疯狂刷题,从早到晚刷LeetCode,但效果不好,因为刷过的题过几天就忘。后来我改成"真题复盘法":每做完一套笔试或面试题,不仅要订正答案,还要把每道题对应的知识点、当时为什么错、怎么避免再错这三件事写下来。两周以后回头翻一遍,效果比盲目刷题好很多。

商汤这场笔试对我最大的影响,不是帮我拿到了某个offer,而是让我意识到:校招笔试考的不是你记住了多少知识,而是你在有限时间、有限信息下的判断力和执行力。很多题目你并不是不会,而是没有时间做、没有信心做、没有策略做。提前习惯这种考试节奏,比临时抱佛脚刷几百道题来得更实在。

如果你下周就要参加类似的AI公司笔试,我的最直接建议是:把C++基础再过一遍、把SQL窗口函数练熟、把复杂度和边界条件的意识刻在脑子里,剩下的交给平时的积累和考场的冷静。祝顺利。

http://www.cnnetsun.cn/news/4335700.html

相关文章:

  • 商汤Android校招笔试复盘:从Binder到图片加载库的考点全解析
  • Qwen3 在 text-generation-webui 中稳定聊满 10 轮:5 个关键配置
  • Umi-OCR 完全上手指南:快速完成离线批量图片识别
  • 基于MAVSDK与MQTT的飞控数据采集传输系统设计
  • exo:把多块设备组成本地AI集群的完整指南,4台Mac跑通671B参数分布式推理
  • 4台Mac Studio跑通Qwen3-235B:exo分布式AI集群从0到4节点RDMA实战
  • 计算机视觉算法实习生笔试题全解析:核心考点与备赛攻略
  • 百度研发岗笔试复盘:HashMap、TCP与算法设计题解析
  • Google 2011笔试卷复盘:算法、系统设计与工程思维
  • AI图像增强免费指南:Upscayl 一键把老照片截图放大4倍
  • 基于Matlab的Sobol全局敏感性分析:原理、实现与工程应用
  • Umi-OCR 离线OCR新手指南:从下载到第一次批量跑通
  • C#读写NFC NDEF智能海报:从文本、URI到小程序跳转的完整实现
  • MATLAB人脸关键点检测与曲线拟合实战:从传统方法到深度学习
  • 基于STM32的楼道声控灯设计与实现全解析
  • MyBatis中表和实体类的映射
  • 网易Android校招笔试题解析:从Handler到Binder的核心考点
  • FPGA双游戏系统设计实战:VGA显示与碰撞检测的Verilog实现
  • 网易有道校招笔试题解析:算法、系统设计与备考策略
  • 基于EDS安检X光数据集的目标检测实战:从数据解析到YOLOv8模型部署
  • iPad零电脑零越狱运行MC Java版:Fabric与Iris完整接入指南
  • AI代理0Day漏洞入侵实战复盘:沙箱逃逸与奖励黑客防御方案
  • 基于YOLOV5的细胞检测:医疗AI目标检测模型训练全流程
  • 大数据实训项目全链路实战:从Flume采集到Spark分析再到可视化展示
  • 开源工具选型指南:免费资源、AI编程与项目管理实战
  • 全新16合一美团代付系统源码
  • 2026论文神级降AIGC软件大曝光:一键改写直达人工原创!
  • Android禁用OTA更新指南:ADB脚本清除系统更新弹窗与红点
  • 我的世界AI建筑生成模组:从安装部署到批量生成实践指南
  • 2026实测报告:毕业论文AI论文软件横向测评,千笔AI凭三大硬指标登顶