如果你现在还在等着秋招正式批才开始投简历,那我建议你认真看完这篇文章。2020届校招,我个人最大的教训和收获,都来自网易提前批测试工程师岗位的这次笔试。测试工程师这个岗位在很多人眼里是“门槛低”的备选项,但真正拿到offer才发现,笔试那一关就能筛掉一大半人。题不是变态难,但覆盖面很广,从数据结构、计算机网络到Linux命令、自动化测试、性能测试甚至安全测试都会碰到。这篇文章我尽量把考试范围、复习重点和踩坑点写清楚,给准备投测试岗的同学一个参考,也帮你判断自己到底适不适合走这条路。
1. 校招笔试概览:这次测试工程师提前批考了什么
1.1 提前批与正式批:别错过这个窗口期
提前批一般在7-8月开放,相较正式批节奏快,而且很多人不知道的是,提前批往往没有正式批那么集中的竞争,相当于多一次机会。网易2020校招的提前批测试工程师,笔试通常安排在简历投递后一周左右,在线笔试,时间大概90分钟到120分钟。试题结构通常包含四类:选择题、简答题、编程题和测试设计题。注意,提前批如果没通过,一般还有机会被其他部门捞起来,或者继续走正式批,所以心态一定要稳。我的建议是,只要你学过数据结构、计算机网络和数据库,哪怕没准备完也先投。提前批的题目往往更偏基础,不会一上来就让你写复杂的高并发压测方案,整体更像是在筛“潜力股”。
我当时是零实习,手上只有一个课程设计的项目,心里其实没底。但回过头看,提前批反而最适合我这种人,因为它不要求你有成熟的项目经验,更看重你是否有测试思维、会不会写代码、能不能把基础理论讲清楚。如果你已经自学过Linux、SQL,或者写过几个自动化脚本,完全可以大胆投。
1.2 题型分布与答题节奏
根据我当时和其他同学的反馈,试卷大致可以分成四个板块:
- 选择题:大概占30%到40%,内容包括Java/C++/Python基础、Linux命令、数据库SQL、计算机网络、操作系统,还有少部分测试理论。
- 简答题:集中在测试流程、用例设计和缺陷处理,偶尔会让你描述一次印象深刻的测试经历。
- 编程题:一般是2道,难度介于LeetCode简单到中等之间,链表、字符串、动态规划是常客。
- 测试设计题:这是最有网易特色的一环,通常给你一个具体功能,让你写测试思路和用例,有时还会追问自动化实现。
整体节奏比较紧张。选择题一旦纠结超过2分钟就跳过,先把编程题写完,哪怕复杂度不是最优也要保证通过基础用例。我见过很多同学在前面的选择题上花太多时间,最后编程题只写了个空函数,非常可惜。另外,网易的在线笔试系统一般支持跳出页面查资料,但你别真去查,因为时间完全不够,而且摄像头会记录行为,一旦被怀疑作弊,成绩直接作废。
1.3 为什么要提前准备测试岗
如果你把目标定在正式测试工程师,提前批是最容易进入面试阶段的机会。很多人以为测试岗不用写代码,但实际上网易笔试中的编程题和开发岗是同一题库,只是通过分数线可能略低一些。同时,测试岗对业务理解、产品细节要求很高,提前批给的准备时间足够你补齐自动化、性能、安全这几块短板。而且提前批的面试官往往更看重基础潜力,不会太苛求你必须有实习经历。
我当时的判断是:哪怕没进面试,提前批的笔试也能帮你摸清大厂测试岗的知识边界,后面投正式批时就不会一脸懵。所以不要被“提前批”三个字吓到,它其实对转岗和校招生都很友好。你只需要提前做两件事:把基础课刷一遍,把测试理论和自动化工具串成一条线。
2. 技术基础模块:算法、网络、OS、数据库怎么复习
2.1 计算机网络:TCP三次握手到HTTP状态码
测试工程师写用例时经常要验证网络异常场景,所以网络题是笔试必考。选择题喜欢考TCP和UDP区别、TCP三次握手和四次挥手、HTTP状态码含义、HTTPS加密过程。我建议你不仅背答案,还要能画出来解释。比如三次握手为什么不能是两次?因为要防止历史重复连接初始化造成混乱;为什么挥手是四次?因为半关闭状态需要两端各自结束发送。如果你能在简答题里写清楚这些,面试官会觉得你不仅会记,而且懂原理。
此外,DNS解析过程、Cookie和Session区别、RESTful API设计规范,也经常出现在测试用例设计的题干里。举个例子,让你设计“用户登录接口”的测试方案时,你至少要知道HTTP是无状态的,需要靠Token或Session维持登录态;也要知道HTTPS能防止传输内容被窃听,但无法防止服务器端被拖库。这些知识不是单纯背概念,而是你写用例时的底层依据。
我复习时用的是“抓包”的方法:打开浏览器的开发者工具,随便访问一个网站,把每一个请求的URL、状态码、响应时间、请求头挨个看一遍。这样比死记硬背更直观,也能顺便理解“埋点”“接口联调”这些后续工作里天天出现的东西。
2.2 操作系统与Linux:内存、进程、命令三件套
选择题里操作系统占比不低,主要考进程线程区别、死锁条件、内存管理、调度算法。热词里有个“内存测试”,笔试中确实会问你如何排查内存泄漏、如何查看某个进程的CPU和内存占用。基本命令一定要熟:top、free、ps、lsof、netstat、ping、curl、grep、awk、sed。
我当时被问到一个场景:线上接口响应变慢,怎么排查?正确思路是先看CPU、内存、磁盘IO,再用top看进程,用netstat看连接数,接着看日志,最后考虑压测复现。这里有个技巧:答题时按照“从外到内,从现象到原因”的顺序写,给阅卷人一个清晰思路,比自己闷头写一堆命令更容易拿分。
如果你对Linux还不太熟,我建议至少能手写一次下面这个排查流程:
# 1. 看整个机器负载 top free -m df -h # 2. 定位具体进程 ps -ef | grep java top -p <pid> # 3. 看端口和连接数 netstat -anp | grep <port> ss -s # 4. 抓包或看日志 curl -v http://target/api tail -f /var/log/app.log这个流程看起来很简单,但笔试里用文字描述出来,比只写“用top看”要完整得多。测试工程师日常排查问题,本质上就是在做这件事。
2.3 数据库与数据结构:SQL、索引、HashMap
数据库题主要考SQL基本增删改查、join、group by、having,以及索引失效的场景、事务ACID。测试工程师写用例时经常要构造数据,SQL熟练是必须的。举个例子,笔试可能会给你两张表:用户表和订单表,让你查“每个用户最近一笔订单”。这就涉及JOIN和子查询,或者窗口函数ROW_NUMBER()。建议把常用聚合函数、left join和inner join区别、索引为什么能加速查清楚。
数据结构这边,数组、链表、栈、队列、树、图的遍历方式,以及HashMap实现原理、ConcurrentHashMap分段锁机制,都是高频考点。之前有个简答题是“为什么HashMap不是线程安全的”,很多人只能答出“因为扩容时可能死循环”,但更标准的答案还应该包括“多线程同时put可能导致数据覆盖”和“modCount不一致会触发fail-fast”。
刷题方面,不要只盯着LeetCode,笔试系统有时用的是牛客,输入输出格式不同,需要提前适应。比如牛客的链表节点需要自己定义,线上OJ不会像LeetCode那样给好API,很多人挂在解析输入上,这比算法本身更亏。建议考前在牛客上刷几道“链表反转”“字符串排序”练手,先把Scanner和BufferedReader用熟。
3. 测试专业知识:这才是核心得分点
3.1 测试理论:你是背概念,还是真的理解
很多人以为测试理论就是背几个名词:功能测试、回归测试、冒烟测试、集成测试、系统测试、验收测试。这部分当然要背,但更重要的是理解它们在项目中的位置。比如冒烟测试指的是每次提交新版本后,先把主干流程快速跑一遍,确认没有“房子着火”级别的问题,再继续深入测试;回归测试则是修改代码后,重新执行已有的用例,确保旧功能没被破坏。
提前批笔试还经常考V模型和敏捷测试的区别。V模型把开发和测试阶段一一对应,适合文档完善的传统项目;敏捷测试则强调全程参与、持续反馈,测试用例不是等需求冻结后再写,而是在每个迭代里持续补充。我答题时喜欢画一张简单表格来对比,把“阶段、参与人员、产出物、反馈速度”写清楚,既省时间又清晰。
我的经验是,答题时不要只写定义,最好带上“在什么阶段做、由谁做、用什么工具做、失败后怎么办”,这样显得你是干过活的,而不是背书的。比如“回归测试”可以补充:“每次开发修复bug后,测试人员会复用已有的自动化用例集,配合Jenkins定时任务,在夜间自动执行,第二天查看报告。”这句话一出,面试官就会觉得你有实际项目感知。
3.2 测试用例设计:等价类、边界值、场景法
测试设计题是最能拉分的地方。比如题目给你一个登录框,要求设计测试用例。很多人的回答只有“输入正确密码能登录,输入错误密码不能登录”,这种答案基本拿不到分。你需要从功能、兼容、性能、安全、易用性多个维度展开。
功能上可以用等价类划分:有效用户名、无效用户名、空值、超长字符串、特殊字符;边界值则要覆盖最大长度、最小长度、密码错误次数达到上限。还要考虑网络异常、服务端异常、并发重复点击。更高级的会要求你写缺陷报告,包括优先级、复现步骤、期望结果、实际结果、环境信息。
以“登录框”为例,我当时的答案框架是:
- 正常场景:正确账号密码登录成功,跳转首页。
- 异常场景:密码错误、账号不存在、账号被锁定、验证码过期、网络超时、服务器500。
- 边界场景:用户名长度刚好为最大值、密码包含空格和特殊字符、连续5次输错后锁定。
- 兼容场景:不同浏览器、不同分辨率、移动端和PC端。
- 安全场景:SQL注入、暴力破解、明文传输、越权访问其他用户信息。
这套框架你提前准备好,笔试时直接套用,至少能保证有分。如果再能写出优先级,比如“P0级:正确账号密码无法登录;P1级:密码错误提示不准确;P2级:页面样式错位”,那分数会明显往上走。
3.3 自动化测试:Appium、Selenium、Pytest、Jenkins
热词里自动化测试出现得很多,这确实是测试岗笔试面试的高频方向。笔试不会让你现场搭框架,但会问概念和原理。比如Appium是基于WebDriver协议,通过发送JSON Wire Protocol指令来驱动iOS/Android原生应用;Selenium适用于Web端,元素定位方式有id、name、xpath、cssSelector等;Pytest是Python测试框架,能用fixture管理前置条件,用参数化实现数据驱动;Jenkins用来做持续集成,让自动化用例在每次代码提交后自动跑。
我建议你把这四者串成一条链路:用例层用Pytest编写,UI操作层用Selenium/Appium,调度层用Jenkins定时触发,报告用Allure展示。笔试考到自动化时,照着这个链路答,会显得很有体系。比如简单展示一个Pytest用例:
import pytest @pytest.mark.parametrize("username,password,expected", [ ("valid_user", "123456", True), ("wrong_user", "123456", False), ]) def test_login(username, password, expected): result = login(username, password) assert result is expected这段代码不长,却能说明白数据驱动、断言和参数化三个概念。如果能在笔试里写出类似小片段,比只写“我用过pytest”要强很多。另外,热词里还有“sikixix自动化测试”,我猜你说的是SikuliX,一个基于图像识别的UI自动化工具,它适合处理没法通过元素控件定位的场景,比如桌面上运行的exe程序。如果你接触过,也可以在自动化的“工具选型”里提一句:普通Web端用Selenium,移动端用Appium,老平台或图像验证用SikuliX,按需组合。
3.4 性能测试与安全测试:压力场景和风险场景
性能测试这边,笔试常考“如何测试一个接口的并发能力”“响应时间、吞吐量、错误率怎么衡量”“内存泄漏如何定位”。热词里的“rtmp测试地址”提醒我,多媒体测试岗位还会考察流媒体播放的延时、卡顿、首帧时间,需要借助工具拉流推流测试。理解RTMP本质上是实时消息传输协议,常用于直播推流,测试时需要关注延迟、丢帧、音画同步、弱网表现。
“内存测试”上文提过,可以用JMeter做压测,配合VisualVM查看heap内存变化,判断是否有内存泄漏。性能测试的答题框架一般是:明确指标(TPS、RT、错误率)→ 设计压测场景(并发梯度、持续时间、数据量)→ 执行压测 → 分析瓶颈(CPU、内存、IO、网络)→ 输出报告提出优化建议。不要把“压测”理解成“点一下运行就行”,面试官想看的是你能不能根据结果定位到具体环节。
安全测试也不可忽视,至少要知道SQL注入、XSS、CSRF的成因和防护方案。渗透测试一定要强调授权,笔试考的是“如何探测接口是否越权”这类逻辑漏洞,而不是教你攻击。我在笔试里遇到过让分析一个登录接口有哪些安全风险的题,我的答题框架是“越权、暴力破解、传输明文、验证码绕过、SQL注入”,每个点再配一句防护建议。这样回答既完整又安全,符合职业道德。
3.5 场景题:怎么从0到1设计一个测试方案
场景题常见的有“设计微信朋友圈的测试方案”“设计一个电商购物车的测试方案”等。测试工程师与开发岗最大的区别,就是你需要具备全局视角。我的答题框架是:需求理解 → 测试范围 → 测试计划 → 用例设计 → 自动化方案 → 风险与回归。
假设题目是“测试一个视频播放器”,我会先拆功能模块:上传、转码、播放、弹幕、倍速、清晰度切换;再针对每个模块列功能和异常场景;性能上关注启动时间、首帧延迟、CPU占用、内存增长;兼容性上覆盖不同分辨率、机型、浏览器;安全上关注防盗链和隐私泄露。最后说明哪些用例适合自动化,哪些适合手动探索。
举个例子,播放模块的测试用例可以做成表格:
| 用例编号 | 场景描述 | 前置条件 | 操作步骤 | 期望结果 | 优先级 |
|---|---|---|---|---|---|
| PL-01 | 正常播放 | 用户已登录,网络正常 | 点击播放按钮 | 视频3秒内开始播放,无花屏 | P0 |
| PL-02 | 弱网播放 | 模拟网络延迟200ms | 拖动进度条 | 缓冲提示不超过5秒 | P1 |
| PL-03 | 断网恢复 | 播放中关闭网络再恢复 | 等待恢复 | 播放自动继续,不崩溃 | P1 |
| PL-04 | 倍速切换 | 正在播放 | 点击1.5倍速 | 声音不变调,画面流畅 | P2 |
这个表格展示的是“产品思维 + 测试思维”的结合,比单纯罗列步骤更专业。笔试时如果能写出一个带优先级的用例片段,阅卷人很容易看出你具备测试设计的实战能力。
4. 编程题与手撕代码:题目不难,但容易挂在细节
4.1 常见笔试编程题套路
网易笔试的编程题以数组、字符串、双指针、链表、栈队列为主,偶尔会出现简单的动态规划。比如第一题可能是“删除链表中重复元素”,第二题是“给定一个字符串,找出不含重复字符的最长子串长度”,这类题在LeetCode上属于中下难度,关键不是不会做,而是容易在边界条件上出错。链表题要特别注意空指针,字符串题要处理中文、空格、大小写。有些题目会刻意设置大输入范围,要求O(n)或O(n log n)的时间复杂度,如果你写出O(n^2)的暴力解,可能只能通过部分用例。时间有限,优先保证正确性和基础用例通过,再考虑优化。
拿“最长不重复子串”举例,最简单的滑动窗口思路:
def length_of_longest_substring(s: str) -> int: window = set() left = 0 max_len = 0 for right in range(len(s)): while s[right] in window: window.remove(s[left]) left += 1 window.add(s[right]) max_len = max(max_len, right - left + 1) return max_len这个解法不仅代码短,而且能处理边界情况,比如空字符串、全重复字符、全不同字符。我笔试时遇到类似的题,会先把边界条件写在注释里,再写主逻辑,既提醒自己,也让阅卷人知道你有考虑边界。
4.2 解题模板与代码规范
我建议笔试前默写几套模板:二叉树前中后序遍历、链表反转、二分查找、快速排序、并查集。另外代码规范也很重要,变量命名要见名知意,函数要有注释,最后不要把无关代码留在答题区。网易的在线OJ一般支持Python和Java,我个人的建议是选择自己最熟悉的那门语言,不要听说“开发岗用Java多”就现场换语言。测试岗笔试更看重逻辑是否清晰,用Python写会更快,尤其字符串处理方面优势明显。如果实在没有AC,也把解题思路写在注释里,有些面试官会看笔试代码,看到你有思路但写错了,反而比空着更容易进面试。
这里有个小技巧:写代码前先花30秒想清楚输入输出类型,尤其是牛客这种需要手写读取的OJ。有些人不是算法不行,而是不知道题目给的输入是“第一行一个整数n,第二行n个数”这种格式,结果所有时间都浪费在读入上。掌握input().split()、sys.stdin.readline、while True: try: ... except: break这几段固定套路,能帮你避免一半以上的低级失误。
5. 常见问题排查与面试追问实录
5.1 笔试时的常见失误
我根据自己和身边同学的经验,整理了一个高频失误速查表:
| 失误点 | 表现 | 解决方式 |
|---|---|---|
| 不熟OJ输入输出 | LeetCode会做,牛客上读不了数据 | 考前用牛客练2道题 |
| 选择题纠结太久 | 编程题没时间写 | 选择题每题不超过90秒 |
| 测试题只写正常流程 | 没有异常和边界用例 | 直接套“功能-异常-边界-兼容-安全”模板 |
| 代码没检查 | 变量名写错、数组越界 | 写完通读一遍,补空值判断 |
| 答题没有分层 | 阅卷人找不到得分点 | 用“1/2/3”或表格组织内容 |
这些坑看起来很小,但在淘汰率很高的提前批里,任何一条都可能让你和面试机会擦肩而过。尤其是最后一条,测试工程师本来应该是细心的代名词,如果答题时乱成一团,面试官会怀疑你的职业素养。
5.2 面试官追问的“坑”
笔试结束后如果有面试,你会发现面试官手里拿着你的笔试卷子,围着几个点深挖。比如你写了“用Appium做自动化”,他就会追问“Appium底层是怎么定位元素的?有没有处理过弹窗?”;你写了“用过JMeter压测”,他会问“怎么判断瓶颈在应用层还是数据库层?”;你写了“做过安全测试”,他会问“怎么绕开登录态去测试另一个用户的接口”。这些问题没有一个标准答案,但都在考察你写过的技术是否真的落地过。
我的经验是,不要为了答题而写自己没有做过的技术栈。如果你只在课程设计里用过Selenium,就别在笔试里写“熟悉Appium”,否则面试官稍微问深一点就会露馅。可以写“了解原理,实操了Web端自动化”,后面再补一句“移动端正在学习中”,这样反而显得诚实且有学习能力。
5.3 我的避坑经验:把测试当作一门工程来学
很多人觉得测试工程师就是“点点点”,但从笔试你就能看出来,真正要的人是既懂开发原理又懂测试方法,还能写工具写框架的复合型选手。我后来复盘,发现提前批笔试暴露了我三个短板:Linux命令不够熟,自动化测试只会调用API不会看源码,测试方案缺少度量指标。这些短板不是靠临时刷题能补的,而是需要在学习和实战中一点点积累。
如果你现在还有时间,我强烈建议你把常用的测试框架demo跑一遍,至少知道一个自动化测试项目从无到有的完整流程;再挑一个开源项目练习编写测试用例并提交缺陷,这些经历在笔试面试里比背一百道题都有用。笔试里很多选择题,比如“Pytest中@pytest.mark.parametrize怎么用”,只要你真的跑过一遍,根本不用背,凭记忆就能答对。
最后再分享一个小技巧:准备一个“测试技术清单”,把自己会的东西按“工具、框架、平台、理论”分类,每天睡前看一遍,想想每条能不能讲出至少一个应用场景。比如“Appium”对应“移动端UI自动化”,“JMeter”对应“接口压测”,“等价类划分”对应“登录框用例设计”。这种清单式复习,能让你在笔试前快速建立知识地图,考场上一看到题目就知道该调取哪一部分。
关于网易2020校招测试工程师提前批笔试,我个人最大的体会是:它更像一场“测试思维”的选拔,而不是单纯考知识。知识可以靠刷题补,但测试思维需要你站在用户和产品角度去思考“哪里容易坏、坏了会怎样、怎么证明它不坏”。如果你在准备这类笔试,试着把手边常用的App当成测试对象,每天设计几个用例,再琢磨哪些能自动化、哪些需要压测,一个月后你会明显感觉到自己不一样。希望这篇复盘能帮你在下一次笔试里少踩几个坑,顺利拿到面试机会。