Skip to content

小米测试开发面经(按一二三面拆分 · 可背诵标准回答版)

每题包含:题目 + 标准回答思路 + 加分回答示例,可直接背诵使用。


一、一面(45~60 分钟 · 基础 + 项目 + 手撕代码)

一面关键词:基础扎实、项目真实、代码能写 小米一面通常偏基础,难度适中


1. 自我介绍

【标准结构 · 1~2 分钟】

面试官好,我叫 XXX,XX 学校 XX 专业硕士/本科在读。

我有 X 段测试相关经历:
- 在 XX 公司实习期间,负责 XX 模块的功能测试和接口自动化测试
- 独立搭建过 pytest 接口自动化框架,编写用例 XX 条

技术栈方面,我熟悉 Python,了解 Java 基础,能独立编写测试脚本。

我是小米的用户,对小米的产品和技术都很认可,希望能加入小米的测试团队。
谢谢。

2. 为什么选择测试开发这个岗位?

1. 我对质量保障工作有兴趣,喜欢从用户角度思考问题
2. 测试开发既需要测试思维,又需要开发能力,能全面提升技术能力
3. 我细心、耐心,适合做质量保障工作
4. 测试开发岗位能参与产品全流程,更全面地理解业务

3. 数组和字典的区别

数组(列表):
1. 有序存储,通过索引访问
2. 查找元素需要遍历,时间复杂度 O(n)
3. 插入、删除元素需要移动其他元素

字典(哈希表):
1. 键值对存储,通过 key 访问
2. 查找、插入、删除平均时间复杂度 O(1)
3. 无序存储(Python 3.7+ 保持插入顺序)

适用场景:
- 需要频繁按索引访问 → 用数组
- 需要频繁按 key 查找 → 用字典

4. 手撕代码:求字符串集合中都出现的字母(交集)

python
def commonLetters(str_list):
    if not str_list:
        return []

    # 取第一个字符串的字符集合
    result = set(str_list[0])

    # 依次与其他字符串取交集
    for s in str_list[1:]:
        result = result & set(s)

    return list(result)

5. 手撕代码:翻转字符串(单词内部翻转)

python
def reverseWords(s):
    # 示例:"i am a student" → "i ma a tneduts"
    words = s.split(' ')
    result = []
    for word in words:
        result.append(word[::-1])
    return ' '.join(result)

6. 手撕代码:添加最少的字符让字符串变成回文串

python
def makePalindrome(s):
    # 思路:找到最长的回文后缀,把前面的字符反转后加到末尾
    def isPalindrome(sub):
        return sub == sub[::-1]

    for i in range(len(s)):
        if isPalindrome(s[i:]):
            return s + s[:i][::-1]
    return s + s[:-1][::-1]

7. 针对购物车设计测试用例

【功能测试】
- 添加商品:正常添加、添加已下架商品、添加库存不足商品
- 修改数量:增加、减少、输入非法值(负数、0、超大数)
- 删除商品:单个删除、批量删除、清空购物车
- 价格计算:单品价格、多商品总价、优惠计算、税费
- 结算流程:跳转结算页、选择地址、选择支付方式

【边界值】
- 购物车最大商品数限制
- 单商品最大数量限制
- 价格为 0 或超大值的处理

【异常场景】
- 商品下架后购物车显示
- 网络异常时操作
- 并发修改购物车

【兼容性】
- 不同浏览器、不同设备
- App 和 Web 端一致性

8. 测试开发工程师的职责是什么?

测试开发 = 测试 + 开发,核心职责:

1. 质量保障:设计测试用例、执行测试、发现和跟踪 Bug
2. 自动化测试:编写自动化脚本,提升回归效率
3. 测试工具开发:开发测试辅助工具,提升测试效率
4. 测试平台开发:搭建测试管理平台,统一测试资源
5. 持续集成:搭建 CI/CD 流水线,实现自动化测试

和纯测试的区别:
- 测试:侧重业务测试、用例设计、Bug 管理
- 测开:侧重自动化、工具开发、平台建设

9. 什么情况下可以写一个自动化测试工具?

适合自动化的场景:
1. 重复性高:每天都要执行的回归测试
2. 稳定性高:功能相对稳定,不会频繁变更
3. 数据驱动:多组数据执行相同操作
4. 批量操作:如批量语音处理、批量视频处理

