ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

网易HCI算法工程师校招笔试考点全拆解:人机交互+算法双线攻略

网易HCI算法工程师校招笔试考点全拆解:人机交互+算法双线攻略 2018年那个秋招季我投了网易的人机交互算法工程师。说实话刚看到这个岗位名称的时候心里有点犯嘀咕——人机交互听着像产品经理干的事算法工程师又像是纯写模型的这俩揉在一起到底考什么直到我打开在线笔试系统看到题目分布的那一刻才明白这个岗位想招的是一种“两头都硬”的人算法功底要够扎实同时对用户怎么感知、怎么理解界面这一套也得说出个所以然来。整张卷子做下来感觉和常见的机器学习算法岗笔试完全不是一个路子它更看重你有没有能力用算法去解决真实的人与产品交互问题。这份笔试卷子后来被我反复拿出来复盘整理过不少笔记。今天把完整的考点拆解、做题思路和踩过的坑分享出来供准备投递HCI方向算法岗、或者对“算法交互”交叉领域感兴趣的同学参考。1. 一场笔试的定位网易HCI算法岗到底想招什么样的人先说结论从这份笔试卷子来看网易的人机交互算法工程师并不是要招一个纯算法调参选手也不是招一个画原型的交互设计师而是招一个能站在算法视角去理解用户行为、优化交互体验的人。这个定位在题目里体现得非常明显。1.1 岗位要求的隐含信息我当时是这么拆解的人机交互HCI算法工程师核心工作内容应该是用算法手段解决交互场景里的具体问题——比如用户行为预测、个性化推荐、语音对话策略、界面自适应调整等。这就要求候选人具备三块知识储备经典算法与数据结构基础这是算法岗的通用门槛像KMP、动态规划、排序这类题基本必考。机器学习与深度学习基础涉及用户建模、推荐、NLP处理等场景。人机交互与认知心理学基础这是和其他算法岗最大的区别需要懂Fitts定律、认知负荷、可用性评估这些概念并且能跟具体的产品场景结合起来分析。从题目类型分布来看这套笔试大约涵盖了逻辑行测选择题、专业基础知识选择题、算法编程题和综合简答题几个板块。其中算法编程题是硬骨头给分占比最高而综合简答题最考验思维深度往往没有标准答案考察的是你分析问题和结构化的能力。1.2 为什么校招笔试要这样设计企业校招不像社招那样可以拿你过去的工作成果来验证能力只能通过一张卷子尽可能多地覆盖考察维度。HCI算法岗在校招里的定位比较尴尬招纯算法的人吧怕不懂交互招纯交互的人吧怕算法基础不够。所以笔试题就变成了“左右夹击”的模式。另外一个值得注意的背景是2018年正是智能语音助手、个性化推荐、短视频信息流快速发展的时期。网易在邮箱、云音乐、考拉等产品线上有大量用户行为数据和交互优化需求需要算法工程师去理解“这个按钮放在这里用户会不会点”“这样推荐用户会不会觉得打扰”。笔试题目里大量出现这类场景化分析其实是紧跟业务需求的。2. 人机交互理论题不是背概念而是考察你怎么用专业基础这部分的题目和一般计算机基础题完全不是一回事。它考的是一系列人机交互领域的经典理论和原则但不会直接问你“请解释Fitts定律”而是把所有理论都包装在产品场景里看你能不能识别出来。2.1 Fitts定律在产品设计里的变体考法我记得有一道题大概是这样的一个手机App的底部Tab栏按钮在两种设计方案里一种是按钮又大又靠近拇指热区另一种是按钮偏小且分布在屏幕顶部问哪一种方案下用户平均点击耗时更短为什么。Fitts定律的公式是 MT a b log2(2D/W)其中MT是运动时间D是目标距离W是目标宽度。这道题本质上就是考你目标越大、距离越近操作时间越短。底部Tab栏本身就在拇指热区距离D天然小如果把按钮做大W变大整个 log2(2D/W) 的值进一步下降。反过来顶部小按钮距离远、目标小操作时间明显更长。所以答案显然是第一种。但这里有个容易忽略的坑Fitts定律不是一个精确的计算公式而是一个趋势性模型。实际做题的时候不需要把具体数值算出来而是要比大小、判断趋势。如果你在考场上试图手算log2反而会浪费大量时间。这条经验很实用——人机交互理论题考的是定性分析能力不是数值计算能力。2.2 认知负荷与心智模型在交互流程题中的应用还有一类题是给出一个交互流程比如注册页面有10个必填项分3步完成和10个必填项一页全展示问哪种方案对用户认知负担更小。这里涉及认知负荷理论用户的工作记忆容量有限一次性要处理的信息项越多认知负荷越高出错率也会上升。分步流程虽然会增加操作步数但每一步的信息量小用户不需要同时记住太多内容整体体验反而更好。我当时答这类题时给自己总结了一个分析框架先定义用户目标再拆解完成目标需要几步操作每步操作涉及多少信息输入和记忆量最后对比方案的容错性和学习成本。用这个框架去答综合分析题基本都能踩到得分点上。2.3 可用性评估方法的选择题陷阱选择题里有一类是给你一个场景问用哪种可用性评估方法最合适。比如“产品上线前想快速发现主要交互问题预算有限应该用启发式评估还是用户测试”。正确答案是启发式评估因为成本低、不需要招募大量用户几个专家按照尼尔森十大可用性原则过一遍界面就能发现问题。而用户测试更适合在有完整原型、需要获取真实用户行为数据时使用。这个知识点本身不复杂但题目里经常会加干扰条件比如“产品已经有大量线上用户数据”“想要统计用户满意度差异”“需要评估不同设计方案的任务完成率”。选择题的规律是只要涉及大量用户、需要统计分析就有A/B测试或问卷调查的身影只要涉及早期快速发现问题就选启发式评估。你要是能把可用性评估这个知识谱系梳理清楚这部分题目拿分并不难。3. 算法编程题KMP、排序、动态规划的隐形考点算法编程题是整张卷子的大头而且考察方式比纯LeetCode题更灵活。它不直接叫你写一个快排而是把排序算法放进某个交互场景里或者给一个字符串匹配问题让你算出next数组。这部分的题目难度介于LeetCode Medium到Hard之间有一些是经典题加了壳。3.1 KMP算法与next数组计算必须手推一遍热搜词里有一条“对于模式串 pabacaba其next数组”这几乎就是当年笔试的原型题。我当时看到这道题第一反应是直接默写KMP的next数组计算过程但说实话如果平时只是背代码而没真正手推过很容易在细节上翻车。next数组部分匹配表的定义是next[i]表示模式串P[0...i]的最长相等真前缀和真后缀的长度。注意“真”这个字意思是前缀和后缀不能是整个子串本身。以pabacaba为例我带你完整推一遍i0子串a没有真前缀和真后缀next[0]0。i1子串ab前缀a后缀b不相等next[1]0。i2子串aba前缀a和ab后缀a和ba最长相等的是a长度1next[2]1。i3子串abac前缀a、ab、aba后缀c、ac、bac没有相等的next[3]0。i4子串abaca前缀a、ab、aba、abac后缀a、ca、aca、baca最长相等a长度1next[4]1。i5子串abacab前缀a、ab、aba、abac、abaca后缀b、ab、cab、acab、bacab最长相等ab长度2next[5]2。i6子串abacaba前缀a、ab、aba、abac、abaca、abacab后缀a、ba、aba、caba、acaba、bacaba最长相等aba长度3next[6]3。所以next数组是 [0, 0, 1, 0, 1, 2, 3]。这个数组的用途是当匹配失败时模式串指针不回退到开头而是根据next数组跳到最长相等前缀的末尾从而避免重复比较。笔试里关于KMP的坑点有两个一是不同教材对next数组的初始化定义不同有的从-1开始有的从0开始考场上要先看清题目给的定义二是只背了求next的代码但没理解“最长相等真前后缀”的含义导致手算错误。我建议备考的时候把至少三个模式串的next数组手推一遍比如aaaa、ababab、abcababc推完基本就稳了。3.2 排序算法与稳定性交互排序场景里的应用有一道题让我印象很深一个App的推荐列表展示了一组内容需要用“综合得分”排序展示而综合得分由两个字段组成——相关度和热度。题目问如果先按相关度排序再按热度稳定排序最终结果呈现的是以哪个字段为主的排序这里考的是排序的稳定性。稳定排序是指当两个元素的关键字相等时它们在排序前后的相对位置不变。如果一个排序算法是不稳定的比如快速排序那么先按相关度排再按热度排最终相关度相同的内容之间的相对顺序可能会被打乱结果就不是“以热度为主、相关度次之”的预期效果了。常见的稳定排序有冒泡、插入、归并不稳定排序有快排、堆排、选择排序。在需要多关键字排序的场景里选稳定的归并排序往往最省心。我当时答这道题的时候差点栽了因为平时刷题很少关注稳定性觉得只要能按某个key排出来就行。但实际工作中排序稳定性对推荐列表的体验有直接影响——用户看到列表内容在刷新后跳来跳去很大程度就是因为排序不稳定。3.3 贪心与动态规划从“区间调度”到“交互行为优化”算法编程题里还出现了典型的贪心和动态规划问题。有一道区间调度变体题给出一组用户在某页面上的停留时间段问最多能安排多少个不重叠的用户访谈。这本质上是经典贪心题“活动安排问题”解法是按结束时间排序依次选择结束时间最早且与已选区间不重叠的区间。为什么贪心在这里是最优解因为结束时间越早留给后续区间的剩余时间就越多这是一个局部最优能推出全局最优的典型场景。这类题在交互场景里的变形很多比如评估同一时段内系统最多能承载多少个实时语音交互任务、视频会议里最多能安排多少个不冲突的面对面讨论等。另外一道动态规划题是背包问题的变体给出一组功能点每个功能点有开发成本和用户满意度提升值在总预算约束下选择哪些功能点能使满意度提升值最大。这不就是0-1背包吗状态转移方程是dp[i][j] max(dp[i-1][j], dp[i-1][j-cost[i]] value[i])滚动数组优化后从后往前遍历j即可。我在做这类题目时习惯先在纸上写出状态定义、转移方程和边界条件再动手写代码。尤其是动态规划如果状态定义写错了代码怎么调都调不对。这道题的坑在于部分功能的成本可能为0如果不加判断直接用滚动数组会导致同一个功能被选多次需要认清“0-1背包 vs 完全背包”的边界。3.4 粒子群算法在交互参数优化里的简答考法简答题里出现了一道涉及粒子群算法PSO的题目如何用粒子群算法自动调节推荐瀑布流中的图片加载数量使得用户浏览深度和加载耗时之间达到最优平衡。粒子群算法的原理不复杂每个粒子代表一组候选解在这里就是图片加载数量的一个取值粒子有两个属性——速度v和位置x。在每一轮迭代里每个粒子根据自身历史最优位置pbest和全局最优位置gbest来更新速度再更新位置。更新公式是 v wv c1rand()(pbest-x) c2rand()*(gbest-x)x x v。其中w是惯性权重c1、c2是加速系数。把这个问题映射到交互场景里适应度函数可以设计成 f a浏览深度 - b加载耗时用所有用户的统计数据作为评估值。粒子群算法通过多轮迭代逐步逼近最优参数组合。这道题考察的不只是你会不会背粒子群公式而是你能不能把一个真实的交互优化问题抽象成优化模型然后套用合适的启发式算法去求解。4. 机器学习与交互结合的综合题从行为数据到体验优化如果说算法编程题是硬实力那综合简答题就是软实力的试金石。这部分题没有标准答案考察的是你分析和设计实验的能力。我印象最深的是两道题一道关于推荐系统的评估一道关于对话系统的策略设计。4.1 推荐系统评估点击率不是唯一标准题目背景是某内容产品的推荐模块通过算法优化后点击率明显提升但用户平均停留时长和次日留存率反而下降了。请你分析可能的原因并设计一个更全面的评估方案。这个题其实就是HCI算法工程师日常工作的核心命题——算法优化不能只看点击率还要关注用户体验和长期价值。我当时从两个维度展开回答原因分析点击率提升可能是使用了“标题党”式的推荐策略文案和封面图吸引用户点击但内容质量不匹配用户进来后很快离开导致停留时长下降。还有一种情况是推荐内容过于同质化虽然用户会点但长时间来看对产品产生审美疲劳留存率自然下降。全面评估方案先把指标分层——核心指标留存率、使用时长、过程指标点击率、完播率、收藏率、体验指标用户满意度问卷、负面反馈率。然后用A/B测试对比新老算法实验周期至少覆盖一个完整的使用周期通常是一到两周样本量用显著性检验来确认。另外需要监控长尾效应比如连续使用7天后留存的变化趋势。这道题考验的是你有没有做过真实的产品数据评估只背机器学习评估指标的公式是远远不够的。4.2 对话系统与强化学习从意图识别到策略优化另一道综合题是关于智能客服对话系统的用户输入一句话系统需要识别意图、抽取关键槽位然后给出回复。请描述完整的技术链路并说明如何通过强化学习优化对话策略。这道题的答题逻辑是先讲清楚NLP基础模块——用户输入经过分词、意图分类比如“查快递”还是“退换货”、槽位填充比如快递单号、订单编号然后由对话管理模块决定下一步动作询问缺失信息/直接回复。意图分类可以用经典的文本分类模型槽位填充可以用序列标注模型。接下来是强化学习部分把对话过程建模为马尔可夫决策过程状态是当前的对话轮次、已填槽位和用户输入的特征动作是回复的系统行为追问、确认、给出答案奖励是用户是否成功完成目标、对话轮数是否尽量少、用户满意度评分。用策略梯度或DQN类方法训练一个策略网络让系统学会在“信息不足时追问”和“信息足够时给出答案”之间做最优选择。4.3 用户行为序列建模从交互日志到个性化预测还有一个我觉得值得说的题目方向是用用户交互行为序列建模——给出一段时间内用户的点击行为序列比如点击了哪些商品、浏览了哪些视频要求设计一个模型预测用户下一个最可能点击的内容。这道题的标准解法是把行为序列用Embedding向量表示然后输入到LSTM或GRU这类循环神经网络中最后接一个Softmax做多分类。更进阶的做法是引入注意力机制让模型自动关注序列中更重要的行为。2018年的技术栈里Transformer还算是新东西我当时主要还是用LSTMAttention的方案去答。这里有一个HCI视角的关键点行为序列里不仅有“点击了什么”还有“在什么时间点点击”“停留了多久”“是否有滑动或退出行为”。这些交互细节对用户意图的预测非常有用。比如一个用户在某商品页停留了30秒再返回列表和停留2秒就返回意图强度完全不一样。你在设计特征的时候如果能把这些交互行为特征纳入模型预测效果通常会有明显提升。5. 考后的复盘那些我差点答错的题和踩过的坑笔试结束后我把整张卷子的考点全部列出来对照自己的作答情况做了复盘。这个动作对我来说帮助非常大甚至比刷题本身更有价值。以下是我总结出来的几个值得注意的坑。5.1 HCI理论光背概念没用要配上产品案例一起记我当时掌握Fitts定律、认知负荷这些概念的时候只是停留在“能默写定义”的程度。但笔试题完全不给背定义的机会全都是场景化的。后来我把每个概念都配了至少两个产品案例去理解比如Fitts定律配手机底部Tab栏和大按钮设计认知负荷配分步注册和单页长表单心智模型配合法左对齐和红色警示的冲突。这样再遇到场景题脑子里能立刻调出对应的理论。对于没有系统学过人机交互的同学建议把《设计心理学》里关于示能性、意符、反馈、约束的部分以及尼尔森十大可用性原则重点看一下。这部分知识不需要很深但覆盖面要广因为选择题里出现哪个方向的角落知识点都不奇怪。5.2 算法题一定要手推不要只在IDE里跑通我在备考KMP的时候犯过一个典型错误代码在IDE里能跑通但一到了笔试要求手算next数组就开始犯迷糊。后来我总结出一个规律——算法笔试里的字符串题、动态规划题考官的出题意图往往不只是让你写代码更是考察你是否真的理解了算法的执行过程。所以备考阶段重要算法至少要能手推三个不同的测试用例快排的一次partition过程、KMP的next数组逐位推导、0-1背包的DP表格填充。这些手推过程会让你在考场上的信心完全不一样。5.3 时间分配比我想象的更重要我记得这套笔试题量不算少编程题和简答题都非常吃时间。我当时的策略是先把所有选择题快速扫一遍不会的标记跳过保证后面的编程题有充足时间编程题先写框架再补细节争取至少通过一道半综合题用“观点段依据段结论段”的格式写每个小问控制在15分钟以内。这套时间管理下来虽然有一部分较难的编程题没完全跑通但整体完成度还过得去。有一个反面教训我在第一道编程题上花的时间过多导致后面综合题答题时间被压缩回答得不够充分。如果你也打算投递这个岗位我现在会建议你先做综合题再做编程题——综合题的好答案是“只要认真答就有分”的而编程题如果没有完整通过投入产出比其实不够稳定。5.4 答题时要有结构化思维尤其是综合题综合题的判分往往依赖关键词和逻辑结构而不是具体的某个数值。我在每一道综合题里都尽量用“总分结构”来组织答案先给出结论再分条列出理由最后做一个简短的补充说明。这样既方便考官快速抓重点也显得你思维清晰。举个具体的例子如果题目问“请评估A/B测试的样本量需要多大”我一般这样答先明确原假设和备择假设、显著性水平α取0.05、统计功效1-β取0.8再给出公式 n ((z_{α/2}z_β)^2 * 2σ^2) / δ^2然后根据业务预估的效应量δ和标准差σ带入计算。这个公式本身并不复杂但结构清晰地写出来观感完全是专业级别的。这种答题方式在综合题里拿高分的概率会大很多。5.5 动手设计一个“算法交互”的小项目比刷一百道题更有用从网易的这套笔试卷往回看我认为“算法”和“人机交互”的交集才是这个岗位真正的门槛所在。如果你在简历上或者笔试里能展示一个自主完成的“算法交互”小项目——比如做一个简单的手势识别原型、对某个App的交互日志做一次行为聚类分析、写一个基于强化学习的对话机器人Demo——那么你对这个岗位的适配度会比光有竞赛奖项和刷题量高得多。我后来去做智能客服相关的项目时才深刻体会到校招笔试里那些综合题和实际工作几乎是一回事需求分析、数据理解、模型选择、评估迭代、用户体验权衡每一步都是完整的闭环。笔试考的不是某一道题的答案而是你在整个链路里有没有建立起属于自己的方法论。如果你现在正在备考这类HCI算法岗我的建议很直接别只埋头刷算法题也别只读人机交互理论把这两条线融合起来带着“算法能怎么优化这个交互体验”的视角去准备然后找几个真实产品场景动手做一遍。这个过程本身就是最好的复习。
返回列表