米哈游 虾皮 网易
1.三分钟自我介绍 2.对游戏测试的理解
概念(找出bug,追踪bug,解决维护,保证那一堆指标) 相比于传统软测,用户体验 游戏趣味更重要
3.游戏测试的方法有那些
4.黑盒白盒测试的方法和定义是
黑匣子 输入输出 功能
代码内部 代码逻辑、是否规范 路径覆盖法
5.游戏测试的流程是什么
需求评审-提取测试点,分析需求-测试文档,测试计划-后端写好接口前端调用-接口测试-提测(冒烟)-功能,兼容,安全,性能,压测,ui等-bug追踪-回归测试-系统测试-上线后的维护
7.场景题目:询问玩什么游戏?针对游戏讲解?选择对应的英雄进行游戏测试按理分析
8.说一说 TCP 和 UDP 的区别 9.说一说 TCP 三次握手四次挥手
10.讲一讲堆结构和栈结构,一般在什么时候去用这个结构?
概念 先进后出 push pop top
函数调用:栈用于存储函数的局部变量、参数和返回地址。示例:递归函数调用时,每次调用都会在栈中创建一个新的栈帧。
概念 动态分配的内存区域,数据存储没有固定的顺序
堆的操作主要包括:分配内存:例如 malloc(C)或 new(C++)。释放内存:例如 free(C)或 delete(C++)。
堆和栈的区别
内存管理 | 自动分配和释放 | 手动分配和释放 |
内存大小 | 较小,固定 | 较大,动态 |
访问速度 | 快 | 慢 |
生命周期 | 与函数执行周期一致 | 由程序员控制 |
数据结构 | 后进先出(LIFO) | 无固定顺序 |
使用场景 | 函数调用、局部变量、表达式求值 | 动态内存分配、大对象存储、全局数据 |
11.讲一讲在 C ++中的内存分配?
静态内存分配 在编译时分配内存 栈 先进后出 无需手动释放 生命周期和作用域一样,超出作用域后自动释放
动态内存分配 在运行时分配内存 堆 生命周期由程序员控制需要手动释放 new delete
12.讲一讲你所了解的排序算法,手写快速排序算法。
快排 分区:patition 选择一个基准元素,将数组分为两部分,递归排序。
冒泡重复比较相邻元素,将较大元素交换到右侧。
分治将数组分为两部分,递归排序后合并。
选择每次选择最小元素放到已排序部分的末尾。
13.最后给了一个面试官自己提的场景题目,你要针对这个场景做出自己的测试按理
虾皮(Shopee)测试开发工程师 一面问题 自我介绍 简要介绍自己的教育背景、工作经历和测试开发的专业领域。 详细介绍一个测试项目及你的角色 描述一个重要的测试项目,解释你的具体职责、技术挑战和解决方案。 自动化测试工具和使用经验
postman 接口请求(url、请求方式、请求头、请求体)、响应(响应码、响应头、响应体)、认证(token)参数
selenium 性能测试 web模拟用户在浏览器上的鼠标操作 元素定位(ID、类名、标签)等待机制(显式、隐式)
appium 驱动移动设备 模拟用户的手势操作
jmeter 压力测试 模拟用户并发 参数化(测试数据驱动测试用例)结果分析和调优
介绍使用过的自动化测试工具(如Selenium、Appium、JUnit),并分享一个具体的使用经验和测试效果。
jmeter
(1)测试目标 WF多用户并发下的可靠性、稳定性 错误处理机制
(2)测试计划 测试环境 模拟用户行为 测试脚本
(3)搭建环境 线程数 启动时间 循环次数 http请求参数 监听器
(4)运行 监听器去实时查看指标、资源占比
(5)分析测试结果 聚合报告分析评估性能 资源占比、95 响应 吞吐量 错误率 找到性能瓶颈 优化 回归测试
测试用例设计的技巧 讨论如何进行测试用例设计,强调使用等价类划分、边界值分析和场景覆盖等技术。
SQL在测试数据验证中的应用(数据库的特性) 解释如何使用SQL进行数据验证,分享在项目中使用SQL查询进行数据完整性和一致性检查的经验。
数据完整性验证确保数据符合预定义的规则和约束(如主键、外键、唯一性、非空等)。
主键约束检查
查询数据库主键列,确保主键值唯一且非空,如
SELECT COUNT(*) FROM employees WHERE employee_id IS NULL;
检查员工编号是否为空
外键约束检查
检查外键的值是否在被引用表中存在对应有效记录,如
SELECT * FROM orders WHERE customer_id NOT IN (SELECT customer_id FROM customers);
查找订单表中不存在于客户表的客户ID
检查非空字段
SELECT *
FROM table_name
WHERE column_name IS NULL;
数据准确性验证确保数据值与预期结果一致。
数据插入验证
插入数据后,通过查询验证数据是否成功插入及是否正确,如
SELECT * FROM users WHERE user_id = [新插入的用户ID];
查看新记录
数据更新验证
执行更新语句后,查询更新后的记录,如
SELECT email FROM users WHERE user_id = [用户ID];
检查邮箱地址是否更新正确
数据删除验证
删除数据后,通过查询确认数据是否被正确删除,如
SELECT * FROM orders WHERE order_id = [删除的订单ID];
检查订单记录是否存在
数据一致性验证 确保数据在不同表或系统中保持一致。
事务一致性验证
在多表事务操作中,通过查询检查事务执行前后数据的一致性,如转账事务中检查两个账户余额之和是否与事务前相同
跨表数据一致性验证
对多个相关联的表,通过联合查询等操作检查数据是否保持一致,如学生成绩管理系统中检查学生表、课程表和成绩表的数据一致性
编写测试脚本验证API响应数据 描述编写测试脚本验证API响应数据的步骤,强调异常处理和边界条件。
python结合测试框架pytest、request 接口文档
测试脚本说明:
1:测试用例 expected_data (参数化pytest.mark.parametrize) 用于验证返回数据是否和期待数据一致
2:发送http 的get请求
3:验证响应状态码/响应体什么的断言
扩展:
1:异常测试:验证API在无效输入时的响应
2:性能测试:验证API响应时间
定位和解决复杂bug的经验 分享一个复杂bug的定位和解决过程,强调使用日志分析、调试工具和根因分析(RCA)技术。
(1)定义问题
慢SQL
(2)收集数据
性能指标、资源占用、日志、状态码
(3)分析可能原因
网络延迟、资源不足、查询语句低效、缓存击穿
(4)验证根本原因
实验每个可能原因,找到根本原因
(5)指定解决方案
(6)实时和优化监控
优化 回归测试
持续集成(CI)工具的使用 讨论对Jenkins等CI工具的理解,分享如何配置pipeline,自动化构建、测试和部署流程。
开发人员频繁地将代码集成到共享仓库中,并通过自动化构建和测试来验证代码的正确性。
Jenkins 的核心功能
- 自动化构建:自动编译代码、打包应用程序。
- 自动化测试:运行单元测试、集成测试等,确保代码质量。
- 自动化部署:将构建好的应用程序部署到测试环境或生产环境。
- 插件扩展:通过丰富的插件支持各种工具和技术栈。
- 可视化监控:提供构建历史、测试报告和日志,方便问题排查。
自动化构建、测试和部署流程
(1) 自动化构建
- 使用构建工具(如 Maven、Gradle、npm)编译代码并生成可部署的包。
(2) 自动化测试
- 运行单元测试、集成测试等,确保代码质量。
(3) 自动化部署
- 将构建好的应用程序部署到测试环境或生产环境。
敏捷开发模式下的测试策略 解释在敏捷开发模式下,如何通过早期介入、迭代测试和持续反馈来确保软件质量。 Web应用和移动应用测试经验 介绍Web应用测试(使用Selenium)和移动应用测试(使用Appium)的经验,讨论各自的挑战和解决方案。 性能测试的经验和优化方法 分享使用JMeter进行性能测试的经验,讨论如何进行性能瓶颈分析和优化。 对虾皮产品或技术的兴趣 表达对虾皮具体产品或技术(如推荐算法、电商平台)的兴趣,并解释原因。 面试总结
网易雷火游戏测试开发面经
a面(50min)
1.自我介绍
2.项目随便问问
3.交换机和路由器区别,路由器如何发送数据包
工作层次 | 数据链路层(Layer 2) | 网络层(Layer 3) |
主要功能 | 在局域网(LAN)内转发数据帧 | 在不同网络之间转发数据包 |
寻址方式 | 使用 MAC 地址 | 使用 IP 地址 |
广播域 | 默认情况下,所有端口在同一个广播域 | 每个端口在不同的广播域 |
网络范围 | 适用于局域网(LAN) | 适用于广域网(WAN)或连接多个网络 |
速度 | 高速转发,延迟低 | 转发速度较慢,延迟较高 |
用途 | 连接同一网络内的设备(如电脑、打印机) | 连接不同网络(如家庭网络和互联网) |
- 路由器发送数据包的过程:接收数据包 → 检查目标 IP → 查找路由表 → 确定路径 → 转发数据包 → 更新 TTL → 发送数据包。
4.喜欢玩的游戏(当然是原神了)
5.给草神e技能设计测试用例
6.手写简单SQL
7.手撕代码(后序和中序构建二叉树)寄了
b面(50分钟)
1.自我介绍
2.项目随便问问
3.几个简单的Java八股
4.最近玩最多的游戏(原神)
5.对测开的理解
6.原神上线新地图,怎么测试?
7.手撕代码(重排链表)
- 自我介绍
- 介绍一个项目
- 问项目中慢SQL的衡量指标
查询执行时间 返回数据过多 全表扫描 索引使用 资源消耗 锁等待时间
- redis 数据过期、缓存击穿、大key
TTL(过期时间)
查询没打在redis,打在SQL 过期时间设置长 设置不同过期时间 热key永不过期
大key 某个key的value特别大 拆开大key,将value分散到多个key
- 项目中日志监控的报警等
慢SQL报警 自定义业务报警(恶意攻击)资源使用报警 错误日志报警(错误查询,故障)
- Java中的常用数据结构
- ArrayList和LinkedList的区别
- 算法题:原地删除已排序数组中的重复元素
思路:双指针 如果== fast++ 如果!= slow++ nums[slow]=nums[fast]