ARTICLE DETAIL

资讯详情

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

小米秋招测试开发笔试题全拆解:题型考点与备考策略

小米秋招测试开发笔试题全拆解:题型考点与备考策略 拿到这份“小米2019秋招测试开发笔试题A”我其实挺有感触的。这几年我带过不少校招生也帮着部门出过面试题再看回当年的卷子会发现大厂的笔试筛选逻辑其实一直没变——它压根没指望你把所有题都做对而是想通过有限的时间快速判断你的计算机基础扎不扎实、逻辑思维清不清晰、有没有测试敏感度。这份卷子我前前后后给十几个准备校招的同学拆过从题型分布到每道题背后的考察意图基本都摸透了。今天我把完整的拆解思路和复盘笔记整理出来不光是给准备投小米的同学看只要是目标定在测试开发岗位的无论面的是大厂还是中型互联网公司这份东西都值得你花半小时认真读一遍。1. 先从岗位聊起测试开发到底在考什么很多人一听到“测试开发”第一反应是“不就是点点点吗”。如果你也这么想那笔试基本就告别及格了。大厂笔试里的测试开发考的从来不是“会不会点按钮”而是“能不能用工程化的方法保障产品质量”。1.1 测试开发的核心能力模型我习惯把测试开发的能力要求拆成三层金字塔。最底层是计算机基础知识包括数据结构、操作系统、计算机网络、数据库这一层决定了你的天花板也是笔试筛人的第一道关卡。中间层是测试专业能力包括测试用例设计、缺陷分析、自动化测试框架的使用这一层是岗位区分度所在。最顶层是工程效能意识也就是能不能通过工具、脚本、平台去提升测试效率这一层在笔试里通常以开放题或场景题出现。这份笔试题的编排逻辑基本就是按照这个金字塔来的。前面的选择题和简答题铺的是一层和二层的底越往后越偏向综合应用。所以你刷题的时候别只盯着“这道题答案是什么”要多想想“它放在这个位置是想考我什么”。1.2 从笔试看大厂的招聘偏好我拆过腾讯、阿里、字节、美团、小米的不少测试开发笔试题它们的共同点是重视基础、重视思维过程、重视实际场景。小米这份题还有个很典型的特点——它不会故意出偏题怪题题目难度是阶梯式上升的但每道题都能在课本或常见面试题里找到影子。这其实透露了一个信息大厂校招并不指望你是什么都会的天才而是希望招进来的人“底子正、可塑性强”。所以笔试环节你展现出来的解题思路和严谨程度往往比最终答案更重要。后面我讲具体题型的时候会反复强调这一点。2. 笔试题型全拆解每类题到底在考你什么一份完整的测试开发笔试题通常会涵盖选择/填空、简答、测试用例设计、编程题这几个板块。我按板块逐一拆解把每一类题型的考察意图、常见陷阱和应对策略都讲清楚。2.1 选择题与填空题计算机基础的“照妖镜”这类题覆盖面很广但考察重点非常集中基本绕不开以下几块内容。第一类是数据结构与算法。数组、链表、栈、队列、树的遍历、哈希表冲突解决是绝对的高频考点。比如给你一段链表反转的代码问输出结果或者给一个二叉树的层序遍历问访问顺序。再就是复杂度分析让你判断某个循环嵌套的时间复杂度是O(n^2)还是O(nlogn)。应对这类题没有捷径就是要把常见数据结构的特性、适用场景、增删改查的时间复杂度背到滚瓜烂熟。第二类是操作系统。进程和线程的区别、进程调度算法、死锁产生的四个必要条件、虚拟内存与分页机制这些是重中之重。小米这份题里我印象很深的一道选择题是关于死锁的给出一组资源分配情况问当前是否处于安全状态其实就是银行家算法的简化版。这种题容不得你现场推演太久平时就得把原理吃透看到资源矩阵能快速判断。第三类是计算机网络。TCP三次握手和四次挥手是万年老考点但大厂不会让你只背状态名它会给你一个具体场景问此时客户端处于什么状态。还有HTTP和HTTPS的区别、TCP和UDP的适用场景、DNS解析过程都是选择题的常客。这里有个小技巧凡是涉及“区别”的题你可以从“连接性、可靠性、传输效率、应用场景”四个维度去套基本不会漏点。第四类是数据库。考察重点集中在SQL查询、索引失效场景、事务的ACID特性、隔离级别。选择题一般会给一张表让你判断哪条SQL能查出想要的结果。这类题容易在“分组条件”和“聚合函数”上挖坑写SQL的时候务必想清楚GROUP BY后面能不能跟WHERE以及HAVING的使用时机。第五类是Linux和Shell。比如给一段shell脚本问输出什么或者让你从一堆命令里选出能在指定目录下查找包含某关键词的文件。看到这类题别慌平时多动手敲一敲常见命令尤其是grep、awk、sed这三剑客笔试里出现频率极高。填空题在测试开发卷子里通常不会太多但一旦出现大概率是补全代码、计算时间/空间复杂度、或者补充测试用例的预期结果。这类题非常考验细致程度一个符号错了整体就错所以做完务必回头再读一遍题确认你填的内容和题干的变量命名完全一致。2.2 简答题与概念题不是背定义是讲人话简答题是大厂笔试题里最能拉开差距的板块。你以为它是考背诵其实它考的是你“能不能把复杂概念讲清楚”。我拿高频题“什么是面向对象三大特性是什么”举例。如果你只写“封装、继承、多态”对不起这题你只能拿到三分之一的分。正确的答法应当是先用一句话给出定义然后分别解释每个特性的含义和意义再举一个实际开发中的例子。比如多态你可以说“同一个接口不同对象调用时有不同的实现”然后举一个支付场景下支付宝和微信都实现Pay接口的例子。这样考官一眼就能看出你是真的懂而不是考前背了模板。再比如“TCP和UDP的区别”我见过很多同学洋洋洒洒写了一堆但抓不住重点。我建议的回答框架是先说两者最本质的区别一个是面向连接的可靠传输一个是无连接的不可靠传输然后列表对比连接性、传输方式、速度、应用场景最后补一句“在实际开发中HTTP/3基于UDP实现但通过应用层机制弥补了可靠性”这么一写层次感和知识面就都出来了。还有一个高频简答题是“什么是死锁如何避免”。回答框架同样可以套定义两个或多个进程互相等待对方持有的资源导致都无法推进- 四个必要条件互斥、持有并等待、不可剥夺、循环等待- 避免方法死锁预防/避免/检测/解除四个层面。如果你能把“银行家算法”作为死锁避免的例子补充进去评分会比较占优势。2.3 测试用例设计题专业度的“试金石”这是测试开发笔试题最核心的特色题别的岗位不会考只有测试岗会。小米的卷子里一般会给一个具体功能模块比如“微信朋友圈点赞功能”“电商购物车结算功能”或者“一个输入框的登录功能”让你设计完整的测试用例。这题考察的核心能力有两个一是测试用例设计方法等价类划分、边界值分析、因果图、场景法、错误推测法能不能熟练运用二是你的思维是否具备系统性和层次感。我拿“登录功能”举例很多同学一上来就写“输入正确账号密码点击登录登录成功”“输入错误账号密码点击登录提示错误”。这么写不是错但太零散缺乏方法论支撑考官很容易judge你的测试思维不够系统。我建议使用层次化的设计方法。第一层功能测试包括正常登录正确账号正确密码、异常登录账号错、密码错、都错、账号格式校验不存在账号、空账号、超长账号、含特殊字符的账号、密码策略空密码、密码错误、密码过期需重置。第二层界面测试页面布局、提示信息是否友好、密码是否密文显示、Tab键能否正常切换输入框。第三层性能测试并发用户同时登录、弱网环境登录、频繁点击登录按钮是否有重复提交。第四层安全性测试SQL注入防护、密码是否加密传输、登录失败多次是否锁定账号。如果一个模块你能拆出功能、界面、性能、安全、兼容性这几个维度即便有些细节没想到考官也愿意给你高分因为你的测试思维是成体系的。这是纯技巧但也是纯拉分项。2.4 编程题逻辑思维的“硬核考验”编程题在任何大厂笔试里都是重头戏。测试开发的编程题一般不追求偏难怪的算法更多是考察你能否用代码解决实际问题。常见考点包括数组操作、字符串处理、链表、栈与队列的应用偶尔会出现二分查找、双指针、动态规划这些基础算法。我先说一个很多同学都会踩的坑拿到题目想都不想就开始写代码。这在大厂笔试里是大忌因为编程题不仅看结果还看你的解题思路和条理性。哪怕你在草稿纸上写伪代码也要让考官看到你的思考过程——先想暴力解法再想怎么优化最后写代码的时候注意边界条件处理。比如一道很常见的题“给定一个整数数组找出其中两个数使它们的和等于目标值返回这两个数的下标”。最直观的解法是双重循环暴力匹配时间复杂度O(n^2)。但如果你能在答案里先写暴力解再写哈希表优化到O(n)并且把两种方法的复杂度和适用场景分析清楚这道题就能拿到相当不错的分数。对于测试开发来说编程题还有一个隐藏加分项自己主动补一个测试用例。写完代码之后不要急着交你在注释里或者代码后面列出几个测试用例包括正常用例、边界用例比如空数组、数组只有一个元素、数组中有负数、特殊用例重复元素这会让考官觉得你具备测试思维这才是测试开发岗位该有的样子。编程题的复习策略我也多说一句不要只刷难题。LeetCode Hot 100里的简单和中等难度题覆盖了绝大多数大厂笔试的编程题范围。建议按“数组-字符串-链表-栈-队列-树-排序-查找-动态规划”的顺序刷每类题至少刷10道保证手感和模板代码的熟练度。3. 从一份真题看小米的命题偏好与解题节奏上面聊的是通用方法论现在咱们回到“小米2019秋招测试开发笔试题A”本身。虽然每个同学的记忆会有偏差但综合这些年网上的面经和我自己的拆解它的整体风格和偏好还是有迹可循的。3.1 题型布局与时间分配建议整套题大致分为四块选择题约20题、简答题约4-5题、测试用例设计题1-2题、编程题2题左右。总时长一般在90到120分钟之间。时间分配上我建议选择题控制在25到30分钟简答题20到25分钟测试用例设计题20分钟左右编程题留30到40分钟。这套分配的核心逻辑是编程题再难只要你思路在线、模板代码熟练30分钟足够写完两道题但前面的选择题和简答题一旦拖拉后面就会全面崩盘。我说一个真实案例。我认识一个学弟编程能力很强LeetCode刷了三百多道但笔试的时候栽在选择题上——他前40分钟都在纠结几道计算机网络的选择题结果编程题只剩20分钟两道题都只写了一半最后笔试没过。这个教训特别典型编程题虽然分值大但选择题和简答题都是“上手就能拿分”的题优先级其实更高。3.2 小米的命题偏好基础与应用并重小米这家公司有个特点可能是受雷总那句“站在风口上猪都能飞起来”的影响它非常看重把基础理论落地到实际场景的能力。这份笔试题里这一点体现得很明显。比如选择题考到JVM内存模型它不会直接问“堆和栈有什么区别”而是给一段Java代码问你创建的对象和局部变量分别存放在哪个区域。再比如考到TCP它会结合一个实际的网络请求场景问连接建立和断开的过程中客户端和服务端各自经历了哪些状态变化。这种命题偏好的潜台词是知识背得再好不会应用也不行。它要从一开始就筛掉那些只会死记硬背的候选人。所以我的建议是备考的时候每学一个知识点都多问自己一句“这个知识点在实际项目里能解决什么问题”比如学索引你想想慢查询排查时怎么用索引优化学TCP你想想抓包时看到大量TIME_WAIT状态意味着什么。带着这种思路去做题你会觉得卷子上的场景题格外亲切。再有一个小米特色的点它偶尔会结合自己的产品出题。比如让你针对“小米商城App的商品搜索功能”设计测试用例。这种题的核心还是通用的测试设计方法论但如果你在用例里体现出对电商搜索业务的理解比如考虑到搜索排序、搜索联想、无结果时的推荐、搜索历史记录分数会有明显优势。3.3 主观题的作答技巧答得多不如答得准简答题和测试用例设计题都属于主观题评分会有一定弹性。我阅过一些模拟卷发现很多同学的共性问题不是不会而是不会“有结构地表达”。我给你一个万能作答框架结论先行分点展开关键术语加粗必要时画表格或流程图。比如分析某个功能模块的测试要点你可以写成测试要点如下功能层面验证核心流程是否符合预期包括正常流程和异常分支。界面层面关注文案、UI布局、交互反馈是否合理。性能层面评估接口响应时间、并发场景下的稳定性。安全层面检查是否存在越权、注入、敏感信息泄露等风险。兼容性层面覆盖主流操作系统版本和屏幕分辨率。这种写法考官一眼就能看到你的思维框架也会觉得你平时写测试用例的时候就是有章法的。相反你堆了一大段话每句都对但他要自己提炼重点印象分就会打折扣。还有一个技巧就是主观题里能举例就举例。比如问“索引为什么会失效”你列完索引失效的几种常见情形后补一个“比如对索引列使用函数运算或者使用LIKE %关键词进行查询都会导致索引失效”这样的例子答案立刻就丰满起来了。4. 测试用例设计题的解构拿下一道加分大题测试用例设计题是测试开发笔试的“专业分水岭”值得单独用一章来讲。我陪练过很多应届生从最初只会写5条用例到后来能写出30条以上、覆盖各维度的完整用例集核心就是掌握了结构化的拆解思路。4.1 从功能描述到测试维度的映射拿到一道测试用例设计题别急着上来就写用例。先用两分钟把需求里提到的功能点拆出来形成一份思维导图或清单。比如题目给的是“一个支持手机号/邮箱/用户名登录的登录页面”你第一步要拆出的是支持3种登录方式、需要密码验证、有登录按钮、可能还有“记住我”“忘记密码”这些辅助功能。这就构成了功能测试的入口。拆完功能点后逐个维度展开进行测试用例设计。功能维度要考虑每个入口的“正常流”和“异常流”。拿手机号登录举例正常流是“输入11位正确手机号正确密码点击登录跳转到首页”异常流则是“输入不存在的手机号”“输入格式错误的手机号”“密码错误”“账号被锁定”等等。每一条异常流都要落到一个具体的用例上。边界值分析法在这个环节特别好用。手机号是11位那你要测10位、11位、12位密码框如果限制6-16位那你要测5位、6位、16位、17位。边界值测试是面试官特别看重的点因为它直观反映了你有没有受过正规的测试训练。除了功能维度别忘了兼容性和体验维度。浏览器层面要覆盖Chrome、Firefox、Safari、Edge系统层面要覆盖Windows、macOS、iOS、Android屏幕适配层面要考虑不同分辨率下页面是否正常显示。这些用例写出来会显得你经验很足。4.2 场景法把用户故事串起来场景法是我比较推荐的高阶用例设计方法。它不把功能切成一个个孤立的点而是把用户操作串成一条完整的业务链路去测试。拿“用户登录后下单购买商品”这个场景来说一条完整的场景用例可能是用户通过手机号验证码登录- 在搜索框搜索“蓝牙耳机”- 选择第一个商品- 点击“加入购物车”- 进入购物车结算- 选择收货地址- 提交订单- 支付成功- 收到下单成功通知。这是一个典型的“快乐路径”场景。除了快乐路径场景法还要求你覆盖“备选路径”和“异常路径”。备选路径是用户操作和预期略有不同但仍能走通的流程比如登录时切换了登录方式、购物车里有已下架商品需要移除。异常路径是流程中断或失败的情况比如支付时余额不足、下单后网络中断、提交订单时商品库存不足。通过场景法补充的这些用例往往能覆盖功能测试漏掉的集成问题。4.3 一份高质量用例集的评分标准我自己给模拟卷评分的时候会从四个维度打分覆盖率、清晰度、方法运用、格式规范。覆盖率看的是有没有遗漏核心功能点清晰度看的是用例标题能不能让人一眼看懂测试意图方法运用看的是等价类、边界值、场景法这些有没有合理用上格式规范看的是有没有把前置条件、测试步骤、预期结果写完整。一个很常见的误区是“用例越多越好”。不是的。写50条用例但都是同一个功能的重复变体不如写30条但每条覆盖一个独立场景。好的用例集讲究“精而不泛”每一条都有它存在的理由。顺带说一个提分小细节用例标题的写法。别写“验证手机号登录”这个太泛。规范写法是“验证输入正确手机号和正确密码时能够登录成功并跳转首页”。这种写法把你测的前置条件、操作步骤、预期结果都压缩在标题里读起来一目了然印象分直接拉满。5. 编程题的实战剖析从读题到AC的完整路径编程题是很多人的心理阴影一看到题目脑子里就一片空白。其实大厂的编程题完全可以通过系统训练来克服。我见过太多代码能力一般但方法得当的同学笔试照样拿到不错的分数。核心就是把做题流程标准流程化不靠临场感觉靠固定套路。5.1 读题与建模先看清楚再动手拿到编程题我给自己定了一个“32”规则先花3分钟读题搞清楚输入是什么、输出是什么、有哪些约束条件再花2分钟在纸上建模型想清楚用哪种数据结构来组织数据、用哪种算法思路来解决问题。很多同学失败的原因只有一个题目还没看完就开写写到一半发现理解错了删掉重来时间全浪费了。我建议你把题目里的关键约束用笔圈出来尤其是数组长度范围、数值范围、是否可能为空这些经常决定了你能不能用O(n^2)的解法。举个例子题目说“给定一个整数数组nums和一个目标值target请你在该数组中找出和为目标值的那两个整数并返回它们的数组下标”。读完题你应该立刻反应过来这是一个“查找类”问题暴力解是双重循环优化思路是“用空间换时间”——遍历一遍数组把每个元素的值和下标存进哈希表同时检查target与当前元素的差值是否已经在哈希表中。这个思路行云流水但前提是你读完题就知道该往哈希表这个方向想。5.2 代码实现的工程化思维测试开发写代码代码风格和健壮性非常加分。你可以把笔试的编程题当作一次小型的代码评审变量命名是否有意义缩进是否统一空指针和边界条件有没有处理复杂度有没有在注释里说明。这些都是可以刻意练习的。我在指导别人做笔试复盘时都会让他们重点看两件事第一代码能不能处理“空输入”和“极值输入”第二核心逻辑处有没有写注释解释自己的思路。前者体现的是细致程度后者体现的表达与沟通能力。你不需要像写正式项目那样写很长的注释但在关键算法步骤旁边用一到两行话说明思路考官就很能get到你的水平。举一个反例。我见过一位同学写“两数之和”代码是这样的def two_sum(nums, target): d {} for i, n in enumerate(nums): m target - n if m in d: return [d[m], i] d[n] i代码本身没有任何问题但他没有处理“如果不存在这样的两个数应该返回什么”的情况。虽然题目可能默认一定有解但写出防御性逻辑比如最后加一句return []会显得你更老练。说白了代码能力是一方面代码习惯是另一方面两者同时发展才能在笔试里稳稳拿分。5.3 考场上写不出最优解怎么办如果你在考场上卡住了不要死磕。我先给你一个能救命的策略先写一个确认正确的暴力解法保证这道题至少有分然后如果时间还有剩余再基于暴力解做优化。这招听起来很基础但实际考场上能做到的人不多因为很多人死要面子觉得暴力解拿不出手非要苦思冥想最优解最后连暴力解都没写完。同时我强烈建议你在编程题的答案末尾额外补充测试用例。我会这样写# 测试用例 # 输入: nums [2, 7, 11, 15], target 9 - 输出: [0, 1] # 输入: nums [3, 2, 4], target 6 - 输出: [1, 2] # 输入: nums [3, 3], target 6 - 输出: [0, 1]这种补充在测试开发岗位的试卷里尤其受用因为你是在用自己的专业能力给代码做测试本质上就是向考官展示岗位素质。6. 复盘与备考从一套题到一套知识体系一套笔试题做完对完答案这件事不应该到此结束。真正的价值在于从一套题出发把背后牵涉的知识体系补全。这也是我辅导同学时最强调的一环——无论你笔试过没过复盘这一步都不能省。6.1 如何做一份高质量笔试题复盘我推荐的复盘流程分三步。第一步对答案给每个板块打分明确自己的薄弱环节。注意不要只看总得分要分别看选择题正确率、简答题得分率、测试用例设计的覆盖率、编程题的通过率。哪个板块低于70%哪个板块就是你接下来一周的复习重点。第二步针对错题做知识延伸。题目的正确答案只是起点你要把这个题目背后的整个知识树画出来。比如错了“死锁的必要条件”你不只要记住“互斥、持有并等待、不可剥夺、循环等待”还要延伸复习死锁预防、死锁避免、死锁检测与恢复最好再动手写一个银行家算法的模拟程序。这样一道错题就变成了一整个知识专题。第三步建立错题本。不用手抄用Notion或者飞书建一个表格就行字段包括题目来源、考察知识点、错误原因、正确答案、关联知识树。每周末翻一遍错题本比盲目刷十套新题都管用。6.2 四周冲刺复习计划如果离校招笔试还有一个月我建议你按四周来规划。第一周打地基。重心放在数据结构和计算机网络上。数据结构每天刷5道LeetCode简单题重点是数组、链表、栈、队列计算机网络每天读一章《计算机网络自顶向下方法》然后把TCP三次握手、四次挥手的状态转换图画到滚瓜烂熟。第二周补专业。重心转到测试理论、操作系统、数据库。测试理论要吃透等价类、边界值、因果图、判定表、场景法、错误推测法操作系统重点复习进程线程、死锁、内存管理数据库每天写10道SQL题覆盖连接查询、子查询、分组聚合、索引优化。第三周做套题。每天模拟一套真题或高质量模拟题严格按考试时间执行重点训练时间分配和心态控制。做完立刻复盘把错题纳入错题本。第四周调状态。不刷难题了只看错题本、背常考概念、练手写代码模板。同时开始熟悉自己心仪公司的业务和产品为面试环节的产品感问题做准备。这套计划不一定适合所有人但核心思路值得参考先统一补齐基础再专项强化专业最后模拟实战。6.3 心态管理允许自己不会做最后聊一点心态。校招季我见过太多人因为一套笔试没考好就陷入焦虑然后恶性循环后面几场都发挥失常。其实你只要想明白一个道理就能稳住笔试本身就是一种筛选机制它不允许所有人都通过所以一定会有你不会的题。遇到不会的题把它看成“这道题淘汰了大多数人”而不是“我太菜了”。我当年准备校招的时候第一套笔试题都没做完后半程几乎是蒙的。但我做了两件事一是复盘时没放过任何一道错题二是强迫自己在考场上按照“先把能拿的分拿满”的策略来。二十多套题刷下来从最初勉强及格到最后稳定在头部10%这个过程最大的收获不是分数而是一种“不管拿到什么题我都有应对流程”的底气。你现在离笔试还有时间不管是一周还是一个多月只要按着“基础专业实战复盘”这条路走下来小米的笔试并没有想象中那么可怕。这套题说白了就是在帮你想明白一件事你准备好成为一个测试开发工程师了吗
返回列表