2023年腾讯音乐春季招聘技术研究岗第二批笔试。这是春招长跑里很典型的关卡也是不少候选人第一次实际感受到算法岗笔试节奏的地方。很多同学看到“技术研究”四个字以为会直接考一堆论文推导和前沿模型结果拿到卷子才发现核心考察的是既懂算法、又懂业务、还能把方案写成代码的综合能力。这篇文章把这次笔试的题型设置、答题逻辑、复盘方法和后续面试衔接做了完整梳理希望能给未来投递同类岗位的人一个可直接参考的框架。1. 岗位方向解读技术研究岗在笔试卷里想筛什么样的人1.1 从岗位Title看考核重点我在投递之前其实犹豫过研究岗会不会只招有顶会论文、或者学术背景特别硬的人后来把岗位要求完整读了一遍才意识到所谓的“技术研究”不一定要求你有论文发表但一定会评估三件事算法设计能力、机器学习功底、以及在真实业务问题里做技术判断的能力。腾讯音乐今天的技术版图已经远不止“做一个播放器”这么简单。QQ音乐、酷狗、酷我、全民K歌这些产品线下面几乎每一个核心体验都靠算法支撑首页的“猜你喜欢”推荐流、搜索框里的query纠错、听歌识曲时把环境音和海量歌曲库做匹配、K歌场景里的评分与修音、音质增强、直播场景里的内容安全审核。技术研究岗在笔试环节会把这些业务场景抽象成题目考察候选人在面对真实问题时会不会拆解、会不会选技术方案、能不能把方案落地成可运行的代码。这和单纯的竞赛题出题逻辑很不一样。竞赛题只关心你能否在抽象模型上正确求解岗位笔试题更关注你对场景的理解数据长什么样、约束是什么、离线效果好还要考虑线上能不能用、效果会不会被用户体感验证。这一点在后面会反复体现。1.2 笔试背后的能力矩阵结合我身边参与同一批笔试的同学反馈以及我在准备阶段整理的题库技术研究岗的笔试大致考察四个层次第一层编码基本功。能不能用C、Java或Python在规定时间内写出不超时、不越界、边界处理完整的代码。这一层拦住的是“只会说不会写”的人。第二层算法思维。这里不是背诵模板而是你能否从题目描述里识别出它本质是在考“动态规划”“滑动窗口”“双指针”“哈希表”中的哪一个。很多人不是不会做是看了十分钟还不知道该用什么方法。第三层机器学习基础。常见的损失函数、优化器、正则化、评估指标、过拟合处理、注意力和Transformer相关的基础概念。这一层筛掉那些只调过包、不懂原理的人。第四层业务敏感性。比如面对“如何提升歌单点击率”“如何给一首新歌做推荐”这类偏开放的题目能不能给出有框架、有取舍的方案而不是堆砌名词。把能力矩阵想清楚你才知道笔试前应该按什么优先级准备。我当时重点押在第二层和第三层因为这两层占了大部分分数并且短时间可以提分。第一层靠平时刷题积累第四层则需要提前熟悉音乐平台的数据特征和推荐系统基本架构。2. 第二批笔试的题型分布与时间分配逻辑2.1 我看到的题型框架与分值权重从同时参与笔试的同学反馈和我自己复原的题目来看第二批笔试的整体结构大致是选择填空类基础题、两道编程题、以及一到两道简答或场景设计题。选择题里多选占的比例不低。一道多选可能考察一个知识点的多个变体。比如“以下哪些措施能缓解推荐系统中的冷启动问题”选项里同时混入“用用户实时行为做深度排序”“用歌曲音频特征做向量召回”“对所有用户展示同一热门榜单”“用内容特征填充新物品侧特征”。这种题不是单纯记忆题而是要求你理解每个策略的适用场景。编程题一般第一道是热身题难度接近LeetCode简单到中等第二道是带场景包装的题难度会高一些。不过它不会考需要现场临时学的新算法更常见的是在中等偏上的动态规划、滑动窗口、双指针或图上简单路径问题上加一层业务外壳。简答和场景设计题通常给你一个音乐平台的子场景比如“某个歌单的平均点击不高你如何分析并优化推荐策略”或者“如何为K歌作品做音频质量打分”。这类题目答好了非常加分因为它最能反映你真实的项目经验和思考深度。2.2 合理的时间分配与做题顺序我个人的策略是拿到卷子先别急着做用两分钟把所有题目快速扫一遍重点看编程题的难度心里快速排一个题目优先级。这样做的目的是避免出现“会做后面的大题却因为前面某道选择题浪费太多时间而没空写”的局面。时间分配上我建议选择题和填空题控制在40到50分钟两道编程题一共留60到70分钟简答题留30分钟左右。如果你在选择题上遇到一道读了三遍还不确定的题我的做法是先标记一个最有把握的答案立刻进入下一题。多数选择题没有倒扣分蒙一个总比空着强但千万别反复纠结。编程题则应该先做胸有成竹的那道哪怕它在后面。先把稳定分数拿住再回头啃难题。在线OJ的答题顺序一般可以跳转这一点在平时练习时就要刻意训练别到笔试现场才发现自己在网页OJ上切题不适应那会打乱整个节奏。2.3 在线笔试环境与心态控制我遇到很常见的翻车场景是在本地IDE里写得很顺换到在线OJ就手忙脚乱。在线OJ往往没有自动补全没有断点调试有些连报错信息都不完整。所以我在准备阶段刻意用牛客网的在线编程界面练了一周左右每天三到五道题让自己适应“写完代码只能靠print调试”的状态。另外笔试通常要求开启摄像头监控需要安静、光线正常的环境桌面要清空。有些平台会监控切屏行为如果切到别的界面查资料系统会跳出警告严重时会被标记为违规。我的建议是考试前半小时把浏览器里所有无关标签页关掉把输入法调整成英文半角确认网络稳定。很多人的问题不是出在知识点上而是出在这种环境准备上真的不值得。心态上也要有个预期这类笔试几乎不可能所有题目都会做。研究岗的笔试有时候会故意放一道复杂题考察你在困难面前会不会慌乱。我当时的做法是如果某一题卡了超过15分钟还没有正确思路就先跳过去做其他题等所有稳定分都拿到手再回来啃这块硬骨头。3. 算法题拆解题目背后的真实业务场景3.1 基础算法题边界和复杂度才是考点大厂技术岗笔试有一个共同特征题目往往处在“难度适中但坑很多”的区间。举例来说给一个只包含小写字母的字符串s和目标字符串t问最少需要多少次插入、删除、替换操作可以把s变成t这是经典的编辑距离问题。但实际笔试很少这么直白通常会包装成“音乐搜索中用户输入有拼写错误现在给定两个歌曲名求最少编辑次数”这样的场景。这题第一眼会觉得简单但如果你不明确动态规划表的边界很容易漏掉第一行和第一列的初始化。我当时是先明确dp[i][j]表示“字符串s前i个字符变成字符串t前j个字符的最少操作数”然后初始化dp[i][0]i、dp[0][j]j再按递推关系填表。这里有个容易被忽略的优化当字符串长度上千时二维数组会占用较多内存现场如果内存紧张可以用滚动数组优化成O(n)空间。再讲一个场景化的经典例子推荐系统里经常遇到“给一个用户历史行为序列计算满足某种条件的最短子序列长度”这类问题。它本质是滑动窗口但很多第一次做的人会下意识用双重循环去枚举复杂度O(n²)。当数据量到10万时几乎必然超时。正确做法是维护左右指针用一个哈希表或计数器维护窗口内元素频次右指针前进左指针在条件不满足时收缩。这个道理说出来简单但上了考场心态一紧张就容易退回暴力解法。所以我建议笔试前把滑动窗口的几个经典变种都写一遍形成肌肉记忆。3.2 业务模拟题把业务描述翻译成数据结构有些编程题会把推荐系统场景包装进去。比如“给定一个长度为n的数组表示用户每天点击某个歌单的次数要求计算连续若干天内点击量均大于阈值的最长天数。”这题其实在考动态规划或者滑动窗口。还有一个典型是“按session切分听歌序列”。session在推荐系统里指用户在一段时间内连续的交互记录中间时间间隔超过30分钟就认为是另一个session。笔试题可能要求“输入一首歌的听歌时间序列输出每个session内听歌时长最长的歌曲”。这类题的关键不是算法本身而是你能不能快速把题目描述翻译成计算机能处理的数据结构。我一般会在草稿纸上先写两行“输入样例到输出样例”的转换过程再反向推导中间要经过哪些步骤第一步按时间戳对点击记录排序因为题目可能没说输入有序第二步遍历每条记录用列表维护一个session内的歌曲第三步遇到时间间隔超过30分钟结算当前session统计听歌时长最长的歌曲第四步记录全局最优解把步骤写清楚后再写代码效率比直接裸写高很多。因为一旦漏掉排序或者间隔判断条件后面debug会非常痛苦而草稿纸上的步骤可以帮你快速排查。3.3 代码提交的收尾检查习惯在线OJ提交后如果显示“通过率0%”或者“部分通过”最常见的原因往往不是核心逻辑错误而是没有处理空输入或极端情况数组越界比如访问列表中不存在的负索引递归深度太大Python默认递归深度大约1000如果题目构造一条长链递归直接就崩了输出格式不符合要求比如多打了一个空格或者换行我的经验是每写完一道题花一分钟快速自查输入是否有空集合n1的情况能不能跑最大值会不会溢出有没有不必要的嵌套循环然后再提交。这比反复提交等结果要高效。有些笔试平台提交次数有限或者有罚时所以养成提交前自查的习惯很重要。4. 机器学习与推荐系统题的答题思路复盘4.1 机器学习基础题不能只背结论机器学习基础题在技术研究岗笔试里分量不轻尤其是选择题和简答题。很多候选人在概念上说得头头是道但一落到具体场景就容易出错。比如问到“解决过拟合有哪些方法”常见选项是正则化L1、L2、Dropout、早停、数据增强、增加模型参数量、减少训练数据。如果只看定义增加模型参数量和减少训练数据反而更容易过拟合。把“减少训练数据”选成解决过拟合的方法就会丢分。这道题其实考察的是对过拟合本质的理解模型在训练集上掌握了太多噪声和细节解决办法要么是增加数据多样性、要么限制模型复杂度、要么加正则化约束。再比如“梯度消失问题常用的解决办法”选项里可能有使用ReLU、使用sigmoid、BatchNorm、ResNet残差结构、使用Adam优化器。ReLU、BatchNorm、残差结构、Adam都算缓解手段而sigmoid在深层网络里反而容易加剧梯度消失。这种题如果只背“梯度消失换激活函数”就会漏选。我当时复习的方法是把每个基础概念按照“是什么、解决什么问题、为什么有效、有什么副作用”的顺序整理成笔记。比如L1正则化为什么能带来稀疏性因为L1的惩罚项在零点不可导解更容易落在坐标轴上。Dropout为什么能缓解过拟合因为每次随机丢弃部分神经元相当于训练了多个子网络并做了平均。理解了这一层选择题怎么变种都不怕。4.2 推荐系统主干召回、排序、重排腾讯音乐这类内容平台笔试里出现推荐系统题目几乎是必然。完整链路是召回、粗排、精排、重排每一层解决的问题不一样。我在答题时都会先把这个链路写出来再展开描述因为面试官能从你的答案结构判断你是不是真正上手做过推荐。召回阶段的目标是从海量内容库里快速返回几百个候选。常用方案有基于用户行为的协同过滤ItemCF、UserCF、基于内容的召回、双塔向量召回。双塔模型是这两年笔试里的高频考点它把用户特征和物品特征分别输入两个塔得到向量后计算内积作为匹配分数线上可以用近似最近邻检索做快速召回。笔试有可能会问“双塔模型为什么适合召回而不适合精排”答案要点是双塔在线上可以预计算物品向量用户向量实时算一次然后做近邻检索速度快但双塔两侧信息交互很弱无法精细建模交叉特征所以精度不如精排模型。精排阶段用的大多是深度模型常见的有DIN、DIEN、DeepFM等。DIN的核心思想是注意力机制用户的历史行为对当前候选物品的贡献不一样应该用与候选物品相关的历史行为来表征用户兴趣。这里要理解不是把所有历史行为池化成一个固定向量而是通过注意力权重做加权求和这样“兴趣”表达更细腻。重排阶段通常做多样性、业务规则过滤和打散。常见的MMR最大边际相关性是在相关性和多样性之间做平衡DPP行列式点过程则是从集合角度挑选一个质量高且差异大的子集。如果笔试出了场景题提到“推荐结果太单调怎么改进”你就需要往重排方向去答。4.3 场景设计题的答法先画链路再讲方案场景设计题如果出现“如何为情绪歌单做个性化推荐”这类题目回答时不要急着堆模型名称先给框架。我常用的框架是问题定义这是session-based个性化推荐输入是用户当前的情绪标签或交互序列输出是一个音乐列表。数据与特征用户侧特征有时段、地理位置、天气、最近播放行为、情绪标签歌曲侧特征有BPM每分钟节拍数、调性、歌词情感倾向、音频指纹、历史点击率。召回策略用歌曲音频embedding做近邻召回召回与当前输入情绪匹配的歌再用用户历史行为做ItemCF召回。排序模型用DIN或者类似模型对行为序列和候选歌曲交互建模。冷启动对新用户用基本属性加会话内行为做热度兜底对新歌依靠音频embedding和内容标签做推荐。评估离线看AUC和RecallK线上做A/B测试评估播放完成率、收藏率、分享率。这样答每一层技术选型都有解释。如果只写“用深度学习模型”或者“用协同过滤”就会显得没有框架也体现不出你对音乐业务的理解。4.4 概率统计题文字转公式是核心能力概率统计类的题偶尔会出现难度不大但文字描述往往比较长需要提炼条件。比如“某用户在一天内播放歌曲A的概率是0.3播放歌曲B的概率是0.4两首歌都播放的概率是0.15问在播放B的条件下播放A的概率是多少。”这其实就是条件概率公式P(A|B) P(A∩B)/P(B) 0.15/0.4 0.375。还有一种常见的是朴素贝叶斯形题给出一组特征和类别的先验概率让你计算后验。这类题属于送分题所以我特别留意不要因为紧张忽略条件条件一旦看错计算过程再正确也没用。我会先把事件用变量定义清楚再写公式最后代数据不在脑子里跳步。5. 笔试中的常见失分点与实战答题方法5.1 多选题里的“全选陷阱”技术岗笔试几乎都会有多选题而多选题往往是失分重灾区。规则常见是错选、漏选、多选都不给分所以做题时要非常谨慎。常见的陷阱是一道“缓解过拟合”的题选项里有一个“增加训练数据”这是正确的但另一个“对特征做标准化”就是干扰项标准化确实经常在数据处理阶段做但它不是专门缓解过拟合的方法。如果你把所有看着眼熟的选项都选上就很容易丢分。我的应对方法每看到一个选项先在心里回答“这个操作对应的问题是什么”。如果没有明确对应就不要选。比如“增大正则化系数”对应的是缓解过拟合“降低学习率”对应的是优化稳定性“提前停止”对应的是防止过拟合“使用交叉验证”对应的是模型选择不是直接防止过拟合。这样区分正确率会高很多。5.2 简答题的“过程分”逻辑简答题是很多人的痛点因为它不会现场告诉你对错你根本不知道有没有答到采分点。我总结的经验是简答题一定要把推理过程写出来不要只写结论。比如题目问“为什么softmax分类器通常搭配交叉熵损失而不是均方误差”。如果只回答“因为交叉熵更好训练”显然不够。更完整的答法是softmax输出的是概率分布交叉熵衡量两个分布的差异语义上匹配从梯度角度看交叉熵配合softmax的梯度形式简洁是y_pred减去y_true不会像均方误差配合softmax那样梯度中包含激活函数的导数项导致学习缓慢交叉熵的损失曲面更有利于优化。面试官或系统在评判时看到这些关键词和逻辑链条才更有可能给分。在笔试这种无法交互的环境下你要假设看的人完全不了解你的思路所有关键步骤都要写出来。5.3 不会做的题至少留下思路痕迹笔试遇到完全没思路的编程题我的建议是不要直接放弃也不要空着。你可以先写一个暴力解复杂度可能高但至少能通过一部分用例。如果连暴力解都写不出来就写伪代码把解题思路、用到的数据结构、复杂度分析写清楚。在人工阅卷环节思路清晰可能比代码完整更值钱。我遇到过的情况是某道题本想用贪心解决写了一半发现贪心不成立。后来我干脆在代码注释里写“本题思路先排序再用双指针但我担心贪心在某种场景下不成立现在采用暴力方案验证”然后返回一个最基本的合法解。虽然综合得分不一定高但至少不是零分。5.4 复盘方法论按知识点归类而不是按题目归类笔试结束后大部分平台会放出成绩或者你可以凭记忆复原一部分题目。这时候的复盘方式决定你能否在下一轮笔试或面试中真正提升。我的做法是把所有错题按照“知识点”重新归类而不是按照“题目”归类。如果字符串匹配类题目卡壳归到“字符串处理加边界条件”如果矩阵动态规划总是超时归到“动态规划空间优化”如果过拟合那道多选题错选归到“模型正则化与泛化”归类后每天针对一个薄弱点刷20到30道同类题再回头看错题很多当时觉得难的问题突然就通了。这个方法的有效性在于它是围绕你自己的知识缺口进行的而不是无差别刷题。6. 笔试结束后的衔接从复盘到面试准备6.1 笔试暴露出的短板就是面试准备的重点笔试不是终点。腾讯音乐这类公司的招聘流程中笔试结束后的几天内往往会进入面试环节。如果你笔试中某个概念答得不好面试时大概率会被追问。因为面试官能看到成绩单答错的题反而是他们了解你技术水平的一个窗口。我笔试结束后会花一天时间逐题复盘列出“不会的、会但没时间做的、粗心做错的”三类。不会的重点复习会但没时间的总结做题速度粗心的提醒自己下次注意。这个清单就是面试准备的起点。很多候选人笔试后就干等结果等来了面试才发现自己还没准备节奏就完全乱了。6.2 准备一个能讲透的项目案例技术研究岗面试一定会有项目或实习经历的问题。在准备项目时不要只讲“我用了XGBoost效果提升了三个点”而是讲完整的技术链路。我建议准备一个“端到端”的案例包含这几个环节项目背景和业务指标数据来源和特征工程模型选型和原因离线评估方法和指标上线或实验结果遇到的主要问题以及怎么解决的。如果你没有正式项目也可以用自己复