2026/9/1 22:27:00

2021小米秋招软件开发笔试复盘:考点分析与实战策略

2021小米秋招软件开发笔试复盘:考点分析与实战策略 2021年小米秋招软件开发方向第一场笔试是我秋招季里印象很深的一场。倒不是说题目难到离谱而是它的风格比较有代表性题量不小、范围宽、算法题占比高同时还有一批让人头疼的行测逻辑题混在里面。如果你打算投小米的软件开发岗或者想了解大厂笔试的普遍套路这篇就把我当时踩过的坑、复盘过的考点、以及后来总结的应对策略一次性说清楚。先说结论小米的这场笔试本质上是在筛选两类能力——一是扎实的编程基本功二是快速切换思维模式的抗压能力。前者靠刷题积累后者靠策略和心态两者缺一不可。1. 2021年小米秋招笔试整体考情复盘1.1 题型分布与时间压力2021年小米秋招软件开发方向第一场笔试整体是在牛客网平台上完成的全程摄像头监控时长大约90到120分钟。整张卷子大致由三块组成第一部分是单选题覆盖C/Java基础、数据结构、操作系统、计算机网络、数据库等第二部分是多选题这部分比较刁钻少选得部分分多选错选不得分第三部分是两道编程题分值占比很高几乎决定了你能不能进面试。我印象里选择题加起来有30道左右编程题2道时间上非常紧凑。选择题部分如果你犹豫太多后面编程题基本来不及写完。我身边有同学就是前面选择题花了太多时间最后一道编程题只写了一半非常可惜。从难度梯队来看选择题属于中等偏上很多题不是直接背概念就能答对的而是给你一段代码让你判断输出或者给你一个场景让你选最优的数据结构考察的是理解而不是记忆。编程题则比较典型一道偏数据结构与算法另一道往往带着一点思维题的味道不是纯粹的模板题。1.2 与同批次大厂笔试的对比如果把2021年秋招的几场知名笔试放在一起比较小米的风格其实介于百度和美团之间。百度的算法题更硬核经常出现竞赛级别的思维题美团的选择题更偏向Java后端细节小米则是均衡中带着一点出其不意。小米笔试题有一个特点它不会出特别偏门的语法题但会在你“以为会了”的地方挖坑。比如静态成员变量初始化顺序、Java的HashMap在JDK1.7和1.8之间的区别、TCP四次挥手的状态变化这些知识点你都知道但选项里往往有一个非常接近的干扰项如果你只是死记硬背很容易翻车。另外小米笔试的行测部分值得单独说。它不叫行测但确实有一部分类似逻辑推理、图形推理的题目混在选择题里。这对理工科同学来说其实是需要适应一下的因为你刷惯了LeetCode突然来一道“甲、乙、丙、丁四个人分别来自四个城市每人只喜欢一种颜色”这种条件推理题思维切换不过来会很浪费时间。后面我会专门讲这一块怎么应对。2. 编程题核心考点与刷题策略2.1 第一道编程题数据结构与模拟2021年这场笔试的第一道编程题我记得是一道需要手动实现某种数据结构或模拟过程的题目。这类题在各大厂笔试里出现频率非常高小米尤其喜欢考栈、队列、链表相关的变种。说一个很典型的套路题目不会直接让你实现一个栈而是会包装成一个场景比如“实现一个带最小值的栈”或者“用两个栈模拟队列”。如果你只刷过LeetCode原题看到包装后的题干可能会愣一下但实际上核心考点没变。我当时采用的是“先写框架再写细节”的策略先把类的结构、方法签名写出来再逐个方法填充逻辑。这样做的好处是即使最后时间不够阅卷系统也能拿到部分分数——面试官或系统会看你完成了几个方法而不是只看最终结果。针对这类题建议集中刷LeetCode的栈和队列专题尤其是下面几道母题155 最小栈232 用栈实现队列225 用队列实现栈20 有效的括号150 逆波兰表达式求值这几道题吃透了2021年小米这场笔试第一道题基本就能稳住。做题的时候不要只看题解一定要把每一步都写清楚因为笔试时没有断点调试只能靠自己对代码的理解来排查错误。2.2 第二道编程题隐含的动态规划与贪心第二道编程题一般会更难一些通常披着“模拟”的外衣实际考察动态规划或贪心算法。2021年这一场也不例外我记得那道题表面上是处理一个数组实际需要你发现状态转移关系否则暴力解法只能过很少的测试用例。这类题有一个很容易犯的错误一上来就写暴力递归没有先分析数据范围。笔试题目一般会给数据规模如果你看到n可以到10^5甚至10^6那就基本可以断定O(n^2)的解法是过不了的必须想O(nlogn)或O(n)的解法。我当时的思路是这样的先把题目抽象成数学语言明确输入是什么、输出是什么、约束条件是什么然后想有没有经典的模型可以套——最长递增子序列、背包、区间调度、状态机。如果你能在5分钟内找准模型后面写代码就是体力活了。针对这套打法建议平时刷题时按专题整理而不是按题号顺序刷。动态规划这一块至少要熟练掌握一维DP爬楼梯、打家劫舍、最大子序和二维DP不同路径、最小路径和、编辑距离背包问题0-1背包、完全背包区间DP和状态压缩DP的经典例题小米笔试的动态规划题不会出得太偏通常就是让你找到状态定义和转移方程代码写起来往往不超过30行。关键是你是否能在高压环境下快速理清思路。2.3 编程题的输入输出陷阱这一部分特别想强调因为很多人刷题用LeetCode习惯了核心代码模式但小米笔试用的是牛客网需要自己处理输入输出。这两者之间的差距在实战中是非常致命的。核心代码模式中你只需要实现一个函数参数已经给你准备好了。但牛客网笔试模式下你需要自己从标准输入中读取数据还要处理多组测试用例的情况。我见过太多人算法思路完全正确但栽在输入上怎么都读不对数据。这里分享一个我后来整理的模板#include bits/stdc.h using namespace std; int main() { int n; while (cin n) { // 处理多组输入 vectorint nums(n); for (int i 0; i n; i) { cin nums[i]; } // 业务逻辑 cout result endl; } return 0; }如果你用Java对应的模板是import java.util.*; public class Main { public static void main(String[] args) { Scanner sc new Scanner(System.in); while (sc.hasNext()) { int n sc.nextInt(); int[] nums new int[n]; for (int i 0; i n; i) { nums[i] sc.nextInt(); } // 业务逻辑 System.out.println(result); } } }别小看这几行模板它能让你的代码在牛客网的环境下不用花时间调试输入输出的问题。平时在牛客网上刷题时就要用这种完整模式写不要偷懒只写核心函数。3. 选择题与综合素养题的高分技巧3.1 编程语言与基础知识考点小米笔试的选择题编程语言部分主要考察C和Java。如果你是学Python的建议至少能读懂C和Java的代码因为题目里经常出现这两种语言的代码片段让你判断输出。C的高频考点包括虚函数与多态、构造函数和析构函数的调用顺序、静态成员变量、const的各种用法、智能指针。Java的高频考点包括HashMap的原理、线程安全的实现方式、JVM内存分区、垃圾回收算法、异常处理机制。这些知识点看起来零散但其实是有一个内在逻辑的——它们都是候选人是否真正理解这门语言的“分水岭”知识点。有一个很有用的学习思路不要死记硬背结论而是去理解“为什么”。举个例子HashMap为什么默认负载因子是0.75因为这是空间和时间的折中——负载因子越大空间利用率越高但冲突概率增大查找效率变低越小则相反。0.75是统计学上比较平衡的点。理解了这一层即使题目换一种问法你也能应对。操作系统和计算机网络也是选择题的重点。进程与线程的区别、死锁产生的四个必要条件、虚拟内存与页面置换算法、TCP的拥塞控制算法、TCP和UDP的区别、DNS解析过程这些都属于必背清单。建议每天抽出半小时专门刷这部分的选择题坚持一个月效果非常明显。3.2 数据库知识别在索引上丢分数据库部分小米笔试考的不算深但索引是必考的。覆盖索引、回表、最左前缀原则、聚簇索引与非聚簇索引的区别这些都是高频考点。有一个我印象很深的题给一个联合索引(a, b, c)问以下查询哪些能用到索引。这种题其实就是考察最左前缀原则但选项会设计得很微妙比如“a1 and b2”能走索引“b2 and a1”也能走——因为SQL优化器会做等值条件的调换。但如果只查b就走不了索引。如果你没有真正执行过SQL只背结论很容易在这种细节上翻车。建议你用本地的MySQL环境亲自创建一张带有联合索引的表插入几万条数据然后用EXPLAIN看不同查询的执行计划。实践一遍比刷十道题都管用。3.3 行测逻辑题的应对思路这块我必须单独拉出来说因为很多技术同学在这上面吃了亏。小米笔试的选择题里会有一部分类似公务员行测的逻辑推理题。比如给一段文字让你找最能削弱或加强论点的选项、给几个条件让你推顺序、给一组图形让你找规律。对长时间沉浸在代码逻辑里的程序员来说这些题会让人非常不舒服因为它们不讲“确定性”而是讲“可能性”。应对策略就一个字跳。具体来说如果你在一道行测题上超过90秒还没有清晰思路立即标记并跳过等编程题写完再回来看。因为这类题的分值通常不高但非常消耗时间性价比很低。如果时间允许可以在笔试前找一些行测逻辑题的题库练手不需要大量刷重点是熟悉它的提问方式。比如“以下哪项如果为真最能削弱上述论证”这种问法选项之间的差别非常细微需要你精准抓住论据和论点之间的逻辑链。代码写多了人会习惯“非黑即白”的思维但行测逻辑题考察的是一个“可能性大小”的比较这个思维转换需要提前适应。4. 实操过程记录与考场时间分配4.1 笔试环境准备与细节2021年小米秋招笔试用的是牛客网平台需要摄像头监控所以提前做好环境准备非常重要。我建议至少提前30分钟进入笔试链接做以下检查首先是设备检查。确保电脑电量充足、摄像头能正常打开、网络稳定。我有个朋友笔试前没测试摄像头结果进入答题页面后系统提示检测不到摄像头折腾了十分钟才弄好直接影响了他的心态。然后是草稿纸和笔的准备。虽然在线笔试不需要手写代码但选择题的一些计算题、逻辑题还是需要用笔在纸上推演。特别是那种多条件的逻辑推理题画一张表格能帮你迅速理清关系比在脑子里空想要快得多。最后是关掉所有可能弹窗的软件。微信、QQ、钉钉这类即时通讯软件一定要退出登录否则你正在写代码的时候突然弹出一条消息系统可能会判定切屏或作弊。牛客网的监控系统会在切屏次数过多时记录异常哪怕你是误操作也会被标记。4.2 时间分配与做题节奏建议根据我当时的经验整场笔试的时间分配建议如下选择题部分无论你会不会都控制在45分钟内完成。遇到不确定的题先凭第一感觉选一个标个记号不要在单题上纠结。编程题部分两道题一共留45到60分钟。先读两题的题干判断哪个更简单先写简单那道保底分再啃难题。这里强调一个很多人的误区编程题不是先写的就一定有分。你要先确保自己的代码能通过示例测试用例再考虑提交。如果你连例子都跑不过那大概率就是逻辑有硬伤写再多也是白费。我当时是先花3分钟把两道编程题都看了一遍发现第二道题有动态规划的影子估计比较复杂于是决定先做第一道大概用了25分钟提交拿到了确定性的分数。然后回过来专心啃第二道虽然最后只过了一部分测试用例但因为第一道稳住了整体心态没有崩。4.3 编程题的提交原则部分分也是分大厂笔试的编程题评测机制通常是根据通过的测试用例比例给分。这意味着你不需要追求一次性满分而是要确保你写的每一行代码都能拿到相应的分数。我建议遵循这样一个原则暴力解法永远好过没有解法。如果一道题你只能想到O(n^2)的暴力解法那就老老实实写暴力解法。即使只能通过30%的测试用例那也比0分强。很多同学总想着一步到位写出最优解结果卡在优化思路里连暴力的分都没拿到这是秋招笔试中最可惜的事情。另一个技巧是在代码中加上注释说明你的思路。虽然系统不会因为注释给分但万一你最后需要申诉成绩注释能帮你证明你确实理解了题目只是没有完全实现。我身边就有同学通过申诉成功翻盘的情况虽然不确定是否跟注释有关但至少留下了证据。5. 常见问题与避坑实录5.1 平时刷题很顺但笔试总是做不完这是秋招里最常见的问题本质上是因为平时刷题过于“舒适”。在LeetCode上你可以自由选择难度做不出来就看题解也没有严格的时间压力。但笔试是一个完全封闭的环境你必须独立解题、独立写完、独立调试。我的建议是至少在笔试前一个月每天做一套完整的模拟题。牛客网上有历年各大厂的笔试题库你可以按照实际考试的时间限制来约束自己全程不暂停不查资料模拟真实的考试状态。刷十套模拟题比你刷两百道LeetCode散题效果好得多。5.2 选择题选项看着哪个都对怎么办选择题考察的是概念的精确理解如果你发现选项之间模棱两可说明你对这个知识点的理解还停留在“印象”层面而不是“准确”层面。这个问题的根源通常是看书时只看了结论没有看推导过程。比如TCP为什么需要三次握手因为它需要确认双方的收发能力都正常。第一次握手客户端确认了自己的发送能力和服务器的接收能力第二次握手服务器确认了自己的发送能力和客户端的接收能力第三次握手客户端确认了服务器的发送能力。你看三次握手解决的不只是“建立连接”这个表象而是“双方收发能力互知”这个本质问题。理解了这一层换任何选项都骗不了你。5.3 行测题要不要专门花时间准备取决于你整体复习的时间是否充裕。如果时间充裕建议每天做15分钟行测逻辑题保持手感如果时间紧张就完全优先保证算法刷题因为编程题占的分值远高于行测题。行测题在笔试中的比重不大但确实会影响你的整体分数排名所以策略上要以“不拖后腿”为目标而不是“拿高分”为目标。5.4 考场上代码编译报错怎么办在线笔试的IDE和本地IDE的差别很大最典型的问题有两个一是编译环境版本差异二是缺少自动补全。很多人在本地IDE里习惯了代码自动补全和实时语法检查一旦切换到牛客网的在线IDE写Java漏了import、写C忘了包含头文件编译时一堆报错心态直接崩掉。应对办法是提前适应。平时在牛客网刷题时就不要用本地的IDE了直接在网页编辑器里写。等你习惯了网页编辑器的粗糙环境真正笔试时就不会因为工具问题而影响发挥。同时写完代码后不要急着点提交先检查一遍头文件有没有包含、变量名有没有拼写错误、边界条件有没有处理。一次静态检查能帮你省掉好几分钟的调试时间。5.5 关于面试前要不要复盘笔试题强烈建议无论笔试结果如何都要在笔试结束后第一时间复盘。尤其是那些你不确定的题目趁记忆还新鲜把正确答案和解析找出来看一看。很多时候笔试到面试之间只有一个星期左右如果你在笔试中犯过的错误能在面试问答环节避免那你这次笔试就没白考。我在小米这场笔试结束后立刻把不会的选择题都查了一遍整理成了一个文档。后来真的在面试中被问到了类似的问题——关于HashMap在JDK1.8中链表转红黑树的阈值为什么是8。我当时就因为这个细节回答得清楚面试官明显给了我一个正面反馈。5.6 小技巧选择题的“排除猜测”策略最后分享一个实战性很强的小技巧。在面对一道完全不会的选择题时不要瞎蒙先看能否排除掉一些选项。比如两个选项明显矛盾那至少有一个是错的如果某个选项包含了“绝对”“一定”“必然”这类过于绝对的词汇那它很可能是错的因为面试官通常会在这种选项上设置陷阱。如果排除了两个选项剩下的两个二选一那正确率就提高到50%了。这种策略不保证你能做对但能在不确定的情况下最大化你的期望分数。秋招笔试的分数是排位赛每一分都可能影响你的面试资格。根据我个人经验小米2021年秋招笔试整体质量还是相当高的题目的区分度和专业度都在线。如果你能在这场笔试中取得高分说明你的编程基础、知识广度和心理素质都达到了大厂的基本要求。希望这篇复盘对你有所帮助祝你的秋招之路一切顺利。