最新一个资深测试工程师面试一来就问我这些题目_三十位真实乱口述(1),2024年最新腾讯、字节跳动面经已发

img
img
img

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

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

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

(无效等价类:对于程序规格说明来说,是不合理的,无意义的输入数据构成的集合)
2、边界值分析方法**
3、因果图方法
4、正交实验设计方法
5、功能图分析方法
6、错误推测法
7、需求文档转化法
8、随机测试
9、对象属性分析法

二.白盒测试方法(可以选择性记忆…不知道会不会问):
1.语句覆盖:就是设计若干个测试用例,运行被测程序,使得每一可执行语句至少执行一次。
2.判定覆盖:使设计的测试用例保证程序中每个判断的每个取值分支至少经历一次。
3.条件覆盖:条件覆盖是指选择足够的测试用例,使得运行这些测试用例时,判定中每个条件的所有可能结果至少出现一次,但未必能覆盖全部分支
4.判定条件覆盖:判定-条件覆盖就是设计足够的测试用例,使得判断中每个条件的所有可能取值至少执行一次,同时每个判断的所有可能判断结果至少执行,即要求各个判断的所有可能的条件取值组合至少执行一次。
5.条件组合覆盖:在白盒测试法中,选择足够的测试用例,使所有判定中各条件判断结果的所有组合至少出现一次,满足这种覆盖标准成为条件组合覆盖。
6.路径覆盖:是每条可能执行到的路径至少执行一次。
补充:
(1)语句覆盖在所有的测试方法中是一种最弱的覆盖。
(2)判定覆盖和条件覆盖比语句覆盖强,满足判定/条件覆盖标准的测试用例一定也满足判定覆盖、条件覆盖和语句覆盖
(3)路径覆盖也是一种比较强的覆盖,但未必考虑判定条件结果的组合,并不能代替条件覆盖和条件组合覆盖。

三.TCP/IP分层协议(每层的协议要注意):
1.链路层(数据链路层/网络接口层):包括操作系统中的设备驱动程序、计算机中对应的网络接口卡
2.网络层(互联网层):处理分组在网络中的活动,比如分组的选路。
3.运输层:主要为两台主机上的应用提供端到端的通信。
4.应用层:负责处理特定的应用程序细节。

TCP和UDP的区别(网络上的知识点):
1、TCP面向连接(如打电话要先拨号建立连接);UDP是无连接的,即发送数据之前不需要建立连接
2、TCP提供可靠的服务。也就是说,通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达;UDP尽最大努力交付,即不保证可靠交付
3、TCP面向字节流,实际上是TCP把数据看成一连串无结构的字节流;UDP是面向报文的
UDP没有拥塞控制,因此网络出现拥塞不会使源主机的发送速率降低(对实时应用很有用,如IP电话,实时视频会议等)
4、每一条TCP连接只能是点到点的;UDP支持一对一,一对多,多对一和多对多的交互通信
5、TCP首部开销20字节;UDP的首部开销小,只有8个字节
6、TCP的逻辑通信信道是全双工的可靠信道,UDP则是不可靠信道

四.TCP/IP三次握手,四次挥手(常问项)
三次握手:

第一次握手(SYN=1,seq=x):
客户端发送一个TCP的SYN标志位置1的包,指明客户端打算连接的服务器的端口,以及初始序号X,保存在包头的序列号(Sequence Number)字段里。
第二次握手(SYN=1,ACK=1,seq=y,ACKnum=x+1):
服务器发回确认包(ACK)应答。即SYN标志位和ACK标志位均为1。服务器端选择自己的ISN序列号,放在seq域里,同时将确认序号(Acknowledgement Number)设置为客户的ISN加1,即X+1。发送完毕后,服务器端进入SYN_RCVD状态。
第三次握手(ACK=1,ACKnum=y+1):
客户端再次发送确认包(ACK),SYN标志位为0,ACK标志位为1,并且把服务器发来ACK的序号字段+1,放在确定字段中发送给对方,并且在数据段放写ISN的+1。
发送完毕后,客户端进入ESTABLISHED状态,当服务器端收到这个包时,也进入ESTABLISHED状态,TCP握手结束,TCP连接建立完成
我的理解…:
A问B:你听到了么,发确认信息
B回答A:听到了,告诉A它能接收到A的消息
A再回B:我能接收到你的消息,再发一次确认 ,然后建立连接
四次挥手:

