2024年最全软件测试面试题及答案,不给答案的面试题都是耍流氓,教你一种更清晰的软件测试架构

img
img

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

11.bug生命周期中的状态管理?

12.黑盒测试用例设计方法有哪些?

黑盒测试用例设计方法有等价类划分法,判定表驱动法,场景分析法,边界值分析法,因果图,正交实验法,错误猜测法。

13.软件测试流程

系统测试相关规范和标准的流程:熟悉产品/项目,需求评审,测试需求,测试计划,测试方案,测试用例,预测试,第一轮正式测试、第二轮回归测试、第三轮测试,测试报告,测试总结,测试指南。

14. 如果你提的BUG开发不认为是BUG怎么办?

参考答案:

(1)首先测试人员要确保这确实是个bug(如果是误测,那只能测试人员自己背锅了);

(2)在测试环境将BUG复现出来,保存好截图、相关测试数据,发给开发人员,或直接给开发人员演示一遍;

(3)如果开发人员还认为不是BUG,或者是由于技术问题很难修改的BUG,可以叫上产品经理、开发负责人,一起讨论一下;

(4)对于等级比较低的建议性BUG,可以先记录到BUG管理系统,暂时不用说服开发去修改,后续再进行跟进。

15. 你对测试最大的兴趣在哪里?为什么?

答:我对未知的事物充满好奇心和挑战性。

我觉得在找到一个bug会让我兴奋,能够完善一个项目,让项目不出问题也是我很开心的一个地方。

解析:多从性格入手,可以自由的增加自己的看法,多往好的方向去说。

16. 开发说这个不是bug的时候该怎么解决?

答:首先要把自己检验出来的证据提交给开发工程师,和开发工程师积极沟通,遇到不能复现的bug,就要自己在去利用抓包、截图等方式去存证。如果和开发工程师沟通无果后,要让产品经理来确定是否属于bug。

解析:

和开发沟通

留存好bug的理由

如果无法解决,很多事情去找产品经理去解决

17. 从什么时候介入测试最好?

答:从项目需求阶段就开始介入最好,当我们介入测试越早,那么遇到的问题越少,我们在需求阶段就开始编写计划,方案,然后根据计划,方案进行测试用例编写,越能及时找出bug。

解析:越早越好,并编写相对应的文档。

18. 说下你测试之后的发展规划?

我要把功能测试这块熟悉好,然后不断的提升自己,能够独立负责一个项目的整体功能测试。

学会自动化测试,能够对项目进行自动化测试,节省回归测试的时间。

学会带领一个测试团队,分工,能够解决一个大型项目的测试工作…等等

解析:重点是思路要清晰,要清晰自己需要学什么,每一个阶段要去学什么东西。

19. 为什么进入测试行业?

答:因为测试行业是一个新兴行业,现在测试在互联网行业的比重越来越高,并且它需要很多样的技能,需要专心,耐心,与人沟通的技巧,也需要编程能力,相对开发要更加全面性。

解析:按自己的想法去打,前面说这个行业前景,后面就说自己的性格或者这个测试所需要的能力很多样。

20. 怎么才能够全面的测试到每一个点?

答:在项目伊始阶段,就要开始进行测试工作,测试计划一定要多方位,全面性的去考虑测试的策略,测试用例的编写等。

解析:及早介入项目测试,文档要编写的全面。

21. 你都用什么测试方法?

答:根据模块细分的功能不同,使用不同的测试方法,大方面是黑盒和白盒,然后我们黑盒测试的时候,设计测试用例根据不同的功能使用不同的设计方法(等价类划分、正交等),要保证测试的覆盖性。

解析:大部分测试都是在用黑盒测试,那么一般就要包括测试用例,而测试用例里几大设计方法要注意。

22. 测试用例通常包括哪些内容?

答:用例编号、用例名称、优先级、测试步骤、测试数据、预期结果、最终结果等。

解析:这个根据公司项目来定义,一般只需要有这几块就足够。

23. 如何定位前后端BUG?

答:可以通过以下几种方式

简单的去看请求响应定位

通过查询日志,如果日志无内容,说明前端问题,反之后端。

抓包工具去定位接口,查找数据。

解析:面试官问这个问题主要是看你怎么解决一个问题的思路,实际工作中很少会遇到这种情况,并且遇到也是很好去定位的。

24. 账号注册成功,但是登录的时候失败,怎么定位bug?

答: 调用登录的接口,看输入正确的账号是否成功,如果成功,登录接口无问题。那么注册接口,可能注册数据未存入数据库,或者注册接口验证等等都有问题。提交bug即可。

解析:简单的去测试一个功能点怎么定位bug,讲出自己的思路即可。

