测试岗面经
两个机器之间的通讯过程
[if !supportLists]1、[endif]主机A和主机B在同一个二层网络中,直接走二层交换。主机A查看自己的ARP缓存,检查是否有主机B的MAC映射,如果有映射,构造报文,目的IP为主机B的IP,源IP为主机A的IP,目的MAC为主机B的mac,源MAC为主机A的MAC,将报文发送给交换机C,交换机C进行MAC地址表学习,将主机A的MAC和报文端口号记录下来,然后C查看自己的MAC转发表,检查是否有主机B的MAC到端口的映射,如果有就获取对应端口,将报文发送出去,如果没有B的MAC转发表映射,则采用洪泛的形式广播报文。主机B收到A的报文后向A回复。如果A没有B的ARP映射,则A需要发送ARP请求,以获取B的MAC,将报文发送给C,C广播报文,B收到广播后,在自己的ARP缓存表中写入主机A的IP到MAC的映射,将自己的MAC封装到ARP回复报文中,单播给A。
[if !supportLists]2、[endif]主机A和B不在同一个网络中,走三层路由。主机A查看ARP缓存表,检查是否有路由器E的IP到MAC的映射,如果有映射,获取路由器E的MAC,构造报文,目的iP为B的IP,目的MAC为E的MAC,将报文通过交换机C发往路由器E。
[if !supportLists]3、[endif]当目的主机接收到数据帧的操作:对比目的MAC,如果是发给自己的就拆去数据帧头,发往网络层,网络层对比目的IP,如果相同则拆包发往传输层,传输层再对比目的端口,确认相同则拆去数据段交给应用程进行数据组装。
递归和动态规划
递归:自底向上,利用循环将结果存在数组里,从数组起始位置向后计算,利用函数调用自身实现,如果不存储上一个状态的解,则为递归。复杂度是指数级的
动态规划:自定向下,负责度是线性的
计算机网络为什么有7层
物理层(规定如果为网络通信实现最底层的物理连接),
数据链路层(将比特组装成帧和点到点的连接,规定了如何进行物理地址寻址,如何在物理线路上进行数据帧的可靠传递与流量控制,有SLIP协议,CSLIP协议和PPP协议等),
网络层(负责数据包从源到宿的传递和网际互连),
传输层(提供端到端的可靠报文段和错误恢复,有TCP,UDP协议),
会话层(在网络中的两个节点之间建立、维持和终止通信),
表示层(对数据进行翻译、加密、解密和压缩,在应用程序和网络之间对数据进行格式化,使之能够被另一方理解,即发送方的表示层将应用程序数据的抽象语法转换成网络使用于OSI网络传输的传送语法,接收方则相反)。
应用层(最顶层的OSI层,为应用程序提供网络服务,如为电子邮件、文件传输功能提供协议支持,有HTTP、FTP、SMTP协议等)。
各层之间严格单向依赖,上层使用下层提供的服务,下层向上层提供服务。
常用的TCP/IP(传输控制协议/因特网互联协议)网络模型有四层结构:
应用层:HTTP FTP SMTP协议
传输层:确认数据传输进行纠错处理,常用协议:TCP UDP
网络层:负责数据传输、路径及地址选择,常用协议:IP、ARP(地址解析协议)
网络接口层:为保证可靠传输,将网络层传输过来的数据加工成可被物理层传输的结构包-帧,帧中除了包括需要传输的数据,还包括发送方和接收方的物理地址以及检错和控制信息,物理地址确定帧将发送到何处。
sql: inner join、 left join 、right join三表查询
left join(左连接)返回包括左表中的所有记录和右表中联结字段相等的记录
right join:返回包括右表中的所有记录和左表中联结字段相等的记录
inner join等值连接,只返回两个表中联结字段相等的行。
socket网络编程
在TCP/IP协议中,“IP地址+TCP或UDP端口号”唯一标识网络通讯中的一个进程。“IP地址加端口号”就对应一个socket,欲建立连接的两个进程各自有一个socket来标识,那么这两个socket组成的socket pair就唯一标识一个连接,因此可以用socket来描述网络连接的一对一关系。
测试计划和测试方案
测试计划:对测试全过程的组织、资源、原则等进行规定和约束,并制定测试全过程各个阶段的任务分配以及时间进度安排,并对各项任务的评估,风险分析和管理需求。
测试方案:描述需测试的特性,测试的方法,测试环境的规划,测试工具的设计和选择,测试用例的设计方法,测试代码的设计方法。
什么是索引
索引是一种特殊的文件,它们包含着对数据表里所有记录的引用指针。索引的实现通常使用B树及其变种B+树。索引可以大大提高MySQL的检索速度,索引是一张表,保存了主键与索引字段,并指向实体表的记录。索引的类型有FULLTEXT,HASH,BTREE,RTREE.
hash索引和B+树索引:hash索引底层是hash表,调用一次hash函数就可以获取到相应的键值。B+树底层实现是多路平衡查找树,对于每次的查询都是从根节点出发,查找到叶子节点方可获得所查键值,然后根据查询判断是否需要回表查询数据。hash索引进行等值查询更快,但是无法进行范围查询。
什么是SQL:结构化查询语言(structured query language)是一种数据库查询语言,用于存取数据、查询、更新和管理关系数据库系统。
索引的类型:主键索引,数据列不允许重复,不允许为null,一个表只能有一个主键。
唯一索引:数据列不允许重复,允许为null值,一个表允许多个列创建唯一索引
普通索引:基本的索引类型,没有唯一性的限制,允许为null值
全文索引:是目前搜索引擎使用的一种关键技术。
数据库三大范式:第一范式:每个列都不可再拆分;第二范式:在第一范式基础上,非主键完全依赖于主键,而不能是依赖于主键的一部分;第三范式;在前者的基础上,非主键只依赖于逐渐,设计数据库结构时需尽量遵守三范式。
mysql有关权限表有哪几个:user权限表:记录允许连接到服务器的用户账号信息,里面的权限是全局级的
db权限表:记录各个账号在各个数据库上的操作权限
table_priv权限:记录数据表级的操作权限
columns_priv权限表:记录数据列级的操作权限
host权限表:配合db权限表对给定主机上数据库级操作权限做更细致的控制。
什么是数据库事务:事务是一个不可分割的数据库操作序列,也是数据库并发控制的基本单位,其执行的结果必须使数据库从一致性状态变到另一种一致性状态。事务时逻辑上的一组操作,要么都执行,要么都不执行。
京东登录页面怎么测
界面UI测试(布局是否合理,输入框按钮对其方式,输入框按钮的高度长度是否符合要求,界面的设计风格是否与UI的设计风格统一,界面的文字简洁易懂,没用错别字)
功能测试(用户名,密码输入为空,点击查看提示信息,输入正确的用户名和密码,点击验证登录成功,登录成功后,验证是否跳转到正确的页面,用户名密码过长过短是否题是,用户名和密码前后有空格的处理,用户名和密码有特殊字符的处理,登陆失败后不能记住密码的功能,密码是否加密显示,输入密码时,大小写键盘开启是否有提示,输错用户名和密码是否有提示)
性能测试(打开登录页面,需要几秒,输入正确的用户名和密码,登录成功不超过5秒)
兼容性测试(主流浏览器石头显示成功,不同平台是否显示成功,不同设备是否显示成功,不同分辨率)
可用性测试(是否支持全键盘操作,是否有快捷键,输入用户名和密码回车是否能登录,输入框是否可以tab键切换)
安全测试(用户名和密码是否通过加密的方式发给web服务器,用户名和密码的验证应该是在服务器端,而不是JavaScript前端,用户名和密码的输入框应该屏蔽SQL和脚本输入,错误登录的次数限制,考虑是否支持多用户在同一设备登录和一用户在多设备上登录,密码是否保存在本地的cookie中。)
普通用户,百度首页打不开,问题怎么定位,写出定位流程
Git常见的操作
git init初始化新的仓库
git add .操作所有文件
git add README.md将已修改的文件放入暂存区
git status查看仓库中文件的状态
git rm a01.txt查看仓库中文件的状态
git checkout --a01.txt恢复被删除的文件
TCP如何保证可靠性
[if !supportLists]1、[endif]校验和判断传输数据是否出现修改,2、TCP传输过程中每次接收方收到数据后都会对传输方进行确认应答。序列号能够将接收到的数据根据序列号排序,并且去掉重复序列号的数据。3、TCP使用超时重传机制来解决问题,发送端在发送数据之后会等待一段时间,如果时间到达后,还没收到ACK报文,则重新发送刚才的数据,并返回ACK报文,如果已经接收过,则直接抛弃,返回ACK报文。4、确认应答。5、连接管理、6、流量控制。7、拥塞控制
打开一个网页发生了什么
1、域名解析成IP地址。2、与目的主机进行TCP连接(三次握手)3、发送与收取数据(浏览器与目的主机开始HTTP访问过程)4、与目的主机断开TCP连接(四次挥手)
接口测试质量评估标准
业务功能和业务规则覆盖是否完整,参数验证是否达到要求,接口异常场景覆盖是否完整,接口覆盖率是否达到要求,代码覆盖率是否达到要求,性能指标是否满足要求,安全指标是否满足要求。
有哪些bug系统
禅道/bugzila等
了解过哪些技术论坛
51testing论坛,CSDN博客,公众号(搜狗测试,软件测试资源分享)
软件测试需要掌握哪些知识
软件测试基础知识,流程,测试用例方法,数据库相关知识,抓包分析,接口测试,测试工具,性能测试
测试用例的基本要素是啥
版本号,功能模块,优先级别,前置条件,步骤,预期结果,实际结果等
数据库方面常识
关系型数据库:把复杂的数据结构归为简单的二元关系(即二维表格形式),通过SQL结构化查询语句存储数据
非关系型数据库:NoSQL,(NOT only SQL)为了高性能、高并发而生
键值存储数据库:主要使用一个哈希表,这个表中有一个特定的键和一个指针指向特定的数据。简单、易部署、高并发。典型的有Redis,Memcached
列存储数据库(Hbase):对应分布式存储的海量数据,如果我们有一个Person类,我们通常会查询他们的姓名和年龄而不是薪资,这种情况下性别和年龄就会被放入一个列,而薪资则在另外一个列族中。
面向文档数据库(Hive)Hive可以用于统计查询,HBase可以用于进行实时查询。
软件测试流程
一般是根据自己的日常经验和测试的思维来设计测试用例。在设计测试用例时一般从以下几个方面进行分析:功能测试,性能测试,界面测试,安全性测试,兼容性测试,可用性测试,可靠性测试,本地化/国际化测试。
公司严格规范测试流程和测试文档,首先是参与需求评审,编写测试计划,测试方案,测试用例,进行测试方案及用例的测试组内部评审,外部评审。提取一部分一级用例提交研发自测,研发自测通过后开始执行一轮系统测试。测试过程中发现并提交跟踪问题。问题修复后进行回归测试。
一轮测试完成后对修复包进行冒烟测试,测试通过则进行二轮测试,二轮测试完成后会进行需求交叉测试。完成测试编写系统测试报告提交验收测试,验收测试通过输出验收测试报告。
接口测试
什么是接口:接口测试主要用于外部系统与系统之间及各个子系统之间的交互点,定义特定的交互点,然后通过这些交互点来进行数据之间的交互。接口类型:程序内部的接口,系统对外的接口。接口的本质:本质是URL通过get或post请求向服务器发送一些东西,然后得到一些返回值,本质就是数据的传输与接收。接口测试(构造参数-发送请求-校验结果):测试系统组件接口的一种测试,接口测试主要用于检测外部系统与系统之间以及内部各子系统之间的交互点。测试的重点是要检查数据的交换、传递和控制管理过程、以及系统间的互相逻辑依赖关系。测试接口的正确性和稳定性。重点检查数据的交换,传递和控制管理过程,还包括处理的次数。
怎样做接口测试:通过工具(postman,jmeter,soupUI,Java+HTTP client等)或代码模拟HTTP请求的发送与接收。
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则是不可靠信道
http协议,get/post区别、三次握手、四次挥手、TCP如何保障顺序
三次握手:
在第一次消息发送中,A随机选取一个序列号作为自己的初始序号发送给B;
第二次消息B使用ack对A的数据包进行确认,因为已经收到了序列号为x的数据包,准备接收序列号为x+1的包,所以ack=x+1,同时B告诉A自己的初始序列号,就是seq=y;
第三条消息A告诉B收到了B的确认消息并准备建立连接,A自己此条消息的序列号是x+1,所以seq=x+1,而ack=y+1是表示A正准备接收B序列号为y+1的数据包。
四次挥手:
由于TCP连接时全双工的,因此,每个方向都必须要单独进行关闭,这一原则是当一方完成数据发送任务后,发送一个FIN来终止这一方向的连接,收到一个FIN只是意味着这一方向上没有数据流动了,即不会再收到数据了,但是在这个TCP连接上仍然能够发送数据,直到这一方向也发送了FIN。首先进行关闭的一方将执行主动关闭,而另一方则执行被动关闭。
(1)第一次挥手:Client发送一个FIN,用来关闭Client到Server的数据传送,Client进入FIN_WAIT_1状态。
(2)第二次挥手:Server收到FIN后,发送一个ACK给Client,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号),Server进入CLOSE_WAIT状态。
(3)第三次挥手:Server发送一个FIN,用来关闭Server到Client的数据传送,Server进入LAST_ACK状态。
(4)第四次挥手:Client收到FIN后,Client进入TIME_WAIT状态,接着发送一个ACK给Server,确认序号为收到序号+1,Server进入CLOSED状态,完成四次挥手。
测试工具
自动化测试工具(如QTP),性能测试工具(如loadrunner),测试管理类(jira)安全测试工具,渗透测试工具。
Java python JavaScript之间的区别
(变量)Java可以通过8大基本数据类型来声明变量(byte、short、int、long、float、double、boolean、char)。JavaScript通过let、const来声明变量(number,string,null,undefined,object,Boolean)。python无需通过数据类型来声明。
(函数定义)Java:访问修饰符 是否静态的 返回值 函数名 (参数类型 参数名){}
JavaScript:function 函数名(参数名){}
python:def 函数名(参数名):函数体
字符串:JavaScript采用UTF-16编码,python使用ASCII码,需要调用encode、decode来进行编码转换,使用u作为前缀可以指定字符串使用unicode编码。
Linux常用命令
有序数组合并
三次握手、输入url返回发生了啥
高并发的测试方案
斐波那契数列
多线程通信方式,多线程会出现什么问题
IP的包结构
Linux基本命令
https是什么,常用的状态码
怎么优化查询
postman接口测试怎么测的,用过哪些方法
Linux查询cpu 删除最近三天最大的日志文件
如果一个网站突然访问不了,会是什么原因
get和post的区别
线程和进程
使用索引的缺点
软件测试流程
黑盒白盒测试
bug生命周期
如何测试一个系统
缓存的缺点
项目经历技术难点如何克服
胎心率是胎儿宫内健康状态评估的重要安全指标,本项目提出一种基于迁移学习和支持向量机的胎儿状态评估方法。首先采用盲分割的方法对原始信号进行分割,通过插值法对截取的信号进行降噪处理,如何采用广义S变换来捕捉FHR信号在各个时间点的频率轨迹图,最后引入卷积神经网络AlexNet模型,学习得到特征向量,作为支持向量机的输入进行胎心率分类,分类准确率达到97.9%。
技术难点:卷积神经网络AlexNet的输入是图片,如何使一维的胎心率信号转化为二维的图片信号是本项目的技术难点。项目时间紧迫也是一个难点。
如何克服:采用广义S变换对信号进行时频分析,得到比原始时域信号更为丰富的信息。广义S变换具有可变形态的窗口,可以对信号特定区域进行时频聚焦,得到更好的局部谱和时频聚集。
安卓小程序
新建一个项目---MainActivity.java,activity_main.xml
编写逻辑事件
文本框和按钮的添加可直接拖拽到相应的布局文件。发生点击事件时,调用onCliCk()函数。
在MainActivity中用意图对象调用系统的拨号功能,并且为拨号功能进行权限配置<uses-permission android:name="android.permission.CALL_PHONE" />
activity生命周期:7个:onCreate()表示Activity正在被创建,常用来初始化工作;onRestart()表示Activity正在重新启动,一杯情况下Activity从不可见重新变为可见时,onRestart就会被调用;onStart():表示Activity正在被启动,此时Activity可见但不在前台,还处于后台,无法与用户交互;onResume():表示Activity获得焦点,此时Activity可见且在前台并开始活动,这是与onStart的区别所在;onPause():表示Activity正在停止,此时可做一些存储数据、停止动画等工作,但是不能太耗时,因为这会影响到新Activity的显示,onPause必须先执行完,新Activity的onResume才会执行;onStop():表示Activity即将停止,可以做一些稍微重量级的回收工作,比如注销广播接收器、关闭网络连接等,同样不能太耗时;onDestroy():表示Activity即将被销毁,这是Activity生命周期中的最后一个回调,常做回收工作、资源释放;
Android四大组件:Activity、service、content、provider(都需要在AndroidManifest文件中进行配置。AndroidManifest文件中未进行声明的activity、服务以及内容提供者将不为系统所见,从而也就不可用。而broadcast receiver广播接收者的注册分静态注册(在AndroidManifest文件中进行配置)和通过代码动态创建并以调用Context.registerReceiver()的方式注册至系统。需要注意的是在AndroidManifest文件中进行配置的广播接收者会随系统的启动而一直处于活跃状态,只要接收到感兴趣的广播就会触发)