- 冒泡排序:
For i in range(1,len(array)):
For j in range(0,len(array)-i):
If array[j]>array[j+1]:
Array[j],array[j+1]=array[j+1].array[j]
Return array
- 七层协议:
物理层 通过媒介传输比特,确定机械及电气规范 比特Bit RJ45、CLOCK、IEEE802.3 (中继器,集线器)
数据链路层 将比特组装成帧和点到点的传递 帧Frame PPP、FR、HDLC、VLAN、MAC (网桥,交换机)
网络层 负责数据包从源到宿的传递和网际互连 包PackeT IP、ICMP、ARP、RARP、OSPF、IPX、RIP、IGRP(路由器)
传输层 提供端到端的可靠报文传递和错误恢复 段Segment TCP、UDP、SPX
会话层 建立、管理和终止会话 会话协议数据单元 NFS、SQL、NETBIOS、RPC
表示层 对数据进行翻译、加密和压缩 表示协议数据单元 JPEG、MPEG、ASII
应用层 允许访问OSI环境的手段 应用协议数据单元 FTP、DNS、Telnet、SMTP、HTTP、WWW、NFS
- TCP与udp区别:
TCP ------------------------- UDP
连接方式 面向连接的、可靠的数据流传输 // 非面向连接的、不可靠的数据流传输
通信方式 一对一、点对点 // 一对一、一对多、多对一、多对多
传输单位 TCP报文段 // 用户数据报
对系统资源要求 较多(TCP的20个字节信息包),负载高,采用虚电路 // 较少(UDP信息包的标题很短,只有8个字节)
安全性 可靠,安全 // 数据传输快,但是不可靠(尽最大努力交付)
对应协议 FTP、Telnet、SMTP、POP3、HTTP // DNS、SNMP、TFTP
TCP提供超时重发、丢弃重复数据、检验数据、窗口技术、流量控制等功能,保证数据能传到另外一端。
UDP常用于QQ等即时通讯软件(适合于实时通信,当网络阻塞时,不影响发送端的发送效率
- 三次握手:
第一次握手:客户端发送syn包(syn=x)到服务器,并进入SYN_SEND状态,等待服务器确认;
第二次握手:服务器收到syn包,必须确认客户的SYN(ack=x+1),同时自己也发送一个SYN包(syn=y),即SYN+ACK包,此时服务器进入SYN_RECV状态;
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=y+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。
“三次握手”的目的是“为了防止已失效的连接请求报文段突然又传送到了服务端,因而产生错误”。
- 四次挥手(我要和你断开链接;好的,断吧;我也要和你断开链接;好的,断吧)
与建立连接的“三次握手”类似,断开一个TCP连接则需要“四次握手”。
第一次挥手:主动关闭方发送一个FIN,用来关闭主动方到被动关闭方的数据传送,也就是主动关闭方告诉被动关闭方:我已经不会再给你发数据了(当然,在fin包之前发送出去的数据,如果没有收到对应的ack确认报文,主动关闭方依然会重发这些数据),但是,此时主动关闭方还可以接受数据。
第二次挥手:被动关闭方收到FIN包后,发送一个ACK给对方,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号)。
第三次挥手:被动关闭方发送一个FIN,用来关闭被动关闭方到主动关闭方的数据传送,也就是告诉主动关闭方,我的数据也发送完了,不会再给你发数据了。
第四次挥手:主动关闭方收到FIN后,发送一个ACK给被动关闭方,确认序号为收到序号+1,然后进入等待 TIME_WAIT 状态。被动方收到发起方的报文段以后关闭连接。发起方等待一定时间未收到回复,则正常关闭。
- HTTP与HTTPS
二者之间存在如下不同:
端口不同:Http与Https使用了不同的连接方式,用的端口也不一样,前者是80,后者是443;
资源消耗:和Http通信相比,Https通信由于加解密处理消耗更多的CPU和内存资源;
开销:Https通信需要证书,而证书一般需要向认证机构购买;
- Http请求解析过程
浏览器输入一个连接,到展示到页面,经过了什么
(1). 浏览器查询 DNS,获取域名对应的IP地址 :具体过程包括浏览器搜索自身的DNS缓存、搜索操作系统的DNS缓存、读取本地的Host文件和向本地DNS服务器进行查询等。对于向本地DNS服务器进行查询,如果要查询的域名包含在本地配置区域资源中,则返回解析结果给客户机,完成域名解析(此解析具有权威性);如果要查询的域名不由本地DNS服务器区域解析,但该服务器已缓存了此网址映射关系,则调用这个IP地址映射,完成域名解析(此解析不具有权威性)。如果本地域名服务器并未缓存该网址映射关系,那么将根据其设置发起递归查询或者迭代查询;
(2). 浏览器获得域名对应的IP地址以后,浏览器向服务器请求建立链接,发起三次握手;
(3). TCP/IP链接建立起来后,浏览器向服务器发送HTTP请求;
(4). 服务器接收到这个请求,并根据路径参数映射到特定的请求处理器进行处理,并将处理结果返回给浏览器;
(5). 浏览器解析并渲染视图,若遇到对js文件、css文件及图片等静态资源的引用,则重复上述步骤并向服务器请求这些资源;
(6). 浏览器根据其请求到的资源、数据渲染页面,最终向用户呈现一个完整的页面。
- Session 与 Cookie 的对比
实现机制:Session的实现常常依赖于Cookie机制,通过Cookie机制回传SessionID;
大小限制:Cookie有大小限制并且浏览器对每个站点也有cookie的个数限制,Session没有大小限制,理论上只与服务器的内存大小有关;
安全性:Cookie存在安全隐患,通过拦截或本地文件找得到cookie后可以进行攻击,而Session由于保存在服务器端,相对更加安全;
服务器资源消耗:Session是保存在服务器端上会存在一段时间才会消失,如果session过多会增加服务器的压力。
- Get/post区别:
1、url可见性:
get,参数url可见;
post,url参数不可见
2、数据传输上:
get,通过拼接url进行传递参数;
post,通过body体传输参数
3、缓存性:
get请求是可以缓存的
post请求不可以缓存
4、后退页面的反应
get请求页面后退时,不产生影响
post请求页面后退时,会重新提交请求
5、传输数据的大小
get一般传输数据大小不超过2k-4k(根据浏览器不同,限制不一样,但相差不大)
post请求传输数据的大小根据php.ini 配置文件设定,也可以无限大。
6、安全性
这个也是最不好分析的,原则上post肯定要比get安全,毕竟传输参数时url不可见,但也挡不住部分人闲的没事在那抓包玩。安全性个人觉得是没多大区别的,防君子不防小人就是这个道理。对传递的参数进行加密,其实都一样。
GET产生一个TCP数据包;POST产生两个TCP数据包。对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据);而对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)。在网络环境好的情况下,发一次包的时间和发两次包的时间差别基本可以无视。而在网络环境差的情况下,两次包的TCP在验证数据包完整性上,有非常大的优点。并不是所有浏览器都会在POST中发送两次包,Firefox就只发送一次。
- 系统网络安全的测试要考虑问题:
1.测试采取的防护措施是否正确装配好,有关系统的补丁是否打上
2.模拟非授权攻击,看防护系统是否坚固
3.采用成熟的网络漏洞检查工具检查系统相关漏洞(即用最专业的黑客攻击工具攻击试一下,现在最常用的是 NBSI系列和 IPhacker IP )
4.采用各种木马检查工具检查系统木马情况
5.采用各种防外挂工具检查系统各组程序的客外挂漏洞
- 数组和列表的区别:
python没有数组,只有元组(tuple)和列表(list)。
元组与列表最大的不同在于,元组一旦创建便不可改变;
因此不像列表,元组不能够在末尾追加(append)元素,弹出(pop)元素;
只能对元组中的元素进行索引t[0],不能对其中的元组进行赋值t[0]=8。
使用元组的好处在于对元组进行操作更为高效,适合存放一组常量。
- 前后端BUG定位
如果请求数据与接口文档不一致,则是前端问题
如果请求数据与接口文档一致,响应数据与接口文档也一致,则是前端问题
如果请求数据与接口文档一致,响应数据与接口文档不一致,则是后端问题
浏览器F12调试
查看后台日志
- 什么情况下定位不到元素
代码写错
元素未出现(需要元素等待)
元素在iframe中
多窗口
出现弹窗(系统弹窗、JS弹窗)
元素属性值是动态加载的
元素无法确定唯一性
只读属性(元素不可操作)
- 为什么要做接口测试
越底层发现BUG,修复成本越低
前端发生变化时,后端接口可以不用变
检查系统的安全性、稳定性,前端传参不可信
- http状态码
1xx:请求正常,但是无响应,只有在实验状态下使用
2xx:2开头的表示发送成功
3xx:3开头的代表重定向,常见302
4xx:400代表客户端发送的语法有错误,401代表访问的页面没有授权,403 无权限访问该网页,404代表没有这个页面,415 格式错误
5xx:5开头的代表服务器异常,500代表服务器内部异常,504代表服务器超时
- Web测试与app测试区别:
1.功能方面:
在流程和功能测试上是没有区别的,系统测试和一些细节可能会不一样。那么我们就要先来了解,web和app的区别:
web项目,一般都是b/s架构,基于浏览器的,而app则是c/s的,必须要有客户端。在系统测试的时候就会产生区别了。
首先从系统架构来看的话,web测试只要更新了服务器端,客户端就会同步会更新。而且客户端是可以保证每一个用户的客户端完全一致的。但是app端是不能够保证完全一致的,除非用户更新客户端。如果是app下修改了服务端,意味着客户端用户所使用的核心版本都需要进行回归测试一遍。
2.性能方面:
web页面可能只会关注响应时间,而app则还需要关心流量、电量、CPU、GPU、Memory这些了。
3.兼容性方面:
web是基于浏览器的,所以更倾向于浏览器和电脑硬件,电脑系统的方向的兼容,不过一般还是以浏览器的为主。而浏览器的兼容则是一般是选择不同的浏览器内核进行测试(IE、chrome、Firefox)。app的测试则必须依赖phone或者是pad,不仅要看分辨率,屏幕尺寸,还要看设备系统。系统总的来说也就分为Android和iOS,不过国内的Android的定制系统太多,也是比较容易出现问题的。
4.相比较web测试,app更是多了一些专项测试:
一些异常场景的考虑以及弱网络测试。这里的异常场景就是中断,来电,短信,关机,重启等。
而弱网测试是app测试中必须执行的一项测试。包含弱网和网络切换测试。需要测试弱网所造成的用户体验,重点要考虑回退和刷新是否会造成二次提交。需要测试丢包,延时的处理机制。避免用户的流失。这些在前面的弱网测试那篇已经讲过,这里不再讲了。
5.安装、卸载、更新:
web测试是基于浏览器的所以不必考虑这些。而app是客户端的,则必须测试安装、更新、卸载。除了常规的安装、更新、卸载还要考虑到异常场景。包括安装时的中断、弱网、安装后删除安装文件,更新的强制更新与非强制更新、增量包更新、断点续传、弱网,卸载后删除app相关的文件等等。
6.界面操作:
app产品的用户都是使用的触摸屏手机,所以测试的时候还要注意手势,横竖屏切换,多点触控,事件触发区域等测试