自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(64)
  • 收藏
  • 关注

原创 使用Tortoise结合Git进行代码检视

Git是一种分布式的版本控制系统,它没有中央服务器,每个人的电脑都可以作为一个完整的版本库,现在被广泛用于项目的版本管理。作为测试人员,经常会遇到这样一些问题:在bug回归验证的时候,开发修复问题不自测,bug回归了无数次,拖延测试进度;或者不知道修复这个bug影响的功能范围,只能凭开发人员口述bug的影响范围来划定测试范围;亦或已测试过的功能,开发偷偷修改了代码,不知会测试,存在bug...

2019-09-27 19:31:37 656

原创 MySQL中能够使用索引的典型场景

1.匹配全值,对索引中的所有列都有等值匹配的条件。优化器用了idx_rental_date索引进行扫描,type字段的值为ref,表示是在非唯一索引扫描下,返回匹配某个单独值的记录行。2.匹配值的范围查找。类型type为range说明优化器选择范围查找,这里Extra为Using index comdition,表示优化器不需要回表查询数据,在存储引擎层完成了筛选再去表内取的数据。3....

2019-08-25 17:45:27 246

原创 SQL优化:慢查询日志查看

慢查询日志用于记录所有执行时间超过参数long_query_time(单位:秒)设置值并且扫描记录数不小于min_examined_row_limit的所有SQL语句的日志。在默认情况下,有两类常见语句不会记录到慢查询日志:管理语句和不使用索引进行查询的语句。管理语句包括alter table、analyze table、check table、create index、drop index、o...

2019-08-25 15:46:11 1281

原创 SQL优化:索引的设计原则

MySQL设计索引可以遵循一些已有的原则,这里做下记录:最适合做索引的列是出现在where子句中的列,或者连接子句中指定的列,而不是出现在select后的选择列表的列。使用唯一索引,比如,存放出生日期的列具有不同值,很容易区分各行,而用来记录性别的列,只含有男或者女,那么对此进行索引就没有多大用处,因为不管搜索哪个值,都会得出大约一半的行。使用短索引,如果对字符串列进行索引,应该尽量指定一...

2019-08-25 15:22:38 228

原创 SQL优化:SQL的分析和优化过程

本文记录SQL的优化分析过程,需用到MySQL的案例库sakila,下载地址是http://downloads.mysql.com/docs/sakila.db.zip。压缩包包括3个文件:sakila-schema.sql、sakila-data.sql、sakila.mwb,我们主要用到前两个,分别是sakila库的表结构创建和表数据。一.show status的使用通过show stat...

2019-08-25 14:45:25 290

原创 Java远程监控ActiveMQ消息队列

因为公司的产品架构有用到ActiveMQ消息队列,在之前的压力测试上有发现ActiveMQ存在消费不过来的情况,这里记录下在Linux系统下如何实现通过Java对ActiveMQ消息队列的监控。Java是通过配置JMX来监控ActiveMQ的消息队列的,这里用到消息队列工具类,放下实现类:import java.io.IOException;import java.util.Priorit...

2019-08-19 23:24:10 2274 1

原创 Synchronized和ReentrantLock的区别

Synchronized和ReentrantLock的作用都可以在多线程中对于共同访问的资源进行加锁,它们的区别在这这里记录下。1.锁的实现ReentrantLock是JDK实现的 Synchronized 是JVM实现;前者可以直接看到源码,后者实现难以看到。2.性能的区别在JDK1.6之前,Synchronized的性能是比ReenTrantLock差很多的,但是自从Synchron...

2019-08-03 15:59:01 147

原创 排序算法—归并排序

