1. 测试岗手撕代码怎么准备
测试岗手撕代码,通常不会像算法岗、后端研发岗那样考很深的动态规划、图论或复杂数据结构,但它会考察三个核心能力:基础编程是否扎实、逻辑表达是否清楚、边界场景是否敏感。对测试工程师来说,代码题不是单纯为了“刷算法”,而是为了证明你具备用代码解决问题、设计测试用例和定位边界问题的能力。
很多同学准备手撕代码时容易走两个极端:一种是完全不准备,觉得测试岗位不会考;另一种是按照算法岗难度刷大量困难题,结果投入很大但收益不高。更合理的方式是按测试岗高频题型准备:数组、字符串、Map、双指针、滑动窗口、链表基础、排序、二分查找,再配合“先讲思路、再写代码、最后验证边界”的面试表达方式。
一、测试岗为什么考手撕代码
测试岗位考代码题,通常不是为了选算法竞赛选手,而是为了看你是否具备基础工程能力。
面试官关注:
- 能不能把需求转成代码逻辑;
- 能不能写出可运行的基础代码;
- 能不能考虑空数组、重复值、边界值;
- 能不能用合适的数据结构;
- 能不能解释时间复杂度;
- 能不能自测样例;
- 能不能在出错时快速修正。
这些能力和测试工作高度相关。测试工程师做自动化、写脚本、造数据、处理接口响应,都离不开基础编码能力。
二、测试岗常见代码题范围
1. 数组题
常见题:求最大值、去重、两数之和、合并数组、移动零、找重复数字。
考察点:循环、下标、边界、Map、双指针。
2. 字符串题
常见题:反转字符串、判断回文、统计字符出现次数、最长无重复子串、字符串压缩。
考察点:字符遍历、索引、HashMap、双指针。
3. Map/字典题
常见题:两数之和、字符频次统计、数组去重、找第一个不重复字符。
考察点:键值映射、计数、查找效率。
4. 双指针题
常见题:反转数组、判断回文、合并有序数组、移动零。
考察点:左右指针、快慢指针、原地修改。
5. 滑动窗口题
常见题:最长无重复子串、固定长度最大和、最小覆盖子串基础版。
测试岗通常考入门级,重点是理解窗口移动。
6. 链表题
常见题:反转链表、判断链表是否有环、合并两个有序链表。
考察点:指针变化、空节点、单节点。
7. 排序和二分
常见题:冒泡排序、快速排序思想、二分查找、查找插入位置。
考察点:循环边界、排序思路、查找边界。
三、应该优先掌握哪些语言
测试岗常用 Python 和 Java。你可以选自己简历中写得最熟的语言。
如果简历写 Python 自动化,建议用 Python 手撕,因为语法简洁,适合面试表达。
如果投 Java 测开岗位,建议至少能用 Java 写基础题,比如数组、Map、List、字符串处理。
不要面试时临时换语言。代码题最怕语法卡壳。
四、手撕代码的答题流程
推荐使用五步法:
确认题意 -> 讲解思路 -> 写代码 -> 跑样例 -> 补边界
1. 确认题意
先问清楚输入输出、是否有空值、是否要求原地修改、是否有重复元素。
2. 讲解思路
不要一上来就写。先说用什么方法、为什么这样做。
3. 写代码
代码要尽量清晰,不追求炫技。
4. 跑样例
用题目给的样例手动过一遍。
5. 补边界
主动说:空数组、单元素、重复元素、全相同、不存在目标值等情况。
五、示例:两数之和怎么讲
题目:给定数组和目标值,返回两个数下标,使它们之和等于目标值。
思路:用 Map 保存遍历过的数字和下标。遍历当前数 num 时,计算 target - num,如果补数已经在 Map 中,直接返回下标。
Python 示例:
def two_sum(nums, target):
seen = {}
for i, num in enumerate(nums):
need = target - num
if need in seen:
return [seen[need], i]
seen[num] = i
return []
测试用例:
nums=[2,7,11,15], target=9 -> [0,1]
nums=[3,3], target=6 -> [0,1]
nums=[], target=1 -> []
这个题能体现 Map 的使用、边界意识和复杂度表达。
六、示例:反转字符串怎么讲
可以用双指针:左指针从头,右指针从尾,交换后向中间移动。
def reverse_string(s):
chars = list(s)
left, right = 0, len(chars) - 1
while left < right:
chars[left], chars[right] = chars[right], chars[left]
left += 1
right -= 1
return "".join(chars)
边界:空字符串、单字符、奇数长度、偶数长度。
七、面试中怎么表达复杂度
复杂度不需要讲得很学术,但要能说清:
- 单层循环通常是 O(n);
- 双层循环通常是 O(n²);
- 使用 Map 查找通常是 O(1) 平均;
- 二分查找是 O(log n);
- 排序通常是 O(n log n)。
例如两数之和,用 Map 后时间复杂度 O(n),空间复杂度 O(n)。
八、测试思维怎么体现
测试岗写代码题,要主动补测试用例。比如:
- 输入为空;
- 输入只有一个元素;
- 有重复元素;
- 全部元素相同;
- 目标不存在;
- 边界值;
- 大数据量。
这正是测试工程师和普通刷题者的区别。
九、准备计划
建议按 10 天准备:
- 数组基础;
- 字符串基础;
- Map 计数和查找;
- 双指针;
- 滑动窗口入门;
- 链表基础;
- 排序;
- 二分查找;
- 综合练习;
- 模拟面试表达。
每天不用刷很多题,但要把高频题写熟。
十、面试回答模板
如果面试官问“测试岗手撕代码怎么准备”,可以这样回答:
我会按测试岗高频题型准备,不会盲目刷很难的算法题。重点掌握数组、字符串、Map、双指针、滑动窗口、链表基础、排序和二分查找。面试时我会先确认输入输出和边界,再讲思路,然后写代码,最后用正常样例和边界样例验证。比如两数之和我会用 Map 保存已遍历元素,把时间复杂度从 O(n²) 降到 O(n);反转字符串会用双指针,并补充空字符串、单字符、奇偶长度等测试用例。
十一、练习清单
- 写两数之和;
- 写反转字符串;
- 判断回文;
- 数组去重;
- 移动零;
- 字符频次统计;
- 最长无重复子串;
- 反转链表;
- 二分查找;
- 冒泡排序。
测试岗手撕代码,重点是基础题写稳、思路讲清、边界补全。不要只追求题量,要练习面试表达和自测能力。
配套刷题:

