1. 为什么一套2018年的题,到今天还是很好的备考主线
说实话,我第一次看到有人在求职群里翻出这份2018年网易测试实习生笔试题时,第一反应也是“这都哪年的老黄历了”。但等我冷静下来把整卷过了一遍,才发现一个挺反常识的事——大部分测试岗笔试题的“保质期”比我们想象中长得多,甚至比大部分技术框架的保质期还长。这几年移动互联网从增量转向存量,测试岗位的title从“测试工程师”慢慢变成“测试开发工程师”,工具链从手工点点点变成pytest、Appium、Jenkins、接口自动化框架满天飞,但笔试考的核心东西,翻来覆去还是那些。
为什么会这样?因为笔试题本质上不是在考你会不会用某个具体工具,而是在考一个测试工程师的底层能力模型。TCP三次握手你要懂、Linux基础命令你要会、等价类边界值你要能脱口而出、一道简单的编程题你要能写对——这些能力不随工具迭代而过时。你可以今天不用Jenkins,明天换一套CI平台,但如果你不知道进程和线程的区别、不会看系统负载、不会设计测试用例,那换什么工具都救不了你。这也是我敢拿一套七年前的卷子当备考主线的底气所在。
这份卷子还有个特点,就是特别典型。网易作为老牌互联网公司,它的测试实习岗笔试覆盖的面很全:基础客观题、算法编程题、测试理论题、数据库题、开放场景题,一个不少。难度梯度也拉得比较开,有送分题,有拉开差距的题,还有那种让人写到手酸的开放题。做过这套题,再去面对其他大厂的测试笔试题,心里基本就有谱了。所以这篇文章我打算从整套题的结构出发,一块一块拆给大家看,针对重点题型给出完整的答题思路和丢分点分析,最后聊聊备考节奏。如果你正在准备测试方向的实习或校招,或者刚转行做测试想系统梳理一下知识体系,这篇应该能省你不少事。
2. 整套卷子的知识地图:五大板块与考察权重
看一份笔试题,先别急着刷题。第一件事是拆结构,搞清楚出题人把分值撒在了哪些板块上。这套题整体分为五大块,我按题量和大致权重整理如下:
| 板块 | 典型考点 | 常见题型 | 考察能力 |
|---|---|---|---|
| 计算机基础客观题 | TCP/UDP、HTTP状态码、Linux命令、进程线程、内存管理 | 选择题为主,偶有填空 | 知识面广度 |
| 数据结构与算法 | 数组、字符串、链表操作、复杂度分析、简单递归 | 单选、手写代码 | 编码基本功与逻辑思维 |
| 测试理论与用例设计 | 黑盒白盒、等价类划分、边界值分析、缺陷报告要素 | 简答、用例设计大题 | 测试核心素养 |
| 数据库基础 | SQL基本查询、多表连接、分组聚合、常见函数 | 手写SQL | 数据操作与逻辑能力 |
| 开放场景题 | “如何测试某某功能/物件”、线上问题排查思路 | 论述 | 思维缜密度与表达能力 |
2.1 客观题:广度优先,送分题要稳拿
客观题部分大概占了整卷的三分之一到四分之一,主要覆盖计算机网络、操作系统、Linux、数据结构。这块出题很直白,基本不绕弯。比如给你一段描述,让你判断是TCP还是UDP;给你一个HTTP状态码,让你选它代表的含义;给你几个Linux命令,问哪个能查看内存使用情况。这些题对科班出身的同学来说应该是送分题,但如果你是非科班转测试,这块就得花大力气补。
我印象比较深的几道客观题考点:TCP三次握手的过程、TCP和UDP的区别、进程与线程的区别、HTTP的GET和POST差异、几个常见状态码的含义(200、403、404、500、502、504)、Linux常用命令(top、free、df、ps、grep、tail、awk)、数组和链表的区别、栈和队列的特性。这些内容其实都是计算机基础里的“常识题”,没有一道超纲,但覆盖面很广,任何一个点没复习到都可能丢分。
2.2 编程题:难度不大,考的是“写对”而不是“炫技”
网易这套卷子的编程题对实习生来说难度中等偏下,不考复杂的算法,更不会让你手写红黑树、动态规划。核心目标就是确认你具备基本的编码能力。常见的方向包括:字符串反转、判断回文、数组去重、找出数组中的最大/最小值、链表反转、简单递归(比如斐波那契数列)。
编程题看起来简单,但丢分点往往不是“不会做”,而是“写得不严谨”。比如字符串反转题,很多人直接用语言自带的反转函数一把梭,但面试官想看的可能是你手动用双指针原地逆序;比如数组去重,有人只顾着用set,结果没注意题目要求保持原顺序;再比如边界条件的处理,空数组、只有一个元素、全是重复元素,这些情况你有没有考虑到。笔试的编程题是跑测试用例的,边界条件不过就是不过,不会因为你“思路对”就给你分。
2.3 测试理论题:从“背概念”到“用概念”
这部分是测试岗笔试的“魂”。如果说前面的客观题和编程题是通用计算机基础,那这部分才是真正刷掉一大批人的地方。考点很固定:黑盒测试和白盒测试的区别、单元测试/集成测试/系统测试/验收测试的分层、等价类划分、边界值分析、因果图、场景法、错误推测法,以及缺陷报告应该包含哪些要素。
光背概念是不够的,这套卷子会更进一步,要求你针对具体场景设计测试用例。这就要命了,因为很多同学概念背得滚瓜烂熟,一碰到实际问题就傻了。比如给你一个“根据年份判断是否为闰年”的函数,让你设计测试用例。如果你能把等价类和边界值用上去,同时考虑到输入合法性校验,这题就稳了。但如果只会背定义、不会套用,写出来的用例东一个西一个,没有方法论支撑,那丢分就非常惨。
2.4 数据库题:SQL基本功,考察数据操作能力
数据库这块考得不深,基本就是单表查询的增删改查、条件筛选、排序、分组,偶尔来一道两表甚至三表连接的查询。很多人觉得数据库不重要,这其实是误区。测试工程师在日常工作中写SQL查数据、构造测试数据、校验测试结果,都是高频操作。笔试考SQL,既是在考你会不会写,也是在考你对数据敏感不敏感。
我记得这道题很典型:给一张员工表和一张部门表,要求查出每个部门的员工数量,按数量降序排列,并且只显示员工数大于5的部门。这就是典型的GROUP BY + HAVING + ORDER BY组合,但很多人在HAVING和WHERE的使用场景上犯迷糊。WHERE是在分组前过滤行,HAVING是在分组后过滤组,这个区别要是没搞懂,写出来的SQL就会出错。
2.5 开放场景题:刷分和拉分都在这里
开放场景题是整套卷子里最有意思、也最考验综合能力的一块。题目往往很简单,比如“如何测试一个自动售货机”“如何测试一个登录功能”“如何测试一个电梯”,但正因为简单,反而让很多人无从下手。这种题没有标准答案,考察的是你的思维是否系统化、条理是否清晰、覆盖面是否完整。
答这种题最怕的就是“想到哪写到哪”。正确的做法是建立一个框架:功能测试(正常流程和异常流程)、界面测试、易用性测试、兼容性测试、性能测试、安全测试、异常场景测试。然后在这个框架下面,用具体的例子填充。比如测自动售货机,功能上要测投币、选货、找零、退币、出货;异常场景要测投币后断电、卡货、超时未取货;兼容性要测不同面额的纸币硬币;性能上要考虑多人同时购买的并发情况。能把这个框架条理清晰地写出来,分数自然就上去了。
3. 从具体题目入手,拆解答题逻辑
光说板块太笼统,我挑几道具有代表性的题目,按“题目长什么样—考点是什么—满分答题思路—常见丢分点”的框架,完整拆一遍。这几道题是我结合原卷风格整理的典型版本,核心考点和答题逻辑和原题一致。
3.1 用例设计题:闰年判断函数怎么测
题目:有一个函数boolean isLeapYear(int year),用于判断输入年份是否为闰年。请设计测试用例。
考点:等价类划分、边界值分析、输入合法性校验。这道题出现在测试理论部分,考察的是你能否把黑盒测试的基础方法真正用于实践。
答题思路分三步。第一步,明确闰年的规则:能被4整除但不能被100整除,或者能被400整除。第二步,划分等价类:有效等价类包括“能被4整除但不能被100整除的年份”(比如2020、2024)和“能被400整除的年份”(比如2000),无效等价类包括“不能被4整除的年份”(比如2019、2021)和“能被100整除但不能被400整除的年份”(比如1900、2100)。第三步,加上边界值和异常输入。年份的边界值要测0、负数、极小值、极大值;还要考虑输入类型,如果传入的是浮点数、字符串、null,函数应该怎么表现。
这道题满分的关键在于你的用例表有没有覆盖“有效正常值、有效边界值、无效正常值、无效边界值、非法输入”这几类。很多同学能列出四五个用例,但漏了异常输入这一块。你要知道,测试用例设计的本质不是“证明这个功能能用”,而是“试图证明这个功能不能用”,所以非法输入的测试是必不可少的。
3.2 编程题:句子单词反转,别只会用API
题目:给定一个字符串,如"hello world test",要求将单词顺序反转,输出"test world hello"。要求不能用语言内置的split/reverse等高阶函数,手写实现。
考点:字符串遍历、数组操作、边界条件处理、代码风格。这道题表面简单,但坑不少。
第一个坑是原地反转和新建数组的区别。面试官出这道题,想看到的思路是“整体反转再局部反转”或者“从后往前遍历拼接到新数组”,而不是调一个split(" ").reverse().join(" ")一把梭。你可以用两步法:先把整个字符串反转成"tset dlrow olleh",再遍历每个单词,把单词内部反转回来。也可以从后往前扫描,遇到空格就切出一个单词添加到结果中。第二种更直观,代码量也不大。
第二个坑是边界条件。字符串为空怎么办?只有单个单词怎么办?多个连续空格怎么处理?开头和结尾有空格怎么处理?这些在代码里都要有明确的逻辑。很多人的代码在普通用例上跑得通,一碰到连续空格就出问题,这种就是不严谨。
第三个坑是写代码的规范性。变量命名要有意义,循环和条件判断的边界要写清楚,不要在代码里留一堆魔法数字。笔试的代码虽然不用编译跑通,但阅卷人也是人,代码写得整洁规范,印象分会好很多。
3.3 Linux场景题:线上接口突然变慢了,你怎么排查
题目:某天你负责的功能线上接口响应时间从200ms涨到了5s,请描述你的排查思路和用到的命令。
考点:Linux基础命令、问题排查思路、逻辑表达。这题放在开放题里,也有放在Linux题里的版本,核心是一样的。
我的回答思路是分层的。首先看系统层面,用top看CPU和负载,确认是不是机器资源耗尽;用free -h看内存,用df -h看磁盘空间,排除内存溢出和磁盘写满的情况。然后看进程层面,用top -Hp <pid>看具体是哪个线程在消耗CPU,必要时用jstack(如果是Java服务)导线程栈。再看应用层面,检查日志,用tail -f或grep查异常堆栈、慢查询日志;如果是数据库慢查询,可以用show processlist看当前执行中的SQL。最后如果所有环节都正常,可能是依赖的外部服务变慢了,可以顺着调用链逐个排查下游接口的耗时。
这道题考察的不是你会背几个命令,而是你有没有一套成熟的排查方法论。哪怕你用的命令不够多,但只要逻辑是递进的——从硬件到系统、从系统到应用、从应用到依赖——就能拿到大部分分。反过来,如果你只丢下一句“我用top看看”,那基本就是零分。
4. 笔试题背后真正想筛选的三层能力
很多人把笔试理解为“知识测试”,觉得只要背得够多就能过。但当你真正做完整套卷子、再对照答案复盘,就会发现这份题想筛选的远不只是知识点。
4.1 第一层:知识的横向覆盖——不能有明显的短板
笔试的客观题部分,本质上是在做“能力体检”。TCP、HTTP、Linux、数据结构、数据库、测试理论,任何一个板块瘸腿,都会反映在总分上。测试工程师在日常工作中接触的面非常宽:你要跟开发讨论接口设计,要写SQL查数据,要在Linux服务器上看日志,要设计测试用例,要评估性能问题。这些能力是并行要求的,你不能说“我Linux不好但我SQL很强”,那在真实工作中就是会卡壳。
这也是为什么备考时不能只盯着测试理论刷。很多测试方向的求职者,测试理论背得滚瓜烂熟,但不重视计算机基础和编码能力,最后在笔试的客观题和编程题上栽了大跟头。要知道,测试不是开发的“下游岗位”,而是和质量强相关的工程技术岗,计算机基础知识的广度和深度,就是你能不能在这个岗位走远的地基。
4.2 第二层:把普通问题想深的逻辑能力
测试这个岗位有个很特殊的地方:你天天面对的是“正常功能”,但你的价值恰恰体现在“非正常情况”下。用户不会按你设想的路径操作,输入的数据千奇百怪,运行环境充满不确定性。所以测试考察的核心逻辑能力就是:能不能把一个看起来很简单的问题,拆解出足够多的维度。
就拿“测试一个登录功能”这种开放题来说,普通人能写三五条用例:输入正确账号密码能登录、输入错误密码提示错误、账号不存在提示错误。但逻辑能力强的人会继续往下想:密码输错五次会不会锁定?传输过程是不是加密的?连续快速点击登录按钮会不会重复提交?登录成功后刷新页面状态正不正确?退出登录后按回退键能不能回到登录态?弱密码允不允许注册?这些问题的背后是对业务逻辑、技术实现、用户行为、安全风险的综合思考,靠背题是背不出来的。
4.3 第三层:把思路讲清楚的表达能力
这一点很多人会忽略,但笔试的开放题和简答题,本质上就是在考表达。你脑子里的思路再清晰,写出来是乱的,阅卷人就看不懂。测试工程师的工作成果,很大一部分是通过文字表达的:测试计划、测试用例、缺陷报告、测试总结。如果一个测试连用例都写得让人看不懂,那他的专业能力就要打一个大大的问号。
表达能力的核心是结构化。答开放题的时候,先亮框架再填细节,不要想到哪写到哪。比如测一个自动售货机,你可以先对测试类型做分类,再在每个类别下展开场景。用“从外到内、从正常到异常、从单机到并发”的原则来组织答案,整篇文字的条理性一下就出来了。笔试的阅卷人一天要看几百份卷子,一份条理清晰的答卷和一份东拼西凑的答卷,评分差距是很大的。
5. 针对这套题的备考路径与现场踩坑心得
最后这部分,我结合自己的备考经历和这些年带新人时观察到的常见问题,聊聊备考节奏和笔试现场的实操经验,这些内容比具体的知识点更容易被忽视,但往往决定着最终结果。
5.1 备考顺序:先补基础,再攻测试,后刷开放题
我的建议是分三个阶段走,每个阶段的时间可以按你自己的基础动态调整,但顺序最好不要乱。
第一阶段是“补计算机基础”。重点复习计算机网络(TCP/UDP、HTTP)、操作系统(进程线程、内存、死锁)、Linux常用命令、数据结构(数组、链表、栈、队列、树、哈希表)和基础算法。每天安排固定时间刷题,不用多,熟练掌握常见的字符串、数组、链表操作就够了。
第二阶段是“啃测试理论”。把黑盒白盒、测试分层、用例设计方法(等价类、边界值、判定表、场景法、错误推测)、缺陷管理流程这些核心知识点吃透。重点不是背定义,而是拿实际的功能模块练手,比如登录、注册、购物车、搜索,每个都试着写一份完整的测试用例设计。
第三阶段是“练开放题与综合题”。找一些经典的开放场景题,比如电梯、自动售货机、停车场系统、文件上传功能,按照“功能—界面—兼容—性能—安全—异常”的框架反复练。同时把SQL常见题型过一遍,尤其是多表查询和分组聚合。
5.2 笔试现场的时间分配:别把时间耗在难题上
笔试现场最常见的一个问题,就是时间分配失衡。有人在一道编程题上死磕四十分钟,结果后面两道简答题草草写几个字就交卷了,这非常不划算。笔试题的分数分布往往不是按题目数量平均分配的,简答题和开放题的单题分值通常更高,而且更不容易被“完全做错”。
我的建议是,拿到卷子先快速浏览一遍全部题目,标记出哪些是送分题、哪些是有把握但需要时间的题、哪些是暂时没思路的题。先做送分题,把这些分牢牢抓在手里;再做有把握的题,保证正确率和表达完整性;最后留出时间攻难题,能做多少做多少。
另外,简答题和开放题一定要写满。这里说的“写满”不是让你凑字数,而是说要把思路完整展开。宁可多写几个角度让阅卷人看到你的思考过程,也不要就着两行字就完事。很多题目的评分逻辑是“踩点给分”,你写到的点越多,拿到的分就越多。
5.3 我见过的三类典型翻车现场
第一类是“背题家”。测试理论背得滚瓜烂熟,各种概念张口就来,但一让设计具体的测试用例就抓瞎。这类同学的问题在于把笔试当成了考试,以为背定义就能过关,但实际上测试岗笔试从第一题就开始考察实际应用能力。破局的办法只有一个,就是尽早开始写,拿真实功能练手,把背过的概念一个接一个用出去。
第二类是“重测轻编”。因为目标是测试岗,就觉得编程不重要,把大量时间花在测试理论上,结果编程题交白卷。这是最可惜的。编程题在笔试中的权重不低,而且这一道题就能看出一个候选人的逻辑能力、编码习惯、严谨程度,这些恰恰是测试工程师非常重要的素质。哪怕是冲着测试岗去,编程的基本功也绝对不能丢。
第三类是“表达混乱型”。知识面很广,题目也都会做,但答开放题的时候想到什么写什么,没有框架,没有层次,最终分数配不上实力。这类同学需要刻意练习的是“结构化表达”:每道简答题和开放题,先写总起句,再分条列点,最后做一个小结。把每一次模拟作答都当成正式答卷来练,养成习惯之后,考场上自然就能写出一份清晰可读的答案。
回到这份卷子本身。如果你正在准备测试岗的笔试,我的建议是你不用纠结于找到某一家公司某一年份的“原题”,更重要的是一套完整的知识框架和应对各种题型的方法论。用这套框架去对照不同公司的笔试,你会发现出题人变了,考察的知识点万变不离其宗。而一旦你把这些底层能力真正练到位,笔试题对你来说就不再是拦路虎,而是一个展示自己专业度的舞台。