软件测试价值25k的面试题及答案分享

一.基础题

1.测试用例你一般是怎么设计的,怎么可以提高覆盖率?

有没有形成自己的 一套方法论?

答:这些都是基础的理论题。

2.电梯、朋友圈、红包、登录功能是怎么测试的?用例设计

答:这些都是基础的用例设计题目,网上一大堆,建议面试前多准备几个,总结其中的规律。

3.假如让你独立负责一个大项目,你是如何开展测试的?

答:可以理解为如何保障产品质量,从需求分析理解、用例设计和评审、测试 bug 提交和跟踪、上线验证、项目复盘等等方面回答。

4.接口测试你是怎么做的?都发现了哪些问题,详细说下定位分析过程。

答:如截图:

遇到问题如截图:

5.测试过程中你遇到最难的一个技术问题是什么?如何解决的?

答:面试前重点准备一个类似的题目,比如开发了测试工具,提高效率,搭建自动化框架或平台,引入了测试覆盖率工具、代码检测工具等等

6.你们整个测试流程是怎样的?

答:大致分为以下几种测试需求分析阶段、测试计划阶段、测试设计阶段、测试执行阶段、测试评估阶段。

二.网络相关

http 和 https ,tcp 和 udp 协议区别,网络七层模型,

答:HTTPS 和 HTTP 的区别主要如下:

tcp 和 udp 协议区别:

网络七层模型:

2.tcp 为啥三次握手,为啥四次挥手,

答:因为当 Server 端收到 Client 端的 SYN 连接请求报文后,可以直接发送 SYN+ACK 报文。其中 ACK 报文是用来应答的,SYN 报文是用来同步的。但是关闭连接时,当 Server 端收到 FIN 报文时,很可能并不会立即关闭 SOCKET,所以只能先回复一个 ACK 报文,告诉 Client 端,“你发的 FIN 报文我收到了”。只有等到我 Server 端所有的报文都发送完了,我才能发送 FIN 报文,因此不能一起发送。故需要四步握手。

3.tcp 拥塞算法、滑动窗口、重传机制、粘包和拆包

答:滑动窗口协议(Sliding Window Protocol)、重传机制详情见

TCP 滑动窗口/快速重传机制Shawei的博客-CSDN 博客_tcp 快速重传机制 。

拆包 :TCP 直接将应用层数据包(可以认为就是一个数组)发给接收方,并且根据 TCP 协议,TCP 会将每个发送的数据包编号(序列号),发送完一个序列号后,接收端收到会回复该序列号,代表已经被接受,but 接收端有自己的 TCP 缓存区,它会将多个包积累在一起再进行处理,这样的结果是导致包与包之间 “无缝连接”,即所谓的” 粘包 “

粘包:针对此问题,就有了一些解决办法:哪每个包长度固定:这样接收端就可以每隔一定长度进行拆包,但缺点是浪费资源,加入头部信息:每个数据包前加入该数据包中数据的长度值,这样接收端从缓存中读取时,通过读该头部信息,知道了每个包的长度,这样就能拆包

4.一些抓包工具如 fidder、tcpdump 的使用,

答:网上都有现成的使用教程,可以选一两篇去操作下。

5.浏览器输入百度网址发生了什么?DNS 解析过程

答:这个问题比较宽泛,整个流程也比较长,涉及到网络 7 层模型、dns 解析、tcp/ip 协议簇,三次握手、负载均衡、集群架构、数据库,linux 系统状态、进程切换等等方面,看你自己对哪块比较熟悉,重点去说

6.说下 cookies,session 鉴权机制?为什么要引入这套机制?

答:引入原因:HTTP 是无状态的协议(对于事务处理没有记忆能力,每次客户端和服务端会话完成时,服务端不会保存任何会话信息):每个请求都是完全独立的,服务端无法确认当前访问者的身份信息,无法分辨上一次的请求发送者和这一次的发送者是不是同一个人。所以服务器与浏览器为了进行会话跟踪(知道是谁在访问我),就必须主动的去维护一个状态,这个状态用于告知服务端前后两个请求是否来自同一浏览器。而这个状态需要通过 cookie 或者 session 去实现。

三.数据库重中之重

简单

1、基本的增删改查语句;

答:insert、delete、update、select sql 编写。

2、多表联合查询、左右连接区别、子查询等;

答:网上都有教程,可以自行查找,在这里不做赘述。

3、聚合、分组、排序 sql 语句编写、having 和 where 区别

答:表数据

sql 编写:

SELECT

class 班级名称,

COUNT(*) 每个班级人数,

MAX(grade) 最高分,

MIN(grade) 最低分,

