0
点赞
收藏
分享

微信扫一扫

软件测试面试题汇总(三)

https://blog.csdn.net/q179886903/article/details/52741327

https://blog.csdn.net/yuanjw2014/article/details/52792338

  最常用的maven相关功能大概以下几种: 
      a、 管理jar依赖 
      b、 构建项目(打包、编译等) 
      c、 发布项目(共享、上传至服务器,供他人使用)

Maven用配置文件的方式对项目的描述、名称、版本号、项目依赖等等信息进行描述
Maven利用“约定大于配置”的思想,使项目构建省去很多复杂的配置。 Maven提供了仓库的概念,使依赖于其他的项目和第三方的组件放入仓库进行管理

maven管理构建时,可以将项目打成 jar、war、zip、tar.gz等
打包命令:
jar :mvn clean install -Dmaven.test.skip=true
说明:clean是清除之前的jar包,install是打包到本地(如果用deploy,是打包到远程仓库),-Dmaven.test.skip=true是忽略测试代码;
war:mvn clean package -Dmaven.test.skip=true
tar.gz : mvn package -DskipTests (使用到test-assembly.xml,在pom.xml文件中使用maven-assembly-plugin插件引用test-assembly.xml)

springMVC是spring的一个后续产品,其实就是spring在原有基础上,又提供了web应用的MVC模块,可以简单的把springMVC理解为是spring的一个模块(类似AOP,IOC这样的模块)


https://blog.csdn.net/Melod_bc/article/details/53414900

http://www.cnblogs.com/zmmi/p/7922186.html

抽象类和接口的对比



抽象类和普通类
普通类可以去实例化调用;抽象类不能被实例化,因为它是存在于一种概念而不非具体。
普通类和抽象类都可以被继承,但是抽象类被继承后子类必须重写继承的方法,除非自类也是抽象类。

字符串拼接的三种方法
① 加号
String str = "My name is ";
str = str + "JTZen9";
这种方法,编译器对字符串的加号做了优化,它会使用StringBuilder的append方法进行追加,而它最终通过toString方法转换成String字符串。
相当于 str = new StringBuilder(str).append(“JTZen9”).toString();
它与纯粹地使用StringBuilder的append方法是不同的:
每趟循环都会创建一个StringBuilder对象
每次执行完毕都会调用toString方法将其转换为字符串
所以,就耗费时间长
② concat方法
String str = "My name is ";
str = str.concat("JTZen9");
如果循环追加的话,每次concat操作都会创建一个新的String对象,就耗费时间
③ StringBuilder(或StringBuffer)的append方法
StringBuffer str = new StringBuffer("My name is ");
str.append("JTZen9");
如果循环追加的话,整个append方法都在做字符数组的处理,加长,拷贝等,这些都是基本的数据处理,整个方法内并没有生成对象。只是最后toString返回一个对象而已。所以耗费时间短。
总结:
a、String类本身是final类型,字符串拼接时,会使用StringBuffer,并调用append,之后再调用toString方法。而StringBuffer转换成String时,开销相当大。中间不仅创立了临时对象StringBuffer,还每次完后再要转成String。
b、在做字符串连接时,String类的concat方法优于+号。 ( String += ) 与 ( String = String + ) 相率相当。
c、而 StringBuilder的出现就是用来替换StringBuffer的,但不适宜于多线程编程。StringBuilder 在单线程编程情况下应优先于StringBuffer使用,而在多线程编程时则应使用StringBuffer,不宜使用StringBuilder 。
d、单线程情况下做字符串连接,StringBuilder.append 与 StringBuffer.append 效率相当。
所以,在进行单线程大量数据拼接时候两者皆可,进行多线程拼接数据使用 StringBuffer 保证线程安全 。

定义全局静态变量 :在全局变量前面加上关键字static,该全局变量变成了全局静态变量。全局静态变量有以下特点:
(1)在全局数据区内分配内存
(2)如果没有初始化,其默认值为0
(3)该变量在本文件内从定义开始到文件结束可见

定义局部静态变量:在局部静态变量前面加上关键字static,该局部变量便成了静态局部变量。静态局部变量有以下特点:
(1)该变量在全局数据区分配内存
(2)如果不显示初始化,那么将被隐式初始化为0
(3)它始终驻留在全局数据区,直到程序运行结束
(4)其作用域为局部作用域,当定义它的函数或语句块结束时,其作用域随之结束。

定义静态方法:在方法的返回类型加上static关键字,方法即被定义成静态方法。静态方法有以下特点:
(1)静态方法只能在本源文件中使用

对于一个完整的程序,在内存中的分布情况如下图:
代码区 、全局数据区 、堆区 、栈区
由new产生的动态数据存放在堆区
方法内部的变量存放在栈区。方法的变量一般会随着方法的退出而释放空间,
静态数据(静态全局变量、函数内部的静态局部变量)存放在全局数据区。全局数据区的数据并不会因为方法的退出而释放空间。