第一次挥手(FIN=1,seq=x):
假设客户端想要关闭连接,客户端发送一个FIN标志位置为1的包,表示自己已经没有数据可以发送了,但是仍然可以接收数据。
发送完毕之后,客户端进入FIN_WAIT_1状态。
第二次挥手(ACK=1,ACKnum=x+1):
服务器端确认客户端的FIN包,发送一个确认包,表明自己接收到了客户端关闭连接的请求,但还没有准备好关闭连接。
发送完毕后,服务器端进入CLOSE_WAIT状态,客户端接收到这个确认包之后进入FIN_WAIT_2状态,等待服务器端关闭连接。
第三次挥手(FIN=1,seq=y):
服务器端准备好关闭连接时,向客户端发送结束连接请求,FIN置为1。
发送完毕后,服务器端进入LAST_ACK状态,等待来自客户端的最后一个ACK
第四次挥手(ACK=1,ACKnum=y+1):
客户端接收到来自服务器的端的关闭请求,发送一个确认包,并进入TIME_WAIT状态,等待可能出现的要重传的ACK包。
服务器端接收到这个确认包之后,关闭连接,进入CLOSED状态。
客户端等待了某个固定时间(两个最大段生命周期,2MSL,2Maximum Segment Lifetime)之后,没有收到服务器端的ACK,认为服务器端已经正常关闭连接,于是自己也关闭连接,进入CLOSED状态。
为什么是三次,不是两次或者四次(这个问题真的可能会被问到)
两次握手并不能保证可靠性(B不确定A能收到自己的信息),四次握手又浪费了效率

五.OSI七层模型(记一记应用层,传输层,网络层我觉得就可以了…)

六. DNS(运行在UDP协议上,端口53)
概念:dns是一个域名系统,是万维网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串

