华为测试开发面经(按一二三面拆分 · 可背诵标准回答版)
每题包含:题目 + 标准回答思路 + 加分回答示例,可直接背诵使用。
一、一面(45~60 分钟 · 基础 + 项目 + 手撕代码)
一面关键词:项目扎实、基础过关、代码能写出来 华为一面通常很重项目,会问得很细
1. 自我介绍
【标准结构 · 1~2 分钟】
面试官好,我叫 XXX,XX 学校 XX 专业硕士/本科在读。
我有 X 段测试相关经历:
- 在 XX 公司实习期间,负责 XX 模块的功能测试和接口自动化测试
- 独立搭建过 pytest 接口自动化框架,编写用例 XX 条
技术栈方面,我熟悉 Python,能独立编写测试脚本和自动化工具。
我对华为的技术氛围和企业文化非常认可,希望能加入华为的测试团队。
谢谢。2. 项目介绍(必问,会被深挖)
【STAR 法则】
我负责的是 XX 系统的测试工作。
背景:该系统主要解决 XX 问题,用户规模 XX。
任务:我负责 XX 模块的测试用例设计和执行。
行动:
1. 用 Xmind 梳理测试点,编写测试用例 XX 条
2. 执行功能测试,发现 Bug XX 个
3. 搭建接口自动化框架,编写自动化用例 XX 条
结果:主流程覆盖率达到 XX%,回归时间缩短了 XX%。常见追问:
- "项目中遇到的难点是什么?怎么解决的?"
- "你说的 XX 技术方案,为什么选这个而不是另一个?"
- "如果再来一次,你会怎么优化?"
3. TCP 和 UDP 的区别
1. 连接性:TCP 面向连接(三次握手),UDP 无连接
2. 可靠性:TCP 可靠(确认、重传、排序),UDP 不可靠
3. 传输效率:UDP 更快(没有确认和重传开销)
4. 场景:TCP 适合文件传输、网页、邮件;UDP 适合视频通话、直播、DNS追问:TCP 三次握手过程是什么?
1. 客户端发 SYN → 服务端(请求建立连接)
2. 服务端回 SYN+ACK → 客户端(确认并同意)
3. 客户端发 ACK → 服务端(确认收到)
为什么是三次:防止历史连接请求被服务端接受(网络延迟的老旧 SYN 包)4. TCP/IP 七层模型 / 四层模型
【七层模型】
应用层:HTTP、HTTPS、FTP、DNS、SMTP
表示层:数据格式转换、加密解密
会话层:会话管理
传输层:TCP、UDP
网络层:IP、ICMP、ARP
数据链路层:以太网、WiFi
物理层:网线、光纤【四层模型(实际使用)】
应用层:HTTP、FTP、DNS
传输层:TCP、UDP
网络层:IP、ICMP
网络接口层:以太网5. 手撕代码:最后一个单词的长度
python
def lengthOfLastWord(s):
# 从后往前找,跳过末尾空格
i = len(s) - 1
while i >= 0 and s[i] == ' ':
i -= 1
# 统计最后一个单词长度
length = 0
while i >= 0 and s[i] != ' ':
length += 1
i -= 1
return length6. 手撕代码:反转字符串中的单词
python
def reverseWords(s):
# 方法1:Python 简洁写法
return ' '.join(s.split()[::-1])
# 方法2:手动实现
words = []
word = ''
for c in s:
if c != ' ':
word += c
else:
if word:
words.append(word)
word = ''
if word:
words.append(word)
return ' '.join(words[::-1])7. 手撕代码:找出字符串中第一个只出现一次的字符
python
def firstUniqChar(s):
# 用字典统计每个字符出现次数
count = {}
for c in s:
count[c] = count.get(c, 0) + 1
# 找第一个次数为1的
for c in s:
if count[c] == 1:
return c
return -18. 手撕代码:合并两个有序数组
python
def merge(nums1, m, nums2, n):
p1, p2, p = m - 1, n - 1, m + n - 1
while p2 >= 0:
if p1 >= 0 and nums1[p1] > nums2[p2]:
nums1[p] = nums1[p1]
p1 -= 1
else:
nums1[p] = nums2[p2]
p2 -= 1
p -= 19. 黑盒测试和白盒测试的区别
黑盒测试:不关心代码内部实现,只看输入和输出。
从用户角度出发,验证功能是否符合需求。
方法:等价类划分、边界值分析、因果图、场景法
白盒测试:基于代码内部逻辑进行测试,如语句覆盖、分支覆盖、路径覆盖。
需要了解代码结构。
方法:语句覆盖、判定覆盖、条件覆盖、路径覆盖10. 如何设计测试用例?
【标准回答框架】
1. 需求分析:理解功能需求和非功能需求
2. 测试方法选择:
- 等价类划分:有效等价类、无效等价类
- 边界值分析:边界上、边界附近
- 场景法:正常流程、异常流程
3. 用例要素:用例编号、测试步骤、预期结果、优先级
4. 覆盖率:功能覆盖、场景覆盖、异常覆盖11. 如何测试一个计算器?
【功能测试】
- 基本运算:加减乘除、小数运算、负数运算
- 边界值:最大值、最小值、溢出
- 异常:除以零、非法输入(字母、符号)
【性能测试】
- 连续计算响应时间
- 大数字计算性能
【兼容性测试】
- 不同操作系统、不同分辨率
【用户体验】
- 界面布局、按钮大小、错误提示12. 进程和线程的区别
1. 定义:进程是资源分配的基本单位,线程是 CPU 调度的基本单位
2. 资源:进程有独立地址空间,线程共享进程资源
3. 通信:进程间通信需要 IPC(管道、消息队列、共享内存),线程间可直接读写共享变量
4. 开销:进程创建开销大,线程创建开销小13. 死锁是什么?怎么避免?
死锁:两个或多个进程互相等待对方释放资源,导致都无法继续执行。
产生条件:
1. 互斥条件
2. 请求与保持条件
3. 不剥夺条件
4. 循环等待条件
避免方法:
1. 破坏循环等待:按顺序申请资源
2. 设置超时时间
3. 死锁检测和恢复二、二面(45~60 分钟 · 项目深挖 + 技术深度 + 手撕代码)
二面关键词:项目经得起追问、技术有深度、能解决实际问题
1. 项目深挖:你负责的模块是怎么测试的?
我负责的是 XX 模块:
1. 功能测试:先用 Xmind 梳理测试点,再设计测试用例
- 正常流程:XX → XX → XX
- 异常流程:XX 失败、XX 超时
2. 接口测试:用 Postman 验证接口返回,检查边界情况
3. 自动化测试:搭建 pytest 框架,数据驱动,覆盖主流程
4. 性能测试:用 Jmeter 压测关键接口,关注 QPS 和响应时间2. 实习中遇到的困难是什么?怎么解决的?
【STAR 法则】
困难:接口之间有强依赖,A 接口返回的数据是 B 接口的入参,
线下环境数据不稳定,导致自动化用例经常失败。
解决:
1. 用 mock 拦截依赖接口,返回预设数据
2. 搭建独立的测试数据准备接口
结果:用例稳定性从 60% 提升到 95%。3. 如何设计一个定时任务调度平台?
核心模块:
1. 任务管理:任务的增删改查、定时规则配置
2. 调度引擎:根据定时规则触发任务执行
3. 执行器:实际执行任务的模块
4. 结果收集:任务执行结果、日志、告警
关键问题:
1. 任务还没执行完,又到调度时间怎么办?
- 方案1:跳过本次执行
- 方案2:排队等待
2. 如何保证任务不丢失?
- 持久化存储任务信息
3. 如何处理任务失败?
- 重试机制 + 告警通知4. 如何保证测试用例的全面性?
1. 需求分析:理解所有功能点和业务流程
2. 测试方法:
- 等价类划分:覆盖有效和无效输入
- 边界值分析:测试边界情况
- 场景法:覆盖正常流程和异常流程
- 错误猜测法:根据经验猜测可能的缺陷
3. 评审:和开发、产品一起评审测试用例
4. 覆盖率统计:功能覆盖、代码覆盖、场景覆盖5. 为什么选择测试而不是开发?
1. 我对质量保障工作有兴趣,喜欢从用户角度思考问题
2. 测试需要既懂技术又懂业务,能更全面地理解产品
3. 我细心、耐心,适合做质量保障工作
4. 测试开发的岗位能兼顾测试和开发能力,符合我的职业规划6. 手撕代码:无重复字符的最长子串
python
def lengthOfLongestSubstring(s):
char_set = set()
left = 0
max_len = 0
for right in range(len(s)):
while s[right] in char_set:
char_set.remove(s[left])
left += 1
char_set.add(s[right])
max_len = max(max_len, right - left + 1)
return max_len7. 手撕代码:最长回文子串
python
def longestPalindrome(s):
def expand(left, right):
while left >= 0 and right < len(s) and s[left] == s[right]:
left -= 1
right += 1
return s[left + 1:right]
result = ''
for i in range(len(s)):
# 单中心
s1 = expand(i, i)
# 双中心
s2 = expand(i, i + 1)
result = max(result, s1, s2, key=len)
return result8. Python 的特点是什么?和 C/Java 的区别?
Python 特点:
1. 语法简洁,易于学习
2. 动态类型,不需要声明变量类型
3. 解释型语言,跨平台
4. 丰富的第三方库
和 C 的区别:
- Python 解释型,C 编译型
- Python 动态类型,C 静态类型
- Python 有垃圾回收,C 需要手动管理内存
和 Java 的区别:
- Python 语法更简洁
- Python 动态类型,Java 静态类型
- Python 运行速度较慢,Java 较快三、三面(30~45 分钟 · 主管面 / 综合面)
三面关键词:稳定性、动机、抗压能力、价值观匹配
1. 对华为的了解?为什么选择华为?
华为是全球领先的 ICT 基础设施和智能终端提供商,
在通信、云计算、智能终端等领域都有很强的技术实力。
我选择华为的原因:
1. 华为的技术氛围好,能学到很多东西
2. 华为的企业文化强调奋斗和成长,和我的价值观匹配
3. 华为的平台大,发展空间广阔2. 对加班怎么看?
我认为加班要分情况:
1. 项目紧急时,加班是必要的,我可以接受
2. 但长期来看,应该通过提高效率来减少不必要的加班
3. 我会尽量在工作时间内高效完成任务3. 如何排解压力?
1. 运动:跑步、健身,释放压力
2. 和朋友聊天,倾诉一下
3. 看书、听音乐,放松心情
4. 把大任务拆分成小任务,逐个解决,减少焦虑4. 你的优缺点是什么?
【优点】
我做事细心、有责任心。
比如做测试的时候,我会主动考虑边界情况和异常场景,
设计覆盖全面的测试用例。【缺点】
我有时候追求完美,会在细节上花较多时间。
但我现在会先用优先级排序,先完成核心功能,再优化细节。5. 职业规划是什么?
短期(1~2 年):
- 扎实掌握测试技术,能独立负责模块测试
- 学习自动化测试和性能测试
中期(3~5 年):
- 成为核心测试开发,能设计和优化测试方案
- 深入某一领域(如自动化测试平台)
长期:
- 测试架构师或测试团队负责人6. 和领导/同事意见不合怎么办?
1. 先沟通,了解对方的想法和理由
2. 用数据说话,列出各自的优缺点
3. 如果是技术问题,可以做个小实验验证
4. 如果是方向问题,尊重领导的决定,但保留自己的意见
5. 最终目标是团队目标达成,不是个人输赢7. 你有什么问题要问我?
1. 这个岗位主要负责什么业务?
2. 团队的技术栈是什么?
3. 新人进入后有什么培训?
4. 部门的业务发展方向是什么?四、华为高频手撕代码汇总
| 题目 | 难度 | 出现频率 |
|---|---|---|
| 最后一个单词的长度 | ★ | ⭐⭐⭐⭐⭐ |
| 反转字符串中的单词 | ★★ | ⭐⭐⭐⭐⭐ |
| 第一个只出现一次的字符 | ★★ | ⭐⭐⭐⭐ |
| 无重复字符的最长子串 | ★★★ | ⭐⭐⭐⭐ |
| 合并两个有序数组 | ★★ | ⭐⭐⭐ |
| 最长回文子串 | ★★★ | ⭐⭐⭐ |
| 翻转字符串 | ★ | ⭐⭐⭐ |
| 两数之和 | ★★ | ⭐⭐⭐ |
五、华为面试特点总结
华为一面:项目 + 基础 + 手撕代码
重点:项目要能讲清楚,基础要扎实,代码要能写
华为二面:项目深挖 + 技术深度 + 手撕代码
重点:项目经得起追问,技术有深度,能解决实际问题
华为三面:综合面(主管面)
重点:稳定性、动机、抗压能力、价值观匹配建议:华为面试很重项目,一定要把简历上的项目吃透,每一个细节都要能讲清楚。