十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

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

小米秋招测试开发笔试题解构:考点拆解与避坑实战指南

小米秋招测试开发笔试题解构:考点拆解与避坑实战指南 先说结论如果你正在准备大厂测试开发岗的校招笔试2022年小米秋招这道卷子值得认真刷一遍尤其是里面把“测试理论基础、工程代码能力、产品敏感度”三块内容揉在一起的考法跟不少大厂近两年的出题方向很像。这场笔试刷下来不光是验证你会不会写用例、会不会写代码更是在考你有没有“测试思维”——这是很多人在刷题阶段最容易忽略、也最吃亏的地方。这篇文章我按照“整卷解构—考点拆解—实操复盘—避坑经验”的顺序来拆内容会尽量落到具体题型和应对策略上适合准备测试开发/软件测试校招岗位的同学参考也适合刚入行想系统补测试基础的人对照自查。1. 整卷设计与出题思路解构1.1 这套卷子到底在考什么我做完这套卷子最大的感受是它不是单纯考某一块知识而是想通过一张卷子把你“适不适合干测试开发”这件事摸清楚。整张卷子可以分成四类内容。第一类是测试基础理论比如黑盒测试用例设计、等价类和边界值分析、测试流程、Bug的生命周期管理。这部分占比不低但难度不大属于送分题前提是你真的把课本知识理解透了而不是背了一堆名词。第二类是编程题通常是一到两道算法题难度在LeetCode中等偏下涉及数组处理、字符串操作或简单的动态规划。这里有个很有意思的考点出题人会在题干里混入一些“边界条件”和“异常输入”如果你写代码时没有测试意识很容易栽在隐藏用例上。第三类是数据库和Linux常用命令考SQL多表查询、简单索引优化、常用的日志查看命令等。这部分比较贴近实际工作场景因为测试开发日常就是要查库、看日志、定位问题。第四类是逻辑推理和情景题比如给你一个功能需求让你设计测试方案或者给出一个线上问题让你推断可能原因。这类题没有标准答案但能区分出你有没有真正的测试思维。1.2 为什么小米要这么出题小米的业务线很复杂从手机、智能家居到互联网服务测试开发工程师要面对的不只是App功能测试还包括嵌入式设备联调、云端接口测试、大数据链路验证等场景。所以笔试不会只考单一技术栈而是看你的知识面够不够宽、能不能快速理解一个陌生系统。另外小米的用人风格里比较看重“把事情搞定”的能力不喜欢只会等别人给方案的工程师。这种风格直接体现在情景题里它不会问你“测试计划应该包含哪些内容”而是给你一个具体的功能让你自己补充测试设计、预估风险、给出排期建议。你要是不懂业务只背模板答出来的内容会很空洞。还有一个细节值得注意这套卷子里有些选择题涉及小米产品生态的内容比如对MIUI系统功能的了解、对智能设备联动场景的理解。这类题看起来占比不大但如果你对小米产品线比较熟答起来会顺手很多也容易给后续面试留下好印象。1.3 和同类型大厂笔试题的横向对比我对比了同一年其他几家大厂的测试开发笔试题小米这套卷子的特点是“稳中带偏”。“稳”体现在基础题占比高尤其是测试理论和数据库只要你是科班出身认真准备过至少能拿七成分数。“偏”体现在编程题和情景题的结合方式上它不会直接说“请实现某个算法”而是会套一个实际场景比如“某个接口返回数据需要做校验请写出校验逻辑”这时候你不仅要写出功能代码还得考虑异常分支和性能优化。相比之下有些大厂更偏向纯算法考核一张卷子全是LeetCode变体还有些大厂侧重框架源码问Spring、MyBatis的底层原理。小米这套卷子在广度和深度之间取了一个平衡更接近“全栈测试”的定位。我当时做完的感受是如果平时只刷算法题、不看测试理论前半部分会做得很吃力如果只背测试理论、代码能力弱后半部分的编程题又会直接暴露短板。2. 核心考点与答题要点拆解2.1 测试理论题别栽在“熟悉”的陷阱里测试理论这块大多数同学都觉得自己会但实际做题才发现丢分点全在细节上。比如等价类划分题目会给你一个输入条件要求“设计最少测试用例覆盖有效等价类和无效等价类”看似简单但很多人会忽略“无效等价类要一分为多”的基本原则。实际做题时我建议先在草稿纸上把有效等价类和无效等价类分别列出来再逐个判断每个无效等价类是否需要单独设计用例。我看到的丢分情况几乎都是无效等价类漏写导致的。边界值分析也是高频考点。这里有个容易混淆的点边界值分析不是只测上点和下点还要测离点。比如一个输入范围是1到100边界值是1和100那要测的用例至少包括0、1、2、99、100、101这六个值而不是只测1和100。还有一个高频考点是因果图法和判定表法。笔试一般不会让你画完整的因果图但会给你一张判定表让你判断哪些条件组合是无效的。这类题的关键是理清条件之间的约束关系比如“互斥条件”和“必须同时满足的条件”。我建议做题时先标出条件之间的关系再对照判定表逐一验证能明显降低出错率。2.2 编程题不只写功能还要写测试思维编程题是这套卷子的分水岭。我遇到的题目大致有两类。第一类是纯算法题常见的是字符串处理、数组操作、链表反转这类难度不算高但要注意两个细节一是题干里经常有“输入可能包含非法字符”“数组长度可能为0”这样的描述这其实是在提示你要做参数校验二是部分题目要求的时间复杂度是O(n)这意味着你如果写双重循环即使结果对也可能被判超时。第二类是基于场景的编程题比如让你实现一个函数对用户输入的手机号进行规则校验。这种题表面是写代码实际是考你能否把测试需求转成代码逻辑。我当时写完后主动补了异常输入的假设并在注释里标注了测试用例这道题完成度明显高于只写核心逻辑的同学。我的建议是做编程题时先把输入输出边界想清楚再动手写完功能代码后花一两分钟在注释里补充测试用例或者直接用几组边界值验证你的代码逻辑。这一步看似多余但能体现你的测试开发潜质也可能直接影响阅卷人对你的整体判断。2.3 数据库与Linux拿分最容易也最容易大意数据库和Linux命令的部分整体难度不大但考的范围比较细。SQL题目一般是多表查询常见的有四类联表查询、子查询、分组统计、排序去重。需要注意的是测试开发岗位的SQL题经常带有“查询没有订单的用户”“统计每个分类下的商品数量”这类反向思维需求对应的就是LEFT JOIN IS NULL、GROUP BY HAVING的组合使用。如果你只会在单表上做简单查询这类题很容易做错。Linux题目主要集中在文件操作、日志查看、进程管理和权限管理。高频命令包括ls、cd、cat、grep、tail、find、chmod、ps、kill、netstat。这里有个不太容易注意到的考点管道符和重定向的区别。比如“统计日志文件中出现error的行数”正常写法是grep error app.log | wc -l但不少人会写成grep error app.log wc -l这样完全不对。平时一定要动手在虚拟机上多练几遍光靠背诵记不牢。2.4 逻辑与情景题展现测试思维的高地情景题是拉开差距的地方。一般会给你一个具体的测试场景要求你设计方案或排查问题。比如“一个电商App的搜索功能上线后用户反馈搜索结果排序不对请分析可能原因并提出排查方案”。答这类题我总结了一个比较稳定的框架先复述需求明确自己理解的预期行为再列出可能原因从功能逻辑、数据处理、网络异常、兼容性等角度展开然后给出排查步骤具体到用什么工具、看什么日志、跑什么命令最后提出修复后的回归测试方案。用这个框架答题至少在思路上是完整的。如果只写“重新启动一下服务”这种话基本就拿不到分了。另外注意情景题的题干会故意模糊一些条件这时候你可以主动在答题区补充一句“补充说明在xxx条件下我会额外验证xxx”这会给阅卷人留下“考虑问题很全面”的印象。3. 实操复盘从审题到交卷的完整流程3.1 时间分配策略不要死在最后一道编程题上这套卷子的题量不算少正常来说选择填空加编程题答题时间在90到120分钟之间。我自己的时间分配方案是测试理论和选择题控制在25分钟内数据库和Linux控制在20分钟内留至少35分钟给编程题剩下的时间用来检查。为什么优先保编程题因为编程题分值高、区分度大而且一旦没写完几乎不可能靠前面的选择题补回来。不少同学前面做题太细遇到一道拿不准的选择题反反复复改来改去结果最后编程题只写了一半这是最亏的。我建议在正式答题前先花两分钟把整张卷子扫一遍标记出哪些题是“一眼会”的哪些是“需要仔细想想”的哪些是“完全没思路”的。先做一眼会的再做需要想的完全没思路的题放到最后。这个策略能最大化分数产出避免卡在一道题上浪费时间。3.2 具体题型的解题实操演示拿一道典型的测试设计题举例题目要求“为一个登录功能设计测试用例包含手机号输入框和密码输入框”。很多同学直接写“输入正确手机号和密码能登录成功”“输入错误手机号提示错误”等这样能拿到基础分但不够。我的答题思路是先列出手机号格式要求的等价类和边界值包括合法手机号、位数不足、位数过长、非数字字符、空值再列出密码的等价类和边界值包括正确密码、错误密码、空密码、超长密码然后补充组合场景比如手机号正确但密码错误、记住密码功能是否生效、连续输错多次是否触发锁定最后补充异常场景比如网络断开时点击登录、输入框内存在空格、特殊符号是否被过滤。这样答下来整道题的完整度会比只写功能用例高好几个量级。阅卷人一眼就能看出你有系统的测试设计思维而不是单纯罗列操作步骤。再举一个编程题的例子。题目可能是“给定一个整数数组输出数组中第二大的数如果不存在则返回-1”。我的实战写法是先判断数组长度是否小于2小于2直接返回-1然后用一次遍历找出最大值和次大值注意最大值的重复情况最后用几组测试数据在注释里验证包括正常数组、全相等数组、负数数组、空数组。写完代码后再用边界数据自测一遍确保逻辑无误。3.3 交卷前的检查清单交卷前我习惯做三件事。第一检查选择题是否有没有看清“不正确的是”“不属于的是”这类反向问法的题因为这种题特别容易因为惯性思维而选反。第二检查编程题的代码缩进和大括号是否完整因为线上编辑器不像本地IDE那样会自动补全和排错少一个括号直接编译不过判分系统是跑不起来的。第三重新审视情景题的答案看自己是否每个观点都有对应的理由或证据支撑如果只是空话宁愿删掉也不要留着拉低整体质量。4. 常见问题与避坑经验4.1 容易踩的五个坑第一个坑是审题不仔细。测试开发笔试题里经常有“以下哪项不属于黑盒测试方法”“以下哪个命令不能查看日志”这类反向选择眼睛一飘就选反了。建议做题时把“不”“错误”“不能”这些词圈出来。第二个坑是编程环境不熟悉。不少线上笔试平台用的是嵌入式编辑器没有自动补全、没有格式化、报错信息也不够直观。平时练习时最好就用这种环境刷题提前适应。第三个坑是代码写完了没有自测。笔试平台上通常允许你手动输入测试用例跑一遍但很多人写完代码就直接提交了结果隐藏用例跑挂。哪怕只是构思几组边界值也能帮你拦住大部分低级逻辑错误。第四个坑是情景题只答结论不给过程。比如问你“如何定位一个接口偶发超时的问题”如果只写“检查网络”四个字约等于没答。应该展开成“先查客户端日志确认超时时间点再查服务端监控确认该时段是否有GC停顿再确认是否依赖了第三方服务最后通过压测复现验证”。第五个坑是多选题的漏选错选。有些平台的多选题是“少选不得分”这时候拿不准的选项到底选不选就很纠结。我的经验是如果题目对得分规则没有明确说明宁缺毋滥选自己最有把握的两个选项比赌一个不确定的选项更稳。4.2 时间不够用的补救策略如果做到一半发现时间不够我的处理顺序是优先保证编程题有一个能跑通的雏形哪怕只实现了主流程不做异常处理也能拿一部分分其次是SQL题写不出完全正确的SQL也要把思路和涉及的表名列出来然后是情景题用“要点罗列”的方式答完不追求完整段落最后再回头补选择题。这套补救顺序的核心逻辑是在有限时间里先把确定性分数拿到手再争取开放性分数。4.3 笔试和实际工作考点的连接我还想多说一句这套卷子表面上是在筛选候选人其实也在向候选人传递“测试开发到底是做什么的”这个信息。你如果只把它当一场考试来准备答题时就会很机械但如果把每道题都当成一个真实的工作任务来对待反而更容易答出亮点。比如情景题里要你设计一个智能家居App的自动化测试方案如果你平时用过类似的小米智能家居产品知道设备状态同步、场景联动、离线处理这些关键点答起来会比只会套框架的人具体得多。我后来在实际工作中也发现测试开发的核心能力其实不是“会写测试用例”或“会写自动化脚本”而是“能在复杂的真实系统里快速定位风险点”。5. 一些针对性的备考建议5.1 搭建测试开发知识体系如果你还在备考阶段我建议先画一张测试开发的知识图谱从测试基础理论、自动化测试、接口测试、性能测试、数据库、Linux、算法与数据结构、计算机网络这几个维度去梳理。不要零散地刷题要让自己脑子里先有一个完整的知识地图这样才能把一道题和它背后的知识树关联起来。举个具体例子一道关于HTTP状态码的选择题表面考的是状态码含义实际上你可以延展到接口测试中常见的404、500、502、504分别对应什么问题场景以及如何在测试报告中描述这类缺陷。如果你能这样联想复习一道选择题就能帮你带动一整个知识板块的回顾。5.2 刷题和项目实战并行推进光刷题不实战知识点很难内化。但校招时期大家普遍没有太多真实的测试开发项目经验这时候怎么办我的建议是拿一个开源项目练手自己搭一套简单的自动化测试框架。比如对一个开源的Web应用写UI自动化用例用Pytest组织用例用Selenium做元素定位加上简单的日志和报告输出。这个过程的收获远大于刷十套题因为你会真正理解自动化用例为什么会不稳定、元素定位为什么要写显式等待、用例之间怎么做数据隔离。如果能在笔试后的面试里讲清楚这个项目你的竞争力会提升一大截。5.3 保持对产品和业务的敏感度最后想强调一点测试开发不能只埋头于技术还要有产品意识。小米这类公司在笔试里也会通过情景题考察你对业务的理解。平时用各类App的时候可以多带着测试的视角去体验产品付款流程中为什么先弹确认框再调起支付下拉刷新和分页加载是怎么交互的弱网场景下为什么有的页面有缓存有的没有。这些问题并不需要你写代码才能回答但能体现你是不是一个“有心人”。6. 写在最后我自己复盘这套卷子时最大的感受是它考的不是你背了多少知识点而是你能不能像一个真正的测试开发工程师那样去思考问题——面对一个模糊的需求能主动拆解边界面对一个线上问题能按优先级排查面对一段代码能下意识想到它的异常分支。如果你正在准备类似岗位的笔试我建议你拿到一套真题后先不要急着做把每一道题背后的考点标出来再对照自己的知识薄弱点逐个攻克。刷完题后顺手把错题整理成一份自己的避坑清单考前再过一遍效果会比盲目刷十套新题好得多。最后再分享一个小技巧笔试过程中如果代码没跑通也不要直接放弃把思路和步骤写在注释里有些阅卷人会给“过程分”。哪怕最后结果不对能看出来你思路清晰、考虑问题全面也比一片空白强。测试开发这个岗位最怕的不是你不会而是你不会还不想办法。
返回列表