ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

小米测试开发岗秋招笔试复盘:从算法到SQL的全面备考指南

小米测试开发岗秋招笔试复盘:从算法到SQL的全面备考指南 去年九月中旬我坐在电脑前参加了小米集团2024届秋季校园招聘测试开发岗的第二批在线笔试。说实话在牛客网页面倒计时归零的那一瞬间我才后知后觉地意识到这场笔试不只是对“会不会写代码”的检验更像是一次对计算机基础、测试思维、工程习惯的全方位摸底。两个小时五十几道题有选择、填空、SQL、测试用例设计还有两道需要实际提交运行的编程题整体强度比不少互联网大厂的普通开发岗笔试要高一个档次。这篇文章我想把整个笔试过程、题目背后的考察逻辑、以及复盘后总结出的测试开发备考路线一次性讲清楚。准备投小米测试开发岗、或者想转行做测试开发的朋友都可以把这份内容当成一份实战笔记来参考至少能帮你在正式笔试前少踩几个坑。1. 笔试基本信息与整体节奏把握1.1 考试形式、平台与硬性条件小米测试开发岗第二批笔试安排在9月中旬的某个晚上我所在的场次是19点到21点时长120分钟。这里稍微展开一下因为不同批次的题量和时长可能会有出入我从同期群里大家的反馈看整体结构是基本稳定的。用的平台是牛客网的企业笔试系统前置要求是电脑必须有摄像头全程录像系统会自动监测切屏次数。笔试前半小时需要提前进房间做设备检测这一步千万别跳我就见过同组的朋友因为摄像头驱动问题折腾了十几分钟才进入页面心态直接受影响。题量方面我们这批大概是这样的组合单选和不定项选择题一共40多道主要集中在数据结构、操作系统、计算机网络、数据库和软件测试基础然后是2道SQL题和2道Linux相关的命令场景题再是1道测试用例设计题最后是2道编程题。总分100分编程题占的权重最高合计40分其他客观题和主观题均摊60分。这种分值结构其实透露了一个信号算法和代码能力是硬门槛但测试思维、数据库功底和Linux实操经验一样都不能拉胯。1.2 我的答题顺序与时间分配策略拿到试卷后我第一件事不是从头开始逐题作答而是用两三分钟快速浏览全部题目把编程题、SQL题、测试用例设计题的位置、分值和难度都估了一遍心里排一个“先拿哪部分分”的优先级。很多同学容易一上来就死磕第一道选择题做到后面发现时间不够编程题这是我后来在复盘时最想提醒大家的一点。我的策略是先把有把握的选择题快速过一遍拿不准的先标记不恋战然后做SQL和Linux题因为这类题目只要基础扎实就一定能做对属于“确定性分数”接着写测试用例设计题这个题主观性强只要结构清晰、覆盖全面很容易拿大部分分数最后留出大约70到80分钟集中攻坚两道编程题。实际体验下来这个顺序是合理的。编程题虽然分值高但如果前面客观题耗时太多很容易出现代码写一半甚至编译都没跑通的窘境得不偿失。2. 考了什么四大考察板块逐项拆解2.1 计算机基础选择题的性价比之王小米测试开发岗的客观题范围很典型基本就是把“测试工程师需要的计算机基础”和“开发工程师的通用基础”混在一起考。数据结构是绝对主力数组、链表、栈、队列、哈希表、二叉树都有涉及。我印象较深的一道题是关于B树相比B树的优势这明显是从数据库索引的视角出的题。操作系统方面进程与线程的区别、死锁产生的四个必要条件、页面置换算法几乎是必考三件套。计算机网络部分TCP三次握手和四次挥手、HTTP状态码含义比如301、302、304的区别、GET和POST在语义上的区别都是高频中的高频。数据库在选择题里也会出现考察事务的ACID特性、SQL的执行顺序、索引失效的场景、INNER JOIN和LEFT JOIN的差别。我多说一句很多同学准备测试开发岗时把精力全部放在刷算法题上觉得数据库会简单增删改查就行但实际上从笔试到面试SQL能力被考察的频率远超想象。测试开发日常要写数据构造脚本、查询线上数据验证问题SQL不过关是很明显的能力短板。2.2 测试理论岗位认知的试金石既然岗位叫“测试开发”测试理论必然要考而且考得挺细。我们这批涉及的点包括软件测试的V模型和W模型、黑盒测试与白盒测试的区分、测试用例设计中的等价类划分和边界值分析法、缺陷Bug的生命周期、回归测试和冒烟测试的应用场景。很多选择题的考点其实就是大家嘴边常说的“八股文”但这部分恰恰是性价比最高的内容——只要花时间背熟并且真正理解就能稳定拿分。其中有一道多选题我记得很清晰列出了几种用例设计方法要求选出属于“白盒测试方法”的选项里面混着条件覆盖、判定覆盖、正交实验法、错误推测法。这就是在考察你有没有把“逻辑覆盖”这个概念理解透光背名词绝对不行。备考阶段强烈建议把软件测试核心内容完整过一遍重点不是背概念而是理解每个方法在什么场景下使用、怎么落地。比如边界值分析不是只知道“取边界内一点和边界外一点”就够了而是要能对着一个具体的输入框讲清楚“合法区间、上边界、下边界、相邻非法值”分别怎么取。2.3 数据库与Linux易被忽视的实战分小米的笔试系统支持Java、Python、C等主流语言提交编程题但除此之外还会直接考察工具能力。比如选择题里可能出现“文件权限644的含义”“某个命令的作用是什么”之类的Shell题目Linux常用命令属于默认必备技能。为什么测试开发岗这么重视Linux因为测试环境绝大多数部署在Linux服务器上排查线上Bug、查看服务日志、分析接口性能全都要和命令行打交道。笔试里虽然不会让你真的登录服务器操作但会以场景题的形式考察给你一个日志文件路径让你写出统计某个状态码出现次数的命令或者给你一个进程卡死的场景问你怎么定位并杀掉进程。这些题目一旦掌握就是送分题但没实操过的人很容易写得似是而非。2.4 编程题与算法硬门槛编程题是区分度最高的部分。我们这批的两道题整体难度大概在LeetCode中等水平没有特别偏难怪的题目但考察点非常明确第一道是“最长不含重复字符的连续子串长度”经典的滑动窗口第二道是“设计一个支持过期时间的LRU缓存”属于数据结构设计题。两道题都要求自己处理输入输出格式所以平时刷题习惯了核心代码模式的同学一定要提前适应牛客网这种需要自己写完整输入输出解析的ACM模式。这里给一个非常务实的建议笔试前一周至少每天练一道需要自己写输入输出的题目。不要觉得这是小事真到了考场很多人在读取输入数据上就浪费了十几分钟这才是最亏的。3. 重点题目复盘与考点延伸3.1 滑动窗口编程题思路与代码第一道编程题是给一个字符串要求找出最长的不含重复字符的子串并返回长度比如输入“abcabcbb”返回3。核心思路是维护一个滑动窗口用字典记录每个字符最近一次出现的位置。右指针不断向右扩展当遇到已经在窗口内出现过的字符时把左指针移动到该字符上次出现位置的下一个位置同时持续更新最大长度。当时我提交的Python代码如下def length_of_longest_substring(s: str) - int: char_index {} left 0 max_len 0 for right, ch in enumerate(s): if ch in char_index and char_index[ch] left: left char_index[ch] 1 char_index[ch] right max_len max(max_len, right - left 1) return max_len这道题看起来简单但有个很典型的坑更新左指针时不能直接用char_index[ch] 1而要做max(left, char_index[ch] 1)的处理。因为在滑动过程中某个字符上次出现的位置可能已经被移出了窗口如果还用旧位置去更新左指针会把窗口错误地回退。我当时第一版代码就犯了这个错误在测试用例“abba”上报错后来查资料才反应过来。3.2 设计一个带过期时间的LRU缓存第二道编程题是“设计一个支持过期时间的LRU缓存”实现get和put方法每个key有过期时间过期后访问返回-1。这道题出现的频率越来越高因为它既考到了哈希表和双向链表的数据结构组合又考察对工程场景的理解还夹杂了时间戳处理这种实务细节。核心解法是“哈希表 双向链表”维护访问顺序每个节点额外记录过期时间。get时先判断是否过期过期就删除节点并返回-1未过期则把节点移动到链表头部表示最近使用。put时如果key已存在更新值和过期时间并移到头部如果不存在插入头部并检查容量是否超出超出就淘汰链表尾部的节点。这里我想强调的是写这种数据结构设计题动手写代码前一定要先把节点结构定义清楚。我当时先在草稿纸上把Node节点的字段写出来——key、value、expireTime、prev、next再列出需要实现的辅助方法removeNode、addToHead、moveToHead、popTail。主流程就是几个辅助方法的组合写起来思路非常清晰不容易乱。3.3 SQL分组取最新与Linux日志统计实战SQL题是一道非常经典的“分组取最新一条记录”问题给定订单表和用户表求每个用户最近一笔订单的金额和下单时间。我当时用了窗口函数一行搞定SELECT user_id, order_time, amount FROM ( SELECT user_id, order_time, amount, ROW_NUMBER() OVER(PARTITION BY user_id ORDER BY order_time DESC) AS rn FROM orders ) t WHERE rn 1;如果笔试环境不支持窗口函数也可以用“子查询先取 max(order_time) 再与原表关联”的写法。两种写法备考时都应该会因为你不知道线上笔试环境的SQL语法支持到什么程度。Linux题考的是日志分析给定一个 app.log每行是“时间 接口路径 状态码”的访问记录要求统计状态码为500的接口中出现次数最多的前10个。核心命令是awk $3500 {print $2} app.log | sort | uniq -c | sort -rn | head -10这里最大的坑就是执行uniq -c之前必须先sort因为uniq只能统计相邻行。如果不排序就统计结果会是错的。当时群里就有同学写了awk ... | uniq -c | sort -rn结果数字看起来很奇怪就是栽在这个细节上。4. 测试用例设计题这样写才拿高分4.1 当场的题目与我的答题框架我们这批的测试用例设计题题目是设计一个“手机号验证码登录”功能的测试用例要求覆盖正常流程和异常场景。这类题目在测试开发笔试里非常常见考察的不是你会不会写用例模板而是你有没有一套完整的测试思维框架。我当时的答题结构分了四层功能测试、异常测试、兼容性测试、安全与体验测试。功能层面包括正常登录成功、错误验证码、过期验证码、验证码发送的冷却时间限制异常层面包括手机号格式非法、手机号为空、网络超时、重复点击提交按钮兼容性层面覆盖主流浏览器和安卓/iOS系统差异安全层面包括验证码接口是否存在暴力破解风险、登录态是否加密传输、验证码是否会出现在响应包里。每一层我都至少写了三条具体用例并且明确标注前置条件和预期结果。4.2 测试用例设计的层级感与常见扣分点很多人写这种题容易犯一个错误光写“输入错误密码提示错误”这种一句话用例没有写具体的输入值、操作步骤、预期结果。笔试评分时测试用例设计题最看重的是你的层级感、覆盖度和可执行性。一份好的用例应该达到“别人拿到你的用例不需要补脑照着执行就能完成测试”的标准。我自己的经验是先定框架再填内容。不要一上来就疯狂罗列几十条用例而是先想清楚“这个功能从哪些维度去测”再在每一个维度下展开具体场景。另外有一点很重要异常场景的占分比重往往不低。登录功能大家都会写“正确手机号加正确验证码”但能不能想到“同一手机号在60秒内重复获取验证码”“验证码正确但已过期”“接口在弱网环境下返回超时”这些场景才是区分经验和没经验的关键。5. 备考路线与避坑实录5.1 四周冲刺计划从算法到全套模拟根据我的复盘四周是比较稳妥的备考周期太长容易疲劳太短容易捉襟见肘。我整理了一个简化的时间表供准备的同学直接参考时间段复习重点每日投入第1周数据结构与算法基础刷LeetCode Hot 100中的数组、链表、哈希表、二叉树3小时第2周算法强化滑动窗口、双指针、动态规划 计算机网络与操作系统基础3小时第3周测试基础理论 数据库SQL Linux常用命令2小时第4周整套模拟笔试 错题查漏补缺3小时这里特别推荐“整套模拟”而不是“分题型刷”。测试开发笔试的时间压力和思维切换强度只有整套做才能体会。你可以找牛客网的企业真题或者自己组一套题定时120分钟严格按照不暂停、不查资料、不切换页面的规则来。我备考期间一共做了5套模拟前两套成绩一般但到第四套之后答题节奏已经能稳定控制在提交前10分钟完成所有检查。5.2 实战踩过的三个坑第一个坑是切屏。我在某次模拟笔试时不小心切出去回了个微信虽然模拟系统不计分但真正笔试的时候连续切屏会被标记异常严重的话可能被判定为作弊。所以考试前一定要把所有可能弹窗的应用全部退出开启免打扰模式。第二个坑是太依赖本地IDE的自动补全。在线笔试编辑器通常没有自动补全、没有语法高亮很容易出现缩进错误、少写冒号这种低级问题。我的建议是平时刷题至少有一部分题目要直接在纯文本编辑器里写提前适应“裸写代码”的感觉。笔试现场再复制到在线编辑器时也一定要从头到尾读一遍关键逻辑不依赖IDE也能发现问题。第三个坑是SQL题卡住导致心理慌乱。我的SQL平时自我感觉不错结果有一道带窗口函数的题卡了很久最后发现是OVER子句里的排序字段写错了。这类题目光看书没有用必须动手在本地数据库里练练到看到“分组取最新”“连续登录天数”“部门工资排名”这类题目能条件反射地写出对应SQL为止。5.3 测试开发岗能力模型与学习路线很多同学问测试开发岗的笔试和普通后台开发岗到底差在哪。结合小米这批笔试我的理解是后台开发岗更看重算法和系统设计的天花板而测试开发岗看重的是“底盘的完整性”。算法要能解中等题但更重要的是你懂不懂操作系统、网络、数据库、Linux这些基础设施以及有没有测试思维。测试开发岗位的日常是开发测试工具、搭建测试平台、编写自动化测试脚本同时还要设计测试方案、排查线上问题。所以笔试的每一项考察都不是孤立的数据结构支撑你写脚本的逻辑能力数据库支撑你验证数据正确性Linux支撑你在服务器上查日志测试理论支撑你设计用例的完备性。备考的时候如果能带着“这题对应到我以后工作中的哪个场景”去学效果会好很多。6. 考后复盘与AI测试开发趋势6.1 笔试结束后的逐题复盘与错题集笔试结束后趁记忆还热我当天晚上就把还记得的题目、当时的答题思路、不确定的选项全部记了下来。第二天对照参考答案和讨论帖逐题复盘。这一步看起来不起眼但它是整个秋招里成长最快的一环。通过复盘我发现自己的操作系统基础有漏洞于是在后续复习里专门花两个晚上整理了进程线程和内存管理的笔记。这里建议大家考完就去整理一份“个人错题集”不用太规整能让自己看懂就行。后面的面试复习和下一场笔试前翻一翻比重新刷一遍书有用得多。比如我的错题集里就记了“uniq 前必须 sort”“更新滑动窗口左指针要用 max”“char 类型比较和字符串比较的区别”这种高频错误后面再看一轮能明显感觉到类似题目不容易再错。6.2 AI测试开发正在改变岗位考题最后聊一个趋势。最近“AI测试开发”这个概念讨论度很高很多团队已经在探索用AI辅助编程工具从需求分析、代码设计、开发实现到测试用例生成的全流程落地。测试开发本身也是最容易被AI赋能的角色之一大量重复的接口测试脚本、回归用例生成、缺陷分析未来都可能借助智能化手段提高效率。这也意味着笔试和面试中可能会出现更多与AI测试场景相关的问题比如如何给一个大模型对话接口设计测试用例如何评估一个自动生成的测试用例的质量在线笔试编程题可能逐渐从“纯算法”转向“算法加工程场景”的结合。我建议备考的同学保持对AI相关技术的敏感度至少知道什么是大语言模型、什么是提示词工程、什么是智能体以及它们怎么和测试工作结合。不一定要成为算法专家但要能聊出自己的理解。笔试只是秋招马拉松的第一道关但它给我最大的收获不是“写对了多少题”而是让我意识到测试开发岗位对综合能力的要求远比想象中高。如果你也在准备类似的笔试我的建议很直接早点开始做整套模拟别把宝全部押在算法题上把测试理论、SQL、Linux这些看起来“软”但实际很硬的功架构抓起来刷题之外留一点时间了解AI怎么改变测试这个行业。希望这份复盘能给你一些参考也祝准备投测试开发岗的朋友都能顺利进入心仪的面试环节。
返回列表