25. 软件质量是什么?

答:软件产品可以符合用户的需求,功能实现即可。

解析:满足用户的需求、功能是最重要的。

26. 测试用例的设计方法?

答:分为黑盒测试和白盒测试

黑盒测试:等价类划分法、边界值分析法、 因果图分析法、正交实验法、判定表法、场景法、功能图法、错误推测法

白盒测试:逻辑覆盖、循环覆盖、基本路径覆盖

解析:正常答出这些点即可。

27. 所有的bug都能够修复吗、都需要修复吗?

答:理论上所有的bug都是能够去进行修复的,但是有一些bug并不需要修复。有一些细微,并不影响程序运行,功能的bug可以不修复,先把大型bug,重要的bug去进行修复,然后最后再进行修复。

解析:重点是先修复大bug,再修复小bug。

28. 软件的完全测试有可能吗?

答:不可能的。测试工作主要是找出bug,但是不能保证没有bug,因为在测试过程中,完全测试需要的测试数据量特别大,人力物力是要消耗特别多的。所以我们会见到不同的软件有内测,公测,需要很多人来完成这个测试。

解析:做什么事都没有完美的,测试也是。

29. 测试过程中发现需求文档不完善怎么处理?

答:找产品经理及时沟通,要找到不完善的地方,然后准确的提交给产品经理,这样才有说服力。

解析:核心就是标注出不完善的地方。

30. 开发修复bug后,如何保证不影响其他功能?

答:追加场景法设计测试用例,对一些功能进行场景测试,业务测试。

解析:用多种方法进行追加测试。

31. 什么时候功能测试?

答:从测试介入一开始,就可以进行功能测试了,功能测试是软件测试的核心,保证在一段时间内运行所有的功能,并找出bug。

解析:功能测试是整个软件测试的核心,最早进行介入。

二. mysql数据库刷题库

最基本的要求是数据库记录的增删改查(insert、delete、update、select),表结构的增删改查(create、drop、alter、describe)、存储过程、触发器等。

1. 查询数学成绩与语文成绩高的同学

select s.student_id,student_name,

s.course_id,c.course_name,s.score

from student st

join score s

on st.id = s.student_id

join course_id = c.id

on s.course_id = c.id

where c.course_name =“数学”

2. 查询平均成绩大于80分的学生

select student_name from student

where id in

select student_id

from score

group by student_id

having avg(score) > 80

)

3. 学过体育课程的学生的年龄

select s.student_name,

datediff(curdate(),student_birthday)/365

from course c join grade g

on c.grade_id =g.id

join class cl on cl.grade_id =g.id

join student s on s.class_id =cl.id

where c. course_name = “体育”

4. 主键、外键作用,索引的优点与不足

主键

表中的唯一标示键

作用:保证实体的完整性,加快数据库的操作速度。

外键:

主键的从属,表示两个表之间的联系

作用:作用外键可以建立数据之间的关联,避免冗余

索引:

优点

通过创建唯一性的索引,保证表中数据唯一性

加速数据的检索速度

加快表与表之间的连接

使用优化隐藏器,提供系统性能

缺点:

创建索引需要时间,

索引需要占用物理空间

当对表中数据进行修改时,索引也要动态维护,减低数据的维护速度。

5. 表的创建语法

create table 表名(

属性名1 数据类型 [约束条件],

属性名2 数据类型 [约束条件],

属性名3 数据类型 [约束条件]

);

6. 删除表

drop table 表名;

7. 删除多个表

drop table 表名 1,表名 2 …

8. 修改表结构

8.1. 添加列(属性)

alter table 表名 add 属性名 数据类型;

8.2. 删除表(属性)

alter table 表名 drop 属性名;

8.3. 修改属性:数据类型

alter table 表名 modify 属性名 数据类型;

8.4. 修改字段名

alter table 表名 change 旧字段名 新字段名 数据类型;

3.3数据库增删改查

create alter drop desc主要针对表结构来说的

insert delete update select 主要针对表中的数据来进行操作的

9. DML-INSERT

9.1.insert 插入 值和列一一对应关系

格式 1:

insert into 表名(列名 1,列名 2 …) values(值 1,值 2 …);

格式 2:

insert into 表名 values(值 1,值 2 …);

格式 3:

insert into 表名 values(值 1,值 2,值 3 …),(值 1,值 2,值 3 …);

9.2.删除 delete

格式 1:代表清空表内的数据

delete from 表名;

格式 2:

有条件的进行删除:delete from 表名 where 条件;

9.3.DML–UPDATE 更新

格式 1

update table_name set 字段=值;

格式 2

update table_name set 字段=值,字段=值;

