ARTICLE DETAIL

资讯详情

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

测试开发校招笔试全解析:题型拆解与备考指南

测试开发校招笔试全解析:题型拆解与备考指南 想写点我达2019届校招测试开发笔试其实是有点感慨的。这个标签放现在看来不只是一场考试它基本代表了那个阶段互联网公司校招测试开发岗位的主流考法。点我达是杭州一家即时配送平台业务是做外卖配送和同城快递的调度系统对稳定性和实时性的要求很高所以他们笔试测试开发出的题目还是很有代表性的。这篇文章适合正在准备校招测试开发方向的同学也适合那些还不清楚测试开发到底考什么、想系统规划学习路线的人。我会把这个岗位背后的考察逻辑笔试题型的拆解思路以及我当时踩过的坑都一并写出来希望能帮你在准备时少走弯路。1. 校招测试开发笔试到底在考什么1.1 从点我达笔试看测试开发的岗位定位先说说点我达这个公司。它主打即时配送业务类型决定了它的系统是典型的移动端加服务端加大数据调度架构而且对实时性要求很高。用户下单到骑手接单配送整个链路上任何一个环节出问题都会直接影响用户体验。这样一个业务场景下测试开发要干的事就远不止在页面上点点点了。你得能读懂系统的技术链路能从代码层面定位问题能做接口自动化、性能测试甚至要参与持续集成和监控体系的搭建。所以校招笔试的定位从一开始就不是“招一个会测功能的人”而是“招一个具备测试思维和工程能力的人”。这一点你一定要搞清楚因为在备考时你的所有侧重点都应该围绕这个定位来展开。反映到笔试题上就直接体现在几个方面编程题必考而且不是单纯考语法是考算法和代码实现能力测试理论题不是考背诵而是考你如何拆解一个功能点设计出覆盖度高、有逻辑的测试用例基础功底题也在考数据库、网络、操作系统这些是支撑你后续做接口测试、性能分析、缺陷排查的底层能力。理解了这一点你就不会觉得笔试题目“杂”了反而能看到一条清晰的主线。1.2 笔试整体结构考察维度的拆分我翻了当年的笔试内容和同类公司的校招笔试题测试开发的笔试一般分这么几个模块每个模块的考察目标都不一样客观题计算机基础、测试理论、计算机网络、操作系统、数据库通常是选择题和判断题。这块考察的是知识面的广度以及基础概念是否扎实。主观题测试用例设计给出一个功能描述让考生写出测试点或完整用例。这块考察的是测试思维看你有没有把异常场景、边界场景放在心上。编程题2到3道算法题需要在线写代码支持语言一般有C/C、Java、Python等。这块考察的是代码功底和逻辑能力。逻辑题或智力题有的公司会放几道考察逻辑推理能力比的是思维的严密性。这几个模块的占比每家不一样但有一个共性算法和编程永远占大头第二是测试用例设计第三才是基础客观题。为什么这样设置因为笔试阶段的海量筛选必须用客观标准来过滤。算法题的答案对不对是能自动判分的测试用例设计题考的是测试思维阅卷官能很快看出好坏差距客观题则是兜底防止候选人的基础短板太明显。所以反过来看你的备考重心就很清晰了算法刷题不能停测试用例设计要多练基础八股也别裸考。2. 核心题型深度解析与答题思路2.1 编程题算法与数据结构的准备重点校招测试开发笔试里的编程题难度通常不会超过LeetCode中等题但高频考点非常集中。我当时总结下来反复出现的是这几类数组和字符串操作特别是双指针、滑动窗口类题目比如最长无重复子串、两数之和等。链表操作反转链表、合并两个有序链表、判断链表有没有环这类基础题出现的频率极高。二叉树层序遍历、算深度、找最近公共祖先等。哈希表的使用它常作为解题工具出现用来做去重、计数、快速查找。动态规划考得不深但斐波那契、爬楼梯、最长公共子序列这类经典模型要会因为它们是很多复杂题的基础。准备建议是不要追求题海战术先把常见的数据结构操作写熟再把每类题型的模板解法背下来。面试中所谓的“手撕代码”其实就是在考你有没有形成自己的套路。举个实际的例子。考“判断一个字符串是不是回文串”时面试官经常加一个条件只考虑字母和数字忽略大小写。这种题在笔试里看到别急着写先想清楚边界情况空字符串算不算回文空格怎么办非字母数字字符要不要跳过这些就是对测试思维的直接考察你要自己给自己设计测试用例。补一个Python参考实现def is_palindrome(s): left, right 0, len(s) - 1 while left right: while left right and not s[left].isalnum(): left 1 while left right and not s[right].isalnum(): right - 1 if s[left].lower() ! s[right].lower(): return False left 1 right - 1 return True这道题看起来简单但我见过很多人挂在边界条件上。笔试的时候一定要养成先想边界、再写代码的习惯因为这本身就是测试开发的一种职业习惯。2.2 测试理论知识用例设计的经典套路测试用例设计是测试开发笔试的重头戏也是最容易拉开差距的部分。很多同学在笔试里看到用例设计题第一反应是“这很简单”然后写个三五条就交卷了结果分数惨不忍睹。其实拿到一道用例设计题先别急着写。凡是功能描述里出现了输入框、按钮、列表、接口都是有套路的。最基础的是等价类和边界值等价类把输入划分成有效等价类和无效等价类每个类里取一个代表值去测。比如用户名长度要求6到20位那6到20位之间就是有效等价类小于6位和大于20位就是无效等价类。边界值取边界、边界上、边界下三个值大多数BUG都藏在边界附近。比如长度6到20位那5、6、7、19、20、21这六个值都值得测。场景法按用户的操作路径从正常流程到异常分支全部覆盖。比如用户下单正常流程是选商品、加购物车、提交订单、支付、完成异常分支可能有库存不足、支付超时、订单取消。因果图/判定表当输入条件之间存在组合关系时用判定表把组合列全。比如登录时用户名、密码、验证码三者都有“正确”和“错误”两种状态组合起来有8种情况判定表可以帮你把每一种都列出来。举个例子题目说“设计一个用户登录页面的测试用例”这是最经典的题几乎每家都会考点我达那一年也考了类似的功能。我建议的答题结构是这样先拆分功能点至少包括输入框、密码框、验证码、登录按钮、忘记密码入口、记住我选项。然后针对每个功能点写用例每条用例要写清楚前置条件、测试步骤、预期结果。比如用例1前置条件为输入框可输入步骤为输入合法的手机号格式预期结果为允许输入成功。用例2输入少于11位的数字预期结果为提示格式错误。用例3输入包含中文字符预期结果为提示格式错误或自动过滤。用例4输入为空点击登录预期结果为按钮置灰或提示请输入账号。除了功能测试还要补充安全性测试比如密码是否为密文传输、连续错误次数是否锁定账号兼容性测试比如不同浏览器、不同分辨率是否正常渲染异常场景比如断网时点击登录、弱网环境下请求超时时是否有提示。这类题目最忌讳的是“只写正常流程”。出题人真正想看的是你有没有考虑到异常、边界、安全、兼容这些容易忽略的场景。我当时备考时每次练完用例都会回头数一遍除了正常路径我写了多少条异常路径如果异常路径太少说明输出还是太学生气了。2.3 数据库、网络与操作系统知道为什么比知道是什么更重要这三块在测试开发笔试里客观题和主观题都会出现考察的是系统认知能力。数据库方面SQL编写是高频考点。两个表以上的关联查询、分组统计、去重、排序这些已经能应付大多数笔试。更深一点的索引为什么失效、事务的ACID特性、脏读和幻读的区别也经常出现在选择题里。我的建议是SQL语法突击一轮事务和索引的基本概念理解到位就够了。你要是能说清楚“索引是帮助数据库高效获取数据的数据结构”那就算过关了。网络方面TCP三次握手、四次挥手、HTTP状态码、HTTP与HTTPS的区别几乎是必考。对测试开发来说这些不是纯理论它们直接关系到以后做接口测试时怎么分析问题。比如看到一个500状态码你要能马上想到服务端异常看到一个404可能是请求路径写错了或者服务没有部署看到超时可能是服务端没有及时响应也可能是网关超时配置太短。操作系统方面常考进程与线程的区别、死锁的产生条件和解决方式、Linux常用命令。有些公司笔试里会直接出Linux题查看某个进程的CPU使用率用什么命令实时查看日志文件用什么命令在指定目录下查找文件用什么命令这些命令在测试环境排查问题时天天用笔试考的就是你有没有实际用过而不是死记硬背。3. 实战演练几道经典笔试题的完整拆解3.1 测试用例设计题给商品列表页写测试用例这道题当年在点我达笔试里出现过类似场景我拿来说一下答题思路。假设现在让你给一个“商品列表页”设计测试用例页面包含搜索框、类目筛选、排序方式、分页控件和商品卡片。不要上来就写。先列功能拆解和优先级再分块写。因为阅卷老师看的是你的思考过程而不是你写了几条用例。先列搜索相关支持关键词搜索搜索词为空时的表现。搜索不存在的商品时有没有空态页会不会出现无意义的报错。特殊字符和超长字符的处理比如输入几百个字符会不会卡顿或截断。再列类目筛选单选和多选逻辑是否正确切换类目后排序和分页是否重置。全部类目与具体类目的联动关系。然后是排序方式按销量、价格、上架时间的排序逻辑是否正确。价格升降序切换后数据顺序是否按预期变化。分页相关每页条数是否符合定义。翻页后数据是否更新最后一页持续点下一页会出现什么情况。快速翻页时有没有loading状态会不会出现数据错乱。商品卡片本身图片加载失败时有没有占位图。价格展示格式是否正确库存为0时商品是否置灰或隐藏。再补充异常场景弱网环境下列表加载失败有没有重试按钮接口返回空数据页面会不会白屏连续下拉刷新会不会出现重复数据。写这类题一定要把自己当成用户拿着用户视角过一遍再拿着工程视角补一遍这样不容易漏。测试用例设计题考察的就是这种“双视角”能力。3.2 算法题合并两个有序数组笔试里有一类题表面上考算法实际上考你能不能把逻辑理清楚、把代码写完整。题目两个升序整数数组nums1和nums2将nums2合并到nums1中使nums1成为一个有序数组。nums1的长度足够大且nums1的有效元素个数为mnums2的有效元素个数为n。这个题最常见的解法是从后往前遍历避免从前往后插入时导致的数组元素移动问题。从后往前写入每次比较两个数组末尾元素的大小把大的放到nums1末尾。def merge(nums1, m, nums2, n): p1, p2, p m - 1, n - 1, m n - 1 while p1 0 and p2 0: if nums1[p1] nums2[p2]: nums1[p] nums1[p1] p1 - 1 else: nums1[p] nums2[p2] p2 - 1 p - 1 # 如果nums2中还有剩余元素直接覆盖到nums1前面 nums1[:p2 1] nums2[:p2 1]我在笔试里做过类似题踩过一个坑忘了考虑p2还大于等于0时要把nums2剩下的元素拷过来。这种细节一般测试用例覆盖不到但代码正确性就是靠你把这些边边角角写全。3.3 SQL题查询每个部门薪资最高的员工这也是笔试题的常客。假设有员工表employee字段为id、name、department_id、salary写一条SQL查出每个部门薪资最高的员工信息。我的思路是先按部门分组求最大薪资再关联回原表拿完整信息。SELECT e.* FROM employee e JOIN ( SELECT department_id, MAX(salary) AS max_salary FROM employee GROUP BY department_id ) t ON e.department_id t.department_id AND e.salary t.max_salary;这里有个要注意的点如果同一个部门两个员工薪资并列最高这条SQL会把两个人都查出来。如果题目要求“每个部门只取一个”你可能还要加窗口函数比如用ROW_NUMBER()按薪资排序并编号取编号为1的记录。SELECT id, name, department_id, salary FROM ( SELECT id, name, department_id, salary, ROW_NUMBER() OVER(PARTITION BY department_id ORDER BY salary DESC) AS rn FROM employee ) tmp WHERE rn 1;窗口函数在MySQL 8.0和很多主流数据库中已经支持笔试写这一版更稳也显得你有额外功底。4. 常见问题与避坑指南4.1 笔试时间分配最容易失分的是细节题校招笔试的时间一般设置在60分钟到120分钟之间题目不多但每道主观题都要写不少内容。我见过不少人写编程题时卡在第一题上结果后面用例设计题来不及写或者乱写几句就交卷了。我的建议是拿到卷子先花30秒扫一遍全部题目心里排个优先级。正常情况下编程题如果思路卡了10分钟还没有头绪先放下去做后面的主观题。用例设计题是阅卷老师最能看出你思维水平的地方分值占比高宁可多写几条也别空白。另外在线笔试一般有本地IDE或者在线编辑器提前看清环境里能不能调试。不能调试的时候代码格式和缩进要写规范让阅卷人一眼能看懂逻辑。千万不要在小题上纠结太久笔试讲究的是总体得分。4.2 在线笔试平台的操作细节校招笔试基本都是在线进行需要开摄像头有些平台还会录制屏幕。几个细节一定要注意提前测试电脑摄像头、麦克风、浏览器兼容性换用平台支持的浏览器别等到开考了才发现进不去。手机保持静音放远一点避免误判作弊。编程题提交前确认自己选了正确的语言然后看清楚输入输出的格式尤其是有没有多组测试用例。如果是打字困难户提前练一练英文输入和代码补全笔试时能省不少时间。我当年还遇到过一个情况在线编辑器的自动缩进和本机编辑器不一样代码复制过去之后缩进全乱了。所以提交前一定要最后检查一遍代码格式不要因为这种细节丢分。4.3 测试开发面试八股文的准备重点笔试过了之后下一关就是面试。这里多说一句因为面试里的八股文和笔试有重合很多人认为背一背就行但实际上面试官更看重你有没有真正理解。测试开发面试的经典八股我列一下优先级测试理论V模型、W模型、测试流程、用例设计方法、缺陷的生命周期。自动化测试Selenium的原理和定位方式、Pytest或TestNG框架的使用、接口自动化的流程。接口测试Postman或JMeter的基本使用、如何设计接口测试用例、如何做断言。性能测试QPS、TPS、并发用户数、响应时间、吞吐量这些指标的含义和关系以及简单的性能分析思路。编程语言Python或Java的常见语法、装饰器、多线程、异常处理这些是写测试工具的基础。网络和数据库和笔试重合的那些知识但面试问得更深可能会让你现场写SQL或分析一个慢查询。比较容易被大家忽视的是“缺陷定位”类问题。比如面试官问“线上用户反馈进入页面很慢你如何排查”。这种题的答题思路是先复现再分端排查。客户端看网络请求时间和渲染时间服务端看接口响应时间和日志数据库看慢查询和索引最后逐步缩小范围。这种思路在校招面试里非常加分因为它体现的不是单点知识掌握而是系统化解决问题的能力。5. 备考路线的个人建议5.1 从零开始测试开发学习路线如果你现在还是大二大三时间比较充裕建议按照下面的节奏来准备每一步都会直接影响笔试成绩。第一阶段夯实基础。把计算机基础知识过一遍重点是数据结构与算法、计算机网络、数据库。这个阶段不用逼自己刷难题先把教材和经典课程啃下来理解和记忆同步做。第二阶段编程练手。每天写一到两道算法题注意限时模拟笔试节奏。同时把Python或Java的语法补全特别是字符串、列表、字典、集合、文件读写、异常处理这些在笔试里高频出现的功能一定要做到不看文档也能写出来。第三阶段测试理论入门。找一本测试基础书或者看一些系统课程把测试流程、用例设计方法、缺陷管理搞清楚。然后拿一个真实应用比如一个开源商城系统去练手把用例设计写到完整程度自己给自己出题自己审自己的用例。第四阶段工具掌握。学习Postman、JMeter、Selenium、Pytest这些工具动手搭建一个简单的接口自动化或UI自动化项目。注意面试官不关心你用了什么高级框架关心的是你能不能说清楚原理和解决实际问题。第五阶段模拟笔试和面试。找往年的测试开发笔试题和面试题做一遍限定时间养成先审题再动笔的习惯每次做完复盘总结错题和盲区。5.2 写在最后对测试开发的真实认知在最后我想多说一点对测试开发这个岗位的认知因为很多同学在备考时都会有一个疑问“我代码写得一般是不是只能做测试”这个想法其实把测试开发想窄了。测试开发在一线互联网公司里已经不是一个纯粹的“点鼠标”岗位了。它要做接口自动化和UI自动化要搭建压测平台要做持续集成流水线要分析线上日志和监控数据要探索新的测试方法和工具。很多时候测试开发更像是“深度用户加工程能力者”的结合体你既要像用户一样理解产品又要像开发一样能写代码、能排障。所以说到底笔试考的那些东西不是刁难你而是想提前确认你有没有具备这种复合能力的基本盘。算法题考察的是逻辑和代码功底用例设计题考察的是思维模式和细心程度基础题考察的是你是否具备排查问题时的知识储备。这几点缺一不可。我自己当年参加校招笔试的时候有一个很深的体会题不难但考得很杂杂到让你意识到大学里只啃一门课是远远不够的。好在它考得都不深只要提前准备方向对完全来得及。所以如果你想走测试开发这条路现在就开始动起来吧。先决定主攻语言然后刷算法练用例学工具走完这一遍再去投简历的时候就不是碰运气而是有底气了。
返回列表