大厂测试开发面试50题,你能答出几道?
共 7776字,需浏览 16分钟
·
2021-07-02 01:38
注意⚠️部分含答案解析
如无答案可复制题目自行百度
1、项目经验
2、介绍下什么是索引
在关系数据库中,索引是一种与表有关的数据库结构,它可以使对应于表的SQL语句执行得更快。索引的作用相当于图书的目录,可以根据目录中的页码快速找到所需的内容。
对于数据库来说,索引是一个必选项,但对于现在的各种大型数据库来说,索引可以大大提高数据库的性能,以至于它变成了数据库不可缺少的一部分。
Mysql常见索引有:主键索引、唯一索引、普通索引、全文索引、组合索引
PRIMARY KEY(主键索引) ALTER TABLE table_name
ADD PRIMARY KEY ( column
)
UNIQUE(唯一索引) ALTER TABLE table_name
ADD UNIQUE (column
)
INDEX(普通索引) ALTER TABLE table_name
ADD INDEX index_name ( column
)
FULLTEXT(全文索引) ALTER TABLE table_name
ADD FULLTEXT ( column
)
组合索引 ALTER TABLE table_name
ADD INDEX index_name ( column1
, column2
, column3
)
Mysql各种索引区别:
普通索引(INDEX):最基本的索引,没有任何限制
唯一索引(UNIQUE):与”普通索引”类似,不同的就是:索引列的值必须唯一,但允许有空值。
主键索引(PRIMARY):它 是一种特殊的唯一索引,不允许有空值。
全文索引(FULLTEXT ):仅可用于 MyISAM 表, 用于在一篇文章中,检索文本信息的, 针对较大的数据,生成全文索引很耗时好空间。
组合索引:为了更多的提高mysql效率可建立组合索引,遵循”最左前缀“原则。
3、京东登录页面怎么测?
4、如果一个普通用户,他的百度首页打不开,问题怎么定位?写出定位流程。
首先,看下别的页面是否能打开
如果别的页面能打开,在看下百度的其他页面是否能打开
如果也能打开,换个浏览器试试,其他浏览器是否能打开
其他浏览器也不能打开的话,说明不是浏览器的问题
看下ip是否正常,用ping命令看看Ping值是多少,ping百度域名
看下DNS是否配置正确
看注册表是否正常
实在没有发现问题,看看安全软件能不能修复(例如360等)
5、问简历上的第一个项目的详细情况,包括测试用例怎么写?怎么判断测试通过?项目的原理?
6、如果是做功能测试,能接受吗?
7、说一下你们工作中的测试流程
8、用她的手机给我看了下百度贴吧的发帖功能的界面,给我张纸,让我写出测试点(只需要考虑内容,表情,添加图片,@功能),写完讲一遍逻辑。
9、针对发朋友圈这个功能设计你的测试用例,请给出用例分类与典型用例场景
10、Java 中的容器有哪些?它们的区别和特性?
Iterable 接口
Iterable是一个超级接口,被Collection所继承。它只有一个方法:Iterator<T> iterator() //即返回一个迭代器
Collection 接口
List 接口:List是有序的 collection
子类:Vector、ArrayList、LinkedList
名称 扩容方式(默认)线程安全 速度 有效个数的属性
ArrayList增长50%,线程不安全 快size
Vector 增长一倍,线程安全 慢elementCount
共同点 如果新增的有效元素个数超过数组本身的长度,都会导致数组进行扩容 - remove,add(index,obj)方法都会导致内部数组进行数据拷贝的操作,这样在大数据量时,可能会影响效率 -
Set接口:无序性,确定性,单一性。所以可以很好的理解,Set是无序、不可重复的。同时,如果有多个null,则不满足单一性了,所以Set只能有一个null
子类:HashSet、TreeSet、LinkedHashSet
Queue 接口:此接口用于模拟“队列”数据结构(FIFO)。新插入的元素放在队尾,队头存放着保存时间最长的元素
容器名是否有序;是否可重复 null的个数
List有序可重复;允许多个null
Set 无序不可重复;只允许一个null
Queue 有序(FIFO)可重复;通常不允许插入null
Map 接口:key-value形式
子类:
HashMap,无序
HashTable
SortedMap
WeakHashMap
IdentityHashMap
EnumMap
11、Git 的常见操作,如 git stash
git基本操作
git status 查看本次的修改、新建、删除等信息(new file:新建文件,modified:修改文件,deleted: 删除的文件)
git pull 拉取代码;
git add . 添加所有即将提交的文件,
git add fileNamePath添加某个文件
git commit -'提交的日志' 提交到本地,
git push 提交到git服务器;
git 另一种提交方式,
git commit -a -m '提交的日志' 添加所有即将提交的文件并提交到本地 ,
git commit -a -m 相当于git add . 和 git commi -' '命令的集合,当你使用git commit -a -m ' '命令时,就会执行上述两个操作;
git 暂存
git stash暂存(存储在本地,并将项目本次操作还原)
git stash pop 使用上一次暂存,并将这个暂存删除,使用该命令后,如果有冲突,终端会显示,如果有冲突需要先解决冲突(这就避免了冲突提交服务器,将冲突留在本地,然后解决)
git stash list 查看所有的暂存
git stash clear 清空所有的暂存
git stash drop [-q|--quiet] [<stash>] 删除某一个暂存,在中括号里面放置需要删除的暂存ID
git stash apply 使用某个暂存,但是不会删除这个暂存
git 创建本地分支并推送到服务器:
创建并切换到分支branchName
git checkout -b branchName
推送本地的branchName(冒号前面的)分支到远程origin的branchName(冒号后面的)分支(没有会自动创建)
git push origin branchName:branchName
删除分支
删除本地分支:git branch -d [branchname]
删除远程分支:git push origin --delete [branchname]
合并分支
例如现在有分支master和分支A,要将分支A的代码合并到master
第一步:切换到分支master,在终端输入命令
git checkout master
第二步:合并分支
git merge --no-ff -m 'version:3.0.5_buildL19011720' A
第三步:如果有冲突解决冲突,解决冲突后add . -> git commit -m '提交原因'
第四步:
git push
12、Java 的接口与抽象类的区别
相同点:
(1)都不能被实例化
(2)接口的实现类或抽象类的子类都只有实现了接口或抽象类中的方法后才能实例化。
不同点:
(1)接口只有定义,不能有方法的实现,java 1.8中可以定义default方法体,而抽象类可以有定义与实现,方法可在抽象类中实现。
(2)实现接口的关键字为implements,继承抽象类的关键字为extends。一个类可以实现多个接口,但一个类只能继承一个抽象类。所以,使用接口可以间接地实现多重继承。
(3)接口强调特定功能的实现,而抽象类强调所属关系。
(4)接口成员变量默认为public static final,必须赋初值,不能被修改;其所有的成员方法都是public、abstract的。抽象类中成员变量默认default,可在子类中被重新定义,也可被重新赋值;抽象方法被abstract修饰,不能被private、static、synchronized和native等修饰,必须以分号结尾,不带花括号。
(5)接口被用于常用的功能,便于日后维护和添加删除,而抽象类更倾向于充当公共类的角色,不适用于日后重新对立面的代码修改。功能需要累积时用抽象类,不需要累积时用接口。
13、TCP 和 UDP 的区别?如何保证 TCP 的可靠性?
TCP(Transmission Control Protocol)和UDP(User Datagram Protocol)协议属于传输层协议,他们之间的区别包括:
1.是否连接:TCP是面向连接的,UDP是无连接的,TCP的发送发要确认接收方是否收到数据段(3次握手协议)
2.传输可靠性:TCP是可靠的,UDP是不可靠的;TCP在数据包接收无序、丢失或在交付期间被破坏时,负责数据恢复,它通过为每个数据报提供一个序号来完成此恢复,为确保正确收到数据,TCP要求目标计算机成功收到数据时发回一个确认(即ACK),如果在某个时限内未收到相应的ACK,将重新传送数据包。如果网络拥塞,这种重新传送将导致发送的数据包重复,但是接收计算机可使用数据包的序号来确定它是否为重复数据包,并在必要时丢弃它。UDP协议不能保证数据准确无误的到达目的地,并不是说UDP就完全无法知道是否发生了错误,一个16位的UDP包包含了一个字节长的头部和数据的长度,校验码域使其可以进行整体校验,如:多媒体数据流,不产生任何额外的数据,即使知道有破坏的包也不进行重发。
3.TCP只支持点对点通信,UDP支持一对一、一对多、多对一、多对多的通信模式
4.TCP是面向字节流的,UDP是面向报文的(流模式和数据报模式)
5.TCP拥有拥塞控制机制,UDP没有拥塞控制,适合媒体通信
6.TCP要求系统资源较多,UDP较少
7.TCP首部开销(20个字节)比UDP的首部开销(8个字节)要大,TCP传送数据段的时候要给段标号,UDP协议不用
当数据传输的性能必须让位于数据传输的完整性、可控制性和可靠性时,TCP是更好地选择;反之,当强调传输性能而不是传输的完整性时,如:音频和多媒体应用,UDP是最好的选择。
对于可靠性,TCP通过如下方式进行保证:
1.数据包校验:目的是检测数据在传输过程中的任何变化,若校验包出错,则丢弃报文不给出响应,这时TCP发送数据端超时后会重发数据。
2.超时重发:当TCP发出一个段之后,启动一个定时器,等待目的端确认收到这个报文段。如果不能及时收到一个确认,将重发这个报文段。
3.对失序数据包重排序:TCP报文段作为IP数据报来传输,而IP数据报的到达可能会失序,因此TCP报文段的到达也可能会失序。TCP将对失序数据进行重新排序,然后才交给应用层。
4.丢弃重复数据:将丢弃重复数据。
5.应答机制:当TCP收到来自另一端的数据,它将发送一个确认。
6.流量控制:TCP连接的每一方都有固定大小的缓冲空间。TCP接收端只允许另一端发送接收端缓冲区所能接纳的数据,这可以防止较快主机致使较慢主机的缓冲区溢出,这就是流量控制。TCP使用的流量控制协议是可变大小的滑动窗口协议。
14、打开一个网页都发生了哪些事?
·通过域名解析获得URL对应的IP地址
·浏览器和服务器建立TCP连接
·浏览器给服务器发送一个HTTP请求
·服务器给浏览器发回一个HTML响应
15、对工作上的压力怎么看待?
16、继续问项目经验和技术难点
17、了解现在的工作环境,背景等
18、户口,家庭情况,伴侣工作等
19、问上一份工作的公司是做什么的?离职原因?自己的职业发展规划?
20、遇到的某个难点是什么?如何解决的?
21、自己解决的最亮点的技术难点是什么?
22、你用jmeter做什么测试?
接口测试
23、如果有一个登录接口需要服务端返回参数,再带着这个参数去请求才能完成登录,用jmeter 怎么做?
先去请求登陆接口,然后得到登录的返回值,然后使用json提取器,提取出需要的值,作为参数传给下一个接口。
24、请问你们公司是如何做接口测试的?
第一步:我们要分析出测试需求,并拿到开发提供的接口说明文档;
第二步:从接口说明文档中整理出接口测试案例,里面要包括详细的入参和出参数据以及明确的格式和检查点。
第三步:和开发一起对接口测试案例进行评审。
第四步:结合开发库,准备接口测试案例中的入参数据和出参数据,并整理成csv格式的文件。
第五步:结合接口测试案例文档和csv格式的数据文档,做接口测试案例的自动化案例开发。
第六步,写完自动化用例之后开始执行
第七步,执行如有bug,提交至禅道
第八步,开发修改完成后,回归bug
第九步,完成后做自动化持续集成
1.接口需求调研
2.接口测试工具选择
3.接口测试用例编写
4.接口测试执行
5.接口测试回归
6.接口测试自动化持续集成
25、接口测试质量评估标准是什么?
a) 业务功能覆盖是否完整
b) 业务规则覆盖是否完整
c) 参数验证是否达到要求(边界、业务规则)
d) 接口异常场景覆盖是否完整
e) 接口覆盖率是否达到要求
f) 代码覆盖率是否达到要求
g) 性能指标是否满足要求
h) 安全指标是否满足要求
26、对接口测试这块熟不熟?是怎么测的?用的什么工具?为什么用 HTTPClient 类库,觉得它有什么缺点?用 Fiddler 主要做什么?
27、请问你们公司是如何做性能测试的?请讲诉性能测试的相关指标?
1.做性能需求分析,挑选了用户使用最频繁的功能来做性能测试,比如:登陆,搜索,提交订单,确定性能指标,比如:事务通过率为100%,90%的事务响应时间不超过5秒,并发用户为1000人,CPU和内存的使用率为70%以下
2.性能测试计划,明确测试时间(通常在功能稳定后,如第一轮测试后进行)和测试环境和测试工具的选择
3.编写性能测试用例
4.搭建性能测试环境,准备好性能测试数据
5.通过性能测试用例,编写性能测试脚本
6.性能测试脚本进行调优,设置检查点、参数化、关联、集合点、事务,调整思考时间,删除冗余的脚本等
7.设计性能测试场景,使用nmon工具监控服务器,运行测试场景
8.分析性能测试结果,如果有问题(性能瓶颈),收集相关的日志提单给开发修改
9.开发修改好后,回归性能测试
10.编写性能测试报告
相关指标:响应时间、并发数、吞吐率、资源利用率、TPS
28、压力测试和负载测试的区别
负载测试是模拟实际软件系统所承受的负载条件的系统负荷,通过不断加载(如逐渐增加模拟用户的数量)或其它加载方式来观察不同负载下系统的响应时间和数据吞吐量、系统占用的资源(如CPU、内存)等,以检验系统的行为和特性,以发现系统可能存在的性能瓶颈、内存泄漏、不能实时同步等问题
压力测试是在高负载情况下对系统的稳定性进行测试。是在高负载(大数据量、大量并发用户等)下的测试,观察系统在峰值使用情况下的表现,从而发现系统的功能隐患
负载测试:多用户,用户数渐增,持续同时发同一业务请求,产出最大TPS
压力测试:多用户,资源使用饱和,持续同时发同一业务请求,产出系统瓶颈或使用极限
29、服务器中一般要监控哪些数据,如何监控的,怎么从监控数据中发现问题?
基础监控和应用监控。
基础监控包括机器是否死机,cpu,内存,磁盘使用率等;应用监控包括日志监控、端口监控、进程数监控等。
30、性能测试用过吗?什么情况下用的?主要测哪些方面?
31、性能测试关注哪些指标?
相关指标:响应时间、并发数、吞吐率、资源利用率、TPS
32、对于多环境(联调环境、测试环境、预发布环境)如何让接口用例支持多套环境,说出你的做法
自定义一个用户变量,将ip放在变量里,然后接口取变量的值
33、如果接口返回数十个字段,如何批量校验这些字段的正确性,请说出你的方法?
使用csv进行多用例编写
34、假设系统A调用系统B,我把B的接口都mock了,进行性能测试,这样有什么好处和坏处?
好处:防止系统B出错引起测试错误;不会因系统B的开发进度影响测试;mock后可以快速返回结果,提高测试效率
坏处:很多情况下无法完全模拟出服务器的所有可能的返回情况,另外,mock掉了关联方之后,整个环境的连通性可能测试的不到位。
35、有一天早上打车高峰,滴滴服务端挂了大概30分钟,工程师抢修之后,马上上线,之后又挂了,请问有哪些原因会造成这个情况?
服务器内存不够、服务器超出负载、并发量太大、遇到恶意攻击
36、请问Monkey测试的优缺点?
37、如果使用monkey发现了一个毕现闪退,请问怎么使用monkey重现它?
38、UI 测试的过程
39、自动化测试用例怎么来?
40、你项目中有多少case,通过率怎么样?
41、报告哪里来,主要统计什么?
自动化测试报告,在执行完用例之后,会自动生成,使用的是allure,主要统计bug通过率,失败率,失败日志,失败截图
42、做自动化测试的目的?
43、如何看待自动化和手动测试?怎样的一个比例才是健康的?
自动化适合做为回归测试的主要方式,新上线的功能一般都是用手动测试方式,一些极端和用户习惯操作还是手动测试比较方便。尽可能线上稳定的功能模块都做成自动化,提供效率
44、你们公司的自动化投入产出比怎样?效益怎样?
自动化主要作为回归测试,减少测试时间。
45、自动化测试用例的覆盖率多少?
30%
46、完整运行一次自动化用例需要多久时间?
47、什么是分层自动化?
金字塔结构, 最底层UnitTest,往上接口API/集成起来的service, 最上面UI自动化
po模式:
1.元素的配置文件(元素的配置文件就是元素控件的路径或者id)
2.page类(通过读取配置文件获取元素的控件,元素对象和元素的原子操作,一个页面一个配置文件)
3.action类(通过原子操作去拼接业务,比如我要执行登录,点击按钮,输入用户名密码都在action中操作)
4.测试用例类(testcase,调用业务实现断言)
48、你的测试数据是怎么准备的?
提前写在配置文件中的或者直接写在Excel中,读取excel中的数据
49、测试脚本的维护成本是怎么样的?
如果业务不变的话,基本上不用修改脚本,如果业务有变化,则去找对应的测试脚本进行修改
50、问第一个项目的测试框架的搭建、怎么用数据驱动测试?
转载自:http://navo.top/FFr6Nj
-------- THE END --------