十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

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

快手2020秋招工程B卷复盘:校招笔试考点与备战思路

快手2020秋招工程B卷复盘:校招笔试考点与备战思路 工程岗笔试这事儿我一直觉得它不像面试面经漫天飞笔试经验往往藏着掖着。尤其在秋招这种节点笔试作为第一道筛子筛掉的从来不是“不够聪明的人”而是“没搞清楚游戏规则的人”。今天想跟你聊聊快手2020年秋招工程B卷不只是对答案而是拆一拆这张卷子背后面试官到底在考察什么以及你该怎么准备才能不吃亏。先说几个关键词快手、2020秋招、工程B卷。岗位是工程方向不是算法方向这就决定了卷子的脾气——重基础、重代码能力、重计算机素养的广度但不会像算法岗那样死磕数学推导。工程B卷更像个“体检报告”基本功扎不扎实、代码功底干不干净、排查问题有没有思路几道题下来就暴露得差不多了。我当时刷完这套题的感觉是不难但想拿高分不容易。题目不算偏怪属于那种“你平时认真读书、刷过题、写过项目就能答但如果只是背了八股文没真正理解底层机制就很容易在细节上翻车”的类型。所以这篇复盘我尽量把考点还原清楚把做题思路、容易踩的坑、以及考后该补的知识盲区都讲透。不管是明年要参加校招的你还是想检验一下自己工程基本功的老手这篇都值得看看。1. 工程B试卷的考察结构一张卷子看穿你的基本功先给没经历过互联网校招笔试的朋友补个背景。快手的笔试题型在主流大厂里算比较典型的组合客观题选择、判断加主观题编程题。工程B卷整体风格偏向“计算机基础 代码实战”的打包体检。比起纯粹考算法的A卷B卷更照顾工程岗的实际工作场景——毕竟工程岗日常要面对的是操作系统、网络、数据库、并发问题而不只是排序和动态规划。卷子大体分三块我对它的印象是这样第一部分是基础客观题覆盖数据结构、计算机网络、操作系统、数据库基础。不是深挖到犄角旮旯而是考那些“你说你懂但真不一定说得清楚”的知识点。比如进程和线程的区别、TCP三次握手为什么是三次、索引失效的场景。第二部分是编程题一般是2-3道难度梯度分明。第一道是“热身菜”基本就是链表操作或者简单DP让你进入状态后面几道逐渐上难度考察栈、队列、二叉树、动态规划这些核心内容。快手笔试的编程题有个特点大厂标配的ACM模式输入输出要自己处理平时习惯了LeetCode核心代码模式的第一次做会有点懵。第三部分是附加题或者问答题有些场次有有些没有。内容一般是场景设计或者排错题比如“线上接口突然变慢你怎么排查”。这种题没有标准答案考察的是你的排查思路和工程素养。我对这张卷子的整体判断是重基础、重广度但没到故意刁难人的程度。如果你系统学过计算机核心课程刷过200道左右的LeetCode平时又爱折腾点小项目通过笔试应该问题不大。怕就怕那种只刷题不看书、只看面经不写代码的学法基础题和编程题会同时露出马脚。2. 基础客观题那些容易“看着眼熟、选的时候犹豫”的考点客观题是这张卷子的基本盘。我按板块回忆一下真题涉及的知识点把高频的、容易出错的都拎出来说。2.1 数据结构与算法不只是“背概念”数据结构这块快手考得比较实在。有一道题我记得很清楚问哈希表解决冲突的方法给了几个选项开放定址法、链地址法、再哈希法、建立公共溢出区。这题本身不难但选项里会有干扰项比如“二叉排序树法”——看着像那么回事其实根本没这个说法。这种题就是在考你有没有真正理解各种冲突处理方案而不是只记住“哈希表很快”。还有一道关于栈的题问一个栈的入栈序列是1到n出栈序列有多少种可能。这题本质是卡特兰数但如果你没接触过卡特兰数现场推导也能推出来。我当时是用动态规划的思路去想的假设栈里还有i个元素没处理栈外有j个元素等着入栈状态转移就出来了。不过考场时间有限如果你能记住卡特兰数的公式这种题就是秒杀。二叉树这块考了根据前序遍历和中序遍历还原二叉树问后序遍历结果。这是经典题了核心思路是“前序遍历的第一个节点是根在中序遍历里找到根左边是左子树右边是右子树”然后递归处理。关键是递归的边界很多同学笔试的时候一紧张下标搞混复原出来的树都是错的。2.2 计算机网络三次握手和端口号是常客网络这块的考题比较常规。TCP三次握手为什么是三次而不是两次这个几乎是必考。我当时的答法是从“确认双方收发能力”的角度去说第一次握手客户端确认自己发送正常、服务端接收正常第二次握手服务端确认自己发送正常、客户端接收正常但客户端不知道自己发送的消息服务端是否收到了第三次握手客户端再确认一次双方收发能力全部确认。在笔试里这种理解性的回答比死记硬背“SYN、ACK”更得分。端口号的题也出现了问下列哪个是HTTP默认端口。这题是送分题但如果平时不注意可能会把HTTPS的443和HTTP的80搞混。还有一道题问TCP和UDP的区别选项中有一个“TCP支持多播UDP不支持”——这是错的恰恰相反UDP才支持多播。这种反常识选项就是专门坑那种死记硬背的选手的。网络分层模型也考了。问TCP/IP协议栈分为几层答案是四层应用层、传输层、网络层、网络接口层。容易出错的是把OSI七层模型和TCP/IP四层模型弄混所以这两种模型都要记清楚考试的时候看清题目问的是哪一个。2.3 操作系统死锁和虚拟内存是重点操作系统这块死锁的四个必要条件互斥、持有并等待、不可剥夺、循环等待是常客考法一般是给一个场景问破坏的是哪个条件。比如“一次性申请所有资源”破坏的是“持有并等待”条件“允许抢占”破坏的是“不可剥夺”条件。这样理解着记忆比死记硬背牢固得多。虚拟内存这块考了页面置换算法。FIFO先进先出、LRU最近最少使用、LFU最不经常使用这几个概念要分清。特别是LRU和LFU的区别LRU看的是“上次使用时间”LFU看的是“使用频率”这两个容易混。我当时在笔记本上写过一句话LRU是“最近没用的先淘汰”LFU是“用得少的先淘汰”这样分就清楚了。进程和线程的区别也是必考题。一个容易忽略的点是线程是调度的基本单位进程是资源分配的基本单位。很多教材强调“线程是进程的一部分”考试时就考这种一句话的概念你能不能一下子选出来。2.4 数据库索引和SQL是基本盘数据库这块索引的底层结构B树、索引失效的场景、SQL语句的编写是核心。有一道题问“下列哪个操作会导致索引失效”选项有“对索引列使用函数”“对索引列进行隐式类型转换”“使用LIKE %xxx”“以上都是”。答案是“以上都是”但如果你没总结过很容易漏选。SQL题考得比较常规比如“查询每个部门工资最高的员工”。这种题有两种经典写法一种是子查询加GROUP BY另一种是窗口函数ROW_NUMBER()。如果这道题出现在选择题里它会考你怎么选如果出现在编程题里就得看你现场写SQL的功底了。事务的ACID特性也考了考法很直接问“事务的原子性是指什么”。答案是“事务要么全部执行要么全部不执行”。这题不难但要注意和一致性Consistency、隔离性Isolation、持久性Durability区分别看到有“A”就选错。3. 编程题实操ACM模式下的代码较量编程题是笔试的重头戏也是真正拉开差距的部分。工程B卷的编程题频率最高的几个方向是字符串处理、链表操作、二叉树遍历、动态规划。我按从易到难的顺序把典型题目的解题思路完整走一遍这样你上考场才有章法。3.1 链表类题目指针操作见真章有一道题是“反转链表”你可能觉得这题太基础了但它在笔试里的出现频率高到惊人而且考法多样可能考反转整个链表可能考反转链表的一部分甚至可能考K个一组反转链表。反转整个链表的迭代写法我建议你练到本能反应的程度struct ListNode* reverseList(struct ListNode* head) { struct ListNode* prev NULL; struct ListNode* curr head; while (curr ! NULL) { struct ListNode* next_temp curr-next; curr-next prev; prev curr; curr next_temp; } return prev; }这里有个细节要特别注意反转前一定要先保存下一个节点next_temp否则指针指过去之后就丢了后续节点。很多同学笔试的时候本地IDE跑得好好的一上在线评测就报错就是因为边界条件没考虑清楚——比如链表为空、只有一个节点。这些情况都要在代码里体现出来。如果是“K个一组反转链表”思路就会复杂一些先遍历链表统计长度然后分段处理每段内部做反转段与段之间要接上。我当时的做法是写一个辅助函数reverseBetween反转区间内的链表然后主函数负责分段调用。这样写的好处是逻辑清晰DEBUG也方便。如果K大于链表长度直接返回原链表。3.2 二叉树题目递归是灵魂迭代也不能丢二叉树这块快手的笔试考过“二叉树的层序遍历”和“最近公共祖先节点”这类题。层序遍历也就是广度优先搜索BFS用队列做是标准解法from collections import deque def levelOrder(root): if not root: return [] result [] queue deque([root]) while queue: level_size len(queue) current_level [] for _ in range(level_size): node queue.popleft() current_level.append(node.val) if node.left: queue.append(node.left) if node.right: queue.append(node.right) result.append(current_level) return result这里有个容易忽略的点你进入每层循环前要先获取当前队列的长度level_size因为循环过程中队列会不断加入新节点如果直接用动态的len(queue)作为遍历次数就会把下一层的节点也“消费”掉导致层与层之间分不开。这个坑我在刚开始刷题的时候踩过印象特别深。“最近公共祖先”这道题递归版其实很优雅def lowestCommonAncestor(root, p, q): if not root or root p or root q: return root left lowestCommonAncestor(root.left, p, q) right lowestCommonAncestor(root.right, p, q) if left and right: return root return left if left else right这题的递归逻辑是在左子树里找p和q在右子树里找p和q。如果左右都找到了说明当前节点就是最近公共祖先如果只有一边找到说明两个节点都在那边继续往上返回。这个解法要求你理解递归的“返回值传递”逻辑笔试时画个图辅助思考会更快。3.3 动态规划从斐波那契到背包问题动态规划在工程B卷里出现的概率很高但一般不会出太难的状态设计常见的是“爬楼梯”“最短路径和”“01背包”这类经典模型。比如“最短路径和”这道题给你一个m x n的网格每个格子有一个非负整数找出一条从左上角到右下角的路径使得路径上的数字总和最小。思路是定义dp[i][j]为到达(i,j)位置的最小路径和状态转移方程是dp[i][j] grid[i][j] min(dp[i-1][j], dp[i][j-1])注意处理第一行和第一列它们是边界条件只能从左方或上方过来。有个小技巧可以直接在原数组上做原地更新这样可以节省O(mn)的空间但会改动原始数据。笔试时如果你写注释说明一下面试官反而会觉得你空间意识好。“爬楼梯”这类题就更基础了dp[i] dp[i-1] dp[i-2]可以用滚动变量把空间压到O(1)。这题虽然简单但它是很多复杂DP的基础比如“最小花费爬楼梯”“三步问题”都是这个模型的变体。基础DP题我建议你在笔试前把经典模型过一遍不用太多30道左右重点是掌握“状态定义 转移方程 边界条件”这个思考框架。3.4 ACM模式的核心细节输入输出别翻车说个我自己的血泪教训。第一次参加某厂的笔试第一道题明明逻辑写对了但就是不通过后来才发现是输入输出格式的问题。ACM模式的笔试里你必须自己处理输入输出。LeetCode那种“函数接收参数返回结果”的套路在牛客网这类笔试平台上完全行不通。比如如果题目要求“第一行输入一个整数n第二行输入n个整数”你在C里要这样写#include iostream using namespace std; int main() { int n; cin n; int* arr new int[n]; for (int i 0; i n; i) { cin arr[i]; } // 你的核心逻辑 delete[] arr; return 0; }Python版本更简洁import sys def main(): data sys.stdin.read().split() n int(data[0]) arr list(map(int, data[1:1n])) # 你的核心逻辑 if __name__ __main__: main()这里我强烈建议你学一下sys.stdin.read().split()这种整块读取的方式。它比input()一行一行读要稳得多尤其当数据量比较大的时候性能差距很明显。输入这块是笔试的心智负担来源之一提前把这套模板准备好上考场就少一项顾虑。3.5 笔试编程题的做题策略不会也别空着编程题的做题顺序和策略我认为是笔试拿高分的隐形因素。从工程B卷的难度梯度来看第一道题热身题必须拿下。这类题通常考察基础的数据结构操作比如数组去重、字符串翻转。心态平稳、代码规范10分钟内搞定。拿下它意味着你有了保底分心理压力会小很多。第二道题核心题争取完整AC。通常是链表、二叉树或者简单DP。拿到题先花2-3分钟设计思路确认时间复杂度可行然后动笔写。这类题是区分“通过”和“不通过”的分水岭你要保证思路清晰、边界完整最好一遍过。第三道题压轴题尽力而为。如果短时间内没有思路可以想想暴力解法能拿多少分。很多在线评测系统有“部分通过”机制你写出一个时间复杂度较高但正确的暴力解法能拿到一部分测试用例的分数千万别空着。如果时间还剩5分钟没写完的题也别立刻交了。检查一下基础题的答题卡有没有漏选编程题的代码有没有编译错误。我见过太多人提前交卷结果发现第一道编程题因为少写一个return 0而编译失败白白丢分。做题节奏上我的经验是基础题控制在25-30分钟内给三道编程题留足一个半小时。如果一道题卡了15分钟以上没思路先跳过做后面的不要在一个题上死磕。笔试不只是考你会不会也在考你的时间和精力分配能力。4. 附加题与场景题工程素养的分水岭快手工程B卷部分场次有附加题通常是场景设计或线上问题排查。别看它分值占比不一定高面试官对这类题的回答质量印象极深。典型的题是“线上服务突然变慢你怎么排查”大多数人张口就是“重启一下”“看下日志”但工程素养好的人会给出有层次、有顺序的排查思路。我当时是按这个框架答的先确认影响范围是所有接口都慢还是某个接口慢是所有用户都慢还是部分用户慢这一步能帮你快速定位问题的大致方向。比如只有部分用户慢可能是网络链路问题全部用户都慢可能是服务自身问题。看监控和日志CPU、内存、磁盘IO、网络IO、GC次数、错误日志、慢日志这些监控数据能反映系统当前的健康状态。如果CPU飙升优先排查是否有死循环或密集计算如果GC频繁优先排查是否存在内存泄漏或对象分配过多。检查中间件数据库慢查询、Redis大key、消息队列堆积。很多时候服务变慢不是应用层的问题而是下游依赖变慢拖累了你。我经历过最典型的案例是线上接口变慢排查半天最后发现是数据库的慢查询把连接池占满了应用层拿不到连接全部超时。定位到具体代码通过链路追踪比如调用链ID找到具体是哪个方法耗时最长结合代码逻辑分析是否有锁竞争、是否有N1查询、是否有大对象分配。兜底措施降级、限流、熔断保证核心可用性。这套排查思路不是背出来的是做项目时真的踩过坑之后总结出来的。如果你平时没有线上排查的经验也可以在笔试前多看看相关的技术博客把“监控 - 日志 - 中间件 - 代码”这个排查链路内化成自己的思维框架。还有一个问法是“设计一个短链接系统”这是经典的系统设计题常考的是发号器、重定向、过期策略、并发量估算。在笔试附加题里不需要你画详细的架构图但要有清晰的分模块思路如何生成短码自增ID转62进制、如何存储映射Redis MySQL、如何跳转301还是302、如何做扩展。能想到这几层并进行逻辑描述就已经在平均水准之上了。这种场景题面试官想看到的不是“标准答案”而是你面对一个开放性问题时是否知道从哪些维度去拆解。说白了这是工程思维的分水岭。5. 考后复盘笔试不仅是做题更是查漏说实话笔试考完如果你对完答案发现错了一堆这不一定是坏事。错题是最精准的复习导航。比起拿到一个漂亮的笔试分数我更看重这套题帮你暴露出的知识盲区和思维盲区。我自己在准备工程类笔试的时候有一个习惯每场笔试结束我花半小时写“错题复盘笔记”。这个笔记不是简单记录正确答案而是拆解“我为什么做错”。比如是因为概念没记住比如TCP和UDP的区别搞混了那是基础不牢需要回归教材补概念。是因为思路没想到比如动态规划的方程没推出来那是题目做得少需要加强同类题型的专项训练。是因为输入输出格式没整明白导致代码正确却无法通过那是ACM模式经验不足需要去牛客网多做几道在线编程题。这三种错误的应对方式完全不同。基础不牢靠临时突击是没用的需要系统、耐心地补基础题型训练不足就需要短时间内多刷题、多总结而输入输出的问题只需要练习一次就能解决。我见过太多同学刷了大量的题但在笔试里依然栽跟头原因就三个字没复盘。刷题不是看量而是看每一次刷题有没有真正让你产生理解上的进步。一道题你AC了如果让你讲给一个完全没学过的人听你能讲明白吗讲不明白说明你没有真正掌握它。工程B卷这套题无论你考得好不好我都建议你做一件事把每一道错题关联到对应的知识点给自己列一个“补漏清单”。比如清单上写“哈希冲突处理方案不熟”“二叉树的迭代遍历不会写”“SQL窗口函数没掌握”然后一项一项去攻克。这个过程比多刷十套模拟题都有用。6. 校招笔试准备的“无捷径”之路聊到这儿肯定有同学想问有没有什么捷径或者押题技巧我要是告诉你“有”那是骗你。但要说准备起来毫无章法那也是不负责任。从我自身的经验来看工程类笔试准备有一条相对高效的主线第一阶段打地基把计算机核心课程过一遍。数据结构、计算机网络、操作系统、数据库这四门课至少要把主干内容读一遍。不需要读得多深但进程线程、TCP/IP、B树、事务ACID这种核心概念必须能用自己的话说清楚。这个阶段建议控制在两周内。第二阶段刷题主攻LeetCode 牛客网。LeetCode按标签刷重点刷链表、树、字符串、动态规划、栈和队列这几个高频标签。目标是从“见过题型”到“熟练写出”。我建议给自己定一个量每天3-5道新题同时复习前一天做的题。牛客网则用来专门练ACM模式的输入输出格式把模板代码背熟。这个阶段是笔试分数的直接来源建议花三到四周。第三阶段模拟定时模拟笔试。找近一两年的真题严格按照考试时间来做模拟真实考试节奏。重点不是做题而是培养时间分配感、熟悉在线评测系统、习惯屏幕阅读长题干。这个阶段保持一周1-2套题的频率就够。这三个阶段走完你对工程类笔试基本就有了把握。说到最后无论笔试题目怎么变底层考察的东西是稳定的你对计算机基础的理解你写代码的熟练度以及你在压力下解决问题的心态。这些不是靠运气能得来的是一道题一道题磨出来的。这张2020年的快手工程B卷对现在的你还有没有参考价值我认为答案是肯定的。虽然年份在更新题库在扩充但校招笔试考察的根本能力和核心知识点一直没变。把这张卷子吃透它的价值就远不止“一套过去的题”那么简单。
返回列表