考过华为测试岗的同学应该都有这种感觉:笔试刷人比面试还狠。2017年秋招那套测试工程师笔试试卷,放在今天来看依然有很强的参考价值,尤其是华为OD机试越卷越凶的当下,回头拆解这套老题,反而能看清华为招测试的核心逻辑。
这篇文章不聊虚的,直接把这套试卷的题型结构、考察重点、答题思路全部拆开揉碎,结合我自己备考时的经验和踩过的坑,给准备投华为测试岗(校招、OD都适用)的同学一份能直接照着准备的攻略。
1. 2017年华为秋招测试笔试全景扫描——题型与考察逻辑
1.1 试卷整体结构与考察逻辑
2017年华为秋招测试工程师的笔试卷,整体结构分四块:性格测试、技术客观题、测试用例设计主观题、编程题。考试时长大概90到120分钟,采用的是牛客网或者华为自研的在线测评系统,全程摄像头监控,切屏超过三次会直接警告并可能判定作弊。
这里先说一个很多人忽略的点:性格测试真的是会刷人的。华为的性格测试用的是类似九型人格的变种题库,前后会有重复题目的变相验证,如果你前后答案矛盾太多,系统会直接标记。很多技术面表现不错的同学挂在性格测试上,就是以为这环节随便填填就行。我的建议是:不要试图“演”一个你以为是华为喜欢的形象,前后一致性才是关键,宁愿中庸一点,也不要前后打脸。
技术客观题大概25到30道,覆盖C语言、数据结构、计算机网络、操作系统、数据库、Linux基础。考察风格很“华为”:偏底层、爱考内存和指针、喜欢考查网络协议细节。接下来我逐一拆解每个模块的核心考点和答题思路。
1.2 岗位方向决定复习侧重点
这里必须先说清楚:华为测试工程师在笔试阶段其实分两条线——软件测试和解决方案测试(前身叫资料测试或产品测试)。从2017年秋招的试卷风格来看,两条线的题目都会出现在同一张卷子里,但侧重点有差异:
- 软件测试岗:更侧重代码能力和白盒测试思维,编程题占比更大,技术客观题里C语言和数据结构的题更密集。
- 解决方案测试岗:更侧重网络协议、系统架构理解,和黑盒测试用例设计,有点像今天华为数通方向测试的雏形,客观题里网络协议的比重会明显更高。
虽然你投递时只能选一个志愿,但笔试系统里两套题是混合出的。这也就是说,如果你只准备代码不准备网络,或者只背协议不看代码,都容易翻车。正确的备考姿势是:C语言、数据结构、计算机网络三门都要过硬,操作系统和数据库至少掌握基础,测试理论必须熟练。
2. 技术客观题深度拆解——C语言、数据结构与网络协议
2.1 C语言与内存管理:指针、数组、结构体对齐
华为笔试的C语言题目向来以“看着简单、做着就错”著称。2017年试卷里有几道非常典型的题,今天再看依然是高频考点:
结构体字节对齐是必考题。很多考生上来就计算sizeof(struct),结果答错。核心规则是:结构体的总大小必须是最大成员对齐数的整数倍;每个成员的起始偏移量必须是该成员对齐数的整数倍。举个例子:
struct test { char a; // 偏移0,占1字节 int b; // 对齐数4,偏移从4开始,占4字节 char c; // 偏移8,占1字节 }; // 最大对齐数4,总大小9,对齐到4的倍数,所以是12字节这道题如果没掌握“偏移量对齐”和“总大小是最大对齐数的整数倍”这两条规则,很容易算成9或者10。华为的考试系统对这类题不会给任何提示,纯靠平时积累。
指针与数组的混用也是高频考点,尤其是sizeof和strlen的区别:
char *p = "hello"; char arr[] = "hello"; // sizeof(p)是8(64位系统),sizeof(arr)是6(包含'\0') // strlen(p)是5,strlen(arr)是5华为特别爱在这里面设陷阱。你在纸上练习时一定要养成先区分“指针”和“数组”的习惯——指针是地址变量,数组是连续内存块,二者在sizeof下的语义完全不同。
函数参数传递是第三个高频点。考题经常出现类似“写一个swap函数交换两个int,问下面哪个实现正确”的题目。正确答案必须是传指针或者传引用,传值必然失败。华为这道题还会升级到“二级指针交换指针本身”的考法,我建议把一级指针、二级指针、指针引用这三种交换方式全部写一遍,笔试时才能秒杀。
2.2 数据结构与算法基础:排序、链表、二叉树
这一板块的难度不高,但范围很广。2017年试卷里出现的题目集中在三类:
排序算法的时间复杂度和稳定性对比。这个几乎年年考。举个例子,快排平均O(n log n)、最坏O(n²),不稳定;归并排序始终O(n log n),稳定但需要额外O(n)空间;堆排序O(n log n),不稳定;插入排序O(n²),稳定。我建议你自己整理一张表,把冒泡、选择、插入、希尔、归并、快排、堆排这七种排序的“时间复杂度-空间复杂度-稳定性”全都背下来,考试时直接调用,不现场推导。
链表操作,重点考反转链表和判断是否有环。反转链表是华为笔试编程题的高频题,客观题里也经常出现让你选择“给定代码段的输出结果”这类题。判断链表是否有环可以用快慢指针,两个指针速度差一倍,如果相遇则有环。这个思路理解后,不光笔试能用,面试手撕代码同样会考。
二叉树遍历,重点掌握前序、中序、后序、层序四种遍历的递归和迭代写法,以及“已知中序+前序(或后序)推二叉树”这类经典题。华为2017年就在客观题里出了一道“给前序和中序,求后序”的题,本质是考递归划分左右子树的能力。建议在草稿纸上多画几个例子,把推导过程练熟。
2.3 计算网络:TCP/IP协议栈、HTTP与路由交换基础
这里要特别提一下:华为测试工程师笔试的计算机网络题,带着浓浓的“华为味”——不考纯理论背诵,而是考协议交互细节和故障排查。
TCP三次握手和四次挥手是必考题,但考法非常深。比如:为什么TIME_WAIT状态要等2MSL?如果客户端主动关闭连接后直接进入CLOSED状态会有什么后果?这类题直接对应了后面的场景题和面试中的压力提问,如果你只是背了“三次握手、四次挥手”这几个字,基本拿不到分。
HTTP协议也是常客。2017年那次考了GET和POST的区别、HTTP/1.0和HTTP/1.1的keep-alive、状态码的语义——尤其要记清楚301和302的区别:301是永久重定向,302是临时重定向。今天如果让我给点建议,最好把HTTP/2和HTTPS握手流程也一起准备了,华为测试岗现在考这些的概率很大。
路由交换基础是华为特有的考察点。像“交换机端口镜像配置”“华为三层交换机VLAN间路由”“华为防火墙HRP实验”这些热词对应的知识点,在2017年试卷里就已经露出苗头,会考到IP地址子网划分、静态路由和默认路由的区别、VLAN的作用这类基础题。如果你有数通基础,这块拿分很容易;如果没有,建议你用华为ensp模拟器把VLAN划分、交换机端口镜像、静态路由、默认路由这几个实验做一遍,大概花两个晚上就能建立完整的认知。
2.4 操作系统与数据库、Linux基础
操作系统考点集中在进程与线程的区别、死锁产生的四个必要条件(互斥、持有并等待、非抢占、循环等待)、虚拟内存与分页机制。这些计算机基础题目难度不高,但是考察范围广,需要你把概念名词搞清楚就行。
数据库主要考SQL基本语法、索引的原理和左连接/内连接的区别。特别是left join和inner join的区别,一定要能用一句话说清楚:内连接只返回两张表中匹配的行,左连接返回左表所有行再加上右表匹配的行,没有匹配的补NULL。这道题在笔试里几乎是送分题,但每年都有不少人丢分。
Linux基础题常考的是文件权限数字表示法(chmod 755、644的含义)、常用命令(ls、cd、grep、ps、top、netstat等)、管道符和重定向。今天的华为OD机试和面试里,这一块依然是基本盘,尤其是容器化时代,如果连查看日志的tail -f和grep组合都不会,连系统测试都跑不动。
3. 测试理论与用例设计主观题——拉开差距的关键
3.1 测试理论基础:从V模型到测试金字塔
2017年试卷的主观题非常直接:给你一个功能或模块,让你写测试用例。但这背后考察的不只是“会写用例”,而是你对测试理论体系的掌握。
首先要搞清楚几组基础概念:黑盒测试和白盒测试的区别、单元测试集成测试系统测试验收测试的区别、回归测试和冒烟测试的应用场景。这些是基本功,不解释清楚的话,用例设计题写得再漂亮也会显得根基不牢。
V模型和W模型的区别也是华为爱考的点。V模型把开发和测试对应起来:需求分析对应验收测试、概要设计对应系统测试、详细设计对应集成测试、编码对应单元测试。W模型则是开发和测试并行推进,强调测试文档的同步产出。华为的测试项目流程更接近W模型,因为测试人员需要在设计阶段就介入,提前输出测试方案。
测试金字塔这套理论在2017年可能还不是显学,但现在面试必问。核心思想是:底层单元测试数量最多、成本最低,中间层服务测试次之,最上层端到端测试数量最少、成本最高。如果你在笔试或面试中能主动提到测试金字塔并解释清楚为什么单元测试性价比最高,面试官对你的印象会明显加分。
3.2 经典用例设计题:从“会写”到“写得专业”
这块是整个试卷里最能体现“测试思维”的部分。2017年最经典的一道主观题是:“请针对华为手机的‘计算器’设计测试用例”。
这题看起来很简单,但能拉开差距。初级回答是列出“1+1=2、9×9=81”这样零散的功能点,高级回答应该是有层次、有方法地组织用例。我当时整理了这样一个答题框架:
功能测试:
- 基本四则运算:加减乘除,含正数、负数、小数、0
- 优先级:1+2×3应该等于7而不是9
- 连续运算:按了等于号后继续按运算符是否正常
- 边界值:最大支持多少位数字?超出后是报错还是截断?
- 特殊按键:C(清空)、CE(清除当前输入)、退格键的逻辑是否区分
- 异常输入:连续按小数点会怎样?除以0是什么表现?
界面与交互测试:
- 横竖屏切换后计算历史和当前输入是否保留
- 字体大小变化后布局是否错乱
- 系统深色模式下显示是否正常
中断与并发测试:
- 计算过程中来电、来短信,再切回,计算器状态是否保留
- 后台运行很久后恢复,是否崩溃或数据丢失
- 分屏模式下计算器能否正常工作
兼容性测试:
- Android和iOS各版本、不同分辨率屏幕下的表现
这个框架的核心在于:用边界值分析法、等价类划分法、场景法、中断测试、兼容性测试这些方法论去组织用例,而不是零散地罗列功能点。华为笔试的评分标准看重的是你能不能证明自己“懂测试”,而不是“用过计算器”。
3.3 测试用例设计核心方法论速查
这一节写给时间紧的同学。用例设计一定要掌握几个核心方法,考试前可以过一遍:
等价类划分法是最基础的方法。把输入域划分成若干个等价类,认为每个等价类中的数据对测试来说“等效”,只需要取一个代表值。比如手机号输入框,有效等价类是11位数字,无效等价类是少于11位、多于11位、包含非数字字符、为空等。笔试中很多用例设计题都可以用这种方法快速列出有效类和无效类两种用例。
边界值分析法是华为笔试的必考点。大量缺陷都发生在边界附近,所以边界值分析往往比等价类划分更能发现bug。比如登录密码长度要求6-16位,那么1、5、6、16、17位都是必须测试的边界值。笔试中如果考到输入框、参数校验类题目,使用等价类加边界值是黄金组合。
**场景法(或叫业务流分析法)**则适合流程较长的功能。从用户开始操作到操作结束的完整流程视为一个场景,覆盖基本流和备选流。拿电商下单来说,基本流是“浏览商品-加入购物车-提交订单-支付-完成”,备选流是“库存不足-支付超时-取消订单”等。场景法能系统性地覆盖业务流程中的分支,适合考“设计一个购物流程的测试用例”这类题。
判定表法用于多条件组合的输入场景。比如测试一个登录模块,条件有“用户名正确/错误”“密码正确/错误”“验证码正确/错误”,组合很多,用判定表可以列全所有组合情况并确定期望结果。这种方法是求职者最容易忽略的,但笔试中偶尔会考到组合条件较复杂的模块,掌握它会让你的答案看起来更专业。
错误推测法则依赖经验,根据过往项目的缺陷数据来猜测哪些地方容易出问题。这个方法在笔试中可以作为补充,但别作为主要框架。综合来说,我的建议是:看到用例设计题,先在草稿纸上定方法论,再按方法论展开,比想到哪写到哪强得多。
4. 编程题与场景题——从笔试到面试的衔接
4.1 编程题:核心是手速和代码规范
2017年华为秋招测试岗的编程题通常是两道:一道简单题(类似链表反转、字符串反转)、一道中等题(类似最长公共子串、数组两数之和的变体)。考试环境是核心代码模式,你只需要写出核心函数,不用处理输入输出。
华为的编程题有几个特点值得特别注意:语言要选择你最有把握的,C/C++/Java都可以;代码要写注释,关键步骤要有清晰的命名,因为后台是机器判分+人工复查;边界条件一定要判断,比如空链表、空字符串、数组越界,这些是扣分重灾区。
举例说明,链表面试题中反转链表是最常见的。很多同学背了迭代版本,但手撕时容易在循环条件上出错。正确写法是:
struct ListNode* reverseList(struct ListNode* head) { struct ListNode* prev = NULL; struct ListNode* curr = head; while (curr != NULL) { struct ListNode* nextTemp = curr->next; curr->next = prev; prev = curr; curr = nextTemp; } return prev; }这类代码一定要练到闭着眼睛能写出来,笔试的时间很紧,容不得现场推导。
另外要注意,华为OD机试(包括2017年周期的校招在线笔试)采用的是双机位监控,电脑摄像头拍脸,手机摄像头拍桌面,这是硬性要求。我见过有同学因为手机摄像头没对准桌面被判定作弊,成绩直接作废,非常可惜。考试前一定要严格按照邮件里的“环境测试”流程走一遍,别在设备问题上翻车。
4.2 场景题:测试思维的最佳载体
场景题是我觉得整套试卷里含金量最高的部分。它不是客观题,也不是普通的编程题,而是给你一个实际场景,让你分析怎么测。
2017年试卷里有一道印象深刻的场景题,题目大意是:华为路由器管理页面新增了一个“恢复出厂设置”按钮,请分析这个功能可能出现的故障,并设计测试方案。
这类题目,你要充分站在用户的视角和使用环境去思考,而不是只盯着功能本身。比如结合华为路由器现在的产品特点(支持华为智能家居App管理、支持WLAN组网、支持远程管理),这道题可以扩展成很多层级:
功能测试层面:恢复出厂设置后,之前配置的WiFi名称、密码、上网账号是否都被清除?管理页面的登录密码是否恢复成默认值?
异常场景层面:恢复过程中断电会怎样?会不会变砖?恢复失败时有没有提示?恢复过程中用户点击其他页面会不会导致异常?
关联功能层面:恢复后设备还能不能自动连接到华为智能家居App?如果用户之前开启了远程管理,恢复后远程管理是否关闭?如果家里有多个华为路由器组了Mesh(华为的WLAN组网方案),恢复一个后整个网络会不会瘫痪?
安全性层面:恢复出厂设置前是否需要二次确认?如果设备被恶意恢复,是否有什么防护机制?
兼容性层面:不同型号的路由器、不同版本的固件下,恢复逻辑是否一致?
性能层面:恢复过程耗时多少?会不会出现长时间卡顿但界面没有提示的情况?
这类题目其实是在考察你有没有完整的“测试思维链”,能够从功能、异常、关联、安全、兼容、性能多个维度去评估一个功能。准备这类题时,最有效的方法是:养成“凡事多想一步”的习惯,看到一个功能先问自己几个问题——用户会怎么操作、误操作会怎样、极端情况下会怎样、和其他模块有没有依赖,长期练习后,这类题就不难了。
4.3 华为OD机试与2017年笔试试卷的关联
我知道“华为OD机试”是现在搜索热度很高的关键词。坦白说,今天华为OD的机试难度已经比2017年的校招笔试题复杂不少,尤其加入了算法考点、双机位C卷、中间代码手撕等,但基础考点逻辑是继承的。
从考试维度看,OD机试现在的典型考法集中在:数组与字符串处理、动态规划、深度优先/广度优先搜索、贪心、链表、二叉树。这些和2017年试卷考察的数据结构、算法基础完全是同一条线。把当年的客观题当“预习”,把现在的OD题库当“练习”,是挺合理的递进路线。
从测试角度也要注意一个变化:随着自动化测试和AI辅助测试的比重加大,现在华为测试岗的笔试和面试开始涉及“AI测试工程师”相关的内容了。比如:如何用模型辅助生成测试用例、如何对AI模型本身做评测、测试数据集的构建与标注质量如何保障。这一点2017年的试卷里完全没有,但对现在的求职者来说是需要额外准备的。我的建议是:优先把传统测试基础打牢,再了解一些AIGC在测试中的应用场景,不做无根之木。
5. 备考路线与常见失分点——过来人的避坑经验
5.1 从零开始的三阶段备考路线
第一阶段:基础夯实(约2-3周)
这个阶段的目标是把客观题考点全部过一遍。C语言重点练指针、数组、结构体、内存管理;数据结构重点练链表、栈、队列、二叉树和常用排序;计算机网络重点练TCP/IP协议栈、HTTP协议和基础路由交换知识;操作系统和数据库按考点清单快速过。这个阶段不需要刷题量很大,但要求每个知识点都能用自己的话讲明白。我当时给自己定的标准是:如果一道题让我现场讲给同学听,我能讲明白,就算过关。
第二阶段:专项突破(约2-3周)
主攻测试理论、用例设计和编程题。测试理论把V模型、W模型、测试金字塔、等价类划分、边界值分析、场景法、判定表法这些方法论全部吃透。用例设计每天练两道题,素材可以选常见的功能模块——登录、计算器、购物车、文件上传、搜索框、支付流程等,用方法论组织答案。编程题用LeetCode或牛客网刷题,主攻“高频面试题清单”,不追求难题,但追求一题多解和代码规范。
第三阶段:模拟冲刺(约1-2周)
严格按照考试时间做整套模拟题,重点是训练时间分配和心态。建议使用OJ系统练习,提前适应在线编程的代码编辑器和判题逻辑。另外一定要做一次完整的“环境模拟考试”——把摄像头摆好、把手机支架弄好、把桌面清空,模拟双机位环境走一遍流程,别等到正式考试才发现设备问题。
5.2 常见失分点整理(建议收藏)
根据我自己的做题经历和周围上岸同事的反馈,华为测试岗笔试最常见的丢分点可以汇总成一张表:
| 失分点 | 原因分析 | 解决方案 |
|---|---|---|
| 性格测试答案前后矛盾 | 想“演”出企业喜欢的形象,导致前后不一致 | 按真实想法作答,保持一致性 |
| 结构体sizeof计算错误 | 没掌握对齐规则 | 专项练习结构体对齐题,直到能心算 |
| 指针和数组混淆 | 基础知识不扎实 | 把sizeof和strlen的区别练成条件反射 |
| TCP状态转移记不牢 | 死记硬背,没理解状态意义 | 画状态转移图,结合抓包理解 |
| HTTP状态码只记了200和404 | 复习不全面 | 把1xx到5xx常见状态码全部过一遍 |
| 用例设计没有方法论支撑 | 零散罗列功能点 | 每个用例都标注用到了什么测试方法 |
| 编程题循环边界写错 | 手速不够,缺乏练习 | 高频题每天手写一遍,直到闭眼能写 |
| 场景题只答功能测试 | 没考虑到异常、安全、兼容性 | 用“功能-异常-关联-安全-性能”框架思考 |
| SQL左连接和内连接混淆 | 概念理解不透彻 | 用一个具体例子跑一遍,直观感受区别 |
| 代码不写注释 | 认为OJ只看结果 | 华为人工复查代码,注释是加分项 |
5.3 答题顺序与时间分配的心得
最后聊一个实操层面的技巧:答题顺序。华为测试岗笔试的时间其实偏紧,我个人的经验是先做性格测试(10分钟),再做技术客观题(40分钟),然后做主观题和场景题(30分钟),最后留20分钟左右给编程题。
理由很现实:客观题如果你知识储备到位,做题速度可以很快,先快速拿分;主观题需要组织语言,但不用跑代码,中等时间投入;编程题最费时间且变量最大,放在最后,如果来不及至少能保证前面的大头分数不丢。也许有人习惯先写编程题,但考虑到编程题即使做出来了也只是其中一小部分分值,如果客观题和主观题的分数丢了反而得不偿失。这个顺序是我亲身试过之后觉得最稳定的。
编程题如果卡住了,超过15分钟没思路,就先跳过去做后面的主观题,最后再回来补。因为笔试判分是看总分的,不是看有没有全做完,把能拿的分稳稳拿住更重要。
写在最后:这套试卷给我的真正启发
回头看2017年这套试卷,给我最大的感触是:华为招测试工程师,要的不是刷题机器,而是具备系统性测试思维、扎实的计算机基础、能够看懂代码并设计有效测试方案的人。那套题里客观题考的是“你有没有计算机功底”,主观题考的是“你有没有测试思维”,编程题考的是“你能不能和开发对话”。
不管是当年的校招笔试,还是现在的OD机试,这个底层逻辑其实一直没有变过。如果你能在准备过程中真正把计算机网络、数据结构这些基础学扎实,同时练出用方法论写测试用例的习惯,那么这套试卷对你来说就不只是“上岸工具”,而是一次系统性的能力提升。希望大家都能顺利通过笔试,拿到心仪的offer。