资讯动态

腾讯音乐秋招研发岗笔试复盘:赛码网ACM模式与算法题全解析

发布时间:2026/9/1 2:27:05 来源:尧图企业网站定制
2023年秋招腾讯音乐研发岗笔试我是在赛码网上完成的。整场下来最大的感受是算法题占了绝对主导题型不算偏但时间紧、输入输出处理容易出意外稍不注意就容易在环节上丢分。这篇文章就把我实际参加这场笔试的完整经历、题型拆解、赛码网环境下的做题技巧以及几道接近原题的解题思路全部写出来给准备投腾讯音乐以及其他大厂研发岗的同学一个真实参考。先说结论腾讯音乐研发岗笔试的核心考察点本质上是三件事——数据结构和算法的基本功、边界条件的敏感度、以及在ACM模式下处理输入输出的熟练度。这和你在牛客上刷题用函数签名做题的习惯完全不同赛码网要求你自己处理输入输出不熟悉这套流程的人第一题就可能卡住。1. 先说题目三个环节的顺序千万别颠倒1.1 我拿到的试卷长什么样腾讯音乐2023秋招研发岗笔试一共三大块第一部分是20道选择题涵盖C/Java基础、数据结构、操作系统、网络和数据库第二部分是2道算法编程题第三部分是1道业务场景设计题。整体时长120分钟。选择题占比不小但真正拉分的是算法题。我估算了一下如果选择题控制在40到45分钟内完成剩下75分钟留给两道算法题和一道设计题时间基本够用要是选择题磨蹭了超过一个小时后面就会非常被动。题目难度跨度挺大。选择题里基础题偏多比如“哈希表冲突解决方法”“TCP三次握手状态变化”“死锁的四个必要条件”这种属于八股文里最基础的东西。但有几道题绕了弯子比如问“vector扩容时元素移动次数的均摊复杂度”需要你真正理解动态数组的扩容机制而不是死记结论。算法题两道第一道是模拟题给一个音乐播放列表的切换规则让你计算最终停在哪个位置第二道是动态规划类似“最长有效括号”的变体但套了一层会员成长体系的壳核心还是DP状态转移。业务场景设计题给的是“如何为评论区设计一个高并发下的敏感词过滤方案”不要求写代码只要求写思路和架构设计。1.2 为什么腾讯音乐要这样设计笔试站在出题人的角度想这三部分考察的目标其实是完全不同的。选择题考的是基础知识的宽度。研发岗不是只写业务代码系统底层机制、网络协议、操作系统调度这些基本功决定了后续能不能快速上手复杂模块。腾讯音乐的业务场景里客户端和服务器之间频繁交互网络协议这块不扎实后面排查线上问题会非常吃力。算法题考的是编码能力的深度。两道题一模拟一DP覆盖了研发岗日常最常用的两类思维模拟题考察你把文字规则翻译成代码的能力这个对应的是接需求、理解产品逻辑的日常DP题考察状态抽象和转移方程的推导这个对应的是遇到复杂问题能不能拆解成子问题。设计题则是考系统思维。敏感词过滤在评论区场景下是必须的出题人想看看你有没有基本的服务分层意识、缓存意识、以及方案取舍能力。所以这三个环节不是随便堆上去的它暗含了“基础扎实—编码过关—系统有设计”这条能力链路。如果你只准备了算法题库而忽视了选择题里的基础知识和设计题的系统思路成绩可能不会理想。1.3 不同岗位的题目差异腾讯音乐研发岗笔试不是一套卷子打天下。我身边一起笔试的朋友投的是C后台开发和Java后台开发题目就有区别。C卷里选择题涉及内存布局、虚函数表、智能指针引用计数的题目明显更多Java卷则偏重JVM内存区域、垃圾回收算法、Spring Bean生命周期这些。算法题两边倒是基本一致至少我了解到的题面是相同难度级别。另外还有投客户端和前端方向的他们也会考算法但选择题侧重会偏向UI渲染、网络请求、跨端通信这些内容。所以准备的时候别只盯着通用题库做要先确认自己投的岗位方向把对应语言的基础题多刷两遍。我当时吃了个小亏选择题里有几道C多继承和虚基类的问题我是Java方向题目是做对了但花了不少时间在回忆语法细节上耽误了整体节奏。2. 赛码网这批报名平台环境和不适应要提前适应2.1 ACM模式到底是什么腾讯音乐这场笔试用的是赛码网不是力扣那种函数补全模式。赛码网的编程题是ACM模式你自己读输入、自己解析、自己输出所有的输入输出都得通过标准输入输出流来做代码模板最多给你一个空的main函数。很多同学第一次用赛码网天然不适应。在力扣上写习惯了函数的参数都是框架帮你解析好的你要做的只是填函数体到了赛码网你得自己处理“输入第一行是整数n第二行有n个整数”这种格式。别看这个差异不大实际做起来非常影响心态。我用一个具体的例子说明你需要计算数组中连续子数组的最大和。力扣上你只需要写int maxSubArray(vectorint nums) { // 你的逻辑 }赛码网上你得自己写完整的输入输出#include iostream #include vector #include sstream using namespace std; int main() { int n; cin n; vectorint nums(n); for (int i 0; i n; i) { cin nums[i]; } int cur 0, maxSum INT_MIN; for (int num : nums) { cur max(num, cur num); maxSum max(maxSum, cur); } cout maxSum endl; return 0; }就多了这几行读输入、写输出的代码放在真实笔试的紧张环境下很容易写错。比如cin读取遇到空格会截断、第一行有个换行符需要处理、多组测试用例时要用while(cin n)循环来读这些细节不提前练考场上就很伤。2.2 赛码网的几个具体坑赛码网的编辑器默认是不带语法高亮自动补全的。这个非常要命因为在力扣或者本地IDE里写习惯了突然换到裸编辑器心态会受影响。但好消息是它支持你本地写、本地测然后把代码贴回去。我建议的策略是考前用赛码网的模拟题库练两到三次熟悉这个编辑器的手感。如果实在没有模拟题就用本地IDE写代码提交前留五分钟检查格式。另外有一个非常实用的技巧赛码网的在线编译器对#include的处理比本地编译器严格一些在本地能通过的代码贴上去可能编译报错尤其是C的万能头文件bits/stdc.h有的版本支持有的不支持保险起见还是老老实实列具体的include头文件。还有一点是关于cin和cout的性能问题。当输入规模超过十万级别时cin/cout默认的同步机制会导致读取速度变慢可能触发超时。我当时在第一道模拟题上就遇到过这个问题数据量大约几十万用cin读入没加优化边读边处理勉强过了。如果是第二道DP题需要读入大量数据再做二维DP不加这行代码很容易超时ios::sync_with_stdio(false); cin.tie(0);这两行放在main函数最前面能有效提升读写效率。这是赛码网和牛客这类ACM模式笔试最实惠的经验之一。2.3 选择题和设计题的答题体验赛码网的选择题部分是可以往前翻的建议遇到不确定的先标记整体过完再回头思考。我当时做选择题的时候在两道操作系统题上犹豫了很久一个是关于页面置换算法一个是关于进程间的通信方式比较后来发现后面算法题时间紧张回头看那两道题也不过是2分一题性价比很低最后草草选了答案。设计题的文字量比较大赛码网上的作答区域是一个大文本框支持简单的Markdown格式但最好不要用太复杂的分级标题和表格系统未必能正常展示。我当时写的是分点思路用了编号列表和短段落清晰就好。别在这个环节花大量时间堆砌华丽的文字关键是逻辑框架清晰。3. 算法题还原与解题思路拆解3.1 第一题播放列表模拟题目大致意思是有一个包含n首歌的循环播放列表给你一个初始位置和一个操作序列操作有“下一首”和“上一首”另外还有“跳到指定位置”最后问执行完所有操作后的歌曲位置。这是典型的大模拟题。解题思路很直接用一个变量cur记录当前位置遇到next就是(cur1)%n遇到prev就是(cur-1n)%n遇到跳转就直接更新cur。唯一需要注意的是“上一首”操作在cur等于0时要特殊处理不能出现负数取模。我当时的写法#include iostream #include string using namespace std; int main() { ios::sync_with_stdio(false); cin.tie(0); int n, m, cur; cin n m cur; cur--; // 转成0-based string op; int pos; for (int i 0; i m; i) { cin op; if (op next) { cur (cur 1) % n; } else if (op prev) { cur (cur - 1 n) % n; } else if (op jump) { cin pos; cur (pos - 1 n) % n; } } cout cur 1 endl; return 0; }这道题本身不难但有两个坑第一个是把题目给的1-based位置和代码里的0-based下标搞混导致越界或者错位第二个是操作序列的第二行可能存在多组输入如果你用的是固定读法而不是按行处理容易读取错位。3.2 第二题会员成长值动态规划第二题套了一个会员成长体系的计算规则系统每天结算成长值玩家可以累计连续签到获得额外加成中断后会重新计算。要求给定一个长度为n的0/1数组1代表当天签到了0代表没签到再给一个参数m表示连续签到的加成周期求出最终累计的最大成长值。这题核心是动态规划但状态设计有一定技巧。如果只是计算总和直接遍历一遍就行但题目里的加成规则是“连续签到每满m天则额外加一个基础成长值b”所以你需要关注连续签到天数的状态。我定义的DP状态是dp[i][j]表示处理到第i天且当前连续签到天数为j时的最大成长值。j的范围是0到m-1超过或等于m时统一按m处理。转移的时候分两种情况第i天签到则当前连续天数加1成长值增加基础值a如果连续天数达到m额外加b第i天没签到则连续天数清零成长值不变。更简单的做法是压缩状态只用一维数组加一个记录连续天数的变量因为第i天的状态只依赖第i-1天的状态。但笔试时为了保险我直接开了二维数组确保转移不会出错反正我看了下n的规模是10^5二维数组10^5乘以m如果m很大内存可能超限所以这里m数据范围其实是10也就是说dp是n*11的数组可以接受。状态转移的核心伪代码n, m, a, b map(int, input().split()) days list(map(int, input().split())) dp [[0] * (m 1) for _ in range(n 1)] for i in range(1, n 1): for j in range(0, m 1): # 今天不签到 dp[i][0] max(dp[i][0], dp[i-1][j]) # 今天签到 if days[i-1] 1: new_j min(j 1, m) gain a (b if new_j m else 0) dp[i][new_j] max(dp[i][new_j], dp[i-1][j] gain) print(max(dp[n]))这个状态转移的关键点是连续天数到m之后的处理只要达到m就封顶保持每满一次m就额外加b但不需要把连续天数清零重计。这是题目里隐藏的逻辑要仔细读题才能判断。我做题时在这个边界上迟疑了很久后来通过自己构造的小样例验证后确认了逻辑是对的。3.3 算法题的做题顺序建议拿到算法题先别急着敲代码。花两三分钟把题读三遍特别是输入输出格式和数据范围。数据范围决定了你的算法复杂度能不能过。比如上面第二题如果n是10^5m是10用O(n*m)的DP是完全可以的但如果m是10^9那二维DP直接爆内存就得换思路。我自己的习惯是先看一眼数据范围再判断这题考的是模拟、DP、贪心、还是图论。如果五分钟没有思路跳过做另一道。两道题都卡住了就把想到的暴力解法写出来能过多少用例算多少。赛码网的判题规则是部分用例通过也能得分所以暴力解法绝对不是零分。4. 考后的复盘与秋招笔试横向对比4.1 腾讯音乐笔试和其他大厂的差异2023年秋招我也陆续参加了其他几家互联网大厂的笔试横向对比下来腾讯音乐的题目难度属于中等偏上计算量和思维量都不算极端但有两个特点是其他厂不太一样的。一个是对基础知识的重视程度非常高。选择题占比20道比很多厂子的10到15道多出不少。其他厂笔试经常只有算法题偶尔加几道选择题意思一下腾讯音乐这个选择题的量说明它确实看重基本功的广度。另一点是它的业务设计题出得比较具体不是那种泛泛的“设计一个秒杀系统”而是会结合音乐产品里的实际场景。这个特点对后续面试是个信号面试官大概率会深挖项目经历和系统设计能力笔试里的设计题就是一面预演。拼多多、微众银行这些厂我也考过。拼多多的笔试更侧重算法而且难度更大题量也多典型的高压筛选风格微众银行的数据分析岗位则是SQL、统计学和业务分析题混搭和我这次考的方向完全不同。所以不同公司、不同岗位的笔试风格差异很大准备校招的时候不能拿一套方案去应付所有笔试得针对每家公司的特点做调整。4.2 复盘时我重新思考的两道关键题选择题里有一道关于“哈希表在Java中的扩容机制”的题我考场上选对了但后来复盘时发现理解得不够深。Java的HashMap在负载因子超过0.75时会触发扩容每次扩容是翻倍容量然后把旧数据重新计算哈希位置放进去。这个过程不是简单的拷贝而是每个元素都要重新定位因为数组长度变了hash (n-1)的结果也会变。这个知识点结合“为什么容量是2的幂次方”一起理解会更深。另一道是TCP的TIME_WAIT状态。题目问的是主动关闭方在TIME_WAIT状态持续多久答案通常是2MSL。考后我仔细想了一下这题的考察意图TIME_WAIT存在的意义是确保最后一个ACK能到达对方如果丢了可以重发同时防止旧连接上的延迟报文影响新连接。理解了这两个原因就不容易和被动关闭方的状态搞混。这种复盘比刷题本身更有价值。笔试不只是为了拿一个成绩它暴露出来的知识点盲区就是接下来几周准备面试的复习重点。我把自己错的和蒙的题都记到了单独的文件里后续面试复习时直接翻这部分笔记效率很高。4.3 给下一届同学的建议清单结合这次笔试和后续秋招的经验我整理了一个简短的准备清单希望能帮到准备投腾讯音乐研发岗的同学赛码网模拟题至少刷三套重点练习输入输出处理和超时优化别让环境问题拖后腿。选择题覆盖范围明确C/Java基础、数据结构、操作系统、网络、数据库各占一定比例按自己投的岗位取舍。算法题高频类型是模拟、DP、贪心字符串处理和二叉树也出现过。特别是模拟题读题后先理清规则再写码别边写边猜。业务设计题要提前准备一套自己的分析框架场景约束、核心流程、方案选型、容错降级、数据一致性。所有问题都往这个框架里套。时间分配选择题不超过45分钟每道算法题留25到30分钟设计题15分钟最后留5分钟检查格式和提交。5. 赛码网选择题的答题细节与冲刺方法5.1 选择题不是单纯的知识点记忆这次笔试的选择题里有一部分不是只靠记忆能答对的。比如一道关于“数据库索引失效场景”的题给的选项里有“对索引列使用函数”“隐式类型转换”“前导模糊匹配”“索引列参与计算”你得对索引的B树结构有基本理解才知道为什么这些操作会破坏索引的有序性从而放弃索引扫描。所以准备选择题的时候我是按照模块来整理的C/Java语言特性、数据结构、操作系统、计算机网络、数据库。每个模块先过一遍基础概念然后刷对应模块的题库遇到不会的题目回看知识点再加深理解。说实话这个方法不新鲜但很有效关键是坚持。还有一个实用技巧多选题如果没有十足把握只选一个最确定的选项也比全选然后拿零分要强。这是我考场上反复权衡后总结出来的策略虽然有些平台写的是“少选得部分分多选不得分”但也不一定所有平台都这样需要提前看考试说明。5.2 冲刺阶段的时间规划如果是考前一个月开始准备前两周用来过基础知识和刷分类题后两周集中做整套模拟题。整套模拟的目的有两个一是训练时间分配二是适应长时间集中注意力的状态。笔试两个小时看似不长但真正做起来心理压力会加速消耗精力不在考前适应这个节奏考场上容易犯困。我在考前一周把节奏调整为每天上午9点到11点做一套模拟笔试严格按照考试时间执行闹钟一响就停笔然后花一个小时复盘错题。这样到了真正笔试的那一天身体和大脑已经形成了一套自动的运行模式心态稳定很多做题手感也是热的。5.3 做题节奏的现场控制笔试开始后我建议先花两分钟把整张卷子扫一遍特别是算法题的题面先了解难度分布。如果发现第一道算法题完全没有思路不要死磕先去做第二道把能拿的分拿到再回头啃第一道。选择题控制在45分钟以内遇到模棱两可的先标记跳过最后如果还有时间再回头思考。不过说实话留到最后回看的选择题大概率还是靠第一感觉选的答案。与其反复纠结不如把时间留给算法题。6. 业务设计题评论区敏感词过滤方案6.1 出题意图和答题框架业务设计题给的是“如何为评论区设计一个高并发下的敏感词过滤方案”。这题没有标准答案但有几个要点是面试官希望看到的分布式服务的分层思想、敏感词匹配算法本身的选型、缓存和异步处理对性能的优化、以及发布和审核两条链路的设计。我当时按这个结构写的流量入口先经过网关和负载均衡评论发布请求进入应用服务应用服务先查本地缓存Caffeine里的敏感词列表没有命中再查分布式缓存Redis匹配算法用Trie树字典树 AC自动机做多模式匹配如果检测到敏感词直接拦截或进入人工审核队列最后通过消息队列异步通知审核系统。最后加了一下降级方案如果检测服务压测发现超时率升高就关闭实时拦截、改为纯异步审核优先保证用户能正常发评论审核通过后再显示。这个“先保证可用性暂缓一致性”的思路明显能引起面试官好感。6.2 为什么先用Trie树和AC自动机敏感词过滤的核心是字符串匹配。最简单的方法是维护一个敏感词列表然后每次评论过来都遍历所有敏感词做子串匹配。如果敏感词数量有几千个评论内容几百字那每次匹配的时间复杂度就是几千乘以几百高并发下肯定扛不住。Trie树把所有敏感词塞进一个树形结构匹配时从根节点顺着字符往下走单次匹配的时间只跟评论长度有关跟敏感词数量无关。这就是从“词数×文本长度”的复杂度降低到“文本长度”的复杂度。AC自动机更进一步在Trie树上加了失配指针让匹配过程可以一次扫描文本完成所有敏感词的查找不需要回溯性能进一步提升。如果只用Trie树而不上AC自动机在高并发场景下还是会有性能风险因为最坏情况每个位置都需要重新从根节点匹配。AC自动机是Trie树的高并发形态这两者必须配套讲才能体现你对这个领域的理解深度。6.3 设计题里容易丢分的点设计题丢分常见的三个问题是第一只讲方案不讲为什么直接说“用Redis缓存敏感词列表”但不说为什么不用本地缓存第二不考虑异常场景比如审核服务挂了怎么保证评论数据不丢第三没有量化概念不估算QPS、不评估缓存命中率导致方案完全不可落地。回答设计题时一定要给出几个关键数字来佐证你的方案。比如“这个系统估算QPS在5000左右敏感词列表大小约1MB所有节点本地缓存可以完全容纳命中率理论上可以做到95%以上因此大部分请求可以走本地缓存不会打到Redis”。这种描述比“用缓存提高性能”有说服力得多。还有一点设计题不要只写技术方案要提一下上线后的监控指标。我当时写了“审核接口的TP99响应时间”“敏感词命中率”“拦截误判率”这三个指标。这种监控意识在面试官那里是加分项说明你想的不只是“怎么实现”还包括“上线后怎么判断系统是否正常”。7. 笔试当天的状态管理与意外应对7.1 提前的设备测试真的不能省腾讯音乐这次笔试明确要求使用Chrome浏览器并且需要提前半小时进入考试系统做设备检测。我在考前认真做了摄像头、麦克风、网络速度的测试确认没问题才开始。这个步骤看起来繁琐但非常重要。有一场其他公司的笔试我认识的同学没提前测试结果进去后摄像头无法开启折腾了十分钟才解决白白浪费了宝贵的答题时间。另外赛码网的系统对浏览器版本有要求最好提前确认自己装的版本是官方支持的。如果有条件准备一台备用电脑和备用网络防止考试中途电脑死机或者断网。大厂笔试一般都有严格的在线监考规则频繁切换窗口会被记录所以切记不要开着其他聊天工具或者代码编辑器作弊一旦被判违规成绩作废后续再申述也基本没用。7.2 做题中的心态控制技巧笔试过程中遇到不会的题最大的敌人是恐慌。2023年秋招我参加了多场笔试一个很重要的经验是不会做的题先把题目里能提取的信息记下来哪怕只能写一个暴力的框架也能拿部分分。不要直接放弃空着不写赛码网判题是按通过用例数量给分的空着等于零写了至少还有机会。当两道算法题都卡住的时候去做设计题反而是调整心态的捷径。设计题没有标准答案以你的知识储备能写多少就写多少写完了心态会平稳很多再回头做算法题可能就有了新的思路。这个“跳题缓冲”的策略帮我拿下了不止一场笔试的算法题分数。7.3 考完必做的三件事笔试提交后第一件事是把能回忆起来的题目记录下来。不用写得很详细记下题型、考点、关键边界条件即可。尤其是规定时间内没做出来的题目一定要标记出来因为这代表你的知识盲区。第二件事是当晚复盘选择题里的每一道错题哪怕只是蒙对的选择题也值得重新看一遍知识点。第三件事是根据笔试暴露出的问题调整后续复习计划把投递其他公司之前的查漏补缺清单重新排一个优先级。如果时间充裕把腾讯音乐笔试这道设计题写一篇完整的设计文档保存下来。后续面试如果被问到类似场景直接拿出来用。这个复盘的习惯可能比多做三套题更有价值。我在整个秋招过程中一共参加了超过十场笔试腾讯音乐这场是其中题型配置比较均衡的一场选择题量足算法题难度适中设计题贴近业务。准备校招笔试时与其盲目追求刷题数量不如针对目标公司的笔试风格做专项训练。把赛码网环境踩熟、选择题模块吃透、算法高频题型练稳、设计题准备一套分析框架这四件事做好腾讯音乐的笔试就成功了一大半。

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

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

免费获取报价