尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

测试开发工程师笔试备考指南:题型拆解与实战策略

测试开发工程师笔试备考指南:题型拆解与实战策略 1. 笔试题型概览与考察方向1.1 主流题型分布小米2018秋招测试开发工程师笔试在互联网大厂里属于比较有代表性的那一类。整体题型分为四块选择题、编程题、测试理论题和场景设计题。选择题覆盖计算机网络、操作系统、数据结构、数据库、Linux基础大约20到30道编程题一般是两道一道偏算法、一道偏字符串或数组处理测试理论题会考察测试用例设计、Bug生命周期、自动化测试相关概念最后一类是给你一个具体功能模块让你写出完整的测试方案。和纯开发岗笔试不同测试开发岗的笔试卷子有三个明显特征。第一算法难度整体低一档不会考红黑树手写、KMP动态规划这种偏竞赛的内容重点在基础数据结构和常见算法思路第二测试思维考察占比高选择题里会夹杂“以下哪个用例设计方法最能覆盖边界值”这类问题最后一题基本跑不掉测试方案设计第三Linux和数据库权重明显更大因为测试日常要查日志、查库、写SQL验证数据这是岗位刚需。我当时做题的最大感受是时间整体够用但编程题一定不能卡太久。选择题里网络和数据库的题目数量比预期多如果基础不牢很容易在前面浪费大量时间导致编程题没时间调试。后面我会逐个模块拆开来细说。1.2 考察能力模型从笔试倒推岗位要求测试开发工程师的核心能力模型大概可以拆成四层。第一层是编程基本功至少要熟练掌握一门语言Java/Python/C都行能写清楚数组、字符串、链表相关的算法题时间复杂度和空间复杂度心里要有数。第二层是测试理论和方法论等价类、边界值、场景法、因果图这些用例设计方法不能只背名词要能在具体场景里用出来。第三层是技术栈广度计算机网络TCP/IP、HTTP、操作系统进程线程、内存管理、数据库SQL、索引、事务、Linux常用命令都属于必考范围。第四层是工程意识比如自动化测试框架的理解、持续集成的基本概念、Bug生命周期的管理这类题目考察的是你是否有真实项目经验还是只看了网上速成教程。我见过不少同学准备时疯狂刷编程题结果选择题里栽了跟头。原因在于测试开发岗的笔试筛选逻辑是“木桶效应”——它不需要你在算法上有多亮眼但要求技术栈没有明显短板。毕竟测试日常对接开发、运维、产品多个角色网络不懂看不了超时问题数据库不熟验不了数据准确性Linux不熟查不了线上日志任何一个短板都会在实际工作中拖慢整个团队的进度。2. 编程题不只是写代码2.1 高频题型与解题思路测试开发的编程题难度曲线比开发岗平缓不少但考察点非常固定。我整理了一下2018年前后几年大厂笔试的高频题集中在这么几类。字符串处理类反转字符串、判断回文、统计字符出现次数、字符串去重、最长公共前缀、括号匹配。这类题占比最高因为字符串操作能同时考察语言API熟练度、边界条件处理和逻辑完整性。数组类数组去重、两数之和、最大子序和、合并有序数组、查找旋转数组的最小值。注意这里考的多数是基础版本不需要奇技淫巧但要求代码能一次通过。链表类链表反转、环形链表判断、合并两个有序链表、找中间节点。这类题在笔试中出现频率中等但面试时手写概率很高所以准备笔试时顺手练熟不亏。简单动态规划与查找斐波那契数列、爬楼梯、二分查找变体。这类题真正考察的不是你会不会DP而是能不能写出一个清晰、正确的解法别把边界条件写错。以“最长公共前缀”为例我当年遇到的原题思路是这样的给定一个字符串数组求所有字符串的最长公共前缀不存在则返回空字符串。切题思路是先处理空数组的边界情况然后以第一个字符串作为基准逐个字符去和其余字符串的对应位置比较一旦发现不匹配就截断返回。代码复杂度O(n*m)n是字符串数量m是最短字符串长度在笔试场景下完全够用。关键在于先把“空数组”“单字符串”“全部相同”“只有部分相同”几个测试用例想清楚再动笔一次跑通比反复提交调试印象分高得多。2.2 典型案例拆解数组旋转与查找这一类题特别容易在边界条件上栽跟头值得单独拎出来讲。原题有点类似给定一个升序排列的数组在某个未知点上进行了旋转比如[0,1,2,4,5,6,7]变成了[4,5,6,7,0,1,2]要求用二分查找找到目标值。这题看起来是二分查找但真正的坑在于“旋转后数组不再是全局有序”直接套标准二分会出错。正确思路是用mid值跟left值比较判断左半段和右半段哪边是有序的然后根据目标值是否落在有序区间内来收缩查找范围。代码本身不长但需要大量if-else判断边界非常考验逻辑严密性。我当时写这题时踩了一个很典型的坑没有考虑数组只有一个元素的情况。用mid left的判定时默认了数组长度大于等于2结果单元素数组直接数组越界。这个教训让我后来养成了一个习惯——动笔前先把输入输出边界全列出来哪怕多花30秒也远好过写完debug半天。笔试场景下的收尾工作同样重要。提交前务必检查代码风格缩进是否一致、变量命名是否规范、是否有无用代码块这些细节面试官都会看。尤其是测试开发岗面试官本身就是做质量保障的对代码的整洁度、注释的清晰度非常敏感。2.3 语言选型与输入输出处理笔试系统对编程语言的支持一般都很全C、Java、Python、Go都有。我个人的建议是平时用哪个就选哪个千万别在考场上临时换语言。见过有同学平时写Java笔试时觉得Python代码量小临时切换结果API不熟list和dict的方法记混反而比平时多花了20分钟。语言选定后输入输出处理是最容易忽略得分点的地方。很多同学算法思路完全正确结果挂在多行输入读取上。以牛客网风格的ACM模式为例读一行包含n个整数Python可以这样写values list(map(int, input().strip().split()))如果题目要求循环读入直到EOF可以用import sys for line in sys.stdin: if not line.strip(): break # 处理逻辑C的话while(cin x)的写法要非常熟练。Java则建议用BufferedReader配合StringTokenizer比Scanner效率高很多数据量大时不会超时。还有一个小细节笔试前先实验环境下跑通一套“模板型代码”包括读多个整数、读二维数组、读字符串数组、输出格式化结果。不要想着考场再临场发挥输入输出处理应该是肌肉记忆级别的熟练度。3. 测试用例设计与测试理论基础3.1 等价类与边界值测试设计的黄金组合测试用例设计大题本质上是考察你有没有“测试思维”能不能把一个功能模块的分支路径完整覆盖到。等价类划分和边界值分析是最核心的两个方法基本是捆绑出题。等价类划分的思路是把输入数据按照“是否触发相同处理逻辑”分成若干类每一类只需要选一个代表数据进行测试就能覆盖这一类中的所有情况。边界值分析则是在等价类的基础上专门针对边界附近的值设计用例因为大量Bug都隐藏在边界条件的判断逻辑里。我拿一个典型的笔试题来说明一个登录功能要求用户名长度为6到16个字符只能包含字母和数字密码长度为8到20个字符必须包含字母和数字。设计测试用例。这道题的答案结构可以做得很清晰首先列出有效等价类用户名长度为6到16且只含字母数字、密码长度为8到20且含字母和数字。然后列出无效等价类用户名长度小于6、用户名长度大于16、用户名含特殊字符、密码长度小于8、密码长度大于20、密码只含字母不带数字、密码只含数字不带字母。最后补充边界值长度为6、16、5、17、7、15密码同理。但仅有这些还不够。界面测试的题目还会隐含一些隐藏考点用户名和密码是否区分大小写、是否允许空格、是否允许中文字符、长度是按字节还是按字符计算。这些在完整度上都是加分项。我当时答题时还额外补了一个方向——从“用户直接按回车键提交空表单”开始覆盖整个交互流程。这种围绕具体场景的测试设计能力比背十个测试方法名词重要得多。笔试阅卷时考官看的就是你有没有分层设计用例的结构化思维而不是单纯罗列一堆孤立的用例。3.2 场景法设计从用户操作流倒推用例场景法设计的出发点是用户操作流程它侧重于验证系统在完整业务链路中的表现。打个比方等价类边界值回答的是“每个输入框怎么测”场景法回答的是“一条完整的用户操作路径怎么走通”。两者组合前者验证单点功能后者验证整体流程缺一不可。以电商购物为例核心用户操作流是这样的用户搜索商品→查看商品详情→加入购物车→提交订单→选择支付方式→支付成功→查看订单状态。这个主路径对应一个“基本流”测试用例每一步都要验证数据和页面状态是否正确。接下来是备选流搜索无结果时是否有提示、商品库存不足时是否拦截下单、支付超时后订单状态如何流转、支付成功后网络中断是否导致订单状态不一致。把主流程和分支流程全部列出来最终能得到一个覆盖完整的场景矩阵。大厂笔试更青睐能打出完整流程的人因为测试方案的质量与流程完整性直接正相关。答题时建议把场景流的每一步用编号标记出来比如基本流A、备选流B1、备选流B2再配一个表格列出“步骤、预期结果、实际结果”这样考官一眼就能看出你有过真实项目经验。顺便说一个坑场景法设计时特别容易漏掉“并发场景”。以秒杀活动为例同一商品被多个用户同时抢购时超卖如何避免库存扣减采用乐观锁还是悲观锁降级策略是什么这类问题考察的是知识面——测试开发不只是点鼠标验证功能的“手工测试”要对后端架构、数据库事务、分布式一致性有基本认知。3.3 测试框架与自动化考点笔试选择题里关于自动化测试的高频考点要单说。Selenium定位元素的8种方式id、name、className、tagName、linkText、partialLinkText、xpath、cssSelector经常考核心是xpath和cssSelector两种尤其要理解绝对路径和相对路径的区别用什么方式定位最稳定。Pytest和Unittest两种Python测试框架的基本写法、fixture的作用域、断言函数的用法也是高频考点。接口自动化层面Postman的断言脚本怎么写、Requests库的请求头如何处理、JSONPath表达式如何提取返回值这些都可以通过选择题或简答题的形式出现。这类题的核心考察点并非具体工具而是“你对自动化测试有没有真实项目经验”。一个只背过概念的人能把Selenium的XPath语法说得头头是道但一旦问“如何解决动态元素定位问题”立刻露馅。真正做过自动化的人会知道动态元素定位有几种常见方案等待机制隐性等待、显性等待、通过父子关系定位、通过兄弟节点定位、使用contains函数模糊匹配等。这些都是实战中摸索出来的经验不是看文档能学会的。如果笔试里出现“请用你熟悉的框架描述一个自动化测试方案”这类开放性题目建议按以下结构回答被测对象分析、自动化框架选型为什么用这个不用那个、脚本分层设计测试数据层、业务逻辑层、用例层、CI集成方案如何触发、如何生成报告、异常处理方案失败截图、日志采集、失败重跑。这个结构能让阅卷人觉得你确实带过项目而不是看了一大堆教程但从未落地过。4. 计算机网络与操作系统高频考点速查4.1 网络协议核心考点测试开发笔试里计算机网络是选择题的硬骨头占比约15%到20%。核心考点集中在TCP/IP协议栈和HTTP协议上。TCP的三次握手和四次挥手是最基础的送分题但很多人只背了“三次握手四次挥手”这个结论一问细节就懵。三次握手的过程客户端发送SYN报文服务端回复SYNACK客户端再回复ACK完成连接建立。四次挥手客户端发送FIN服务端回复ACK服务端再发送FIN客户端回复ACK连接关闭。笔试可能换个角度问为什么连接建立要三次握手而不是两次关键原因是防止历史重复连接请求导致服务端资源浪费。为什么断开要四次而不是三次因为TCP是全双工的两个方向的数据通道需要分别关闭。HTTP报文结构、状态码含义、GET和POST的区别也是必考项。状态码需要重点掌握5类1xx信息提示、2xx成功200正常、204无内容、3xx重定向301永久、302临时、304未修改、4xx客户端错误400语法错误、401未认证、403禁止访问、404不存在、5xx服务端错误500内部错误、502网关错误、503服务不可用、504网关超时。测试工作中经常遇到接口报错能用状态码快速定位问题是基本能力。4.2 操作系统与并发基础考点操作系统常考的点集中在进程和线程的区别、死锁的四个必要条件、进程调度算法、内存管理。需要特别留意的是并发相关的考点——测试开发经常要写并发脚本做压力测试对并发模型的理解直接影响测试方案设计。多线程并发访问共享变量时如何保证线程安全这是笔试里大概率出现的选择题。三个层面入手使用锁机制synchronized、ReentrantLock、Python的threading.Lock、使用原子类AtomicInteger、atomic包、使用线程安全容器ConcurrentHashMap、CopyOnWriteArrayList。刷题时我会把每个语言对应的线程安全方案整理成表格逐个对照记忆。2018年前后很多公司在并发场景下用的是Java技术栈所以Java的线程安全工具类几乎成为必背内容。死锁的四个必要条件也值得单独记忆互斥条件、请求与保持条件、不可剥夺条件、循环等待条件。笔试往往给一段代码让你判断是否会产生死锁以及如何打破循环等待。这类题目不考死记硬背而是考你对原理的理解深度。测试开发在做多线程测试时同样需要能复现死锁场景并定位根因这个能力在实际工作中非常实用。4.3 Linux命令能动手绝不墨迹Linux是测试开发的日常工具笔试里主要考察日志排查、进程管理、文件操作和文本处理几个方向。常考命令我列一个速查表场景命令说明查看系统日志tail -f /var/log/messages实时跟踪日志输出查找文件find / -name test.log全盘查找指定文件查看端口占用netstat -tlnp 或 ss -lnp定位端口被哪个进程占用查看进程ps -ef 或 top查看进程和资源占用过滤日志关键字grep -i error app.log忽略大小写过滤日志查看磁盘占用df -h查看各分区磁盘使用率文件传输scp / rsync远程拷贝文件权限修改chmod 755 file修改文件权限文本处理awk / sed / sort / uniq日志分析、去重统计日志分析场景是最常考的组合技。比如要统计一个日志文件里某个接口一天的调用次数和错误次数怎么写命令我常用的方式是grep GET /api/user/info access.log | wc -l统计总请求数grep GET /api/user/info access.log | grep 500 | wc -l统计500错误数。如果要统计每个IP的请求量排序可以用awk {print $1} access.log | sort | uniq -c | sort -rn | head -20。这套组合命令在线上问题排查时能顶半个监控系统。还有一个坑需要提醒笔试时如果给出一个log文件和几条命令让你判断输出结果一定要仔细看管道符和重定向符号的位置。类似grep error log 21 /dev/null和grep error log /dev/null 21看起来差不多但输出结果完全不同。这个考点考察的是对文件描述符和重定向机制的理解非常细节。5. 数据库与SQL测试必背考点5.1 SQL考察重点与典型真题数据库是测试开发的必考项因为测试结果验证离不开数据比对。笔试中SQL题通常覆盖以下几种题型。数据查询三表关联查询、聚合函数COUNT、SUM、AVG、MAX、MIN、GROUP BY分组、HAVING过滤、ORDER BY排序以及LIMIT分页。以一道高频题为例有一个员工表id、姓名、部门ID、工资求每个部门工资最高的员工信息。解法是先用GROUP BY部门ID取MAX工资再与原表关联查出对应员工完整信息。这道题有一个容易踩的坑如果不用子查询直接从原表GROUP BY部门ID查出来的员工未必是工资最高的人。这个细节很多人刷题时遇到过笔试时依然会踩。子查询和连接IN、EXISTS、LEFT JOIN、INNER JOIN的区别是高频考点。很多人分不清EXISTS和IN的异同关键区别在于IN会生成临时表再匹配适合子查询结果集较小的场景EXISTS逐条遍历外部表适合外部表较小的情况。测试验证时如果SQL性能差排查方向往往就是这里。数据更新与事务UPDATE、DELETE配合WHERE条件使用以及事务ACID特性。这类考察往往结合具体业务场景比如“用户下单扣库存如何保证数据一致性”。最简单的回答是用数据库事务把扣库存和生成订单放在同一个事务里任一环节失败则回滚。更深层的考察是并发场景下如何防止超卖需要用到乐观锁版本号机制或悲观锁SELECT FOR UPDATE。这个知识点在测试方案设计题里经常出现值得好好准备。5.2 索引、性能优化与测试验证索引是数据库性能优化的核心笔试几乎必考。核心知识点包括索引的原理B树、聚簇索引与非聚簇索引的区别、覆盖索引的概念、最左前缀原则、索引失效的典型场景对索引列使用函数、隐式类型转换、LIKE以通配符开头、OR连接非索引列。这里分享一个我在实际测试中踩过的坑某个查询接口响应时间从50ms抖动到3秒定位问题是SQL语句中对索引列使用了DATE_FORMAT函数导致全表扫描数据量从10万涨到100万后性能断崖式下跌。将SQL改为范围查询后响应时间回到80ms以内。这种问题在笔试中可能体现为给你一条慢SQL和表结构让你分析为什么慢以及如何优化。答案是优先看WHERE条件和JOIN字段是否有索引再看是否有隐式类型转换或函数包裹索引列最后看是否需要覆盖索引减少回表。数据库事务隔离级别也是高频考点。四个级别从低到高分别是读未提交、读已提交、可重复读、串行化。MySQL默认是可重复读Oracle默认是读已提交。笔试会给出一个并发场景让你判断可能出现哪种问题脏读、不可重复读、幻读。测试开发在验证数据一致性时必须能准确判断当前事务隔离级别下可能出现的并发问题否则很容易把偶发性数据异常当成Bug直接提给开发最后发现是数据库配置问题白白浪费时间。6. 应试策略与实战建议6.1 笔试时间分配2018年小米秋招笔试题量不小时间大约90分钟分配到四类题型建议按以下节奏控制时间选择题30分钟左右编程题35分钟测试用例设计20分钟最后5分钟检查提交。千万不要在选择题上死磕一道题卡超过2分钟先标记跳过。做题顺序上如果编程题没思路可以先做后面的测试用例设计题把确定能拿的分先拿到手。时间管理最怕一种情况前面选择题遇到偏门考点心里发慌反复犹豫结果后面简单的编程题没时间写完。测试开发笔试的容错率其实不低——不需要满分只要确保会做的题全部做对已经能跑赢大多数人了。我见过不少同学考完抱怨“题目不难但没写完”这才是最亏的。6.2 备考重点清单与参考路线整理一份笔试考前自查清单按优先级排列编程基本功数组、字符串、链表的基础算法题至少刷50道覆盖查找、排序、双指针、哈希表、简单递归题型。SQL三表JOIN查询、GROUP BY聚合、子查询、索引原理每种题型至少手写3遍。Linux高频命令能默写日志分析和进程排查场景能写出完整命令组合。网络三次握手四次挥手每层含义、HTTP状态码分类、GET与POST的区别、Cookie与Session的区别。测试理论等价类、边界值、场景法、判定表四种方法必须能独立设计用例。操作系统进程线程、死锁、调度算法结合并发场景理解不要死记硬背。刷题建议按两周为周期第一周集中刷编程题和SQL每天保持3小时的代码手写量第二周转向测试设计和理论复习每天抽1小时刷选择题积累手感。考前最后三天重点看自己整理过的错误清单和思路总结不要再大规模刷新题了。6.3 复盘方法每次刷题或模拟笔试后一定要做笔记复盘。我自己的做法是建立一个Excel表格按科目分类记录错题每道错题写三列原因分析、正确思路、同类题变体。最后考前冲刺阶段只看这份表格效率比重新翻题库高好几倍。以一道典型的网络选择题为例TCP连接建立过程中第二次握手的标志位是SYN和ACK同时置位为什么不能只回ACK答案是因为服务端需要同步自己的序列号必须携带SYN。如果我在复习时只是记忆“第二次是SYNACK”而没有理解为什么下次换一个问法还是会错。所以每次错题不要只写答案要把背后的机制弄懂写透这样才能应对题目变形。还有一个很多人忽略的复盘维度时间消耗。每次模拟考都记录哪一类题耗时最长然后有针对性地加快速度。我当年复习时发现选择题里的Linux题总是犹豫不决原因是命令记得不牢靠后来每天早上用10分钟默写一遍常用命令一周后这类题的正确率和速度都上来了。6.4 心态与临场细节临近开考前把身份证、准考证、充电器、纸笔全部准备好。笔试通常使用牛客网或赛码网平台提前一天熟悉平台上代码题目的输出方式。不同平台的输入输出模板差异不小有的需要自己处理多行输入有的直接提供函数签名提前摸清能节省大量时间。开考时先全局浏览一遍整张试卷对题目类型和数量做到心中有数然后按规划的时间分配逐步推进。遇到完全没有思路的题不要反复纠缠用排除法先排除最不可能的选项能提高猜对的概率。编程题即使无法完全AC也希望把思路用注释写出来把能跑的case先跑通至少能拿到部分分数。最后说一个老生常谈但实在重要的经验如果笔试通过收到了面试通知一定把当时做错的题目再重新做一遍。面试官极大概率会问你当时那道题现在的思路能当场流畅回答和支支吾吾结果完全不一样。这也是复盘笔记在考后最大的价值。
返回列表