ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

网易人机交互算法实习生笔试复盘与备考指南

网易人机交互算法实习生笔试复盘与备考指南 前几天整理邮箱里的旧面经翻到自己当年参加网易实习生招聘人机交互算法岗位笔试的记录一时间很多细节又涌上来。那场笔试恰好赶上2018年春季那批题目量不小覆盖范围也杂既有传统的算法数据结构题也有不少跟交互场景绑定的分析题。这两天不少学弟学妹来问人机交互算法实习生到底考什么、该怎么准备干脆把那次笔试的内容和复盘思路完整写出来给准备投这个方向的同学一个可参考的坐标。先说明一下这篇内容适合三类人看一是准备投网易或其他大厂人机交互算法方向实习的在校同学二是对“算法工程师在现场到底怎么做交互优化”感到好奇的开发者三是想了解面试官如何在笔试环节筛选候选人的求职者。我会尽量把题目背后的考察逻辑讲透而不只是贴答案因为那场笔试给我的最大启发是面试官想看到的不是你会背多少算法而是你能不能把算法放到真实的人机交互问题里去解决问题。1. 岗位定位与考点全貌人机交互算法实习生到底在考什么1.1 先从岗位名称拆解考察意图“人机交互算法实习生”这个title一眼看过去很容易让人懵因为“人机交互”和“算法”听起来像是两个方向。但网易的这类岗位定位其实很清晰用算法手段去理解和优化用户与产品之间的交互过程。它既不是纯学术意义上研究新型交互技术的实验室岗位也不是纯粹做推荐系统或广告排序的传统算法岗而是处在两者之间的交叉地带。从笔试的题目构成能反推岗位的三个核心能力要求。第一个是底层算法基本功这决定了你能不能把数据处理干净能不能在资源受限的情况下跑通模型。第二个是机器学习与数据建模能力因为交互优化的本质是从用户行为数据里找到规律比如点击、滑动、播放、停留时长这些信号背后藏着什么意图。第三个是交互设计与产品sense说白了就是你能否把一个算法输出转化成对用户有意义的改变比如界面布局调整、内容推荐策略变化、反馈机制优化。2018年那份笔试卷子一共分了四大部分选择题、算法编程题、机器学习简答题、交互场景分析题。每个部分的权重不完全一样但从现场感受来看算法编程题和交互场景分析题是最能拉开差距的因为选择题大家都能蒙不少真正决定是否进入面试的是后面两类题目。1.2 试卷结构还原与热点方向预判我尝试把那次笔试的题型分布还原出来好让后来者有直观认知。整体时间150分钟题量相比其他大厂属于中等偏少的水平但每道题都需要深入思考。题型分类题量覆盖内容建议时间分配基础选择题12题数据结构、概率统计、操作系统、网络基础30分钟算法编程题3题字符串处理、排序变种、搜索与动态规划60分钟机器学习简答2题特征工程、模型评估、常见算法原理30分钟交互场景分析2题产品可用性诊断、交互方案设计30分钟这里要提醒一下每年的题目结构和考点会有波动但这张表传递的核心信号一直没变算法基本功占大头机器学习能力被单独考察交互设计思维是区分度最高的加分项。再结合2018年前后的行业趋势看那个时间节点刚好是推荐算法在音乐、资讯、视频类产品里全面普及的阶段网易云音乐的个性化推荐、歌单智能生成、评论区情感分析都做得非常深入所以笔试里出现大量与内容推荐、用户行为序列相关的题目并不意外。如果你现在准备类似的笔试多关注多模态理解、LLM在交互场景的应用、用户长短期兴趣建模这些方向会有更好的命中率。2. 算法编程题深度拆解从真题看考察逻辑与解题思路2.1 字符串与模式匹配KMP算法的新瓶旧酒那年第一道编程题表面披着“字符串匹配”的外衣实际上考的是对经典算法的理解和变通能力。题目大意是给定一个模式串P要求在文本串T中找到所有匹配的起始位置并且要求支持在匹配过程中跳过某些位置具体细节记不太清了但核心是对KMP算法的状态转移做改造。KMP算法在“网易云音乐歌词实时高亮”或者“搜索关键词纠错”这类交互场景里有天然的应用所以出现在人机交互方向也不算突兀。KMP的核心思想是利用next数组保存模式串内部的最长公共前后缀长度这样匹配失败时主串指针不必回溯模式串指针跳到next指定的位置继续比较。对于模式串 ( p abacaba )next数组的计算过程是这样的下标 i: 0 1 2 3 4 5 6 模式串: a b a c a b a next[i]: -1 0 0 1 0 1 2next[i] 定义为模式串前i个字符组成的子串中最长相同前后缀的长度减一部分教材实现不同有的是直接存长度笔试时建议先明确约定。以 i3 时为例子串是 aba前缀集合 {a, ab}后缀集合 {a, ba}最长公共前后缀为 a长度为1所以 next[3] 0按减一约定。那年的题目如果把next数组从“固定长度”改成“动态权重”比如每个字符有一个权值最长公共前后缀的要求从“相等”变成“加权相似度最高”就需要用扩展KMP或者Z算法配合DP来处理。我当时在考场上选择先写标准的KMP框架再把权重判断嵌入到next的生成逻辑里虽然时间复杂度没有做到最优但至少保证了解法的完整性和正确性。个人建议面对这类熟悉算法的变种题第一优先级是写出可运行、逻辑自洽的版本不要一上来就追求最优解。面试官看的是你能否快速定位问题本质并用已有工具解决而不是比拼竞赛选手的奇技淫巧。2.2 排序算法的交互场景变种从冒泡到堆排的思维跃迁第二道编程题考了排序但加了一个交互场景的包装。大致意思是网易云音乐的“我喜欢的音乐”列表允许用户手动拖拽调整歌曲顺序现在需要设计一个排序算法使得在用户很少手动调整的前提下新的推荐排序与用户手动排序之间的“差异度”最小。这个“差异度”的度量方式题目给了定义——可以理解为两个序列之间的逆序对数量或者编辑距离。我当时第一反应是这题本质就是在计算“两个排列之间的相似度”最直接的做法是用归并排序统计逆序对复杂度O(n log n)同时也能顺手完成排序。但这里藏着一个坑如果直接把推荐列表排序成和用户手动列表完全一致那就失去了“推荐”的意义。题目真正的考察点是如何在“尊重用户既有操作”和“保持推荐多样性”之间找到平衡对应的解法是引入一个“锚定系数”对已经手动调整过的歌曲给更高的权重未调整的歌曲保持推荐算法给出的原始相对顺序。写代码时我用了一个结构体存储歌曲id、推荐分、手动调整次数三个字段排序规则是先按手动调整次数降序再按推荐分降序。这样手动调整越多的歌曲在最终序列中越靠前其他人还按推荐分的相对顺序走。这道题给我的启发是大厂的算法笔试题哪怕考的是基础排序也会想办法包装成一个产品层面有真实意义的问题。如果你只是会闷头写快排、归并、堆排的模板代码而不理解每种排序的稳定性和额外空间开销在什么业务场景下重要很容易在面试官追问“为什么选这个排序而不是那个”的时候卡壳。2.3 贪心与粒子群当经典启发式算法撞上交互优化第三道编程题让我印象最深刻因为它把粒子群算法Particle Swarm Optimization直接搬到了笔试里。题目场景是网易云音乐早年间有一个“私人FM”功能需要在每个时间窗口内从大量候选歌曲中挑选一组歌曲使得整体的用户满意度最高同时满足风格多样性、歌手分散度、播放时长预算等多个约束条件。标准解法有两种路径。一是把它建模成多约束背包问题用动态规划或贪心策略求解二是使用启发式搜索算法比如粒子群算法。题目明确提示可以使用启发式算法并考察对粒子群算法原理的理解和实现能力。粒子群算法的核心思想其实用生活类比很好讲清楚想象一群鸟在觅食每只鸟都不知道食物在哪里但知道当前位置离食物有多远于是鸟群通过共享“个体历史最优位置”和“全局历史最优位置”来不断调整自己的飞行方向和速度。对应到算法里每个粒子代表一个候选解一组歌曲选择方案粒子的位置向量就是歌曲选择的编码粒子的速度向量决定了解空间搜索的方向和步长适应度函数衡量当前解的质量比如综合满意度得分每次迭代更新速度 ( v wv c1r1*(pbest-x) c2r2(gbest-x) )再更新位置 ( x x v )我在考场上选择了自己更熟悉的贪心策略作为保底方案然后在此基础上实现了粒子群的框架。贪心策略是按“满意度/播放时长”的比值降序排列依次选择歌曲直到时间预算用尽粒子群算法则在这个初始解的基础上做邻域搜索优化。考后复盘这道题想考察的其实是候选人对**“传统精确算法算不动时如何用启发式算法快速逼近可行解”**这个工程问题的认知。交互场景中的优化问题往往约束复杂、状态空间巨大精确解需要的计算时间用户根本等不起这时候启发式算法就是最务实的方案。2.4 附笔试常考的算法清单与权重评估为了方便后面准备的同学我按自己和周围同学的回忆整理了一份人机交互算法方向笔试高频考点清单按出现频率和重要度排列算法/知识点出现频率人机交互结合点准备优先级排序算法快排、归并、堆排极高列表排序、推荐排序融合必修KMP/字符串匹配高搜索词匹配、歌词高亮必修贪心算法高资源分配、播放列表生成必修动态规划高序列建模、用户行为路径规划必修图算法最短路径、二分图匹配中社交关系推荐、内容分发重点准备粒子群/模拟退火等启发式算法低-中多约束推荐优化了解原理即可聚类算法中用户分群、内容聚类重点准备快速幂低配合概率计算题出现熟悉模板即可注意这份清单不是让你把每个算法都刷到竞赛金牌水平而是要在理解原理的基础上能快速判断“什么场景该用什么算法”并能写出逻辑清晰的代码。面试官最忌讳的就是候选人背了一堆模板但问一句“为什么这个场景用堆排序比快排好”就答不上来。3. 机器学习与人机交互的交叉考点从推荐算法到用户行为建模3.1 特征工程与行为序列建模从网易云音乐的真实场景切入机器学习简答题第一道考的是特征工程题目给了一个关于用户听歌行为的数据表包含用户id、歌曲id、播放时长、是否点击红心喜欢、是否评论、播放时间戳等字段要求设计用户对歌曲的偏好特征并说明为什么。这道题典型的答法应该从三个层面展开。第一个层面是基础统计特征用户对某首歌的播放次数、累计播放时长、最近一次播放距离现在的时间间隔。第二个层面是比率特征播放时长/歌曲总长度的比值比值高说明用户大概率完整听完了这首歌是强偏好信号红心点击率、评论互动率也是类似逻辑。第三个层面是序列特征用户最近N次播放中该歌曲的出现位置以及该歌曲前后衔接的歌曲风格分布这种特征可以捕捉用户的“听觉惯性”。这里我特别想强调一点面试官并不想看你说出“播放时长是一个重要特征”就结束他们要看到的是你对特征背后用户心理机制的解读能力。比如为什么“播放时长/歌曲总长度”比单纯的“播放时长”更有区分度因为一首3分钟的歌和一首10分钟的歌用户都是完整播放的话后者消耗的时间更多但前者的“完整率”却可能更高信号强度反而更强。这就是把算法知识和人机交互中的用户体验直觉结合起来思考的方式。3.2 聚类算法在用户分群中的应用从向量到画像第二道机器学习题考了用户分群要求基于用户的历史行为数据把用户聚成几类并说明每类用户的核心特征和对应的产品运营策略。这道题其实给了不少自由度关键看你能不能把K-Means聚类的流程说透以及能不能从聚类结果中解读出业务含义。K-Means的流程是随机选择K个初始簇中心计算每个样本到每个簇中心的距离把它归入最近的簇然后重新计算每个簇的质心重复迭代直到质心不再变化或达到预设轮数。这里的“距离”怎么定义是个大学问因为用户行为的原始特征是离散的、高维的、稀疏的直接算欧氏距离效果很差通常需要先把特征做降维或Embedding化。我在回答里用了一个“用户-歌曲类型偏好矩阵”的方案把用户对曲风的偏好权重做成向量比如电子、民谣、摇滚、流行、古典各一维然后用余弦相似度衡量用户间的距离再进行聚类运算。这样做的好处是向量有明确的语义含义聚类结果的解读成本低。产品策略部分我分别举了例子“夜深人静型”用户午夜到凌晨活跃适合推荐轻音乐和助眠内容“晨间活力型”用户早上7到9点活跃适合推荐快节奏、提神的歌单“通勤路上型”用户早晚高峰活跃适合推荐播客和碎片化内容。这种从数据到策略的推导过程正是人机交互算法岗区别于纯算法岗的核心竞争力。3.3 强化学习与深度学习算法在交互优化中的实际落点那年的笔试没有直接出强化学习的大题但选择题里有一两道涉及深度学习和强化学习基础概念的题目。结合最近几年的行业趋势我觉得准备这个方向的同学很有必要把这两块内容补充进去。强化学习在交互产品里最常见的应用场景是“动态推荐策略优化”。传统的推荐算法是给用户一批候选内容算好分数一次性返回但用户真实感受是在多轮交互中逐步形成的可能这轮推的歌用户不喜欢但下一轮通过调整策略又挽回了。强化学习里的“状态-动作-奖励”框架恰好能描述这个过程状态是用户当前的行为序列和历史画像动作是本次推荐的内容组合奖励是用户是否点击、播放、收藏、分享。深度学习模型在人机交互领域的价值更多体现在对非结构化数据的理解上。比如交互式语音助手需要把语音转文字再看意图、抽槽位视觉交互界面需要目标检测和OCR识别按钮位置内容社区需要理解用户评论的情感倾向。这些能力在算法笔试中不一定直接考代码但很可能会以简答题或场景设计题的形式出现。我自己的一个体会是这个交叉岗位招的人未必是深度学习算法领域最强的研究者但一定是对算法能落地到什么产品场景有清晰认知的人。所以复习的时候可以多看一些网易云音乐、网易严选、网易新闻这些产品里算法发挥作用的案例比埋头刷题更有用。4. 在线笔试实操过程复盘从读题到提交的完整思维链4.1 时间分配策略与做题顺序的设计思路在线笔试和线下笔试最大的区别是你在自己熟悉的电脑前可以自由使用IDE、搜索引擎、甚至本地代码片段。但这既是优势也是陷阱因为大厂的在线笔试系统通常有切屏检测频繁切换窗口会被警告甚至取消成绩。建议考前把本地环境准备好电脑充满电、网络稳定、随手能打开常用代码模板库。做题顺序我建议“先做快速拿分题再做需要深度思考的题”。具体来说先花10到15分钟把选择题扫一遍把有把握的题立刻作答不确定的题标记下来留到后面再回来想。然后做机器学习简答题因为这类题不需要代码运行你的思路只要足够清晰就能拿大部分分数。接着做交互场景分析题这类题考察的是设计思维没有绝对的标准答案开放度很高认真写就能拿分。最后集中精力攻克算法编程题。4.2 一道交互场景题的完整解题演示很多人对“交互场景分析题”没有概念觉得不是CS专业出身可能答不好但实际上这类题恰恰是门槛最低、最容易通过训练提升的。我举个例子还原当时的一道题网易云音乐的桌面客户端在播放音乐时若用户同时打开了多个窗口比如播放列表窗口、歌词窗口、评论区窗口经常出现窗口大小不一、重叠后难以点击关闭的情况。请从人机交互角度分析该问题的成因并设计一个合理的解决方案。这道题考的不是算法而是对用户行为、界面设计原则、状态管理机制的综合理解。我当时从三个层面作答第一层是问题成因分析。窗口大小不一导致重叠的根本原因在于系统对窗口的层级关系z-order、默认尺寸、最小化策略缺乏统一的约束。不同窗口由不同功能模块生成各自的初始尺寸直接写死在代码里没有根据当前屏幕分辨率和用户历史使用习惯做自适应。重叠后难以点击关闭则涉及鼠标事件命中的判断逻辑——上层窗口的透明区域默认拦截了鼠标事件导致下层窗口无法感知点击。第二层是界面层的解决方案。可以做“窗口自适应布局”和“一个主操作区”的模式把歌词、评论等辅助功能以侧边栏或浮层形式整合到主界面内从源头避免多窗口重叠。如果业务上确实需要多个独立窗口则引入“窗口管理器”统一记录每个窗口的位置和尺寸在窗口启动时根据屏幕剩余空间自动调整大小和位置并把新窗口默认置为不可遮挡主窗口的层叠模式。第三层是技术实现层面的方案。可以引入一个全局的窗口状态管理器监听窗口的创建、销毁、移动、缩放事件维护一张窗口矩形列表每次有新窗口创建时运行一个简单的贪心算法寻找当前屏幕上最大的空白矩形区域把新窗口放到该区域如果用户手动调整了窗口位置管理器记录这一偏好并在下次为该用户打开同类型窗口时采用偏好数据。这类算法实现简单、效果立竿见影不需要复杂的机器学习模型。这道题告诉我一个非常重要的信息人机交互算法实习生的笔试里出现的“算法”不只是代码题里的那头还可能藏在产品问题设计的方案里。你给方案的时候如果能自然带上算法设计和数据驱动的思路会明显比其他候选人高一个段位。4.3 编程题从读懂到提交的实操步骤拆解在线编程题的实操环境通常是牛客网或赛码网编辑器功能比较简单没有断点调试能力建议考前熟悉一下这类平台。我们以一道典型的在线编程题“计算两个歌单的相似度”为例演示完整的解题步骤。第一步是整理输入输出格式。题目会明确给定输入数据的组织方式常见的是第一行给一个整数N表示歌曲数量接着N行每行包含歌曲id和两个歌单中的序号。这种题必须先手推一遍样例确认数据是按什么顺序读取的。第二步是设计数据结构。比较两个序列的相似度有很多种计算方式最常见的是计算两个序列之间的“公共子序列长度占较长的比例”本质是LCS最长公共子序列问题。LCS的经典动态规划转移方程为设 ( dp[i][j] ) 表示第一个序列前i个元素和第二个序列前j个元素的LCS长度则 [ dp[i][j] \begin{cases} dp[i-1][j-1] 1 \text{if } a[i] b[j] \ \max(dp[i-1][j], dp[i][j-1]) \text{otherwise} \end{cases} ]第三步是处理边界条件和内存优化。如果N的范围在1000以内直接开二维数组没有问题但如果N到了10000二维数组的O(N^2)空间就不可接受了需要优化成滚动数组只用两行来滚动更新dp值。第四步是本地自测。写完代码后在本地IDE用几个小规模的样例测试重点测边界情况两个序列完全一样、完全不一样、一个序列为空。确认无误后再粘贴到在线平台提交。第五步是分析复杂度和说明思路。这是很多考生容易忽略的但部分在线笔试系统要求提交“解题思路说明”即使不强制在代码注释里写清楚也能体现专业度。5. 常见问题与避坑经验过来人踩过的坑帮你提前填平5.1 笔试中反复出现的陷阱与应对策略备考过程中最容易踩的坑有这么几个我按踩坑频率排个序第一坑轻视选择题里的基础细节。很多同学觉得选择题占分少瞎蒙也有概率不用花太多精力。但实际上选择题是拉分的稳定盘而且大厂笔试选择题的范围非常广操作系统、计算机网络、数据库、概率论都可能来一道。我当时就在一道“TCP三次握手过程中第二次握手失败会发生什么”的选择题上纠结了很久最后答案还没选对。这类题纯靠平时积累考前突击效率很低建议长期持续复习。第二坑编程题只看逻辑不看边界。在IDE里跑通不等于在平台上通过因为平台的测试用例会包含大量极端边界空数组、只有一个元素、元素全部相同、超大输入。我在一次模拟笔试里写过一道归并排序求逆序对的题逻辑完全正确但忘记把统计变量声明为long long导致大数溢出报错了好几次。这种错误在真实笔试中出现会非常影响心态。第三坑把交互场景题当成产品经理笔试题来写。人机交互算法岗场景题的重点不是“设计一个好看好用的功能”而是“用数据思维和技术方案解决交互问题”。如果整篇回答都在谈交互设计原则和用户痛点没有落到算法如何设计、数据如何利用、系统如何架构分就不会高。第四坑死磕一道题导致时间失控。在线笔试系统通常在交卷前3分钟会弹提醒很多人在最后几分钟还在改第一道编程题的代码导致后面已经写了大半的简单题没时间提交。建议在笔试开始时先花两分钟通读全部题目给每道题预设一个时间上限超过上限就跳。5.2 数据合规与平台规则做用户行为分析的底线意识既然笔试题大量涉及用户行为数据和产品策略这里必须提醒一个容易被忽略但很重要的点在真实的实习工作中使用用户数据进行行为分析和算法建模必须严格遵守隐私保护和数据合规要求。具体到笔试场景中如果你在交互场景题里提出“采集用户所有点击行为、记录每一次滑动轨迹、用摄像头监测用户表情来分析喜好”这类方案面试官不但不会给你加分反而可能认为你缺乏对用户隐私和数据安全的基本敬畏。合理的方案应该是在脱敏数据上进行统计建模不采集非必要的敏感信息对采集到的数据做访问控制和匿名化处理。对于投稿和分享面经也一样发布内容时不要贴出真实的公司内部文档或截图不要泄露具体的面试题原文除非该公司已经公开把题目描述改写、抽象成通用的知识点既保护了公司权益也避免给自己带来不必要的麻烦。5.3 面经与刷题平台的选择建议最后聊聊准备阶段用什么资源。算法刷题方面LeetCode的Hot 100和牛客网的名企真题是性价比最高的两个来源。LeetCode适合练基础算法和数据结构牛客网可以模拟大厂在线笔试的真实环境。系统设计方面可以学习分布式系统、缓存、消息队列等基础知识因为交互场景题可能会让你设计一个高并发下的实时推荐接口。机器学习和深度学习方面统计学习方法李航、机器学习周志华、深度学习花书这三本书足够覆盖笔试的知识点范围。人机交互理论方面建议阅读《Designing Interfaces》和《The Design of Everyday Things》不用读得很深但至少要知道交互设计的基本法则、可用性测试的方法论、心智模型的概念。我还想多说一句笔试只是整个招聘流程的第一道关卡通过之后更关键的其实是面试环节。面试里经常会有现场写代码、算法推导白板题、过往项目深挖这些环节笔试的很多知识点在面试中都会被重新拷问。所以不要把准备笔试当成一个孤立的任务不妨把它和面试准备放在一起打磨每一道错题都值得回头深入研究。那场笔试最终给了我面试机会虽然那一年因为种种原因我最终没有入职网易但那次备考过程中建立的算法体系和对人机交互方向的深度理解影响了我后续整个职业方向的选择。每次有学弟学妹来问这个岗位怎么准备我都会说别把它当成一份普通的大厂实习来看待这个岗位的笔试考察的是“技术深度产品视野用户同理心”的综合素质而你认真准备这场比赛的过程本身就是一次极其宝贵的专业成长。
返回列表