对于新人小白来说,目前想转行软件测试,已经非常卷了。前几年,我都是鼓励大家尽可能去自学的,不需要花钱报班。
那时候分享了很多关于自学的学习方法跟文章,大家可以去翻翻。
然而2024年的今天,对于一个外行小白,想靠自学转行进入软件测试这个行业,基本难如登天。
主要难点就在于不清楚学习路线,容易走冤枉路,除此之外,也很难搞定简历上的项目经验细节,以及背调之类的。
下面分享一个我这边带的转行学生面试面经,看一下当前行情多卷。坐标重庆,是一个文科妹纸,之前做网络推广,感觉没前途。
下面是面经分享全纪录~~
1、自我介绍
2、你们一般的节假日前做性能吗?一般压多少并发量?
3、你们的自动化平台是自己搭建的吗?你参与了吗?
4、公司的测试流程?
5、你们只监控接口吗?(我说了测试右移监控接口后)
6、上线流程是什么样的?
7、产品上线后,会做上线验证吗?
8、上线前会针对线上环境的接口做验证吗?
9、测试过程中怎么把控测试质量?
10、提了bug开发解决得比较慢怎么办?
11、测试左移过程中测试会做什么?
12、测试过程中发现有的功能不符合用户的需求怎么解决的?
13、设计测试用例考虑哪些方面?会写性能测试方面的用例吗?
14、如何定位前后端bug?
15、接口返回的状态码有哪些?
16、多久分配一次需求?需求分下来后怎么评估这些需求的工作量?测试时间怎么分配?
17、上线前一般是几轮测试?产品验收
18、发现问题后和开发怎么沟通?
19、如何针对接口设计测试用例?
20、怎么过滤日志的关键字?
21、linux用得多吗?
22、性能测试关注哪些指标?
23、怎么用监控命令查看内存的使用率?
24、自动化负责的哪两个模块?
25、讲一下自动化测试的流程?
26、怎么造数据?
27、自动化框架接口关联怎么做的?
28、讲一下迭代器和生成器
29、可变对象和不可变对象在深浅拷贝中会发生什么变化?
在深浅拷贝中,可变对象和不可变对象的变化如下:
可变对象的浅拷贝:
如果原始对象是可变的,如列表,浅拷贝会创建一个新的列表对象,但它会引用原始列表中的相同元素(或其他可变对象)。这意味着如果你修改了原始列表中的元素,这些改变也会出现在浅拷贝的列表中,因为它们引用的是同一个对象。
可变对象的深拷贝:
深拷贝会创建一个新的列表对象,并递归地复制原始列表中的所有元素。这意味着如果你修改了原始列表中的元素,这些改变不会影响深拷贝的列表,因为它们包含的是独立的对象副本。
不可变对象的浅拷贝和深拷贝:
对于不可变对象,如字符串或元组,浅拷贝和深拷贝的效果是相同的。这是因为不可变对象的状态不能被改变,所以无论进行浅拷贝还是深拷贝,得到的都是原始对象的一个独立副本,修改原始对象不会影响拷贝的对象。
30、在执行多线程编程的时候,线程共享变量的时候,多线程的数据同步怎么处理?
在多线程编程中,线程共享变量是一个常见的情况,但这也可能导致数据不一致和竞态条件等问题。为了确保线程安全和数据的一致性,需要对线程进行适当的同步。以下是一些常用的线程同步机制和技术:
互斥锁(Mutex):互斥锁是一种同步原语,用于保护共享资源的访问,确保同一时间只有一个线程可以访问资源。当一个线程获取了互斥锁,其他线程必须等待直到锁被释放。互斥锁可以防止多个线程同时修改共享变量,从而避免竞态条件。
读写锁(Read-Write Lock):读写锁允许多个读操作同时进行,但写操作是互斥的。这意味着当没有线程进行写操作时,多个线程可以同时读取共享资源,但如果有线程要写入,所有读写操作都必须等待。这种方式在读操作远多于写操作的场景中提高性能。
信号量(Semaphore):信号量是一种计数器,用于控制多个线程对共享资源的访问。信号量可以用于限制同时访问资源的线程数量,或者用于线程间的协调和通知。
条件变量(Condition Variable):条件变量与互斥锁结合使用,允许线程在特定条件下等待或通知其他线程。这在需要基于某些条件来同步线程时非常有用,例如,当一个线程必须等待另一个线程完成某个任务。
31、python中的反射知道吗?
我们来用大白话解释一下什么是反射。写一个程序,这个程序可以像镜子一样反映出它自己内部的各种信息,比如有哪些函数、变量、类等等。而且,它不仅能“看”到这些信息,还能在运行的时候创建新的函数或类,甚至修改现有的代码。这就是反射的基本概念。
在 Python 中,我们可以通过以下几个方面来实现反射:
类型检查: Python 有内置的 type() 函数,可以用来检查任何对象的类型。比如 type(some_object) 会告诉你 some_object 是什么类型的对象。
属性检查:使用内置的 dir() 函数,可以列出一个对象的所有属性和方法。例如 dir(some_object) 会返回一个包含 some_object 的所有属性和方法名称的列表。
动态创建对象: Python 允许你在运行时动态创建类和函数。你可以使用 type() 函数来创建新的类,或者使用 def 关键字来定义新的函数。
修改属性和方法:一旦你知道了对象的属性名称,就可以通过简单的赋值操作来修改它们。同样,你也可以给对象添加新的方法。例如,some_object.new_attribute = value 会给 some_object 添加一个新的属性。
使用 getattr() 和 setattr():这两个内置函数允许你获取和设置对象的属性值。getattr(some_object, 'attribute_name') 可以获取属性值,而 setattr(some_object, 'attribute_name', value) 可以设置属性值。
32、什么是存储过程?
33、什么是索引?我说索引相当于书的目录,他问你知道这个目录是用什么结构存储的吗?
34、数据库会用到哪些?
35、讲一下事务,怎么测事务?
数据库事务是一系列操作的集合,这些操作要么全部执行,要么全部不执行,以此来确保数据库从一个一致性状态转换到另一个一致性状态。事务具有四个基本特性,通常被称为 ACID 特性:
原子性(Atomicity):事务中的所有操作要么全部完成,要么全部不完成;如果任何一个操作失败,整个事务都会回滚到事务开始之前的状态。
一致性(Consistency):事务必须确保数据库从一个一致性状态转换到另一个一致性状态。
隔离性(Isolation):并发执行的事务彼此隔离,一个事务的执行不应该影响其他事务。
持久性(Durability):一旦事务完成,其所做的更改就会永久保存在数据库中,即使系统发生故障也不会丢失。
测试事务通常涉及以下几个方面:
测试原子性:
验证事务中的所有操作是否能够作为一个不可分割的整体一起执行,或者在遇到错误时能够完全回滚。
创建一个事务,执行一系列操作,然后故意引发错误,检查事务是否能够回滚到初始状态。
测试一致性:
确保事务执行前后数据库保持一致性状态。
通过检查数据的预期值和实际值是否相符来进行。
执行一系列事务,并在事务执行前后对比数据库的状态,确保数据的完整性和正确性。
测试隔离性:
并发执行多个事务,并验证它们是否相互影响。
通常使用标准测试场景,如丢失更新、不可重复读和幻读,来检验隔离级别的正确实现。
执行多个事务,同时对同一数据进行操作,确保每个事务都能看到一致的数据视图。
测试持久性:
验证事务完成后,其更改是否被永久保存。
可以通过重启数据库系统并检查数据是否仍然存在来进行测试。
事务的测试可以通过编写特定的测试用例和脚本来执行,也可以使用现成的数据库测试工具来帮助完成。在测试过程中,应该模拟各种可能的场景,包括正常操作和异常情况,以确保事务的正确性和可靠性。
36、有没有遇到慢查询sql的问题?怎么测?
Mysql自带的慢查询工具mysqldumpslow可以分析慢查询日志。
主要包括
Sql出现次数
执行最长时间
累计耗费总时间
等待锁的时间
扫描总行数
一般sql或者数据库有问题都可以看到数据库占的cpu最高,从而去分析数据库方面问题主要就是sql
这条语句是显示耗费时间最长的50个sql
这个时候用explain去分析这条语句,看type类型去判断有没有加索引。
看type值,all表示全表扫描,没加索引,ref表示有索引
其它就是优化sql之类的
37、测试环境、版本部署谁做?会不会搭建测试环境?
38、你有什么问我的?
39、离职原因?
40、怎么看待加班?
最后,小编写了一本软件测试面试宝典,现在免费开放pdf给大家,有需要的以及需要本篇面经详细分析讲解视频答案的可以自行获取!也欢迎大家群里探讨交流跳槽找工作面试经验~