不适合自动化的场景:
1. 需要人工判断的场景(如用户体验测试)
2. 功能频繁变更
3. 一次性测试任务

举例:
- 语音模块测试:可以写脚本批量测试语音识别准确率
- 视频模块测试:可以写脚本批量验证视频播放和截图对比

10. HTTP 请求方式有哪些?

GET:获取资源,参数在 URL 中
POST:提交数据,参数在请求体中
PUT:更新资源,替换整个资源
PATCH:部分更新,只更新指定字段
DELETE:删除资源
HEAD:获取响应头,不获取响应体
OPTIONS:获取服务器支持的请求方法

11. HTTP 状态码有哪些?

1xx:信息性状态码
  - 100 Continue:继续发送请求

2xx:成功状态码
  - 200 OK:请求成功
  - 201 Created:创建成功
  - 204 No Content:成功但无返回内容

3xx:重定向状态码
  - 301 Moved Permanently:永久重定向
  - 302 Found:临时重定向
  - 304 Not Modified:资源未修改

4xx:客户端错误
  - 400 Bad Request:请求格式错误
  - 401 Unauthorized:未授权
  - 403 Forbidden:禁止访问
  - 404 Not Found:资源不存在

5xx:服务器错误
  - 500 Internal Server Error:服务器内部错误
  - 502 Bad Gateway:网关错误
  - 503 Service Unavailable:服务不可用

存储位置:
- Cookie:存储在客户端(浏览器)
- Session:存储在服务器

安全性:
- Cookie:容易被篡改和窃取,安全性较低
- Session:存储在服务器,安全性较高

存储大小:
- Cookie:单个 Cookie 不超过 4KB
- Session:取决于服务器内存

使用场景:
- Cookie:存储用户偏好、自动登录
- Session:存储登录状态、购物车等敏感信息

13. 数据库:左连接、右连接、内连接的区别

内连接(INNER JOIN):只返回两表都有匹配的记录
左连接(LEFT JOIN):返回左表所有记录,右表没有则为 NULL
右连接(RIGHT JOIN):返回右表所有记录,左表没有则为 NULL

示例:
SELECT * FROM A INNER JOIN B ON A.id = B.id;  -- 只返回两表都有的
SELECT * FROM A LEFT JOIN B ON A.id = B.id;    -- 返回 A 所有,B 没有为 NULL

14. Linux 常用命令

文件操作:
- ls:列出目录内容
- cd:切换目录
- cat:查看文件内容
- grep:搜索文本
- find:查找文件

进程管理:
- ps -ef | grep xxx:查看进程
- kill -9 pid:强制杀死进程
- top:查看系统资源使用

网络:
- netstat -tlnp:查看端口占用
- curl:发送 HTTP 请求

日志:
- tail -f xxx.log:实时查看日志
- grep "error" xxx.log:搜索错误日志

二、二面(45~60 分钟 · 项目深挖 + 技术深度)

二面关键词:项目真实、有深度、能解决问题


1. 项目深挖:介绍一下你的项目

我负责的是 XX 系统/模块的测试工作。

背景:该系统主要解决 XX 问题,用户规模 XX。
任务:我负责 XX 模块的测试用例设计和执行。
行动:
  1. 用 Xmind 梳理测试点,设计测试用例 XX 条
  2. 执行功能测试,发现 Bug XX 个,推动开发修复
  3. 搭建接口自动化框架,覆盖核心接口
  4. 接入 Jenkins,实现持续集成
结果:主流程覆盖率达到 XX%,回归时间从 X 小时缩短到 X 分钟。

2. 项目中遇到的难点是什么?

难点:接口之间有强依赖,A 接口返回的数据是 B 接口的入参,
      线下环境数据不稳定,导致自动化用例经常失败。

解决:
1. 用 mock 拦截依赖接口,返回预设数据
2. 搭建独立的测试数据准备接口

结果:用例稳定性从 60% 提升到 95%。

3. 如何保证测试用例的全面性?

1. 需求分析:理解所有功能点和业务流程
2. 测试方法:
   - 等价类划分:覆盖有效和无效输入
   - 边界值分析:测试边界情况
   - 场景法:覆盖正常流程和异常流程
3. 评审:和开发、产品一起评审测试用例
4. 覆盖率统计:功能覆盖、场景覆盖