七:http协议(https://www.cnblogs.com/ranyonsue/p/5984001.html细致的大家可以阅读这一篇)
restful接口:
1.URI资源 2.表现:XML,HTML等格式 3.状态转移:get,post等

HTTP:是互联网上应用最为广泛的一种网络协议,是一个客户端和服务器端请求和应答的标准(TCP),用于从WWW服务器传输超文本到本地浏览器的传输协议,它可以使浏览器更加高效,使网络传输减少
HTTPS:是以安全为目标的HTTP通道,简单讲是HTTP的安全版,即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。
HTTP和HTTPS区别:(这个还挺重要的,端口号稍微记一下)
1、https协议需要到ca申请证书,一般免费证书较少,因而需要一定费用。
2、http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。
3、http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
4、http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。
HTTP协议特点:
1.支持客户/服务器模式。
2.简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、HEAD、POST。每种方法规定了客户与服务器联系的类型不同。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。
3.灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type(Content-Type是HTTP包中用来表示内容类型的标识)加以标记。
4.无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。
5.无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。
HTTP原理:
1、客户端连接到Web服务器
一个HTTP客户端,通常是浏览器,与Web服务器的HTTP端口(默认为80)建立一个TCP套接字连接。
2、发送HTTP请求
通过TCP套接字,客户端向Web服务器发送一个文本的请求报文,一个请求报文由请求行、请求头部、空行和请求数据4部分组成。
3、服务器接受请求并返回HTTP响应
Web服务器解析请求,定位请求资源。服务器将资源复本写到TCP套接字,由客户端读取。一个响应由状态行、响应头部、空行和响应数据4部分组成。
4、释放连接TCP连接
若connection 模式为close,则服务器主动关闭TCP连接,客户端被动关闭连接,释放TCP连接;若connection 模式为keepalive,则该连接会保持一段时间,在该时间内可以继续接收请求;
5、客户端浏览器解析HTML内容
客户端浏览器首先解析状态行,查看表明请求是否成功的状态代码。然后解析每一个响应头,响应头告知以下为若干字节的HTML文档和文档的字符集。客户端浏览器读取响应数据HTML,根据HTML的语法对其进行格式化,并在浏览器窗口中显示。
GET和POST请求的区别(个人感觉这个是要了解的):
1.GET提交的数据会放在URL之后,以?分割URL和传输数据,参数之间以&相连,如EditPosts.aspx?name=test1&id=123456. POST方法是把提交的数据放在HTTP包的Body中.
2.GET提交的数据大小有限制(因为浏览器对URL的长度有限制),而POST方法提交的数据没有限制.
3.GET方式需要使用Request.QueryString来取得变量的值,而POST方式通过Request.Form来获取变量的值。
4.GET方式提交数据,会带来安全问题,比如一个登录页面,通过GET方式提交数据时,用户名和密码将出现在URL上,如果页面可以被缓存或者其他人可以访问这台机器,就可以从历史记录获得该用户的账号和密码.
状态码:
1xx:指示信息–表示请求已接收,继续处理
2xx:成功–表示请求已被成功接收、理解、接受
3xx:重定向–要完成请求必须进行更进一步的操作
4xx:客户端错误–请求有语法错误或请求无法实现
5xx:服务器端错误–服务器未能实现合法的请求
常见状态码:
200 OK //客户端请求成功
400 Bad Request //客户端请求有语法错误,不能被服务器所理解
401 Unauthorized //请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用
403 Forbidden //服务器收到请求,但是拒绝提供服务
404 Not Found //请求资源不存在,eg:输入了错误的URL
500 Internal Server Error //服务器发生不可预期的错误
503 Server Unavailable //服务器当前不能处理客户端的请求,一段时间后可能恢复正常

八:TestNG(这个我自己用过,感兴趣也可以看看) testng传参方式(parameter在testng.xml 或者通过dataprovider)
运行方式:1.Run as 2.testng.xml
按顺序执行:preserve-order=true
忽略测试:*@Test(enable=false)
分组测试:
@Test(groups=…)
依赖测试:
@*Test(dependsonmethods=…)
结果在oup-put,日志级别是verbose
并发运行用例:parallel=methods

九:appium(可以稍稍了解,和selenium异曲同工,有些点我觉得是UI自动化想通的)
特点(为什么流行我觉得):

  1. 跨平台,native hybrid webview(H5)
  2. 跨设备,android iOS
  3. 跨app,可以在多个app之间交互
  4. 不依赖APP开源代码(保留意见,android Uiautomator对H5的支持需要代码支持,这里不细说)
  5. 支持Selenium WebDriver / Selenium Grid
  6. 跨语言,java python ruby nodejs
  7. Open Source 原理: Android 

1.左边的WebDriver script是我们的selenium测试脚本(其实就是测试代码)
2.中间是起的Appium的服务,Appium在这边起了一个Server(4723端口),跟selenium
Webdriver测试框架类似,Appium⽀支持标准的WebDriver JSONWireProtocol 。在这里提供了一套web服务,Appium Server接收web driver 标准请求,解析请求内容,调⽤用对应的框架响应操作。
如:脚本发送一个点击按钮的请求给appium server,

  1. appium server会把请求转发给中间件Bootstrap.jar ,它是用java写的,安装在手机上. Bootstrap 接收appium 的命令(4724端口),最终通过调⽤用UiAutomator的命令来实现。4.最后执⾏行的结果由Bootstrap返回给appium server 5.另外,appium还用到了chromedriver来⽀支持基于H5(webview)的测试。IOS: 

1.左边的WebDriver script是selenium测试脚本
2.中间是起的Appium的服务,Appium在这边起了⼀一个Server(4723端口),跟selenium
Webdriver测试框架类似,Appium⽀支持标准的WebDriver JSONWireProtocol 。在这里提供了一套web服务,Appium Server接收web driver 标准请求,解析请求内容,调⽤用对应的框架响应操作。
如:脚本发送一个点击按钮的请求给appium server,

  1. appium server调用instruments.js 启动⼀一个socket server,同时分出⼀一个⼦子进程运⾏行instruments.app,将bootstrap.js(一个UIAutomation脚本)注⼊入到device⽤用于和外界进⾏行交互。4.对于H5的操作,运⽤用了 iOS webkit debug proxy来实现 Android和IOS的区别我觉得就是bootstrap.jar和bootstrap.js去分别驱动uiautomator和uiautomation,新版本的Appium已经支持uiautomator2了,IOS支持XCUItest 定位元素方法(By后面那些东西,ID可以唯一定位): webdriver提供的用 By 定位元素 find_element(By.ID,“kw”) find_element(By.NAME,“wd”) find_element(By.CLASS_NAME,“s_ipt”) find_element(By.TAG_NAME,“input”) find_element(By.LINK_TEXT,u"新闻") find_element(By.PARTIAL_LINK_TEXT,u"新") find_element(By.XPATH,“//*[*@*class=‘bg s_btn’]”) find_element(By.CSS_SELECTOR,“span.bg s_btn_wr>input#su”) find_element()方法只用于定位元素。它需要两个参数,第一个参数是定位方式,这个由 By 提供;另第二个参数是定位的值。

十. linux常用命令(我觉得比较可能问的多的)
Cd:切换目录
当前目录和上层目录:./ …/
主目录:~/
查看当前路径:pwd
清屏:clear
退出当前命令:ctrl+c 彻底退出
软链接:ln -s slink source
查找自己所在的终端信息:who am i
查看当前谁在使用该主机:who
ls -l (也可以直接 ll ) :列出长数据串,包含文件的属性与权限数据等
ls -a :列出全部的文件,连同隐藏文件(开头为.的文件)一起列出来(常用)
find -name 文件名 :找匹配的文件名
mkdir :创建指定的名称的目录
cp -a file1 file2 :连同文件的所有特性把文件file1复制成文件file2

cp file1 file2 file3 dir :把文件file1、file2、file3复制到目录dir中

mv file1 file2 file3 dir : 把文件file1、file2、file3移动到目录dir中

mv file1 file2 : 把文件file1重命名为file2
rm -fr dir : 强制删除目录dir中的所有文件
ps -ef|grep java :找出所有java进程
kill -9 进程号 :彻底杀死某个进程
chmod 改变文件的权限
语法:chmod [options] mode files
多数用三位八进制数字的形式来表示权限,第一位指定属主的权限,第二位指定组权限,第三位指定其他用户的权限,每位通过4(读)、2(写)、1(执行)三种数值的和来确定权限。如6(4+2)代表有读写权,7(4+2+1)有读、写和执行的权限
chmod u+x file :给file的属主增加执行权限
vi :文件名 #编辑方式查看,可修改
cat :文件名 #显示全部文件内容
more :文件名 #分页显示文件内容
less :文件名 #与 more 相似,更好的是可以往前翻页
head :文件名 #仅查看头部,还可以指定行数
tail -f 20160921.logs :查看正在改变的日志文件
tail -3000 catalina.out:查看倒数前3000行的数据
history:查看用过的命令列表
df -hl:查看磁盘使用空间
which :只能查可执行文件
whereis :只能查二进制文件、说明文档,源文件等
du :显示目录或文件的大小
df :显示每个<文件>所在的文件系统的信息,默认是显示所有文件系统
df 命令获得真正的文件系统数据,而 du 命令只查看文件系统的部分情况
bash shell 的内置命令let 可以进行整型数的数学运算
free:显示系统当前内存的使用情况,包括已用内存、可用内存和交换内存的情况
top:显示当前系统中占用资源最多的一些进程
netstat -anp|grep port:查看某端口是否被占用
chown -R:更改某个文件或目录的属主和属组
Shift + PageUp:翻页
清空文件:echo “” > filename 或者cat /dev/null > a.txt 或者>a.txt
Linux统计文件中出现的次数:
(1) 单个字符串:grep -o targetstr filename | wc -l
多个字符串:grep -o “targetstr_1\targetstr_2”filename | wc -l
(2) awk ‘{s+=gsub(/targetStr/,“&”)}END{print s}’ filename
Linux查找某个文件中的某个词:
grep ‘test’a,b,c 在文件a,b,c中寻找test这个词
grep -r ‘test’ . #在当前目录中找test这个词
grep -r ‘test’ example #在example目录中找test这个词
wc -l filename: 查看文件里有多少行
uniq testfile: 删除一个文件中重复都是行
sort testfile1 | uniq:删除重复之后进行排序(次数的)

十一.Mysql(乱七八糟语句不写了,写点我觉得可能会被问到的)
授权语句:
grant select, insert, update, delete on testdb.* to common_user@‘%’
事务:
1.原子性:要么全部完成,要么不完成,若发生错误会进行回滚操作;
2.一致性:开始到结束后,数据库完整性约束没收到破坏;(实体完整性,参照完整性,用户定义的完整性)
3.隔离性:事务与事务之间相隔离,串行化执行;
4.持久性:事务完成对数据的影响是永久的;
四个隔离:
1.脏读
脏读是指在一个事务处理过程里读取了另一个未提交的事务中的数据。
当一个事务正在多次修改某个数据,而在这个事务中这多次的修改都还未提交,这时一个并发的事务来访问该数据,就会造成两个事务得到的数据不一致。例如:用户A向用户B转账100元,对应SQL命令如下
update account set money=money+100 where name=’B’; (此时A通知B)
update account set money=money - 100 where name=’A’;
当只执行第一条SQL时,A通知B查看账户,B发现确实钱已到账(此时即发生了脏读),而之后无论第二条SQL是否执行,只要该事务不提交,则所有操作都将回滚,那么当B以后再次查看账户时就会发现钱其实并没有转。
2.不可重复读
不可重复读是指在对于数据库中的某个数据,一个事务范围内多次查询却返回了不同的数据值,这是由于在查询间隔,被另一个事务修改并提交了
3.虚读(幻读)
幻读是事务非独立执行时发生的一种现象。例如事务T1对一个表中所有的行的某个数据项做了从“1”修改为“2”的操作,这时事务T2又对这个表中插入了一行数据项,而这个数据项的数值还是为“1”并且提交给数据库。而操作事务T1的用户如果再查看刚刚修改的数据,会发现还有一行没有修改,其实这行是从事务T2中添加的,就好像产生幻觉一样,这就是发生了幻读
Serializable (串行化):可避免脏读、不可重复读、幻读的发生。
Repeatable read (可重复读):可避免脏读、不可重复读的发生。
Read committed (读已提交):可避免脏读的发生。
Read uncommitted (读未提交):最低级别,任何情况都无法保证。
四种隔离级别最高的是Serializable级别,最低的是Read uncommitted级别,级别越高,执行效率就越低。
主键,外键:
主键 :对表中数据进行唯一标识的数据列的组合;不能缺失;不能空值;
外键 :该列为另一表的主键
索引:
1.数据库索引,是数据库管理系统中一个排序的数据结构,以协助快速查询、更新数据库表中数据。索引的实现通常使用B树及其变种B+树
2.通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性
CREATE INDEX index_name ON table_name(username(length));
建立索引的缺陷:
1.虽然索引大大提高了查询速度,同时却会降低更新表的速度,如对表进行INSERT,UPDATE和DELETE。因为更新表时,mysql不仅要保存数据,还要保存一下索引文件
2.建立索引会占用磁盘空间的索引文件。一般情况这个问题不太严重,但如果你在要给大表上建了多种组合索引,索引文件会膨胀很宽
drop,delete与truncate的区别
drop直接删掉表 truncate删除表中数据,再插入时自增长id又从1开始 delete删除表中数据,可以加where字句
一般而言,drop > truncate > delete
连接种类,区别:
Inner join,left join,right join,full join
分库分表:
数据库引擎:myisam和innodb,前者比较适合大量select,事务不安全;后者支持外键,事务安全,适合大量update,insert

十二.Jmeter
1.性能测试几个概念
TPS:每秒钟request/事务 数量
并发数:系统同时处理的request/事务数
响应时间:一般取平均响应时间
下面几个概念可以看看
负载测试(Load Test):负载测试是一种性能测试,指数据在超负荷环境中运行,程序是否能够承担(通俗讲我觉得就是到了拐点就停了,再往上指标也不会上涨)
压力测试(Stress Test):压力测试(又叫强度测试)也是一种性能测试,它在系统资源特别低的情况下软件系统运行情况,目的是找到系统在哪里失效以及如何失效的地方。
(1)稳定性压力测试:在选定的压力值下,长时间持续运行。通过这类压力测试,可以考察各项性能指标是否在指定范围内,有无内存泄漏、有无功能性故障等;
(2)破坏性压力测试:在稳定性压力测试中可能会出现一些问题,如系统性能明显降低,但很难暴露出其真实的原因。通过破坏性不断加压的手段,往往能快速造成系统的崩溃或让问题明显的暴露出来
极限测试 Extreme testing:在过量用户下的负载测试 Hammer testing:连续执行所有能做的操作
像一般性能测试可能会发现数据库连接上的错误,代码的异常,也有可能是jmeter自身这个软件有性能瓶颈
Jmeter-plugins-manager(一个插件)
下载之后放到lib/ext下面,重启,然后就如图

1.其中Transaction per Second就是tps图,Response Time Over Time 就是平均响应时间,方便实时观察,而不是最后看查看结果树
2.一般短的压测都是相同条件压三次取平均值
3.一般很少会直接压线上,所以会有一个线上和测试的机器参数对比,有一个倍数关系,测试环境做完压测后再计算大概线上的结果
怎么确定性能指标?
1.互联网上对于用户响应时间,有一个普遍的标准,2-5-10原则
2.1.5倍峰值作为参考+服务器(内存,CPU等等)
jmeter怎么用上一个接口的结果作为下一个接口的参数(使用Json extractor)-加分点

十三.测试用例设计
这一块的东西我写个大致的范围…
登陆模块
1.功能用例
2.兼容性(app版本,操作系统版本,不同移动设备分辨率)
3.性能上(单用户的响应时间,高并发,长时间多用户登陆)
4.安全性(加密,SQL注入(通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令),脚本攻击,多设备登陆的互斥)
5.弱网(android 在fiddler下,ios通过自身的status ,下一章写)
6.UI测试
7.可用性,易用性(全键盘输入,enter,tab)
8.本地化(多语言)
还有很多,测试纸杯,电梯,购物车,支付功能(这都是我面试遇到过的)很多别的也可以考虑这些方面,反正都凭自身经验吧~~

十四.弱网测试
1.IOS
IOS平台,通过自带的开发者选项 --Network Link Conditioner, 简单的模拟各种速度的网络

2.android
Fiddler :
1.先开启网络模拟

2.开启延迟

然后编辑脚本

每上传和下载1KB的数据要延迟多少秒
Charles:
延迟设置 --选择相应的网络延迟设置或者自定义延迟–开启延迟即可


charles抓https的包:
1.安装Charles
2.电脑安装Charles证书(install charles root certificate)
3.手机安装证书(install charles root certificate on a mobile device or a remote browser)
4.手机网页输入网址chls.pro/ssl后提示下载证书并信任(ios11开始需要手动信任描述文件)
5.开始抓包
Charles设置Proxy
Proxy -> SSL Proxying Settings
6.把想要抓https包的站点添加到Proxy -> SSL Proxying Settings–include中即可
原理(简单说就是charles伪装自己拿到CA证书后先从客户端拿到公钥,加密后给服务器,服务器再用用私钥解密再返回响应给客户端):
(1)Charles拦截客户端的请求,伪装成客户端向服务器进行请求
(2)服务器向“客户端”(实际上是Charles)返回服务器的CA证书
(3)Charles拦截服务器的响应,获取服务器证书公钥,然后自己制作一张证书,将服务器证书替换后发送给客户端。(这一步,Charles拿到了服务器证书的公钥)
(4)客户端接收到“服务器”(实际上是Charles)的证书后,生成一个对称密钥,用Charles的公钥加密,发送给“服务器”(Charles)
(5)Charles拦截客户端的响应,用自己的私钥解密对称密钥,然后用服务器证书公钥加密,发送给服务器。(这一步,Charles拿到了对称密钥)
(6)服务器用自己的私钥解密对称密钥,向“客户端”(Charles)发送响应
(7)Charles拦截服务器的响应,替换成自己的证书后发送给客户端

十五.Fiddler(我觉得知道怎么改数据的方式就行了)
打断点和AutoResponder的区别,注意修改数据后请求超时导致客户端不做请求
1、打断点,是阻塞了请求,一直没有结果返回,请求将在线程中一直存在,直到超时被踢出来。
2、AutoResponder返回404/502,这种情况是有结果返回的,代表请求也结束了,不会在线程中一直存在
fiddler抓https包:
(1)原理同charles,首先:给fiddler安装certmaker插件(然后重启)
(2)Tools->Fiddler Options->HTTPS ,Actions-> Trust Root Certificate,弹框后安装CA证书

安装成功后可以通过Actions—>open windows certificate Manager 查看安装的证书
(3) 手机安装Fiddler证书,打开手机浏览器,在浏览器地址输入代理服务器IP和端口

点击之后安装证书即可

十六.APP crash
1.crash常见的原因(空指针,内存泄漏,数组越界,调用高版本API)
设备碎片化:由于设备极具多样性,App在不同的设备上可能有表现不同。
带宽限制:带宽不佳的网络对App所需的快速响应时间可能不够。
网络的变化:不同网络间的切换可能会影响App的稳定性。
内存管理:可用内存过低,或非授权的内存位置的使用可能会导致App失败。
用户过多:连接数量过多可能会导致App崩溃。
代码错误:没有经过测试的新功能,可能会导致App在生产环境中失败。
(可能是java的UnChecked异常发生时,由于没有相应的try…catch处理该异常对象,所以Java运行环境将会终止,程序将退出)
第三方服务:广告或弹出屏幕可能会导致App崩溃。
2.App崩溃的测试用例设计:
验证在有不同的屏幕分辨率,操作系统和运营商的多个设备上的App行为。
用新发布的操作系统版本验证App的行为。
验证在如隧道,电梯等网络质量突然改变的环境中的App行为。
通过手动网络从蜂窝更改到Wi-Fi ,或反过来,验证App行为。
验证在没有网络的环境中的App行为。
验证来电/短信和设备特定的警报(如警报和通知)时的App行为。
通过改变设备的方向,以不同的视图模式,验证App行为。
验证设备内存不足时的App行为。
通过用测试工具施加载荷验证App行为。

十七.Git(命令为主)
简单命令
git clone
git status 查看仓库状态
git diff * 查看X文件修改了那些内容

git log 查看历史记录
git reset –hard HEAD^ 回退到上一个版本
git reset --hard HEAD~第几个 如果想回退到第3个版本,使用git reset –hard HEAD~3
git branch 查看本地所有的分支
git branch -a 查看远程所有的分支
git branch name 创建分支
git branch –d dev 删除dev分支
git checkout –b dev 创建dev分支 并切换到dev分支上
git merge dev 在当前分支上合并dev分支代
提交代码三部曲哈哈哈:
git add * 把x文件添加到暂存区去
git commit –m “*” 提交文件 –m 后面的是注释
git push

十八.Monkey(命令用到查就行了这个,要知道-p是指定包)
1.Monkey程序由Android系统自带,使用Java语言写成,在Android文件系统中的存放路径是:/sdk/sdk/tools/lib/monkey.jar
2.Monkey.jar程序是由一个名为“monkey”的Shell脚本来启动执行,shell脚本在Android文件系统中的存放路径是:/sdk/sdk/tools/bin/monkey

  1. adb shell monkey {+命令参数} Monkey 测试出现错误后,一般的分析步骤(我以前被问到过,当时一脸懵逼(´⊙ω⊙`)) 看Monkey的日志 (注意第一个swith以及异常信息等)
  2. 程序无响应的问题: 在日志中搜索 “ANR”
  3. 崩溃问题:在日志中搜索 “Exception” (如果出现空指针, NullPointerException) 肯定是有bug

十九.Tomcat(想不到啥,有可能会问问)
Tomcat的缺省端口及修改(服务的部署新站点的时候就会改这个,要不然端口冲突)
1.找到Tomcat目录下的conf文件夹
2.进入conf文件夹里面找到server.xml文件
3.打开server.xml文件
4.在server.xml文件里面找到下列信息

将8080改成你想要的端口即可
Tomcat部署方式(服务的用的多的是2,有空可以稍微了解下,server.xml最下面就是第二点那种,如果我没记错的话哈哈~~)
1.直接把Web项目放在webapps下,Tomcat会自动将其部署
2.在server.xml文件上配置节点,设置相关的属性即可
3.通过Catalina来进行配置:进入到conf\Catalina\localhost文件下,创建一个xml文件,该文件的名字就是站点的名字,编写XML的方式来进行设置。

二十.排序算法(单独就列这个算法吧,其他算法先不用看了…因为这个是我印象最深的被问过最多的,可以看这篇,写的很全https://blog.csdn.net/hellozhxy/article/details/79911867,冒泡尤为重要)
总结:

1.一些概念
稳定:如果a原本在b前面,而a=b,排序之后a仍然在b的前面;
不稳定:如果a原本在b的前面,而a=b,排序之后a可能会出现在b的后面;
内排序:所有排序操作都在内存中完成;
外排序:由于数据太大,因此把数据放在磁盘中,而排序通过磁盘和内存的数据传输才能进行;
时间复杂度:一个算法执行所耗费的时间。
空间复杂度:运行完一个程序所需内存的大小。
2.排序分类 图总结的挺好

(1)冒泡排序(你记住这个就行,一用百面通…问的最多哈哈)
算法描述:
1.比较相邻的元素,如果第一个比第二个大,就交换它们两个;
2.对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对,这样在最后的元素应该会是最大的数;
3.针对所有的元素重复以上的步骤,除了最后一个;
重复步骤1~3,直到排序完成。

剩下的我就不写这里了,其实代码不懂也无所谓,我的经验是一般描述一下这个算法的过程就可以了,然后如果能写出来肯定是最好的,还是看面试时候的具体情况~~

二十一.Java简单知识点(我对java熟点,所以就写写java了~~,不过大同小异,本质一样的,一些语法不同而已,可以抽空看看简单的这些,还是有可能会问的)
1.面向对象的特征
(1)抽象:抽象是将一类对象的共同特征总结出来构造类的过程,包括数据抽象和行为抽象两方面。抽象只关注对象有哪些属性和行为,并不关注这些行为的细节是什么。
(2)继承:继承是从已有类得到继承信息创建新类的过程。提供继承信息的类被称为父类(超类、基类);得到继承信息的类被称为子类(派生类)。
(3)封装:通常认为封装是把过程和数据包围起来,对数据的访问只能通过已定义的界面。面向对象的本质就是将现实世界描绘成一系列完全自治、封闭的对象。我们在类中编写的方法就是对实现细节的一种封装;我们编写一个类就是对数据和数据操作的封装。可以说,封装就是隐藏一切可隐藏的东西,只向外界提供最简单的编程接口(可以想想普通洗衣机和全自动洗衣机的差别,明显全自动洗衣机封装更好因此操作起来更简单)。
(4)多态性:多态性是指允许不同子类型的对象对同一消息作出不同的响应。简单的说就是用同样的对象引用调用同样的方法但是做了不同的事情。多态性分为编译时的多态性和运行时的多态性。运行时的多态性可以解释为:当A系统访问B系统提供的服务时,B系统有多种提供服务的方式,但一切对A系统来说都是透明的。
2.修饰符(范围自上而下,看这个就够了~

这个图是一个完整的java程序,这样应该好理解点…子类我直接口述下:

3.java数据类型

4.JDK、JRE、JVM基本概念
JDK: Java Development kit Java 开发工具包
JRE: Java Runtime Environment Java 运行环境
JVM: Java virtual Machine Java 虚拟机
5.Java程序编译和运行的过程(了解下就好)
(1)Java编译程序将Java源程序翻译为JVM可执行代码–字节码,创建完源文件之后,程序会先被编译成 “.class” 文件。

img
img
img

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

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

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

va virtual Machine Java 虚拟机
5.Java程序编译和运行的过程(了解下就好)
(1)Java编译程序将Java源程序翻译为JVM可执行代码–字节码,创建完源文件之后,程序会先被编译成 “.class” 文件。

[外链图片转存中…(img-qzaAnJWb-1715491343507)]
[外链图片转存中…(img-Dwsg7JUe-1715491343508)]
[外链图片转存中…(img-6cnjjoBv-1715491343508)]

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

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

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

  • 17
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值