尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

2018小米测试开发秋招笔试客观题考点全解析与备考策略

2018小米测试开发秋招笔试客观题考点全解析与备考策略 1. 这个岗位到底考什么2018年秋招测试开发笔试全景拆解每年八月下旬到九月初各大厂的秋招笔试就陆续开闸了小米的测试开发工程师岗位在2018年那波招聘里算是热度很高的一批主要原因倒不是薪资被炒得多高而是岗位本身覆盖的技术面特别宽——从软件测试理论到代码功底从Linux操作到网络协议基本把计算机基础课从头到尾扫了一遍。很多同学看到“测试开发”四个字第一反应是“这不就是点点点吗”这个误解在笔试现场会死得很惨。小米的测试开发笔试客观题实际上是把测试工程师的工程素养和开发工程师的代码能力混在一起考题目表面上是选择题但每一道题背后都藏着一个真实的测试场景。换句话说它不考你背了多少概念而是考你在实际测试工作中能不能做出正确的技术判断。先说题型分布。2018年秋招小米测试开发的客观题大致分为四个板块软件测试基础、计算机基础知识、编程与算法、场景分析题。其中软件测试基础大概占三成计算机基础占三成编程与算法占两成半场景分析占一成半。这个比例说明一个很关键的信息——测试开发不是纯测试岗它要求你同时具备测试思维和开发能力。再看出题逻辑。客观题里的选择题选项干扰项设计得相当有水平不是那种一眼就能排除的弱智干扰项而是“看似都对实际上只有一个在特定条件下成立”的陷阱题。我印象很深的一道题问的是等价类划分中无效等价类的取值该如何设计四个选项里有两个都是常见的错误做法一个是把无效等价类设计成多个值的组合另一个是在边界值附近取值。这种题目如果只是背了概念没有真正做过测试用例设计基本会掉坑里。还有一类题目是给出一段代码问这段代码的圈复杂度是多少或者问你用哪种测试方法能覆盖到某个分支。这种题考的就是白盒测试的基本功需要对控制流图、判定节点、路径覆盖这些概念有实打实的理解而不是停留在“白盒测试也叫结构测试”这种名词记忆层面。小米这个岗位的笔试还有一个特色就是会结合自家产品的场景来出题。比如给你一个MIUI升级包的下载流程让你判断哪些测试点是必须覆盖的或者给你一个路由器固件刷写的操作序列让你分析哪个环节最容易出现兼容性问题。这种题对没有实际项目经验的同学来说难度最大因为它考的是一种测试敏感度——你看到一套业务流程能不能本能地意识到哪些地方容易出问题。所以我的建议是准备这份笔试不要把它当成一次单纯的考试来准备而要把自己代入一个真实的测试开发工程师角色去思考“如果这个功能上线我要怎么保证它不出问题”。有了这个视角转换再做那些客观题你会发现题目突然变得简单了许多。1.1 小米测试开发岗位定位与笔试题型分布想弄明白一份笔试卷子为什么这么出首先得搞清楚这个岗位到底在招什么样的人。小米的测试开发工程师从岗位名称上就能看出来它不是传统意义上的QA而是要求你既能写测试工具、开发自动化脚本又能承担功能测试、性能测试、兼容性测试这些具体的验证工作。换句话说这是一个“开发能力测试思维”的复合型岗位。2018年那会儿移动互联网的迭代速度已经到了一个峰值MIUI几乎每周都有更新版本测试团队如果没有自动化和工具开发能力根本扛不住这种发布节奏。笔试客观题的设计本质上是在用最短的时间筛出两类人第一类是计算机基础扎实、代码能力过关的人第二类是具备测试思维、能站在用户角度思考质量问题的人。如果你这两方面都有那这份卷子对你来说就是展示自己的舞台如果你只占一头另一头就会成为你的失分重灾区。从题型占比来看软件测试基础部分主要考察测试理论、测试用例设计方法、测试流程管理、缺陷生命周期这些内容。计算机基础部分则涵盖数据结构、操作系统、计算机网络、数据库四个方向其中操作系统和网络的分值略高于数据结构和数据库这和测试开发的实际工作内容是匹配的——你在做性能测试时要懂操作系统资源调度在做接口测试时要懂HTTP协议状态码。编程与算法部分客观题形式局限了它的考察深度所以它主要通过代码填空、复杂度分析、边界条件判断这些方式来考察。场景分析题则最灵活往往是一段业务描述配四个测试方案让你选出最优的测试策略。我建议准备的时候不要平均用力。如果你的数据结构基础比较弱想在客观题里靠选择题蒙混过关是不现实的因为代码相关的选择题往往会在细节上挖坑比如链表删除操作时指针的先后顺序、递归函数的退出条件这种题会的就是会不会就是不会没有蒙的余地。1.2 客观题的出题逻辑与筛人逻辑客观题虽然只是笔试的第一关但它承载的筛选任务其实非常重。小米这样的公司校招简历投递量是几万份起步的线上笔试系统要在有限时间内完成初筛客观题就成了性价比最高的筛选工具。它的筛人逻辑有两条线。第一条线是知识面的完整性。测试开发工作里遇到的绝大多数问题都不是某一个单一学科能解决的。举个最简单的例子当你发现一个接口在高并发下返回超时你需要懂HTTP协议来定位请求链路需要懂操作系统来排查文件描述符耗尽问题需要懂数据库来检查连接池配置还需要懂一点Linux命令去抓日志和看监控。笔试客观题把这些知识散落在不同板块里就是为了考察你的知识结构是否完整。第二条线是细节敏感度。测试开发这个岗位本质上就是和细节较劲的岗位。一个边界条件没覆盖到一个异常分支没考虑到线上就会出事故。客观题的干扰项设计恰恰就是在模拟这种细节战场。经常有同学出考场后说“我觉得有两道题选C都有道理”这就是掉进了细节陷阱。明白了这层逻辑你就知道该怎么答题了。遇到拿不准的题不要凭感觉蒙而是回到第一性原理去推理这道题在考察哪个知识点这个知识点在真实场景中是怎么应用的哪个选项更符合工程实践的常识。这套推理过程本身就是测试开发工程师的核心能力。2. 客观题核心考点逐一击破从测试理论到基础编程前面说了那么多宏观的东西下面进入正题把客观题涉及的几个核心考点掰开揉碎讲一讲。我会结合2018年小米秋招测试开发客观题的实际考察方向把每个板块最容易被考到、也最容易出错的知识点拎出来。2.1 软件测试理论基础必考的用例设计与流程概念软件测试基础部分最核心的考点是测试用例设计方法其中等价类划分、边界值分析、因果图法、场景法这四个是绝对的高频考点。等价类划分这题常考的是有效等价类和无效等价类的设计原则。你以为它考的是定义实际它考的是思辨。比如输入条件是一个“6到18位字符”的密码有效等价类当然是“6到18位的字符串”无效等价类则要拆成“少于6位”和“多于18位”两个。有些同学会把“非字符类型”也算作无效等价类这在逻辑上没错但在等价类划分的规范里这就属于分类粒度的问题命题人往往会在这个点上设置干扰。边界值分析是另一个必考点。边界值分析不是让你取边上的值测一测就完事了而是要你理解“上点、内点、离点”这三个概念。还是在“6到18位”这个例子里上点是6和18内点是中间任意一个数比如12离点是5和19。选择题里最容易挖坑的就是离点的取值规则——闭区间和开区间的离点取值方式完全不同很多同学记混了就会选错。因果图法在笔试题里通常不会让你真的画因果图而是给一个业务规则问你用哪种用例设计方法最合适。比如“登录时账号存在且密码正确才能登录成功账号不存在或密码错误都给出提示”这种多条件组合的场景正确的方法是因果图法而不是简单的等价类划分。这里考察的是你对不同用例设计方法适用场景的理解。场景法也常考尤其是结合小米产品的场景比如“用户在弱网环境下点击下载下载中断后恢复网络进度条应如何显示”。这种题没有绝对的对错标准命题人给的是“最合理”的测试方案这时候你需要用测试思维去判断用户最关注什么功能最容易在哪个环节出错什么样的验证顺序能让风险暴露得最充分。然后还有一批概念辨析题比如验证Verification和确认Validation的区别回归测试和冒烟测试的适用场景测试计划、测试方案、测试用例三者的层级关系。这类题纯考记忆但也有规律可循——命题人喜欢把“相似但不同”的概念放在一起做干扰你只要抓住每个概念最核心的区别点就不会被带偏。2.2 编程语言与数据结构选择题里的代码思维测试开发岗位的笔试编程题不一定有但客观题里一定会有和代码相关的题目。2018年那场笔试选择题中代码题呈现的方式主要有三种给代码问输出、给需求选代码、给代码算复杂度。给代码问输出是最直接的一种。它常考的知识点是变量的作用域、值传递与引用传递、循环中的边界条件、递归的终止条件。这种题对刷过LeetCode的同学来说基本是送分题但要注意的是笔试题里的代码风格往往不是标准的最佳实践而是有些“野路子”的写法容易在细节上误导你。比如循环里用了前置递增和后置递增在C系语言里两个运算结果可能都一样但在C中如果涉及对象就会有行为差异。给需求选代码是更有测试开发特色的题型。比如题目说“写一个函数判断一个字符串是否是合法的IP地址”然后给你四个代码片段让你选一个正确的。这类题不仅考你能不能读懂代码还考你能不能发现代码中的边界条件遗漏。一个合法的IP地址判断需要考虑四段、每段范围0到255、不能有前导零在某些规范下、不能有非数字字符。四个选项里通常有一个是主逻辑正确但漏了边界条件的一个是对空字符串和null没有处理的还有一个是看似正确但用了不安全函数的只有一个是真正健壮的实现。给代码算复杂度是数据结构的基础。这个没啥捷径就是刷题过程中培养的直觉。比如嵌套循环是O(n²)递归如果没有记忆化就是指数级复杂度。需要单独注意的是某些看似普通实则特殊的写法比如双指针扫一遍数组是O(n)但在循环内部使用了列表删除操作在Python里这可能是O(n²)。对于测试开发这个岗位数据结构的核心考察点其实很聚焦数组和链表的区别与应用场景、栈和队列的特性与互相实现、哈希表的冲突处理方式你不需要能手写Redis的哈希结构但至少要知道链地址法和开放定址法的基本思想、二叉树的遍历方式、排序算法的稳定性和时间复杂度。其中排序算法的稳定性是选择题的常客快排不稳定、归并排序稳定、堆排序不稳定这些结论要刻在脑子里。2.3 操作系统、网络与数据库三大件一个都不能少操作系统方面进程与线程的区别是永恒的高频考点但测试开发的笔试更喜欢把考点落到工程场景里。比如给你一个多线程程序问你在什么情况下会出现死锁或者问你在性能测试中看到CPU使用率100%应该优先排查什么。死锁的四个必要条件——互斥、占有并等待、非抢占、循环等待——需要记住但更重要的是能识别一个场景是否满足这些条件。笔试题常考的是“如何避免死锁”答案和现实中的做法一样破坏四个必要条件中的任意一个。在数据库层面这叫锁的粒度控制在代码层面这叫锁的顺序约定在操作系统层面这叫资源分配策略。处理机调度算法也是常客先来先服务FCFS、短作业优先SJF、时间片轮转RR各自的特点和适用场景要能区分。选择题里经常会给你一组进程的到达时间和执行时间让你算平均等待时间这需要你熟练掌握甘特图的画法。内存管理方面分页和分段是重点。分页是物理上分割内存分段是逻辑上分割程序两者最大的区别在于分页可能产生内部碎片分段会产生外部碎片以及分页地址空间是一维的分段是二维的。虚拟内存的页面置换算法——最佳置换算法OPT、先进先出FIFO、最近最久未使用LRU——也会考其中LRU的栈式实现是选择题的经典出题点。计算机网络这里HTTP协议是绝对的核心。2018年的时候HTTP/2已经在逐步普及但笔试的重点依然放在HTTP/1.1上状态码的含义、请求方法的区别、GET和POST在语义和传输方式上的差异、Cookie和Session的对比。网络层的考点集中在IP地址的分类和子网划分。给你一个IP地址和子网掩码让你算网络地址和广播地址这种题是基本功。还有ARP协议的工作原理——在同一个局域网内主机A要发给主机B需要先把目的IP地址通过ARP解析成MAC地址这里有个很容易考的细节ARP请求是广播发送的ARP响应是单播回复的。TCP和UDP的区别不用多说握手挥手过程要能默画出来。我建议准备这个考点的时候别死记硬背而是试着去理解为什么要三次握手、为什么要四次挥手。三次握手是为了确认双方的收发能力都正常四次挥手是因为TCP连接是全双工的每一方的连接都需要单独关闭。数据库方面SQL语句是基础。笔试客观题经常考的情境是“有一张用户表和一张订单表要查询下单次数超过5次且最近30天没有下单的用户”然后给你几个SQL语句让你选正确的。这种题考的不只是语法还有逻辑能力尤其是GROUP BY和HAVING的使用、WHERE和HAVING的执行顺序、LEFT JOIN和INNER JOIN的结果差异。数据库范式的概念也会考第一范式要求字段原子性第二范式要求消除部分依赖第三范式要求消除传递依赖。选择题的常见出题方式是给一张表的设计问你它属于第几范式或者问它不符合哪个范式的原因。关系型数据库的ACID特性、事务隔离级别、索引失效的场景这些知识点在多益等大厂的笔试中也反复出现小米也不例外。3. 真题思路还原与实战演练用测试思维解客观题说完了知识点下面来点实际的。我带大家过几道具有代表性的客观题把完整的解题思路还原出来。这个过程比答案本身重要得多因为你在考场上的每一分钟都在被考察“你怎么思考”这件事。3.1 典型选择题的解题路径还原第一道题考察等价类划分。题目大概是这样的一个输入框要求输入一个手机号码合法的手机号码是11位数字且以1开头。问下列哪个测试用例集合能最有效地覆盖等价类。这道题的四个选项里命题人分别设计了 A. 13800138000, 23800138000, 12345678901, 空字符串 B. 13800138000, 1380013800, 23800138000 C. 13800138000, 23800138000, 1380013800, 128001380001 D. 13800138000, 13800138001, 23800138000, 1234567890这类题很容易被“看起来很多用例”的选项迷惑。正确思路是先划分等价类。有效等价类有两个——11位数字且以1开头。无效等价类有多个——不以1开头、位数不足11位、超过11位、包含非数字字符、空输入等。C选项覆盖了“以1开头的11位号码”、“不以1开头的11位号码”、“以1开头但位数不足”、“以1开头位数超了”这4个类覆盖得最为全面。这里要注意A和D虽然用例更多但有些用例落在了同一个等价类内属于冗余覆盖在等价类划分里是应该避免的。第二道题考察边界值分析。题目是一个年龄输入框要求输入范围为18到60岁。问以下哪个用例集合是最优的边界值测试用例。边界值分析要求取上点、内点、离点。上点是18和60内点可以取30离点是17和61。这道题的陷阱在于有些选项只包含了18和60这属于“边界值点”但不完整有些选项包含了17、18、60、61但少了内点这也不完整。最完整的选项应该是17、18、30、60、61这样一个组合。第三道题是场景分析。题目描述用户通过小米商城App下单购买手机支付成功后由于网络波动导致订单状态同步延迟。这时用户刷新订单列表页面显示“支付中”但用户的支付渠道已经扣款。问你作为测试开发工程师最优先要做的验证是什么。这道题没有标准答案但命题人心里有最优解。四个选项是A. 验证支付渠道扣款接口的幂等性B. 验证订单状态从“支付中”到“已支付”的状态流转逻辑C. 验证订单列表刷新时是否重新查询了服务端最新状态D. 验证用户可以正常发起退款。这四个选项都有价值但最优先的是C因为用户的直观感受是刷新后看到的页面状态如果刷新没有触发重新查询那么状态不同步的问题会一直存在。这也体现了测试开发工程师的一个核心素养从用户视角找问题。3.2 时间分配与答题策略90分钟客观题怎么打2018年小米秋招测试开发客观题我记得体量大约是50道题左右限时90分钟。平均下来每题不到两分钟时间相当紧。这里分享一个我验证过多次的答题节奏。第一轮快速扫描只做有信心且一眼能出答案的题。这些题通常是概念题和基础计算题比如数组和链表的区别、排序算法的稳定性、简单的SQL执行结果。一轮下来大概能解决30%到40%的题目耗时控制在20分钟以内。第二轮攻克中等难度题。这些题需要动笔演算比如算时间复杂度的题目、需要画草图分析的内存分配题目、需要理清逻辑的SQL题目。第二轮要给自己留足40分钟保证演算时间充足不要边写边怀疑。第三轮啃硬骨头。通常是最难的应用场景题和综合题这时候你的大脑已经热身完毕非常适合处理复杂逻辑。啃硬骨头的原则是明确每个选项“错在哪”而不是凭感觉“哪个像对的”。如果一道题卡了5分钟还没思路先标记跳过不要恋战。最后的10分钟检查两样东西一是之前标记的跳过的题换一种思路再尝试一次二是检查是否有明明会做但因为粗心选错的题——尤其是那些让你选“不正确”的题很多人看题不清就按“正确”去选了。另外有一个非常重要的策略不会的题不要空着。测试开发笔试没有倒扣分机制空着等于白白丢分哪怕蒙一个也有25%的正确概率。但蒙也有技术含量要优先排除明显违背基础原理的选项再去蒙剩下的。4. 从笔试到Offer复盘方法与日常积累建议笔试只是第一步但往往是最能真实反映基础功底的一步。很多人笔试完了之后只看个分数及格了就开心不及格就丧气这其实浪费了一次特别好的自我诊断机会。客观题覆盖的知识面广你做错的每一道题都指向一个具体的知识短板把这些短板补上你收获的不仅是一份笔试通过通知而是一套完整的测试开发知识体系。4.1 错题复盘与知识体系构建我强烈建议笔试结束后不管感觉好不好都趁热回忆自己拿不准的题目和选项特别是有印象但没把握的知识点立刻记下来。2018年那会儿没有现在这么多AI辅助工具回忆题目的难度很大但你至少能把知识点方向记录下来比如“等价类划分的离点取值规则没搞清”、“TCP四次挥手的状态迁移不熟”然后针对性地去补。复盘也不要只看单道题的正确与否而是要做知识串联。比如你错了一道关于死锁的题不要只背“死锁四个必要条件”可以顺着这个知识点继续问自己死锁和活锁有什么区别数据库中的死锁检测和操作系统中的有什么不同在Java中如何避免死锁如果这道题被考成一个场景分析题我会怎么答这种“由点及面”的复盘方式是建立知识体系最快的方法。我自己当年做的一个笨但有效的事情是拿一个笔记本按“测试理论、数据结构、操作系统、网络、数据库、编程语言”六个板块做索引页每错一道题就在对应板块下记一行知识点关键词。一段时间之后知识短板会直观地浮出水面。你不需要再去问别人“重点复习什么”你自己的错题本就是最精准的复习大纲。4.2 测试思维日常化的训练方法最后说一个很多人忽略的点测试开发的笔试与其说是考知识储备不如说是考测试思维的肌肉记忆。知识可以临阵磨枪但思维方式需要日常积累。我在校招季之前用了大概一个月的碎片时间刻意训练自己“用测试视角看一切”。比如刷微博看到发布按钮我会想这个按钮的点击范围是多大频繁点击会不会造成重复提交弱网环境下点击后提示是怎样的再比如用外卖App下单我会想如果支付后商家没有接单用户退款流程怎么走如果骑手配送超时App有没有自动赔付逻辑这些思考不需要额外投入大量时间通勤路上、吃饭排队时都能做但积累起来你会发现再做那些场景分析题你的“测试敏感度”会明显高于只刷题的竞争对手。笔试不是解题比赛而是一次职业素养的预演。试卷里每一道客观题都在模拟一个真实的工作场景这个功能怎么测这个BUG怎么定位这个方案怎么选。你带着这种感觉去答题分数自然就上去了。
返回列表