格式 3

update table_name set 字段=值,字段=值 where 条件;

9.4.select 查询

9.4.1.基本格式:

select 列名 from 表名;

select 列名 1,列名 2,列名 3 … form 表名;

9.4.2. 使用关键字 distinct 查询

在查询返回结果中删除重复行

语法:select distinct 列名称 from 表名称;

只针对一个列去重

9.4.3.使用别名查询

根据需要对数据显示的标题进行修改

格式:select 列名1 ‘别名’,列名2 ‘别名’,… from 表名;

AS 关键字连接列表达式和指定的别名

select 列名 as ‘别名’ from 表名;

9.4.4.条件查询

格式:select 列名 from 表名 where 条件;

如果在查询过程中,有多个条件,可以使用 and 或 or 进行连接

and 连接 —》同时满足; or 连接 ------只满足其一

9.4.5.范围搜索范围

在范围之内

select 列名 from where 列名 between 开始值 and 结束值

不在范围之内

select 列名 from 表名 where 列名 not between 开始值 and 结束值;

9.4.6.列表搜索条件

in: 只要匹配到括号里任意一个值就会有查询结果;

格式:select 列名 from 表名 where 列名 in (值 1,值 2,值 3 …)

not in:

格式: select 列名 from 表名 where 列名 not in(值 1,值 2,值 3);

10. 数据库表连接查询:子查询、内连接、外连接

10.1. 多表查询

去重

显式

select [distinct] A.列名,B.列名,C.列名,… from C

oin A on A.key=C.FKeyA

oin B on B.key=C.FKeyA and B.key=A.key

[GROUP BY 字段名]

隐式

select [distinct] A.列名,B.列名,C.列名,… from 表A,

表B,

表C

where 表A.字段1 = 表B.字段1 and

表B.字段2 = 表C.字段2 and …

[GROUP BY 表名.字段名]

排序

select A.列名,B.列名,C.列名,… from C

join A on A.key=C.FKeyA

join B on B.key=C.FKeyA and B.key=A.key

[ORDER BY 表名.字段名]

10.2. 子查询

  • 子查询只返回一个值
  • 子查询首选使用in做匹配
  • 子查询在其他查询结果的基础上提供了一种有效的方式来表示where字句的条件 。
  • 子查询的selec查询总是使用圆括号括起来。
  • 对于子查询来说,外查询条件要什么,子查询就查什么。 一一对应的关系。
  • 子查询结果分类:

①.标量子查询(子查询结果为单个值):

子查询返回的结果是单个值〔数字、字符串、日期等)

常用操作符:= <> > >= <= <

②.列子查询(子查询结果为一列):子查询返回的结果是一列

常用操作符:in、not in、any、some、all

select 列表名 from 表名 where 字段名 > all (子查询语句);

select 列表名 from 表名 where 字段名 > any (子查询语句);

③.行子查询(子查询结果为一行):

常用操作符:=、<>、 in、not in

select 字段名,… from 表名A where (字段名1,字段名2,…) = (select 字段名1值,字段名2值,… from 表名B where 条件)

④.表子查询(子查询结果为多行多列):in

select 字段名,… from 表名A where (字段名1,字段名2,…) in (select 字段名1值,字段名2值,… from 表名B where 条件)

10.3. 内连接:只有匹配到的情况下才会返回结果值

格式一(隐式):

from 表名1.列名1,表名1.列名2,表名2.列名1,表名2.列名2…

form 表名1,表名2

where 表名1.列=表名2.列; //列为相同的列

格式二(显式):

select 表名1.列名1,表名1.列名2,表名2.列名1,表名2.列名2…

from 表名1 inner join 表名2

on 表名1.列=表名2.列

10.4. 外连接

外部连接会返回from字句中提到的至少一个表或视图中的所有行

左连接:显示左边所有行。如果左表的某行在右表中没有找到匹配的行,则结果集中的右表相对应位置为null。

select 表名1.列名1,表名1.列名2,表名2.列名1,表名2.列名2

from 表名1 left outer join 表名2

on 表名1.列=表名2.列; //列为大家共有的列

右连接:显示右边所有行

right outer join

select 表名1.列名1,表名1.列名2,表名2.列名1,表名2.列名2

from 表名1 right outer join 表名2

on 表名1.列=表名2.列;

区分是左连接还是右连接:左连接以坐标为参考,左表没有则返回null,右连接以右表为参考,右表没有则返回null

10.4.5.联合查询

把多次查询的结果合并起来,形成一个新的查询结果集

对于联合查询的多张表的列数必须保持一致,字段类型也需要保持一致。

union all会将全部的数据直接合并在一起,union 会对合并之后的数据去重。

