尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

字节跳动测试开发校招全攻略:笔试面试与学习路线深度复盘

字节跳动测试开发校招全攻略:笔试面试与学习路线深度复盘 2018年秋天我以测试开发候选人的身份参加了字节跳动第一批校招的笔试和面试。那会儿今日头条和抖音正处在高速增长期字节跳动的招聘热度一路走高“测试开发”这个岗位在当年就已经被单独设岗招聘而不是像很多公司那样把测试当“点点点”的配角。这篇博文既是一次复盘也是一份面向后来者的“过来人经验”。如果你正在准备测试开发方向的校招或者想从纯功能测试往测试开发转型那这篇内容应该能帮你少走不少弯路——笔试考什么、面试怎么面、项目怎么做、行情怎么谈我都会尽量讲透。1. 岗位认知与项目背景为什么测试开发在2018年被单独设岗1.1 当时的行业背景产品迭代倒逼工程化测试2018年字节跳动旗下的今日头条日活已经过了亿级抖音也正处于用户规模快速攀升的阶段。移动端产品迭代节奏非常快一周两三个版本是常态。这种节奏给测试团队带来的压力是直接且巨大的手工回归流程根本跑不过来漏测一个接口、漏测一个兼容性场景线上就会立刻出现用户反馈。这种业务压力倒逼测试团队转型。以前很多公司的测试是“上面提需求下面点页面发现bug就提单”字节跳动在那个阶段的做法是把测试往工程化方向拉测试人员需要写自动化脚本、搭测试平台、做性能监控、参与代码review甚至直接阅读业务代码来补充测试场景。测试开发岗位就是在这种背景下设立的说白了既要懂测试又要能写代码还要能把重复劳动工具化。1.2 测试开发和普通测试的差别到底在哪这是我在面试和后来的工作中被问得最多的问题之一。简单说普通功能测试的重心在“执行”测试开发的重心在“效率和深度”。举个例子。一个接口上线后要验证逻辑正确性功能测试的做法是用Postman手动调几下看返回对不对测试开发的做法是写一套接口自动化用例接入持续集成每次代码合并后自动跑一遍出问题自动报警同时还能把接口耗时、错误码分布这些数据沉淀下来给开发做参考。两者的差别不在于“谁更高级”而是工作方式完全不同。测试开发的产出物更多是脚本、工具、平台、流程规范而不是一张张Excel用例表。对应到面试上面试官考你的不只是“你会不会测”更是“你能不能把测试这件事用工程手段做得更高效”。1.3 顺便聊一句不同行业里的“测试开发”差异很大如果你在招聘网站上搜“测试开发”会发现互联网公司、车企、工控企业招的岗位名字一模一样但做的事情差别很大。互联网这边偏向接口测试、自动化、性能、持续集成整体更贴近后端工程链路工控和嵌入式领域测试开发经常会涉及上位机开发测试——上位机是PC端用来跟下位机比如单片机、PLC交互的控制软件需要测试人员懂串口通信、协议模拟、数据采集、图形界面自动化。这个方向也很吃香但技术栈跟互联网测试开发不太一样。选方向之前建议先看清楚岗位描述里写的业务场景别只看“测试开发”四个字。我当时也面过一家做工业软件的公司面试内容完全围绕上位机的界面自动化展开跟互联网的面试路子完全是两套体系。2. 笔试拆解算法、计算机基础与测试思维一个都不能少2.1 笔试题型构成2018年字节跳动测试开发方向第一批的笔试题型大致可以分成三个部分选择题涵盖数据结构、计算机网络、操作系统、数据库、编程题2到3道算法题、开放设计题给一个场景让你设计测试方案。整体难度给我的感受是算法题的难度和开发岗的基本持平只是题量稍少一点设计题则更看重你的思维深度没有标准答案。这个构成其实暴露了一个核心信息测试开发岗对代码能力的要求一点都不低。很多同学以为测试岗笔试会更“温和”结果一上来就被算法题劝退这是最大的误区。我当时在笔试群里看到不少人吐槽“怎么测试岗也考这么难的算法”但事实就是如此——如果你不能写代码后面自动化测试、测试平台开发这些工作根本没法开展。2.2 算法题的备战重点高频考点与一道典型题目先从高频考点说起。数组、字符串、链表、二叉树、动态规划、栈和队列这六类基本覆盖了校招算法题的绝大部分。再往细了分字符串翻转、链表反转、二叉树层序遍历、最长公共子序列、爬楼梯这类题目出现的频率非常高原因是它们能很好地考察候选人的基础编程功底又不需要太复杂的数学背景。我印象很深的一道题是“判断一个括号字符串是否匹配”看起来很简单但考察点其实不少栈的使用、边界条件、时间复杂度。当时我先用栈的思路写了基础版本面试官又追加了一个问题“如果括号种类变成三种而且允许嵌套你怎么处理”这就把问题升级成了经典的有效括号问题需要额外处理左右括号的匹配逻辑。我的建议是笔试前至少要把LeetCode简单和中等等级的题刷到100道以上把每一类题型的模板代码吃透不要追求刷题数量而忽略总结。当时我专门整理了一个错题本按知识点归类记录每道题思路上的盲点这个习惯在面试前帮了大忙。2.3 数据库与计算机网络测试开发的高频考察区数据库几乎是每一批笔试题都会出现的。最常考的有三类SQL查询多表关联、分组统计、索引机制什么时候走索引、什么时候失效、事务的ACID特性。测试开发之所以要懂这些是因为很多接口测试和性能测试最终都会落到数据库层面比如接口响应慢到底是网络问题还是SQL走了全表扫描。计算机网络的重点则集中在TCP/IP协议栈三次握手和四次挥手的状态变化、HTTP和HTTPS的区别、TCP和UDP的区别、常见状态码的含义。建议把这些知识点用自己的话整理成一份“面试话术稿”比如问到HTTP状态码时不要只背几个数字最好能现场说出“503 Service Unavailable”和“502 Bad Gateway”在排查时的具体差异。2.4 测试设计题唯一能提前“背答案”的题型笔试里的开放设计题基本就是让候选人针对一个功能写测试用例设计思路。这种题没有标准答案但踩分点非常明确是否考虑了正常流程、异常流程、边界条件、数据一致性、性能、安全、兼容性等维度。举个例子有一道题是“如何测试一个用户登录功能”。大多数人的第一反应是“输入正确密码能登录、错误密码提示错误”这能拿基础分但想拿高分得往下继续挖密码输入框是否支持复制粘贴、密码错误次数达到上限后是否有锁定策略、连续输入空格怎么处理、账号被删除后还能不能登录、网络异常时的提示是否友好、登录成功后的会话超时时间如何验证以及并发登录时的会话互斥逻辑。把这些维度串起来其实就是一个完整的测试思维模型。我建议在笔试前自己把“登录”“购物车”“视频上传”“消息推送”这几个常见场景各写一份测试用例设计框架练手的时候尽量逼自己往深了想到考场上就会顺手很多。3. 面试实战复盘三轮技术面与HR面全程记录3.1 一面代码功底与测试基础的双重考察一面通常持续45分钟到1小时左右节奏很紧凑。我当时的一面流程大致是自我介绍约5分钟、一道算法题约20分钟、一道测试设计题约15分钟、最后是面试官自由提问。自我介绍这个环节很多人不够重视。面试官一天要面很多人如果你的自我介绍只是把简历念一遍基本等于浪费了建立第一印象的机会。我的做法是一分钟讲清楚我的技术栈和项目经历再用一分钟讲一个最能体现我工程能力的例子——比如我独立做过的一个接口自动化项目从需求分析到框架搭建到落地使用中间解决了什么问题、产出了什么效果。这等于提前引导面试官把问题集中在我最熟悉的内容上。算法题部分我抽到的是“实现一个LRU缓存”这道题在当时的面试里出现频率非常高。考察点是候选人对数据结构的设计能力、对时间复杂度的敏感度以及代码的规范性。我当时先跟面试官确认了需求边界容量多大、是否需要线程安全然后讲了思路——哈希表加双向链表再动手写代码。写完后面试官追问了几个问题如果并发访问怎么办、如果删除一个不存在的key会怎样。这种追问本质上是在考察代码思维的严密性平时写代码时养成先想边界条件再动手的习惯现场就不会慌。测试设计题是“如何测试一个电梯”。我按照功能、性能、安全、异常、兼容性几个维度展开基本功能按钮、楼层显示、开门关门、性能高峰期的响应速度、安全超载报警、门夹人检测、停电应急、异常按钮卡住、传感器故障、兼容性不同品牌、不同楼层高度。面试官在每个维度上会继续深挖比如“超载报警的阈值怎么定”“传感器故障时系统应该如何降级处理”。这类问题没有完全正确的答案关键是展示你思考问题的结构性和对细节的敏感度。3.2 二面项目深挖与场景设计题二面一般由经验更丰富的技术负责人或高级工程师来面考察重点从“你会什么”转向“你怎么解决问题”。项目深挖是二面的重头戏。面试官会针对简历里的项目经历连环提问为什么选这个技术方案、遇到的最大困难是什么、如何定位和解决、有没有量化数据证明效果。这里有个很重要的提醒简历上写的每一项内容都要做好被追问到细节的准备不要写自己没真正做过的事情面试官通过两三个追问就能分辨真假。我当时被问到的一个问题是“你的自动化用例跑起来之后遇到了大量随机失败你会怎么排查”这个问题我在实际工作中确实遇到过所以回答起来比较顺先确认失败模式和范围是特定接口、特定环境还是特定时间点然后看日志区分是应用报错、断言不一致还是网络超时再复现尽可能缩小问题范围最后定位根因修复并补充回归用例。面试官听完又追问了一句“如果问题是偶发的复现不了怎么办”我就补充了加日志、做压力测试、用线上流量回放等手段来提升复现概率。场景设计题是二面的另一个重点。我遇到的是“如何测试抖音的视频上传功能”。这种题考的不只是测试设计还有对音视频业务的理解。我从上传链路拆解选择本地文件、服务端分片接收、转码处理、发布展示、异常恢复。每一步都有对应的测试重点文件格式和大小校验、断点续传、弱网环境下的上传体验、转码失败时的用户提示、重复点击上传按钮的防抖逻辑还有服务端并发处理能力。这种题目比较开放关键是让面试官看到你能把一个业务场景拆成可测试的技术点。3.3 三面综合能力与价值观匹配三面一般是部门负责人或者更高级别的面试官考察重点转向综合能力学习能力、沟通表达、抗压能力以及文化和价值观的匹配度。我当时印象很深的一个问题是“如果开发说这个bug不是bug是用户使用方式不对你会怎么处理”这个问题考察的是冲突处理能力。我的回答是先复现和确认影响范围如果确实影响核心用户体验就整理证据和优先级跟开发沟通时直接给数据而不是下结论如果影响很小就记录为低优先级问题并持续跟进。对方听完点了点头我觉得重点不在于给出“完美答案”而是让对方看到你有理有据、合作导向的处理方式。三面还经常会有一些开放性问题比如“接下来三年你的职业规划是什么”“你觉得优秀的技术人应该具备哪些特质”。这类问题不用刻意“表演”真诚表达即可但有一条底线不要表现出只把测试开发当跳板、随时准备转开发的倾向。这个问题我在面试现场差点踩坑好在我及时补了一句对测试工程化方向的兴趣才把话圆回来。后来跟做HR的朋友聊才知道很多面试官对这类回答其实很敏感。3.4 HR面谈薪资与确认意向HR面通常出现在技术面全部通过之后主要聊求职动机、其他offer情况、期望薪资、可以入职的时间、对工作地点的偏好。关于薪资2018年字节跳动给到硕士测试开发方向的校招Offer总包大致在30万上下浮动具体取决于面试评级和岗位方向另外还有期权/限制性股票的配置这部分会单独约定归属时间。需要强调的是这些数字每年都在变可以把它当作“参考系”而不是“定价标准”。谈薪资时不要报一个过低或过高的数字我当时的做法是先了解行情再结合自己的面试表现给出一个区间同时表达对业务的兴趣而不是只盯着钱。HR面还有一个容易被忽视的点确认意向的流程。当时字节跳动的招聘节奏很快从笔试到offer可能只有两三周。如果你同时还在面其他公司建议诚实告知HR你的时间安排但不要用offer当筹码来反复压价这个行业圈子不大口碑比一城一池的得失重要得多。4. 测试开发学习路线从零基础到拿offer的完整路径4.1 第一步把编程语言学到“能干活”的程度测试开发的核心能力之一就是写代码所以语言基础必须扎实。我推荐从Python入手因为Python语法简洁、生态丰富做接口测试、自动化脚本、小工具都非常顺手如果目标公司全程用Java那Java的集合框架、并发编程也要过一遍。“能干活”的标准是什么我会这样定义给你一个需求你能独立写出300行以上的可运行代码遇到报错能根据堆栈信息快速定位问题对常用的内置库和第三方库比如Python的requests、pytest有足够的熟练度。达到这个标准后再看《Python核心编程》这类进阶书籍效果会好很多。4.2 第二步计算机基础不能只背题数据结构与算法、计算机网络、操作系统、数据库这四门课是测试开发笔试面试的硬通货。但注意不要只背八股文式的答案一定要理解背后的原理。以TCP三次握手为例很多同学能背出状态变化但被问“为什么需要第三次握手”就卡壳。这道题的核心是前两次握手只能确保客户端到服务端的通道可靠第三次握手是为了让服务端确认客户端有能力接收自己的数据防止已失效的连接请求突然又传到服务端导致资源浪费。如果能把原理讲清楚面试官会明显觉得你有深度。这里我建议一个学习方法把核心知识点讲给别人听。找同学或者对着镜子把“TCP为什么需要三次握手”“索引为什么能加速查询”“进程和线程的区别”这些问题用自己的话讲出来你能讲得让没有基础的人听懂说明真的理解了。4.3 第三步测试理论是基本功测试用例设计方法、bug生命周期、测试计划与测试报告、黑盒白盒灰盒测试这些是测试开发的基础功。测试用例设计方法里等价类划分、边界值分析、因果图、正交实验法是最常用的四种。尤其是边界值分析几乎每次笔试和面试都会用到。比如测试一个年龄输入框正常范围是1到120岁那么0、1、120、121这四个边界值就是必测的输入配合上类型校验、格式校验就能把用例覆盖到一个很高的完整度。建议自己在本地搭一套完整的测试流程需求分析、用例设计、用例执行、缺陷提交、回归验证、测试报告。不用写得多复杂但每个环节都要走一遍这个过程会让你对测试工作的全貌有真实体感。4.4 第四步自动化测试工具链从单个工具到打通流水线工具不在多在于用得熟练。我当时重点练了几个工具整理成一张表方便你对照学习。工具用途学习建议SeleniumWeb端UI自动化重点掌握元素定位和显式等待机制Appium移动端自动化理解WebDriver协议先跑通iOS和Android基础用例JMeter接口与性能测试重点掌握线程组、断言和聚合报告Postman接口调试熟练使用环境变量和集合管理Charles抓包分析重点掌握断点、弱网模拟、重写请求Jenkins持续集成掌握流水线配置和定时任务的写法这些工具的学习建议是“边用边学”不要只看教程。我当时做了一个练习项目用一个公开的API接口先在Postman里手动调通再用Python脚本封装成接口自动化用例最后接到Jenkins上定时执行失败了就发邮件通知。这个流程走完自动化测试的核心链路就掌握了。到这一步你会发现测试开发的本质和普通测试的本质区别普通测试是人在跑用例测试开发是让人专注于设计高质量用例让机器去跑重复的回归。4.5 第五步动手做一个小项目把链路真正跑通实践是检验学习效果的最好方式。我建议做一个“接口自动化测试框架”作为练习项目这个项目覆盖了“需求→设计→开发→测试”的完整链路面试时非常有说服力。项目需求很明确对一个被测系统的核心接口做自动化回归。设计阶段我需要确定框架的分层配置层环境地址、账号信息、数据层用例数据用Excel或YAML管理、执行层pytest调度用例、报告层生成HTML测试报告。开发阶段最花时间的是用例的断言设计和数据隔离。很多新手做接口自动化只断言HTTP状态码是200但200不代表业务成功——有可能返回了错误码。正确的断言应该包括状态码、响应体关键字段、自定义业务码同时要覆盖异常场景比如参数缺失、参数类型错误、认证失败。测试阶段我用自己写的框架跑了几百条用例发现和修复了框架的几个bug这个过程本身就是很好的面试素材。面试时讲到这个项目面试官通常会追问“框架比起现成工具的优势是什么”“处理过哪些数据依赖问题”这些都是亲身踩过坑后能非常自然回答的问题。4.6 关于AI测试开发的一些前瞻虽然2018年的校招面试里很少直接考AI相关内容但如果你准备得很早建议提前关注AI辅助测试的方向。比如用机器学习做缺陷预测、用图像识别做UI自动化断言、用自然语言处理生成测试用例这些都是后来逐渐落地的方向。对课程还学有余力的同学可以花点时间了解基础的机器学习概念分类、回归、聚类。不必会手推公式但至少能理解经典的回归测试用例筛选为什么可以用分类模型来做——给每个测试用例打上“可能发现问题”和“不太可能发现问题”的标签然后根据历史数据训练模型来优先跑高风险用例。这个思路放到今天的测试开发面试里是一个非常有区分度的谈资。5. 常见问题与避坑实录过来人的几个血泪提醒5.1 面试中最容易翻车的几个瞬间第一个翻车点是算法题写一半卡住后心态崩掉。我见过不少同学代码写到一半发现思路错了就慌了越慌越乱最终整道题都废掉。正确的做法是如果思路有问题就停下来明确告诉面试官“让我重新梳理一下思路”只要时间够面试官完全接受候选人修正方向。提示写代码前先在草稿纸上画一下示意梳理清逻辑再动手会大幅降低写了一半发现错的概率。第二个翻车点是项目经不起深挖。简历上写“熟悉Selenium自动化测试”结果被问到“如何定位动态元素”“页面加载慢时你的脚本怎么处理”就答不上来。解决办法是在投简历之前把简历里的每一条项目描述都围绕“背景、方案、难点、结果”四个维度过一遍确保被追问时不慌。第三个翻车点是完全不准备反问环节。面试最后面试官通常会问“你有什么想问我的”很多同学说“没有”这其实是一种机会的浪费。比较稳妥的做法是准备两三个高质量问题比如“团队目前用哪些测试工具链”“新人入职后的培养路径是怎样的”“目前团队最大的技术挑战在哪里”。这些问题既不会冒犯面试官又能让你获得有价值的信息。5.2 关于薪资待遇的认知误区关于薪资待遇有几点过来人的提醒。第一不要只看月薪。总包包括基本工资、绩效奖金、期权/股票、房补餐补等各种补贴这些加在一起才是真实收入水平。签offer前一定要问清楚月薪是几薪、绩效奖金的浮动范围、期权怎么归属不要拿到一个数字就稀里糊涂签字。第二不要只拿“平均值”来对标自己。同一个公司同一个岗位不同候选人的offer差距可能很大原因是面试评级不同。准备充分、表现优秀的人拿到高评级自然高薪这种差距在入职后会持续影响调薪和晋升的起点。所以与其纠结别人的薪资数字不如把精力放在提升面试表现上。第三薪资是谈出来的但要有理有据。如果你手里有别的offer可以明确告诉HR你的期望区间和依据但不要虚报数字。字节跳动这类大公司的HR都很有经验虚报数字被发现反而会影响诚信分。5.3 拿到offer之后还有几件事要想清楚拿到offer之后除了高兴还有几件容易被忽略的准备工作。第一确认岗位具体方向。测试开发这个岗位在入职后可能会分到不同的业务线和专项组有做客户端测试的、有做服务端接口测试的、有做性能测试的还有做测试平台开发的。如果对方向有偏好可以在入职前主动了解团队的业务布局方便入职后快速找到自己的定位。第二提前补业务知识。如果你拿到的是内容平台方向的机会可以提前了解一下推荐系统的基本概念如果是电商方向可以看看订单链路和支付流程。这不需要花特别多时间但会让你入职初期轻松很多。第三做好持续学习的心理准备。测试开发的职业路径不是学完就能躺平的工具在变、业务在变、技术在变。2018年我面试的时候自动化测试还是一个亮点后来慢慢变成“标配”再后来测试平台开发、AI辅助测试慢慢成了新的方向。保持学习的状态本身就是这行最核心的竞争力。最后再说一点个人体会。我当年准备的很多知识点入职后其实都没派上直接用场但准备过程中养成的思考习惯——先拆场景、再定方案、最后补边界——却一直跟到我今天。面试是一场短跑测试开发这条路是一场长跑短跑的成绩重要但长跑的心态更重要。
返回列表