Active
1.目前公司产品的整体架构?
web前端:Vue
后端:java
分布式
2.分表和不分表测试有哪些区别?
3.自动化框架:换一个环境,要准备新的测试数据?怎么改进可以效率更高?
不同的环境,维护不同的数据。
当需要大批量测试数据时,可以调接口去批量生成。
4.对称加密,非对称加密区别?用于哪些场景
对称加密算法的代表:
常见的对称加密算法有 DES、3DES、AES、Blowfish、IDEA、RC5、RC6。
特性:
简单来说就是加密与解密用的都是同一个秘钥。
优点:
通常情况下,在通用计算机中,相比非对称加密算法,对称加密算法效率会明显比较高。
使用场景:
一般用于对效率有要求的实时数据加密通信。比如在使用 VPN 或者代理进行 加密通信时,**既要保证数据的保密性,又要保证不能有高的延迟,所以通常会使用对称加密算法。
对称加密算法的代表:
RSA、Rabin(RSA的特例)、椭圆曲线加密算法(英语:Elliptic Curve Cryptography, ECC)。使用最广泛的是RSA算法(由发明者Rivest、Shmir和Adleman姓氏首字母缩写而来)是著名的公开秘钥加密算法,ElGamal是另一种常用的非对称加密算法。
特性:
它需要两个密钥,一个是公钥,另一个是私钥,一个用于加密,另一个用于解密。如果其中一个密钥用于加密明文,则原始明文只能用对应的另一个密钥解密;即使最初用于加密明文的密钥也不能用作解密。因为加密和解密需要两个不同的密钥,所以称为非对称加密。
PS:通常情况下,公钥的长度一般比较短,所以我们会将公钥对外公开,让别人使用公钥来加密数据。而我则使用私钥解密数据,但是切记基于非对称的特性,我们也是可以使用公开私钥加密,而使用公钥解密。不这样做的原因是因为私钥通常比公钥要长,传输起来比较费资源。
主要应用场景:
主要用于秘钥交换,证书等场景。比如充电桩项目和其他充电平台进行互联互通。
5.接口不可能随随便调用,怎么鉴权的?用的什么技术?有没有什么加密?
6.git代码管理:是同一个项目?还是同一个service?
7.读写分离:2主4从,主从同步是否实时?从库是否数据一样?如果一样,为啥要多个从库?如何测试读写分离?
其他
1.你印象最深刻的bug?从发现到最后解决的过程
2.APP崩溃/闪退的原因?如何定位?
尽量复现,看崩溃的频率定解决优先级。必现的立马解决。偶现的看情况处理。
定位方式:查看客户端日志,与开发同学沟通。及时定位原因
常见原因:
- 手机本身系统太老。APP无法支持
- 接口异常导致闪退
- 客户端的代码错误:空指针、内存溢出等
- 手机内存不足
- 打包的代码合并异常
- 没有对接口网络异常处理
- ...
3.Android兼容性测试哪些?
机型、系统、分辨率
4.一个输入框,输入6-12个字符,数字+字符+下划线,怎么设计测试用例?
5.测试用例包含哪些信息?如何管理的?
6.一个bug的生命周期
7.如何提交的缺陷,包含的内容有哪些?
8.如何验证索引的增量更新?仅仅验证更新成功?是否校验更新的详细信息?
9.接口测试用例设计
10.一个素材库:有上传、下载文件功能。设计测试用例?大概的点,不需要很详细
上传、下载功能正常
文件:格式/类型、大小、名称是否允许重复
上传后的文件:如何排序?最多可上传多少文件?按个数还是按总空间大小限制?
11.如何理解持续集成?GIT了解吗?分支的了解?
12.HTTP接口请求方式有哪些?
序号 方法 描述 1 GET 请求指定的页面信息,并返回实体主体 2 POST 向指定资源提交数据进行处理请求(例如提交表单或上传文件)。数据被包含在请求体中,POST请求可能会导致新的资源建立或已有资源修改 3 HEAD 类似于GET请求,只不过返回的响应中没有具体内容,用于获取报头 4 OPTIONS 允许客户端查看服务器的内容 5 PUT 从客户端向服务器传送的数据取代指定的文档内容 6 DELETE 请求服务器删除指定页面 7 TRACE 回显服务器收到的请求,主要用于测试或诊断 8 CONNECT HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器
13.HTTP响应代码有哪些?
Http请求状态码_好了来看下一题的博客-CSDN博客_http请求状态码
常见的就是2(请求成功)、3(重定向)、4(请求出错)、5(服务器相关的)开头的
200:请求成功
302:临时重定向
303:
401:请求身份认证。比如忘记传token
403:服务器拒绝访问
404:服务器找不到请求网页
405:禁用请求中指定得方法
500:服务器内部错误
502:网关错误
503:服务不可用。服务器停机维护/超负载
504:网关超时
14.post和get的区别?
参考:https://blog.csdn.net/weixin_44370919/article/details/115966722
15.SVN与Git的区别
16.java内存机制
1.Java的内存管理就是对象的分配和释放
分配:内存的分配是程序完成的,程序员通过new关键字为对象申请内存空间(基本数据类型除外),对象都是在堆(Heap)中分配空间。
释放:对象的释放是由垃圾回收机制(Garbage Collection)来做的,GC为了能正确释放对象,需要监控每一个对象的运行状况,包括申请,引用,被引用,赋值等。
2.什么叫Java的内存泄漏(memory leak)
java中内存泄漏指存在一种被分配的对象,具有以下两个特点,首先它是可达的,即仍存在该内存对象的引用,其次它是无用的,也就是说程序不再引用该对象了,总结就是没用的对象分配的内存,但是还在引用(unused but still referenced)。内存泄漏的对象不会被GC回收,一直占用着内存。memory leak 最长见到的异常是OOM(outofmemeory)。
java代码
public class MemoryLeakDemo { private static ListmemoryLeakArea = new ArrayList();
public static void main(String[] args) {undefined
int iteration = 0;
while(true) {undefined
Integer payload = new Integer(iteration);
memoryLeakArea.add(payload);
iteration ++;
}
}
}
17.java是否可以多继承?
1.java中类不支持多继承,只能单继承,但是可以多实现;
2.java 中接口之间支持多继承,接口可以继承多个继承;
普通类/抽象类(只要class声明的)====================extends(继承)===================普通类/抽象类(只要class声明的)
普通类/抽象类(只要class声明的)==================implements(实现)===========接口;
接口==============extends(继承)================接口
18.DB:触发器
简单使用触发器(详细) SQL触发器的使用及语法_lxysoid的博客-CSDN博客_sql触发器的使用及语法
19.DB:drop和delete的区别?
1、drop
drop除了把表的全部数据删除以外。还把表的结构都删除了。删除的结构包括表的视图,索引,存储过程,函数等2、delete
delete是根据你所写的where条件删除掉表中的部分数据。但是表的其他结构还在。
因为delete只是删除掉部分数据,那么如果想删除全部数据,用truncate。truncate也是只删除全部数据,其他结构不会删除。
20.python:match和search的区别?
对比
match(string[, pos[, endpos]]) | re.match(pattern, string[, flags]):
这个方法将从string的pos下标处起尝试匹配pattern:
如果pattern结束时仍可匹配,则返回一个Match对象
如果匹配过程中pattern无法匹配,或者匹配未结束就已到达endpos,则返回None。
pos和endpos的默认值分别为0和len(string)。
注意:这个方法并不是完全匹配。当pattern结束时若string还有剩余字符,仍然视为成功。想要完全匹配,可以在表达式末尾加上边界匹配符’$’。
search(string[, pos[, endpos]]) | re.search(pattern, string[, flags]):
这个方法从string的pos下标处起尝试匹配pattern
如果pattern结束时仍可匹配,则返回一个Match对象
若无法匹配,则将pos加1后重新尝试匹配,直到pos=endpos时仍无法匹配则返回None。
pos和endpos的默认值分别为0和len(string))
总结
match()从指定的位置匹配到结尾,必须开头一模一样的对应,search()也是在指定的位置匹配到结尾,但是,只要在这个区间里有匹配就行,不用严格的限制开头一一对应,具体可以看实例:import re
pattern = re.compile(r'hello.*!')
# 开头有个'a',match()匹配不上,但是search()可以匹配上
match = pattern.match('ahello, peter! How are you?')
match1 = pattern.search('ahello, peter! How are you?')
if match:
print(match.group())
else:
print("None match")
if match1:
print(match1.group())
else:
print("None match1")
21.python:深copy和浅copy
首先说结论:深拷贝出来的对象就是完完全全的新对象,不管是对象本身(id),还是对象中包含的子对象,都和原始对象不一样;
浅拷贝出来的对象就是外新内旧的对象,对象本身(id)和原始对象完全不同,但是子对象和原始对象的子对象是一样的。
再补充说下赋值,赋值来的对象就是完完全全的原始对象,只是叫的名字不同了。
22.电梯、朋友圈、红包、登录功能怎么测试的?用例设计?
可以多准备一些。例如:
23.独立负责一个大项目,如何开展测试?
可以理解为如何保障产品质量。从需求分析理解、用例设计和评审、测试bug提交和跟踪、上线验证、项目复盘等方面回答
24.接口测试怎么做?
参考:接口测试用例设计_satner的博客-CSDN博客_接口用例设计
遇到的问题:
25.ArrayList、LinkedList区别
大致区别:
1.ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。 (LinkedList是双向链表,有next也有previous)
2.对于随机访问get和set,ArrayList绝对优于LinkedList,因为LinkedList要移动指针。
3.对于新增和删除操作add和remove,LinkedList比较占优势,因为ArrayList要移动数据。
时间复杂度比较:
首先一点关键的是,ArrayList的内部实现是基于基础的对象数组的,因此,它使用get方法访问列表中的任意一个元素时(random access),它的速度要比LinkedList快(O1)。LinkedList中的get方法是按照顺序从列表的一端开始检查,直到另外一端(On)。对LinkedList而言,访问列表中的某个指定元素没有更快的方法了
但在某些情况下LinkedList的表现要优于ArrayList,有些算法在LinkedList中实现时效率更高。比方说,利用Collections.reverse方法对列表进行反转时,其性能就要好些。当要对list进行大量的插入和删除操作时,LinkedList也是一个较好的选择。
总结
ArrayList和LinkedList在性能上各有优缺点,都有各自所适用的地方,总的说来可以描述如下:
1.对ArrayList和LinkedList而言,在列表末尾增加一个元素所花的开销都是固定的。对ArrayList而言,主要是在内部数组中增加一项,指向所添加的元素,偶尔可能会导致对数组重新进行分配;而对LinkedList而言,这个开销是统一的,分配一个内部Entry对象。2.在ArrayList的中间插入或删除一个元素意味着这个列表中剩余的元素都会被移动;而在LinkedList的中间插入或删除一个元素的开销是固定的。
3.LinkedList不支持高效的随机元素访问。
4.ArrayList的空间浪费主要体现在在list列表的结尾预留一定的容量空间,而LinkedList的空间花费则体现在它的每一个元素都需要消耗相当的空间
可以这样说:当操作是在一列数据的后面添加数据而不是在前面或中间,并且需要随机地访问其中的元素时,使用ArrayList会提供比较好的性能;当你的操作是在一列数据的前面或中间添加或删除数据,并且按照顺序访问其中的元素时,就应该使用LinkedList了
26.框架用到了哪些设计模式?
27.TDD、BDD、TDD
TDD和BDD的区别 (TDD vs BDD)_辰辰沉沉大辰沉的博客-CSDN博客_bdd和tdd
28.敏捷开发的关键里程碑
29.UAT、SIT
SIT是集成测试UAT是验收测试从时间上看,UAT要在SIT后面,UAT测试要在系统测试完成后才开始。从测试人员看,SIT由公司的测试员来测试,而UAT一般是由用户来测试。
SIT:System Integration TestCase(系统集成测试,即内部测试)
根据用例描述测试每一个场景,优化系统性能,提交数据库性能excution plan给DBA review。对系统进行压力测试(必要情况下提交到APCC的压力测试组进行测试)。里程碑:完成内部测试报告和得到DBA的上线批准。UAT : User Acceptance Test(用户接受测试,即用户测试)
用户根据用例描述测试每一个场景,反馈系统issue。开发人员基于issue对系统影响和对业务impact判断,适当的修正系统或记录业务需求,根据业务优先等级,集成进下一个演进阶段。 里程碑:UAT Sign off。
30.测试左移、右移