select 字段名 from 表A …

UNION [ALL]

select 字段名 from 表B …;

三. linux操作系统刷题篇

最基本的目标是熟悉常见的50个命令,比如find命令(-name、-type、-perm、-user、-group、-ctime、-atime)等,熟悉vi、熟悉linux搭建测试环境。比如LAMP环境搭建。

1. 进程与线程的理解

进程是操作系统资源分配的基本单位,而线程是任务调度和执行的基本单位

线程是进程的一部分

一个线程只能属于一个进程,而一个进程可以有多个线程,但至少有一个线程

2. 进程监控与内存监控

基础概念

指令: ps

作用: 主要是查看服务器的进程信息

选项含义:

-e:等价于 ‘-A’ ,表示列出全部的进程

-f:显示全部的列(显示全字段)

执行结果

列的含义说明:

UID: 该进程执行的用户id

PID: 进程id

PPID: 该进程的父级进程id,如果一个程序的父级进程找不到,该程序的进程被称为僵尸进程

C: cpu的占用率,形式是百分数(%)

STIME: 进程的启动时间

img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上软件测试知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

需要这份系统化的资料的朋友,可以戳这里获取

UNION [ALL]

select 字段名 from 表B …;

三. linux操作系统刷题篇

最基本的目标是熟悉常见的50个命令,比如find命令(-name、-type、-perm、-user、-group、-ctime、-atime)等,熟悉vi、熟悉linux搭建测试环境。比如LAMP环境搭建。

1. 进程与线程的理解

进程是操作系统资源分配的基本单位,而线程是任务调度和执行的基本单位

线程是进程的一部分

一个线程只能属于一个进程,而一个进程可以有多个线程,但至少有一个线程

2. 进程监控与内存监控

基础概念

指令: ps

作用: 主要是查看服务器的进程信息

选项含义:

-e:等价于 ‘-A’ ,表示列出全部的进程

-f:显示全部的列(显示全字段)

执行结果

列的含义说明:

UID: 该进程执行的用户id

PID: 进程id

PPID: 该进程的父级进程id,如果一个程序的父级进程找不到,该程序的进程被称为僵尸进程

C: cpu的占用率,形式是百分数(%)

STIME: 进程的启动时间

[外链图片转存中…(img-gkllLNS5-1715141535478)]
[外链图片转存中…(img-rn4QOEaH-1715141535479)]
[外链图片转存中…(img-922hxUiJ-1715141535479)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上软件测试知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

需要这份系统化的资料的朋友,可以戳这里获取

  • 11
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
很抱歉,我无法提供完整的2024的Java面试题答案,因为我无法预测未来的情况。但是,我可以给你提供一些常见的Java面试题答案,帮助你准备面试。 1. Java中的基本数据类型有哪些? 答案:Java中的基本数据类型包括byte、short、int、long、float、double、boolean和char。 2. Java中的包装类是什么? 答案:包装类是一种将基本数据类型封装成对象的类。例如,Integer是封装int类型的包装类。 3. Java中的String类是可变的吗? 答案:String类是不可变的,一旦创建就不能被修改。如果需要修改字符串,可以使用StringBuilder或StringBuffer类。 4. Java中的继承和接口有什么区别? 答案:继承是指一个类从另一个类获取属性和方法的过程,通过extends关键字实现。接口是一种规范,定义了一组方法的集合,通过implements关键字实现。 5. Java中的异常处理机制是什么? 答案:Java中的异常处理机制通过try-catch-finally语句块来实现。try块中包含可能抛出异常的代码,catch块用于捕获并处理异常,finally块用于执行无论是否发生异常都需要执行的代码。 6. Java中的多线程是如何实现的? 答案:Java中的多线程可以通过继承Thread类或实现Runnable接口来实现。另外,还可以使用线程池来管理和调度线程。 7. Java中的反射是什么? 答案:反射是指在运行时动态获取和操作类的信息。通过反射,可以获取类的属性、方法和构造函数等信息,并且可以在运行时调用这些方法。 8. Java中的泛型是什么? 答案:泛型是一种参数化类型的机制,可以在编译时检查类型的安全性。通过使用泛型,可以使代码加灵活和可重用。 9. Java中的集合框架有哪些? 答案:Java中的集合框架包括List、Set、Map等接口和它们的实现类。这些集合类提供了一组用于存储和操作对象的方法。 10. Java中的内存管理是如何工作的? 答案:Java中的内存管理由Java虚拟机(JVM)负责。JVM使用垃圾回收机制来自动管理内存,当对象不再被引用时,垃圾回收器会自动回收该对象所占用的内存空间。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值