SUM(grade) 班级总分,

AVG(grade) 平均分

FROM

student

where age <20

GROUP BY

class

HAVING SUM(grade) >=34

ORDER BY

最高分 DESC

执行结果:

4、char 和 varchar 区别等

答:varchar;表示变长字符串,char;定长字符串。

5、三范式是什么?

答:第一范式 (确保每列保持原子性)、第二范式 (确保表中的每列都和主键相关)、第三范式 (确保每列都和主键列直接相关,而不是间接相关)

中级

1、说一下 sql 是怎么优化的?

答:show variables like ‘%quer%’; 查询慢查询日志相关的设置,找出慢查询的 sql ,用 explain 查询 sql 的执行计划,该加索引的加索引(要知道索引正确使用场景如下面试题),尽量少 连接查询、select *、避免类型转换,减少回表次数。

2、索引的概念、类型,优缺点分析、索引应用场景和索引失效场景;

答:索引是帮助 mysql 高效获取数据的数据结构

优点:

a)可以保证数据库表中每一行的数据的唯一性,

b)可以大大加快数据的检索效率,

c)加速表与表之间的连接,

d)在使用分组和排序子句进行数据检索时,同样可以显著减少查询中分组和排序的时间。

f)通过使用索引对数据进行排序,降低数据排序的成本,降低 cpu 的消耗,可以在时间查询的过程中,使用优化隐藏器,提高系统的性能。

缺点:

a) 创建索引和维护索引要耗费时间,这种时间随着数据量的增加而增加。

b) 索引会占据磁盘空间。

c) 以表中的数据进行增、删、改的时候,索引也要动态的维护,这就降低了整数的维护速度。

索引类型:

主键索引:索引列中的值是唯一的并且不允许有空值

普通索引:mysql 的基本索引类型,没有什么限制,允许有重复值和空值

唯一索引:索引列中的值是唯一的,但是允许有空值

还有其他索引 譬如全文索引、空间索引、前缀索引等不常见

4、mysql 几个存储引擎,innodb 和 MyISAM 区别

答:MySQL 有多种存储引,MyISAM、InnoDB、MERGE、MEMORY(HEAP) 等

InnoDB 和 MyISAM 区别:

1). InnoDB 支持事务,MyISAM 不支持事务。这是 MySQL 将默认存储引擎从 MyISAM 变成 InnoDB 的重要原因之一;

2). InnoDB 支持外键,而 MyISAM 不支持。对一个包含外键的 InnoDB 表转为 MYISAM 会失败;

3). InnoDB 是聚集索引,MyISAM 是非聚集索引。聚簇索引的文件存放在主键索引的叶子节点上,因此 InnoDB 必须要有主键,通过主键索引效率很高。但是辅助索引需要两次查询,先查询到主键,然后再通过主键查询到数据。因此,主键不应该过大,因为主键太大,其他索引也都会很大。而 MyISAM 是非聚集索引,数据文件是分离的,索引保存的是数据文件的指针(就是物理地址)。主键索引和辅助索引是独立的 。

注意:MyISAM 无论是主键还是非主键索引 ,data 存储的都是这条数据的物理地址(地址指针),innodb 主键索引的 data 就是这条数据,非主键索引的 data 是主键 id,

高级

1.索引底层机制,B+ 树特性,和其他数据结构(二叉树、红黑树)区别,

答:这个属于高级特性,后续公众号会重点输出数据库相关的知识和面试题

2.mysql 事务隔离级别、MVCC 是什么,

答:

MVCC ,Multi-Version Concurrency Control,多版本并发控制。MVCC 是一种并发控制的方法,一般在数据库管理系统中,实现对数据库的并发访问;在编程语言中实现事务内存

3.数据库锁类型,什么是数据库死锁,如何避免?

答:从数据库系统角度分为三种:排他锁、共享锁、更新锁。
从程序员角度分为两种:一种是悲观锁,一种乐观锁,等等

避免死锁方式:

结构化数据建模:基于范式原则初级建模
热点业务排解:挖出核心业务模型
应用拆解:降低时间片复杂度
提升性能:优化代码,集群、超时机制、回滚机制

4.主从底层数据同步机制、binglog、redolog、undolog 区别,

答:redo log:确保事务的持久性。防止在发生故障的时间点,尚有脏页未写入磁盘,在重启 mysql 服务的时候,根据 redo log 进行重做,从而达到事务的持久性这一特性。undo log:回滚日志保存了事务发生之前的数据的一个版本,可以用于回滚,同时可以提供多版本并发控制下的读(MVCC),也即非锁定读 binlog:二进制日志作用:用于复制,在主从复制中,从库利用主库上的 binlog 进行重播,实现主从同步。 用于数据库的基于时间点的还原。

