
2018年那份小米测试开发实习生笔试题我到现在还留着截图。当时秋招提前批还没全面铺开春招实习的笔试已经是这种强度了算法题、数据库、网络、测试用例设计混在一张卷子里时间紧得像在打实时对战。现在回头看那套题的价值不只是“刷题”它基本框定了大厂测试开发岗的底层能力模型而且这个模型到今天也没过时。准备转型测试开发、或者正在攒实习经验的同学不妨拿它当一面镜子看看自己到底差在哪。1. 小米2018测试开发笔试题到底在考什么1.1 题型分布与真实考点拆解先还原一下整体结构。2018年那场笔试题型大致分三类第一部分是客观选择题覆盖数据结构、算法复杂度、计算机网络、操作系统、数据库SQL、Linux基础第二部分是简答题重点是测试用例设计和场景分析第三部分是两道编程题一道偏算法一道偏字符串/数组处理。总分100分时间90分钟说实话节奏非常紧。选择题里我印象比较深的有几类。第一类是“给一段代码问输出”考察对程序执行顺序、变量作用域、递归调用理解这类题在Java、C、Python里都常见小米那场似乎偏Java多一点。第二类是计算机网络TCP三次握手、HTTP状态码、get和post区别这种万年常青题基本属于送分题但送得很隐蔽因为选项经常设陷阱。第三类是数据库给两张表让你选SQL查询结果或者判断索引是否生效。简答题的经典款是“针对一个购物车功能设计测试用例”。看似开放实际在考察你的测试理论体系功能测试、边界值、异常场景、兼容性、性能、安全你能不能分维度覆盖而不是东说一句西说一句。另一道是“发现一个bug如何定位是前端还是后端问题”考察排查思路这种题没有标准答案但能拉开人和人的差距。编程题的话一道是反转链表或者链表判环这难度另一道是字符串处理类的题比如删除重复字符、括号匹配这类。当年我对编程题印象特别深因为第一题做出来很顺第二题卡在边界条件上最后只通过部分测试用例。后来想想这类题考的就是一个测试开发工程师最基本的工程代码能力你不仅要会写还要会处理各种边界。1.2 几道代表性题目背后的深意笔试表面考的是知识点实际上是在筛一套思维模式。比如“购物车测试用例”这道题为什么几乎每个大厂测试开发笔试都喜欢出类似的题因为购物车是典型的、业务逻辑不复杂的系统能快速考察你是否具备测试思维正常添加、删除、修改数量、清空、结算、价格计算、库存不足、未登录、并发操作、跨端同步、接口异常这么多维度你要是有条理地列出来说明你有结构化思维这比背一百条测试理论有用得多。再比如“TCP三次握手”很多人觉得这是纯网络知识和测试开发有什么关系关系太密切了。你在用Fiddler抓包调接口、定位弱网问题、排查偶发性连接失败、设计性能测试场景时如果不懂连接建立的细节基本靠猜。测试开发不是点鼠标是需要在数据和协议层面找证据的网络基础就是你的证据库。还有个容易被忽视的点那道“判断代码输出”的选择题其实在考你是不是真正写过代码。很多人能背出i和i的区别但放在一个带循环和赋值的组合表达式里就懵了。笔试阶段不考你业务熟练度就考语言底层敏感性。这份卷子的设计思路用一句话概括就是既要你有计算机基础广度又要有coding深度的底线还要有测试专业度的骨架三样缺一不可。2. 从笔试题目反推测试开发的核心能力栈2.1 编程基础语言与数据结构的底线看到这张卷子第一反应是“编程题占比不算特别高”但恰恰是这两道编程题决定了你能不能进下一轮。很多测试从业者的误区是“测试不用写太多代码会点脚本就行”但大厂的测试开发岗定义是“开发能力的测试工程师”代码能力是第一道门槛。语言选Java还是Python都行但你至少要熟练掌握一种能够不查API就写出链表反转、二分查找、字符串处理这类常见题。数据结构基础知识笔试会直接考选择题面试时会更深入。比如队列和栈的区别、二叉树遍历方式、哈希表冲突解决方法、常见排序算法的时间复杂度这些看起来像后端开发要背的测试开发也要掌握。为什么因为你在做接口测试、性能测试、写自动化框架时会遇到大量数据组织和算法选择的问题。举个简单例子你写自动化脚本要批量处理测试数据用list还是set数据量上万时效率差出几个数量级不懂数据结构就只能傻等。我的建议是语言至少刷完《剑指Offer》主力题数据结构重点看链表、树、字符串、哈希表、栈和队列。不要贪多但每个都要能手写出来。笔试现场没有IDE提示、没有自动补全更没有人帮你debug手写能力是硬指标。2.2 网络、操作系统与数据库为什么是必考三件套网络、操作系统、数据库这三块看似杂学实际上是测试开发区分于“纯功能测试”的关键。网络方面协议栈、TCP/UDP、HTTP/HTTPS、DNS解析、状态码含义、Cookie和Session、WebSocket这些是高频考点。测试开发经常要和接口测试打交道你会设计接口用例、分析报文、模拟故障不懂网络的话定位问题就像盲人摸象。操作系统考什么进程和线程、死锁条件、内存管理、Linux常用命令。笔试选择题很少直接问理论而是结合场景。比如“多个线程同时修改一个变量结果不确定是什么问题”这是在考并发和同步“进程和线程的本质区别”这是基础中的基础。而Linux命令就更不用说了查看日志、查找文件、查看端口、进程管理几乎每天都要用。数据库是测试开发和测试工程师都很重要的技能。笔试会考SQL查询尤其是多表连接、分组聚合、子查询还有事务的ACID特性、索引失效的场景。为什么因为测试数据你要自己准备线上问题你要查库确认数据正确性验证是测试的核心内容之一。我见过有候选人编程题写得不错但一条简单的left join写错就直接没进复试这种基础知识没办法临时抱佛脚。2.3 测试理论从用例设计到自动化思维如果计算机基础是骨架那测试理论就是肌肉。小米那份卷子里的简答题本质上是在考察你有没有建立测试思维。所谓测试思维不是知道“等价类划分”“边界值分析”“因果图”这些名词而是面对一个具体功能时能迅速形成一套覆盖全面的用例清单。高频测试理论考点包括测试流程需求评审、测试计划、用例设计、执行、缺陷管理、测试报告、测试分类单元、集成、系统、验收功能、性能、安全、兼容性、用例设计方法等价类、边界值、场景法、错误推断、缺陷生命周期、Bug优先级定义、测试覆盖率概念。除了理论自动化思维也在笔试里反复出现。比如“给你一个登录功能如何设计自动化测试方案”这道题不是在问你会不会用Selenium而是问你能不能分层考虑脚本层用例数据、逻辑层操作步骤、数据层测试数据、报告层结果汇总以及如何处理等待、异常、断言。自动化不是写一堆脚本就完了而是工程化设计这是从“测试工程师”走向“测试开发工程师”的关键一步。3. 针对这套题的高效准备路线3.1 第一阶段基础编程能力打底目标0-2个月这里给准备时间不充裕的同学一个可复制的路径。第一步选定一门主攻语言推荐Python因为它简单、上手快而且测试开发岗位普遍用Python写自动化脚本和工具性价比最高。当然如果目标公司明确要求Java那就主攻Java但学的时候同样要注意底层原理。第二步是刷题。LeetCode按标签刷从数组、字符串、链表开始再到哈希表、栈、队列、二叉树。每天保持2到3道坚持一个月基本能覆盖笔试中80%的题型。刷题的同时要总结模板比如反转链表的迭代写法、二分查找的区间写法整理成自己的代码笔记。笔试中时间不允许你现场推导必须形成肌肉记忆。第三步是补计算机基础。这块不要求啃完所有大部头教材针对考试高频点来网络看HTTP状态码、TCP三次握手、Cookie和Session操作系统看进程和线程、死锁、虚拟内存数据库看增删改查、join、group by、having、索引基础。每周末集中半天过一遍配合刷题巩固。这个阶段的目标不是成为专家而是拿到一道题能说出大方向不犯低级错误。3.2 第二阶段测试专项能力进阶目标2-4个月基础打完之后开始进入测试专业知识。首先是测试理论系统学习用例设计方法把每种方法的适用场景和案例吃透。你可以拿一个常见系统比如电商下单流程练习从需求文档出发依次用等价类、边界值、场景法设计出一份完整测试计划。然后是工具入门。接口测试学Postman和Jmeter自动化测试学Selenium WebDriver和PlaywrightAPP测试学Appium抓包工具学Fiddler或Charles。这里要注意不是简单跑通demo而是要明白工具背后的原理。比如Selenium为什么能驱动浏览器WebDriver协议是什么Jmeter为什么能模拟高并发线程组和事务控制器怎么设置。面试官问起工具更想听到的不是“会用”而是“知道为什么”。系统学习自动化框架推荐PytestAllure这套组合。从写第一个断言开始慢慢做数据参数化、fixture管理、异常截图、日志收集最后能把一套Web项目的冒烟用例跑起来。这个过程会踩很多坑但每一坑都是后面面试可以讲的素材。3.3 第三阶段项目实战与AI工具辅助目标4-6个月到第三阶段已经具备基础知识需要把能力“物化”成一个可展示的项目。不要总想着从零写一个宏大平台建议从小而美的工具开始。比如给团队写一个接口自动化测试脚本把登录、下单、查询流程串起来或者写一个自动化用例生成器根据Excel表格自动生成测试脚本。这类项目业务逻辑简单但能展示你的代码能力、工程思维、文档意识。现在的测试开发绕不开AI辅助这条路。比如用AI工具生成测试用例、写自动化脚本、分析缺陷报告已经变成常规操作。你可以尝试用开源的opencode这类工具把一个项目从需求到设计、到开发、到测试的完整闭环走一遍。注意不是让它自动生成代码交差而是要让AI帮你把需求拆解成功能点结合自己的判断生成测试策略和边界用例并验证它生成的代码。这种“AI测试开发”的协作模式本身就是这两年测试开发面试中很加分的话题。项目做完之后一定要沉淀成文档画出架构图标注出你解决了哪些问题。如果是团队项目注明你负责的模块如果是个人项目说明业务背景和技术选型。面试时讲项目的逻辑顺序应该是背景、方案、难点、成果、复盘而不是开屏就是“我用Selenium写了个脚本”。4. 测试开发面试八股文高频考点与答题模板4.1 十道高频八股文题与思路所谓“八股文”就是指高频概念题面试官整天问候选人整天背但依然考察基础功底。我总结了十道最常考的大家可以把这些当成自测清单请说一下TCP和UDP的区别。答题框架面向连接vs无连接、可靠性、传输效率、应用场景最好举一个视频流和文件传输的例子。HTTP和HTTPS的区别。核心是加密层TLS握手以及端口还可以谈谈证书的用途。进程和线程的区别。从资源拥有、调度、切换开销、通信方式展开最好结合一个多线程测试场景。Post和Get的区别。从语义、参数位置、长度限制、幂等性、缓存策略等方面说注意别只背“一个安全一个不安全”。什么是等价类划分和边界值分析给你一个输入框当场设计用例。如何定位一个偶现的Bug回答要体现“复现、隔离、收集信息、分析根因”的思路。数据库事务的四个特性是什么ACID的英文名和场景解释以及隔离级别。什么是索引为什么会失效覆盖索引和回表也要提。如何测试一个微信朋友圈的点赞功能分前端、后端、接口、数据、权限、性能等角度。描述一次你在项目中遇到的棘手Bug以及如何解决的。这个是行为面试题但也是测试开发的高频题提前准备一个真实故事。每一道题建议整理成“定义特点例子延伸”的四段式回答。比如TCP/UDP先说定义再说特点对比然后举实际应用最后延伸说在测试中如何模拟丢包、延迟来验证。这样回答既有广度又有深度不会干巴巴。4.2 从“背八股”到“讲项目”如何避开背书感面试官最怕一种候选人八股文背得滚瓜烂熟一问到项目就支支吾吾。因为八股只能证明你“记住了”项目才能证明你“理解了”。准备时要把每个八股知识点尽量和你的项目经历挂钩。拿“进程与线程”举例不要只说概念可以接着说“我做压测的时候用Jmeter模拟多用户并发本质上是多线程工作但服务器端的线程池模型会影响并发下的响应时间当时我通过调整线程数和TPS观察性能曲线理解了线程切换对资源消耗的影响。”这样一讲八股和项目就融在一起了。另外现在AI测试开发方向很火面试官也愿意聊。你可以准备一些AI相关的思考比如AI生成的测试代码如何保证质量是否会用大模型做缺陷分析工具自动生成的用例和人工设计的用例如何取舍不用给出完美答案但要有自己的观点和尝试经验。我们团队里已经有人用大模型根据需求文档直接生成初版测试用例再人工补充边界场景效率提升明显这类实践经验比空谈概念有说服力得多。5. 我的实操心得那些年我踩过的坑5.1 笔试准备中的三个误区第一个误区是只刷题不总结。我见过很多同学刷了四五百道LeetCode笔试成绩还是很一般。原因是刷题停留在了“看题-写码-过”的层面没有归纳类型题到了考场上遇到稍微陌生的题就没有思路。正确的做法是每道题刷完写解题笔记考察点、思路、复杂度、易错点、同类题关联。每周复盘一次把弱项题型专门强化一下。第二个误区是忽视选择题中的“小分题”。很多人觉得编程题是重头戏选择题随便蒙。但实际上笔试过不过取决于总分。选择题里的网络、操作系统、数据库都是只要复习就能拿到的确定性分数放弃这些等于把命运交给运气。尤其数据库SQL题它不像算法题需要天分背熟语法和常用案例就能从平时的五六成正确率提到九成。第三个误区是不提前模拟笔试。真正笔试时有一个巨大干扰时间限制。90分钟需要完成几十道选择题加两道编程题很多人一开始在选择题纠结编程题只剩20分钟慌了神连简单思路都写不出来。建议考前至少做三次完整的模拟笔试严格限时中途不看资料提前找到自己最顺的做题节奏。我的节奏是先扫一遍编程题心里有数后快速做选择题留出至少35分钟给编程题。5.2 面试表达与代码手写的细节笔试过了之后还有一轮技术面试会现场写代码。这里有几个非常容易扣分的细节。第一别急着动笔。听到题目后先和面试官确认输入输出和边界条件。比如“反转链表”这道题你可能要想清楚是迭代反转还是递归反转链表为空、只有一个节点时怎么办。和面试官确认这些细节不是浪费时间而是展示你的工程思维。第二代码要写注释和清晰的变量命名。不要求面面俱到但在关键步骤要写一行注释说明思路。面试官看你的代码就像测试在看开发代码他自己也需要可读性。变量名不要写a、b、c写node、prev、curr没人会说你在炫技反而会觉得你习惯良好。第三写完代码一定要主动检查测试用例。很多候选人一写完就放下笔说“我写完了”。正确的做法是找一两个实际例子手动模拟一下代码运行过程看结果是否符合预期。这个习惯不仅面试加分做真实项目时更是一个测试开发的基本素养。我自己带人时看到能自己主动跑用例的候选人几乎必过。5.3 给后来者的小建议如果正打算投测试开发实习我的最后建议是不要死盯着“测试开发”这个岗位名称把它看成一个需要复合能力的工程岗位。测试开发不是“点点点”的升级版而是用代码和工具替团队回答“产品质量到底怎么样”这个问题的角色。那些笔试里让你头疼的网络、数据库、算法最终都会成为你真的武器。我也建议在简历上体现一些“与众不同”的东西。比如除了常规功能测试你对性能测试有了解除了写自动化脚本你还尝试过把AI工具接入测试流程。不必每一项都很深但有一两个亮点能让面试官记住你。最后再分享一个小技巧准备一个自己的“测试工具箱”把常用命令、代码片段、测试数据模板整理成个人文档笔试前和面试前快速过一遍效果比翻厚厚的书要好得多。这套方法我用了很多年稳定有效。