ps 正在运行的某个进程的状态
ps -ef 查看所有的进程
ps -ef | grep 2868 查看pid为2868的进程

kill 结束某一进程
kill 2868 结束pid为2868的进程
kill -9 2868 强制结束pid为2868的进程
Linux 常用命令

1)进入mysql的安装所在服务器(linux),输入命令:mysql -u root -p
2)用root用户进入mysql管理,输入密码
3)查找负荷最重的 SQL 语句,输入命令:mysql:show processlist
输出结果显示了有哪些线程在运行
4)优化负荷最重的sql
5)针对连接超时的sql优化,可以先查看连接超时秒数
输入命令:SHOW GLOBAL VARIABLES LIKE 'wait_timeout';
设置超时时间30秒,如果某个连接超时,会被mysql自然终止。
SET GLOBAL wait_timeout=30;

语句:select count(*) from tablename
分组查询:SELECT deptno, AVG(sal), MAX(sal) FROM emp GROUP by deptno HAVING AVG(sal) < 2000;
https://blog.csdn.net/guishufuhao/article/details/52404148

left join(左联接) ,返回包括左表中的所有记录和右表中联结字段相等的记录
right join(右联接) ,返回包括右表中的所有记录和左表中联结字段相等的记录
inner join(等值连接) ,只返回两个表中联结字段相等的行

https://blog.csdn.net/qq_34781336/article/details/79296050

SpringBoot 是基于Spring4的条件注册的一套快速开发整合包
Spring框架需要进行大量的配置,SpringBoot实现了自动配置,降低了spring项目搭建的复杂度。
不提供Spring框架的核心特性以及扩展功能,只是用于快速、敏捷地开发新一代基于Spring框架的应用程序.
Springboot和Spring框架紧密结合用于提升Spring开发者体验的工具。同时它集成了大量常用的第三方库配置(例如Jackson, JDBC, Mongo, Redis, Mail等等),SpringBoot应用中这些第三方库几乎可以零配置的开箱即用(out-of-the-box),大部分的Spring Boot应用都只需要非常少量的配置代码,开发者能够更加专注于业务逻辑。
springboot的简单应用:http://blog.51cto.com/zero01/2095040

ArrayList数组列表:
新增数据时,当空间不足时,重新申请一个双倍空间的数组,然后将原来数组中的内容,拷贝到新的数组中,然后将新的值添加进去。过程繁琐。
删除数据是中间内容时,需要将后续的内容向前拷贝转移。过程繁琐。
查询数据时,连续的内存空间,直接按照索引值即可查到。过程简单。
LikedList 链表:
新增数据时,链表不会存在空间不足的情况,每当添加一个数据项时,都会创建一个节点,然后设置节点的。前后连接,设置节点的值。过程简单。
删除中间节点时,只需要将前后节点的引用重新赋值即可。过程简单。
查询,需要从第一个节点,逐个的往后查询,最终到达目标索引。过程繁琐。
链表由于要维护前后的连接,所以占用的空间比较大
结论:
ArrayList方便查询,占用空间小。LinkedList方便添加删除等修改操作,占用空间大。
对于随机访问get和set,ArrayList优于LinkedList,因为LinkedList要移动指针。
对于新增和删除操作add和remove,LinedList比较占优势,因为ArrayList要移动数据。新增在末尾就是ArrayList比LinkedList快,如果在最前面就是LinkedList比ArrayList快
若只对单条数据插入或删除,ArrayList的速度反而优于LinkedList。但若是批量随机的插入删除数据,LinkedList的速度大大优于ArrayList. 因为ArrayList每插入一条数据,要移动插入点及之后的所有数据

testng

https://www.zhihu.com/question/33406353

把Jmeter的结构体系拆分为三维空间,如图:


X1~X5****:是负载模拟的一个过程,使用这些组件来完成负载的模拟;
X1:选择协议,模拟用户请求,检查服务器响应是否正确,然后收集结果信息;
X2:完善测试脚本部分,包括参数化,关联等;
X3:控制测试脚本业务逻辑;
X4:集合点,模拟用户并发;
X5:用户数,一个线程代表一个用户;
Y1****:可以理解为选择协议,包含负载模拟部分,负责模拟用户请求;
Y2****:可以理解为检查点,结果验证部分,负责验证结果正确性;
Z****:可以理解为监控器,负责结果的收集,监听器不仅可以放在线程组之内,也可以放在线程组之外;

Jmeter运行原理:

Jmeter基本原理是建立一个线程池,多线程运行取样器产生大量负载,在运行过程中通过断言来验证结果的正确性,可以通过监听来记录测试结果;