四.开发语言,java 这块后续我会陆续推出一些 java 基础专栏,

面对对象三大特性、通俗解释,八大基本数据类型及其大小,循环、判断等语法

2.java 集合 如 arraylist、linkedlist、hashmap 等特性和底层实现原理 ;

3.java 锁类型,线程安全、线程池、juc 并发组件、反射等;

4.Jvm 内存结构,不同版本区别,gc 方法,调优,命令等等;

5.springboot、spring、mybatis 等框架的使用和常见面试题

6.单例、工厂、适配器等设计模式

7.zk、dubbo、springcloud 等相关 java 框架是否接触过?底层原理

8.分布式事务、分布式锁、幂等性等常见分布式问题是否了解?解决方式?

五.自动化,这块是面试官重点去考察的地方,

1.自己开发的自动化框架吗?为啥要开发这么一个框架呢?市面上很多自动化平台为什么不用,却要自己搭建?想过投入产出比吗?

答:自己搭建,主要是项目每次上线之前,回归重复的功能占用大量迭代时间,通过自动化框架可以节约时间,市面上的测试平台得自己部署和维护,出现问题需要自己去查底层代码解决,学习门槛较高,并且很多功能几乎用不到,自己搭建的自动化框架,开发相对简单,上手特别快,特别符合当前的项目需要。

2.说下接口自动化分别用了哪些框架,怎么实现的,你主要负责哪些部分?

答:我的主要是 springboot、testng、mysql、okhttpcilent、mq 那套东西。

3.你们这套框架最难的技术点有哪些?搭建框架过程中遇到哪些问题,怎么解决的?

答:难点技术有很多,譬如失败用例重跑机制,异步接口校验返回结果,场景测试中前置依赖接口怎么处理,涉及到 mq 怎么操作等等

4.流程场景怎么设计用例的?假如流程比较长,你怎么保障前面流程成功?

答:可以引入失败用例重跑机制 testng 有接口实现、简单接口,我们可以直接在数据库造数据。

5.数据放哪的?数据驱动怎么做的?关键字驱动怎么做的?

答:看情况,如果是灵活的数据,建议放在 excel 里面,做数据驱动,如果是账号、密码这种修改很少的数据,可以考虑放在配置文件中,如果是那种一成不变的可以写死(尽量别这么做)。

关键字驱动:测试用例的步骤 (元素) 和用例分离。关键字驱动表示把项目中的一些逻辑封装成关键字 (一个函数名)。例如 login、 register、order 进行设置变量(Set Viriable),调用不同的关键字组合实现不同的业务逻辑,从而驱动测试用例执行。

数据驱动:数据和用例步骤分离,通过 excel、yaml 等文件保存数据。数据驱动是把测试用例里面的数据提取到 excel 或者 yam 文件里面,然后通过改变 excel 或 yaml 中的数据驱动测试用例执行。

6.这套框架覆盖了开发多少业务代码,怎么统计出来的?多少用例,跑一次多长时间?

答:主要覆盖所负责业务的主要流程和一些常见的异常流程,通过 jacoco 覆盖率统计工具统计出来的,用例大概有 100+ 个,涉及到 30 多个接口,跑一次将近 2 分钟左右。

7.开发修改接口和你的自动化代码怎么同步修改,以保证自动化测试代码不报错?

答:依靠规范、或者技术手段。

六.性能测试重中之重,内容包罗万象,涉及到性能测试方式、策略、监控、分析调优等方面

1.你们公司性能测试怎么做的,说一下流程?

答:基本流程就是产研测三方开会、一起定下 tps 基准值,测试设计性能测试计划和测试用例、用例评审、进行压测、观测数据找出性能瓶颈,调优持续压测等等

2.TPS 上不去什么原因,怎么排查?响应时间太长怎么分析?

答:通过各种监控技术如 prometheus 、skywalking 等 观测系统瓶颈,基本上分为一下几个方面 带宽、连接池、硬件、垃圾回收机制、数据库等方面去分析。

3.线程阻塞和死锁问题怎么去定位分析,有什么现象?

答:在发生死锁之后,程序卡住没有任何反应,但程序仍在运行,因此需要借助一些命令来排查,用 JDK 自带的命令 jstack -pid 去查看线程信息,jstack 很快就帮我们找到了死锁的位置(在实际运行中,往往 dump 一次信息,还不足以确认问题,建议多 dump 几次,如果每次 dump 都指向同一个问题,那么就可以确定是这个问题导致的线程死锁)

