测试基础梳理
一、网络
1、TCP/ip协议:TCP/IP是互联网相关的各类协议族的总称,如TCP,UDP,IP,FTP,HTTP等都属于TCP/IP族内的协议。(解释不唯一)
TCP/IP的参考模型主要分为四层:应用层、传输层、网络层和数据链路层
http1跟2区别: HTTP/2 采用二进制格式传输数据,而非 HTTP/1.x 的文本格式。二进制格式在协议的解析和优化扩展上带来更多的优势和可能。
(2) HTTP/2 对消息头采用 HPACK 进行压缩传输,能够节省消息头占用的网络的流量。而 HTTP/1.x 每次请求,都会携带大量冗余头信息,浪费了很多带宽资源。头压缩能够很好的解决该问题。
(3) 多路复用,直白的说就是所有的请求都是通过一个TCP 连接并发完成。
http与https区别:https利用 SSL/TLS 来加密数据包更安全
get,post区别:get是从服务器上获取数据,GET 方法向 URL 添加数据;URL 的长度是受限制的(URL 的最大长度是 2048 个字符)。
post是向服务器传送数据,Post POST 比 GET 更安全,因为参数不会被保存在浏览器历史或 web 服务器日志中。
PUT 用于将数据发送到服务器来创建/更新资源。
HEAD 与 GET 几乎相同,但没有响应主体。
DELETE 方法删除指定的资源。
OPTIONS 方法描述目标资源的通信选项。
TCP与UDP区别: TCP(Transmission Control Protocol 传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。
TCP三次握手 :第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SENT状态,等待服务器确认;SYN:同步序列编号(Synchronize Sequence Numbers)。
第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED(TCP连接成功)状态,完成三次握手。
TCP和UDP的区别
TCP面向连接(如打电话要先拨号建立连接);UDP是无连接的,即发送数据之前不需要建立连接
TCP提供可靠的服务。UDP尽最大努力交付,即不保证可靠交付。也就是说,通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达,TCP通过校验和,重传控制,序号标识,滑动窗口、确认应答等机制实现可靠传输。如丢包时的重发控制,还可以对次序乱掉的分包进行顺序控制。
UDP具有较好的实时性,工作效率比TCP高,适用于对高速传输和实时性有较高的通信或广播通信。
每一条TCP连接只能是点到点的;UDP支持一对一,一对多,多对一和多对多的交互通信。TCP对系统资源要求较多,UDP对系统资源要求较少。
3、DNS解析寻ip址:DNS( Domain Name System),它用于TCP/IP网络,它所提供的服务是用来将主机名和域名转换为IP地址的工作。
4、cookies,token,session 区别:cookie有服务器生成保存在客户端,容易被人拦截具有安全隐患
session:一些重要信息需要通过加密传输,可以把用户相关信息和状态保存在服务器,但因为保存在服务器内存中,当同时访问的用户很多时内存占用争夺,性能会受到影响
token:支持跨域访问,防止信息外泄,可以在多个服务间共享。且不像session存储于服务器内存中,不影响服务器的性能,但是需要额外的时间开销(cpu需要每次去校验传过来的token是否有效
二、服务结构,中间件,Db
服务调用流程: C端(app,H5)--》腾讯云客户端负载均衡clb(cloud load balance)/阿里云slb--》Nginx --》gateway 网管--》具体服务service --》DB ,redis,ES数据库(非关系型数据库,搜索检索工具,驰旺标签),mangoDB(数据中台大量交易数据)
MQ、redis中间件:MQ组成结构
Broker:消息服务器,作为server提供消息核心服务
Producer:消息生产者,业务的发起方,负责生产消息传输给broker,
Consumer:消息消费者,业务的处理方,负责从broker获取消息并进行业务逻辑处理
Topic:主题,发布订阅模式下的消息统一汇集地,不同生产者向topic发送消息,由MQ服务器分发到不同的订阅 者,实现消息的广播
Queue:队列,PTP模式下,特定生产者向特定queue发送消息,消费者订阅特定的queue完成指定消息的接收
Message:消息体,根据不同通信协议定义的固定格式进行编码的数据包,来封装业务数据,实现消息的传输
redis:什么是 RedLock
Redis 官方站提出了一种权威的基于 Redis 实现分布式锁的方式名叫 Redlock,此种方式比原先的单节点的方法更安全。它可以保证以下特性:
哨兵模式:哨兵监测到master宕机,会自动将slave切换成master,然后通过发布订阅模式通知其他的从服务器,修改配置文件,让它们切换主机。
安全特性:互斥访问,即永远只有一个 client 能拿到锁
避免死锁:最终 client 都可能拿到锁,不会出现死锁的情况,即使原本锁住某资源的 client crash 了或者出现了网络分区
容错性:只要大部分 Redis 节点存活就可以正常提供服务
redis TTL查key的有效期:当key不存在的时候,返回-2
当key存在但是没有设置过期时间的时候返回-1
当设置了过期时间的时候返回过期时间,以秒为单位
缓存雪崩:是指缓存同一时间大面积的失效,所以,后面的请求都会落到数据库上,造成数据库短时间内承受大量请求而崩掉。
解决方案:
缓存数据的过期时间设置随机,防止同一时间大量数据过期现象发生。
一般并发量不是特别多的时候,使用最多的解决方案是加锁排队。
给每一个缓存数据增加相应的缓存标记,记录缓存的是否失效,如果缓存标记失效,则更新数据缓存。
缓存穿透:是指缓存和数据库中都没有的数据,导致所有的请求都落到数据库上,造成数据库短时间内承受大量请求而崩掉。
解决方案
接口层增加校验,如用户鉴权校验,id做基础校验,id<=0的直接拦截;
从缓存取不到的数据,在数据库中也没有取到,这时也可以将key-value对写为key-null,缓存有效时间可以设置短点,如30秒(设置太长会导致正常情况也没法使用)。这样可以防止攻击用户反复用同一个id暴力攻击
采用布隆过滤器,将所有可能存在的数据哈希到一个足够大的 bitmap 中,一个一定不存在的数据会被这个 bitmap 拦截掉,从而避免了对底层存储系统的查询压力
三、性能
jmeter:单接口、多接口串联场景、关联混合场景
性能指标:TPS、响应时间、吞吐量、错误率、CPU、内存、带宽、磁盘读写IO
监控工具:nmon 、 arthas 、Linux命令:top、free -m ,iostat
lperf(网络)性能工具
四、安全
burp 安全工具: 安全漏洞:三方登录openid客服端传入未加密
五、Python数据,算法
整数、浮点、复数、字符串、列表、元祖、字典、集合
复数( (complex)) - 复数由实数部分和虚数部分构成,可以用a + bj,或者complex(a,b)表示, 复数的实部a和虚部b都是浮点型。
python实现十大经典算法
排序算法可以分为内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。
常见的内部排序算法有:插入排序、希尔排序、选择排序、冒泡排序、归并排序、快速排序、堆排序、基数排序等。
装饰器:不修改原代码而添加新的功能(多个方法模块使用装饰新增新功能),减少代码的复用率,装饰器的返回值也是一个函数对象。现在我们想为这两个函数增加一段共同的操作,这时就可以使用函数修饰符。
python yield 和 return 对比分析
相同点:都是返回函数执行的结果
不同点:return 在返回具体结果,结束运行函数,而yield 则是让函数变成一个生成器(可迭代.next()),生成器每次产生一个值(yield语句),函数被冻结,被唤醒后再产生一个值
常用包:os,sys,xlrd,request,urllib3,Untiltest,mysqlDB,redis,django,selenium、
列表、元祖、字典区别:1.元祖: 对象有序排列,通过索引读取读取, (对象不可变,优点:安全,遍历元组比列表操作速度快),可以是数字、字符串、列表、字典、其他元祖
2.列表: 对象有序排列,通过索引读取读取, 对象是可变的,可以是数字、字符串、元祖、其他列表、字典
3.字典: 对象的无序集合,通过键值(key-value)读取,可变的 键唯一,且不可变(可以是数字、字符串、元祖,但不能是列表),
redis操作:set(增改),get查,delete 删除
mysql操作:建立连接: db = MySQLdb.connect("10.242.227.17", "fmapp_uat_ops", "@xe$tGJ79cp9BhFX", "fmapp_mbr", charset='utf8')
使用cursor获取游标:cursor = db.cursor() --》执行sql:cursor.execute(sql)---》获取sql结果(list):cursor.fetchall()——》关闭数据库 db.close()
python自动化框架:untiltest、pytest,httprunner manager
java框架:testNg、cucumber,untiltest
六、java
byte 数据类型是8位、short 16 位、int 32位最小值是 -2,147,483,648(-2^31);最大值是 2,147,483,647(2^31 - 1);,long 数据类型是 64 位
double 64位,char 类型是一个单一的 16 位 Unicode 字符;
重写重载:重写是子类对父类(继承)的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变。即外壳不变,核心重写!
重载(overloading) 是在一个类里面,方法名字相同(仅方法名相同),而参数不同。返回类型可以相同也可以不同。
什么是空指针和野指针
1.空指针
1> 没有存储任何内存地址的指针就称为空指针(NULL指针)
2> 空指针就是被赋值为0的指针,在没有被具体初始化之前,其值为0。
下面两个都是空指针:
1 Student *s1 = NULL;
3 Student *s2 = nil;
2.野指针
"野指针"不是NULL指针,是指向"垃圾"内存(不可用内存)的指针。野指针是非常危险的。

浙公网安备 33010602011771号