如果取样器中有参数化需求,可以通过配置元件或者前置处理器来完成;
如果取样器中有关联需求,可以通过后置处理器来完成;
如果要模拟负载场景,比如模拟多少用户,运动多长时间,可以通过线程组完成;
如果要模拟并发场景,可以通过定时器来完成;
如果要控制业务的执行逻辑,比如登录只运行一次,可以通过控制器来完成;

同点:都是项目构建管理工具。
不同点有:

  1. Maven约定了目录结构,而Ant没有。
  2. Maven是申明式的,用pom.xml文件;而Ant是程序式的,构建过程需要自定义,用builder.xml.
  3. Maven是有生命周期的,而Ant没有。
  4. Maven内置依赖管理和Repository来实现依赖的管理和统一存储;而Ant没有。Maven第一次install的时候会把依赖的jar包和构件从远处库(又叫中央库,http://repol.maven.org/maven2,统一存储maven可以解释的文件资源)下载到本地库(先从本地仓库找)。Maven还可以管理传递依赖。
    5.Maven配置比较简单,有很多的约定、规范、标准,可以用较少的代码干更多的事;而Ant配置比较麻烦,需要配置整个构建的过程(但Ant配置灵活)。

1.动态id定位不到元素
2.iframe原因定位不到元素
3.不在同一个frame里边查找元素
4.xpath描述错误
5.点击速度过快 页面没有加载出来就需要点击页面上的元素
6.firefox安全性强,不允许跨域调用出现报错
参见文章:selenium 定位不到元素的几种情况

Jenkins常用插件汇总:
Build-timeout Plugin:任务构建超时插件
Naginator Plugin:任务重试插件
Build User Vars Plugin:用户变量获取插件
Build Pipeline Plugin View :Pipeline 管道流图表展示插件

Build Flow Plugin:工作流插件,支持DSL脚本定义工作流
Build Graph View Plugin:build Flow插件视图(安装后需要重新才能生效)
Multijob Plugin:多任务插件
Build-timeout Plugin:job构建超时插件
Build Timestamp Plugin :任务log时间戳插件,使得job log的每次输出前面都增加当时的时间
Parameterized Trigger Plugin:这是一个扩展型的插件,使各个job连接的时候可以传递一些job相关的信息
Join Plugin:这也是一个触发job的插件,亮点在于它触发job的条件是等待所有当前job的下游的job都完成才会发生。
Files Found Trigger:检测指定的目录,如果发现指定模式的文件则启动build。
BuildResultTrigger Plugin:根据其他的job的成功或失败来启动此build。
Publish Over SSH Plugin:通过ssh发布文件
Rebuild Plugin:重新执行插件
ws-cleanup Plugin :workspace清理插件
Cron Column Plugin: 通过定时任务例行的运行一些job
Job Configuration History Plugin:使用心得:使job具备版本管理的能力,diff和rollback功能更是非常赞
HTTP Request Plugin:使用心得:在构建前后可以通过该插件以http形式调用各种api接口实现和内部系统的联动
Periodic Backup:使用心得:备份是运维一个系统必须要保障的事情,该插件的恢复功能可能不可用,需要手工进行,好处在于可以定时备份
Job Import Plugin:使用心得:可以快速导入其他jenkins集群的已有job,需要认证的jenkins系统导入需要提供凭证才可以
Status Monitor Plugin:构建状态插件
Build Monitor View :使用心得:基于该插件可以实现dashboard功能
Build Environment Plugin:构建环境插件,可以进行构建环境比较。
FTP插件:
Monitoring:Monitoring of Jenkins

基础依赖插件:
jQuery Plugin:jQuery插件
参见文章Jenkins那些常用插件

参见文章
jenkins 构建脚本常用参数传递方法
Jenkins持续集成——参数化构建

内连接,也被称为自然连接,只有两个表相匹配的行才能在结果集中出现。返回的结果集选取了两个表中所有相匹配的数据,舍弃了不匹配的数据。由于内连接是从结果表中删除与其他连接表中没有匹配的所有行,所以内连接可能会造成信息的丢失。内连接语法如下:
select fieldlist from table1 inner join table2 on table1.column = table2.column

内连接是保证两个表中所有行都满足连接条件,而外连接则不然。

外连接,不仅包含符合连接条件的行,还包含左表(左连接时)、右表(右连接时)或两个边接表(全外连接)中的所有数据行。SQL外连接共有三种类型:左外连接(关键字为LEFT OUTER JOIN)、右外连接(关键字为RIGHT OUTER JOIN)和全外连接(关键字为FULL OUTER JOIN)。

内连接只显示符合连接条件的记录,外连接除了显示符合条件的记录外,还显示表中的记录,例如,如果使用左外连接,还显示左表中的记录。
[内连接与外连接的区别] (https://blog.csdn.net/dhf984721977/article/details/80166369)

举报

相关推荐

0 条评论