归并排序分为自顶向下的归并排序和自底向上的归并排序,代码分别记录如下。自顶向下:public class Merge {//自顶向下 private static Double[] aux; public static void sort(Double[] a) { aux=new Double[a.length]; sort(a,0...

2019-07-03 22:20:56 153

原创 排序算法—插入排序

这里记录下插入排序的实现代码和其复杂度分析。实现代码:public class Insertion { public static void sort(int[] a) { for(int i=1;i<a.length;i++) { for(int j=i;j>0&&a[j]<a[j-1];j--) { exch(a,j,j-1); ...

2019-07-02 23:38:16 98

原创 排序算法—快速排序

这里记录下快速排序的实现代码和其复杂度分析。实现代码:public class Quick { private static final int M=7; public static void sort(Double[] a) { sort(a,0,a.length-1); } public static void sort(Double[] a,int lo,int ...

2019-07-02 23:30:40 103

原创 排序算法—选择排序

这里记录下选择排序的实现代码和其复杂度分析。实现代码:public class Selection { public static void sort(Double[] a) { for(int i=0;i<a.length-1;i++) { int min=i; for(int j=i+1;j<a.length;j++) { if(a[j]<a...

2019-07-02 23:16:15 77

原创 排序算法—堆排序

堆排序算法主要分为初始化堆和交换最大值重建堆的过程,下面记录下它的代码实现:public class Heap { public Heap() { } public static void sort(Double[] pq) { //System.out.println(pq.length); int N=pq.length; for(int i=N/2;i>=...

2019-07-02 22:52:36 116

原创 数据结构和算法—基于拉链法的散列表

拉链法的散列表是由基于链表的数组实现,它是hashMap的基础数据结构,通过散列函数将加入的键转化为数组索引,存储于数组对应位置的链表内,这个算法的基本思想就是选择足够大的数组大小M,使得所有链表都尽可能短以保证高效的查找,典型以空间换时间的算法,它查找元素分两步:首先根据散列值找到对应的链表,然后沿着链表顺序查找相应的键。实现代码如下:public class SeparateChainin...

2019-07-01 21:35:17 1029

原创 数据结构和算法—二叉查找树

一颗二叉查找树,其中每个结点的键都大于其左子树中的任意结点的键而小于右子树的任意结点的键。结点的定义如下:每个结点都含有一个键】一个值、一条左链接、一条右连接和一个结点计数器(以自身为树根结点的二叉树的结点数量)。 public class Node{ public Key key; public Value val; public Node left,right; publ...

2019-06-30 23:41:33 104

原创 数据结构和算法—红黑树

学习数据结构和算法的里程是艰辛的,没有捷径,就是看书和看视频,再结合不断的敲代码去记忆,这里记录下红黑树的相关性质和Java代码实现。红黑树也是一种二叉查找树,只不过它由2-结点和3-结点组成,通过2-结点和3-结点来保证平衡,结点的链接分为两种类型:红链接将两个2-结点连接起来构成一个3-结点,黑链接就是普通的链接。什么是2-结点,3-结点?如下图(第一个为2-结点图,第二个为3-结点图)...

2019-06-30 23:11:00 164

原创 Java网络编程TCP协议发送和接收数据

客户端给服务端发送数据包。TCP协议发送数据public class TcpSendDemo { public static void main(String[] args) { // TODO Auto-generated method stub Socket s=null; OutputStream os=null; try { s=new Socke...

2019-06-23 10:46:18 1179

原创 Java网络编程UDP协议发送和接收数据

在工作中有涉及用Java实现UDP协议传输和接收数据,因为之前学习网络编程的时候这块没怎么认真关注,这里补充记录下。UDP协议发送数据public class UdpSendDemo { public static void main(String[] args) { // TODO Auto-generated method stub DatagramSocket d...

2019-06-23 10:40:11 676

原创 Java远程执行linux命令

之前在工作中做压力测试的时候,需要不断去给系统所在服务器制造压力,看系统什么时候会挂掉,因为给系统制造的压力不是说一下就会让它挂掉,而是需要结合生产环境用和合适的压力去压测,可能是几个小时或者一天,作为测试人员也不是无时无刻盯着服务器,看CPU、看内存、看系统各应用状态,所以就在想着有没有办法在进行压测的同时监控服务器的各个服务状态,有问题了立刻做记录并抛出,这样测试人员就可以释放出来去做别的事,...

2019-06-22 11:36:35 4312

原创 Selenium之xpath定位精用

在使用Selenium进行Web端自动化测试的时候,我们能用的定位元素方法有很多,再不济也能通过谷歌浏览器的自带的功能去捕捉定位页面元素。但是这样就会非常依赖于前端开发,前端代码一旦产生大的变动,我们的写的Selenium测试代码就要修改,后面我去查找了各种xpath定位的技巧,基本解决了我大部分定位元素定位不到或者预防前端代码大变动的问题,这里记录下。1.使用xpath属性定位By.xp...

2019-06-20 22:08:09 270

原创 常见的性能测试介绍

性能测试性能测试是通过模拟生产运行的业务压力量和使用场景组合,观察系统在一个给定的环境和场景中的性能表现是否与预期目标一致,判断系统是否存在性能缺陷,并根据测试结果识别性能瓶颈,改善系统性能的完整过程。特点:1.这种方法的主要目的是验证系统是否有系统宣称具有的能力。2.这种方法要事先了解被测试系统经典场景,并具有确定的性能目标。3.这种方法要求在已经确定的环境下运行。也就是说,这种方法...

2019-06-20 07:18:50 235

原创 如何测试一支笔之我见

作为一名软件测试人员,面试时经常会被问到如何去测试一支笔,这里重在考察我们分析问题的思路和设计测试用例的思路,我们拿到这个问题的第一反应应该是这支笔的设计规格?实现了哪些功能?也就是需求,对需求进行分析,提取测试点,然后依据测试点分类分点的去进行设计测试用例,既有条理性又能覆盖产品需求。刚拿到这个问题我们可以尝试去问面试官,这支笔实现了什么功能,有哪些需求,比如这支笔的客户人群是高三即将参加高考...

2019-06-18 23:27:22 2265 1

原创 测试用例编写思路(4):判定表法

因果图只是一种辅助工具,通过分析最终得到判定表,再通过判定表编写测试用例。但有时画因果图非常麻烦,影响测试效率,可以直接写判定表,进而编写测试用例。判定表也称我决策表,能表示输入条件的组合,以及与每一输入组合对应的动作组合。与因果图法相似判定表法主要侧重输入条件之间的逻辑关系。判定表是由条件桩、动作桩、条件项、动作项四部分组成的表格1)条件桩:列出了所有条件。2)动作桩:列出所有可能的操...

2019-06-18 07:45:51 2287

原创 测试用例编写思路(3):因果图法

等价类划分法和边界值分析方法都是着重考虑输入条件,但没有考虑输入条件的各种组合、输入条件之间的相互制约关系。这样虽然各种输入条件可能出错的情况已经测试到了,但多个输入条件组合起来可能出错的情况却被忽视了。如果在测试时必须考虑输入条件的各种组合,则可能的组合数目将是天文数字,因此必须考虑采用一种适合于描述多种条件的组合、相应产生多个动作的形式来进行测试用例的设计,这就需要利用因果图(逻辑模型)。...

2019-06-17 23:03:44 1135

原创 测试用例编写思路(2):边界值

什么是边界?边界是指对于输入等价类和输出等价类而言,稍高于其边界值及稍低于其边界值的一些特定情况。根据经验软件的大量的错误是发生在输入或输出范围的边界上,而不是在输入范围的内部。测试思路找到测试数据的边界点,也就是有效等价类和无效等价类的边界点,对边界点数据专门进行测试。一般情况下,需要对边界值以及边界值两边的数分别进行测试。案例输入一个学生成绩n(0到100整数),判断是否及格(...

2019-06-17 22:45:54 1460

原创 测试用例编写思路(1):等价类划分法

测试用例是为某个特殊目标而编制的一组测试输入、执行条件以及预期结果,以便测试某个程序路径或核实是否满足某个特定需求。通俗的讲:就是把我们测试系统的操作步骤用按照一定的格式用文字描述出来。测试用例的作用:1.理清思路,避免遗漏这里是我们认为最重要的一点,假如我们测试的项目大而复杂,我们可以把项目功能细分,根据每一个功能通过编写用例的方式来整理我们测试系统的思路,避免遗漏掉要测试的功能点。2....

2019-06-17 22:37:49 2663

原创 springmvc请求处理流程

springmvc是spring框架的一个模块,springmvc是一个基于mvc的web框架。mvc是一种设计模式,指model-javabean、view-jsp和controller-servlet,,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑交由controller处理,处理结果根据面向对象思想封装成javabean对象,交view层渲染,在改进和个性化定制界面及用户交...

2019-06-15 22:55:02 189

原创 MySQL数据库基础操作记录

insert\update\delete

2019-06-14 21:04:28 373

转载 JVM学习(4):Java内存异常

关于Java虚拟机这块内容的学习我是看CSDN的一位博客专家大佬@黄小斜的文章学习的,它写的内容更为全面详细,有兴趣可以去看它的文章:深入理解JVM虚拟机11:Java内存异常原理与实践。这里仅对此文进行笔记整理。内存泄露和内存溢出• 内存泄露:代码中的某个对象本应该被虚拟机回收,但因为拥有GCRoot引用而没有被回收。• 内存溢出: 虚拟机由于堆中拥有太多不可回收对象没有回收,导致无法继...

2019-06-09 20:33:28 226

转载 JVM学习(3):垃圾回收器详解

关于Java虚拟机这块内容的学习我是看CSDN的一位博客专家大佬@黄小斜的文章学习的,它写的内容更为全面详细,有兴趣可以去看它的文章:深入理解JVM虚拟机3:垃圾回收器详解。这里仅对此文进行笔记整理。GC 的工作内容:• 分配内存,为每个新建的对象分配空间• 确保还在使用的对象的内存一直还在,不能把有用的空间当垃圾回收了• 释放不再使用的对象所占用的空间对于内存分配请求,实现的难点在于...

2019-06-09 20:12:30 131

转载 JVM学习(2):JVM垃圾回收基本原理和算法

关于Java虚拟机这块内容的学习我是看CSDN的一位博客专家大佬@黄小斜的文章学习的,它写的内容更为全面详细,有兴趣可以去看它的文章:深入理解JVM虚拟机2:JVM垃圾回收基本原理和算法。这里仅对此文进行笔记整理。在运行时,Java的实例被存放在堆内存区域。当一个对象不再被引用时,满足条件就会从堆内存移除。在垃圾回收进程中,这些对象将会从堆内存移除并且内存空间被回收。堆内存有以下三个主要区域:...

2019-06-09 17:10:11 132

转载 JVM学习(1):JVM的内存结构

关于Java虚拟机这块内容的学习我是看CSDN的一位博客专家大佬@黄小斜的文章学习的,它写的内容更为全面详细,有兴趣可以去看它的文章:深入理解JVM虚拟机1:JVM内存的结构与永久代的消失这里仅对此文进行笔记整理。在了解Java虚拟机之前,首先要了解JDK、JRE、JVM分别是指什么:JDK(Java Development Kit) 是 Java 语言的软件开发工具包(SDK)。一系列工...

2019-06-09 16:46:31 163

原创 Java堆栈的概念和类初始化过程

面试的时候经常会有面试官问道Java堆栈的概念,这里做下总结。栈内存:存放局部变量,为编译器自动分配和释放。堆内存:存放new出来的东西,或者用final修饰的变量,需手动申请和释放空间。以数组为例的栈内存、堆内存图解:栈内存的特点:用完就释放掉,空间有限。堆内存特点:每一个new出来的对象都有地址值,每个变量都有默认值(byte,shrot,int,long等是0,float,dou...

2019-06-07 16:39:10 1289

原创 Java基本数据类型

本文记录下Java的基本数据类型的大小和自动拆装箱的概念。Java基本数据类型的大小boolean 1bitchar 16bitbyte 8bitshort 16bitint 32bitlong 64bitfloat 32bitdouble 64bit自动拆装箱自动拆装箱是指计算数值时,Integer会自动转为int进行计算,而当int传入类型...

2019-06-07 16:00:30 110

原创 Spring面向切面的基础—动态代理

Spring里有个概念叫面向切面编程(AOP),我们管切入到指定类指定方法的代码片段称为切面,而切入到哪些类、哪些方法则叫切入点。有了AOP,我们可以把几个类共有的代码,抽取到一个切片中,等到需要时再切入对象中去,从而改变其原有的行为。它的基础是动态代理,这里记录下动态代理的相关使用。比如,当我们在注册用户时,想校验用户,而需要校验用户的地方又很多,可能登录也要,如果每个方法里都放置校验码,那样...

2019-06-07 14:54:10 423

原创 什么是三次握手和四次挥手

三次握手和四次挥手都是针对的TCP协议,先放个TCP和UDP的区别:UDP协议:无连接(不建立连接),数据传输有限制,传输速度快,直接传输到指定地址,传输不可靠,不保证数据传出后是否收到,UDP支持一对一,一对多,多对一和多对多的交互通信。TCP协议:需要建立连接通道,数据传输无限制,速度慢,传输可靠,每一条TCP连接只能是点到点的。三次握手1.主机A向主机B发送连接请求,请求建立通信。...

2019-06-07 10:57:53 310

原创 浅谈http和https的区别

http和https的区别如下:1、https协议需要到ca申请证书,一般免费证书较少,因而需要一定费用。2、http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议,就是在HTTP的基础上加入了SSL协议,SSL依靠证书来验证服务器的身份,并为浏览器和服务器之间的通信加密,保证安全性。3、http和https使用的是完全不同的连接方式,端口不一样,前者是80,...

2019-06-07 10:43:02 201

原创 Web服务相关知识总结

Java Web技术的学习量不亚于JavaSE,这里记录下相关的一些概念。网址url结构一个网址的结构一般是这样:http://www.sina.com(这里以新浪为例),其中sina.com称之为域名,www.sina.com称为主机名,http://www.sina.com即访问的URL地址。Tomcat目录层级结构bin—存放启动、关闭tomcat的脚本文件。conf—存放Tomc...

2019-06-06 23:41:35 254

原创 Java的反射机制

Class是一个类,一个描述类的类(也就是描述类本身),封装了描述方法的Method,描述字段的Filed,描述构造器的Constructor等属性,Java反射就是通过Class文件对象去使用自身类的成员变量 、构造方法、成员方法等属性。我们无法new出一个Class对象,因为其构造函数为private,这个Class类的对象是在当各类被调入时,由 Java 虚拟机自动创建 Class 对象。...

2019-06-03 23:06:06 105

原创 Java多线程基础(8):生产者-消费者和队列

利用wait()和notify()实现任务间的协同合作其实是一种非常低级的方式,我们还可以使用同步队列来解决任务协作问题,BlockingQueue在任何时刻都只允许一个任务插入或者移除队列,如果消费者试图从队列中获取元素,而此时该队列为空,那么队列可挂起消费者,当队列内有元素时再恢复消费者任务。比wait()和notify()更简单好用。有这么一个事件,需要制作吐司供顾客食用,而吐司的制作分三...

2019-06-02 21:58:00 556

原创 Java多线程基础(7):多线程间通信等待唤醒机制

线程间的通信就是指不同线程间针对同一资源的操作和处理过程。下面是个通过等待唤醒机制来进行生产和消费学生类的案例:学生类:public class Student { String name; boolean flag; public String getName() { return name; } public void setName(String name) { th...

2019-06-02 19:01:26 269

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除