4.内存泄露和内存溢出有什么区别?分别会有什么现象?怎么定位分析?

答:内存溢出(Out Of Memory):就是申请内存时,JVM 没有足够的内存空间。通俗说法就是去蹲坑发现坑位满了。

内存泄露(Memory Leak):就是申请了内存,但是没有释放,导致内存空间浪费,通俗点就是占着那啥不那啥。

5.数据库是怎么监控的,sql 慢查询怎么监控分析?

答:见数据库 sql 优化面试题。

6.如何进行全链路监控分析,定位性能瓶颈?

答:自行百度

7.压测线上环境都会遇到什么问题,数据隔离怎么做的?如何减小对生产影响?

答:脏数据影响真实的业务响应和数据,可以考虑落入影子库,mock 对象、或者数据带有明显标识等手段。

8.测试过程中都发现了哪些性能问题,怎么定位分析的?优化方案是什么?

答:每个人准备的问题不一致,我的就是遇到了 jvm fullgc 频繁导致接口响应时间慢,通过 java 一些命令定位分析发现 jvm 配置不合理。

9.项目架构是怎么样的?简单描述或者画图

答:微服务架构,两个入口、公众号和 web 端,请求先经过 Nginx 做负载均衡、流量均匀的打到项目的 api 网关,后面就是项目的微服务架构(采购单、供应商、库存、仓库物流等等)如果对后端采用的架构熟悉,可以顺带提一下,比如用了 springcloud 全家桶、eureka 做服务注册和发现,mq 实现异步解耦,redis 缓存有效减少数据库交互等等。

七.中间件相关问题,简历如果说了,面试官一般都会顺带问下

1.正向代理和反向代理区别?Nginx 了解吗?负载均衡算法

答:Nginx 是一款自由的、开源的、高性能的 HTTP 服务器和反向代理服务器;同时也是一个 IMAP、POP3、SMTP 代理服务器;Nginx 可以作为一个 HTTP 服务器进行网站的发布处理,另外 Nginx 可以作为反向代理进行负载均衡的实现。

正向代理:服务器位于客户端和服务器之间,为了从服务器获取数据,客户端要向代理服务器发送一个请求,并指定目标服务器,代理服务器将目标服务器返回的数据转交给客户端。这里客户端需要要进行一些正向代理的设置的。举例:***,正向代理中被代理的是客户端的请求

反向代理:客户端对代理是无感知的,客户端不需要任何配置就可以访问,客户端将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器获取数据后,在返回给客户端,此时反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器地址,隐藏了真实服务器 IP 地址。

负载均衡算***询、随机、最少连接、hash、加权等,说一下具体使用场景

2.mq 是如何测试的?你项目中怎么应用的?mq 的优缺点?为什么使用 mq?怎么保障 mq 消息的有序性、幂等性、可靠性(不丢失)

答:消息中间件 具备解耦、削峰、异步的作用,具体可自行百度

3.为什么使用 redis,redis 五种数据类型,如何测试 redis 的,项目中如何应用的?

答:基于内存查询效率高,高并发情况下保护数据库,string、hash、list、set、zset 五中数据类型,项目中主要用于请求 token 保存和失效,防重分布式锁,冷数据(改动量小)保存,幂等性校验等等。

4.都发现过哪些缓存方面的 bug,怎么定位的?

答:缓存和数据库数据不一致,缓存穿透,击穿,雪崩等

5.redis 穿透,击穿,雪崩机制,被问了好几次…

答:自行百度

八.算法,一些大厂必问,百度、阿里、字节、腾讯等

1.常见的排序算法,冒泡,快排等

2.数组,字符串的相关算法操作比如找一个字符串中重复最长的字符串、两数之和等

3.简单的数据结构栈,队列,链表的基本的操作等

算法这块没有捷径,需要日积月累,一些常见的算法题,尽量在理解的基础上去默写并记熟,有些网站牛客网、LeetCode 刷刷题加强一下。

九.其他

假如测试任务重,时间紧,但是人手不够你怎么处理?

答:向上反馈真实情况、加派人手、争取更多时间或削减不必要需求,测试中要充分理解需求,设计用例加强评审,需求排优先级等等

2.假如开发不认可你提出 bug,怎么办?

答:自己重新复现一下提出的 bug,如果确实是 bug,可以和开发当面沟通清楚,沟通无效则向上反馈。

3.线上有碰到过漏测的 bug 吗?怎么处理的

答:碰到过,可以说一个不大不小的漏测案例(前提是别人的 bug 才导致的),重点说下防止下次漏测措施。

4.职业规划,离职原因。

答:这个开发性题目,离职原因尽量别说上家公司坏话。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值