4. 如何理解测试工作?

测试的核心价值:
1. 发现问题:在上线前发现缺陷,降低线上风险
2. 评估质量:对产品质量给出客观评价
3. 推动改进:反馈问题,推动开发提升代码质量
4. 用户视角:从用户角度验证产品是否满足需求

测试需要的素质:
1. 细心、耐心
2. 逻辑思维强
3. 沟通能力好
4. 技术能力(自动化、工具开发)

5. 手撕代码:快排

python
def quickSort(arr):
    if len(arr) <= 1:
        return arr

    pivot = arr[len(arr) // 2]
    left = [x for x in arr if x < pivot]
    middle = [x for x in arr if x == pivot]
    right = [x for x in arr if x > pivot]

    return quickSort(left) + middle + quickSort(right)

6. 手撕代码:二分查找

python
def binarySearch(arr, target):
    left, right = 0, len(arr) - 1
    while left <= right:
        mid = (left + right) // 2
        if arr[mid] == target:
            return mid
        elif arr[mid] < target:
            left = mid + 1
        else:
            right = mid - 1
    return -1  # 未找到

7. 你用过小米的产品吗?

【标准回答】
我是小米的忠实用户,目前使用的是小米手机,家里也有小米的智能设备。

我喜欢小米的原因:
1. 性价比高,产品实用
2. 生态系统完善,设备互联体验好
3. MIUI 系统功能丰富,用户体验好

【追问:你觉得有什么可以改进的地方?】
1. XX 功能可以优化,比如 XX
2. XX 场景的体验可以提升

8. 你选一个公司主要考虑哪些因素?

1. 业务前景:公司的业务是否有发展空间
2. 技术氛围:团队的技术水平和学习氛围
3. 成长空间:能否学到东西,是否有晋升通道
4. 薪资福利:是否符合预期
5. 团队氛围:同事之间是否好相处
6. 地理位置:通勤是否方便

三、三面(30~45 分钟 · HR 面 / 综合面)

三面关键词:稳定性、动机、沟通能力


1. 自我介绍

面试官好,我叫 XXX,XX 学校 XX 专业。

我对应聘测试开发岗位有几个优势:
1. 有测试实习经验,熟悉测试流程
2. 会 Python,能写自动化脚本
3. 细心、耐心,适合做质量保障工作

我对小米很认可,希望能加入小米的测试团队。

2. 通勤时间能接受吗?住哪里?

我现在住在 XX,通勤时间大约 XX 分钟,可以接受。
如果入职,我也可以考虑在公司附近租房。

3. 为什么选择小米?

1. 我是小米的用户,对小米的产品很认可
2. 小米的生态系统完善,发展前景好
3. 小米的技术氛围好,能学到很多东西
4. 小米重视用户体验,和我的价值观匹配

4. 你的优缺点是什么?

【优点】

我做事细心、有责任心。
比如做测试的时候,我会主动考虑边界情况和异常场景,
设计覆盖全面的测试用例。

【缺点】

我有时候追求完美,会在细节上花较多时间。
但我现在会先用优先级排序,先完成核心功能,再优化细节。

5. 你有什么问题要问我?

1. 这个岗位主要负责什么业务?
2. 团队的技术栈是什么?
3. 新人进入后有什么培训?
4. 部门的业务发展方向是什么?

四、小米高频手撕代码汇总

题目难度出现频率
字符串集合交集★★⭐⭐⭐⭐⭐
翻转字符串(单词内部)★★⭐⭐⭐⭐
添加字符变成回文串★★★⭐⭐⭐
快排★★⭐⭐⭐
二分查找★★⭐⭐⭐
购物车测试用例设计★★⭐⭐⭐⭐⭐

五、小米面试特点总结

小米一面:基础 + 项目 + 手撕代码
重点:基础要扎实,项目要真实,代码要能写

小米二面:项目深挖 + 技术深度
重点:项目经得起追问,技术有深度

小米三面:综合面(HR 面)
重点:稳定性、动机、沟通能力

建议:小米面试比较务实,看重真实能力和项目经验。简历上的项目一定要吃透,能讲清楚背景、难点、解决方案和结果。

Powered by VitePress

🔒 需要口令解锁

关注微信公众号
回复关键词 「」 获取口令

解锁后本浏览器长期有效