- 博客(549)
- 资源 (11)
- 收藏
- 关注
原创 CAS
CAS简介CAS全称Compare-And-Swap,中文含义“比较并交换”,它是一种思想,一种算法。在多线程的情况下,为了保证并发的安全性,我们可以使用互斥锁,而CAS的特点是避免使用互斥锁,当多个线程同时使用CAS更新同一个变量时,只有其中一个线程能够操作成功,而其他线程都会更新失败。不过和同步互斥锁不同的是,CAS不会让失败的线程阻塞,而是被告知这次由于竞争而导致的操作失败,但还可以再次尝试。CAS广泛用在并发编程领域中,以实现那些不会被打断的数据交换操作,从而实现无锁的安全。CAS思
2020-07-26 22:39:52 162
原创 数据驱动模式UI自动化框架
本次给大家分享一个pc端的UI自动化框架,这个框架是数据驱动形式的,采用的思想是把测试数据和代码分离开,我们的测试数据都放到excel里,然后读取里面的值来获取。这样避免的测试数据和代码混合到一起,看着混乱。同时采用PO模式,一个页面作为一个对象,把页面里的元素封装到一起。同时使用testNG进行对测试用例的调度,并且监听测试结果,生成报告。组装用例放到了xml里,同时可以把这个xml配置到jenkins上,做到定时持续集成。下面说下简单使用吧。...
2020-06-20 11:27:55 1469
原创 java内存模型JMM
Java内存模型(Java Memory Model,简称JMM),即Java虚拟机定义的一种用来屏蔽各种硬件和操作系统的内存访问差异,以实现让java程序在各种平台下都能够达到一致的内存访问效果的内存模型。本篇文章大致涉及到五个要点:1、Java内存模型的基础,主要介绍JMM抽象结构;2、Java内存模型中内存屏障;3、Java内存模型中的重排序;4、happens-before原则;JMM相关的三个同步原语(synchronized,volatile,final)。1.Java内存模型的抽象结构
2020-06-14 11:14:35 233
原创 volatile特性及实现原理
一个volatile变量自身具有以下三个特性:1、可见性:即当一个线程修改了声明为volatile变量的值,新值对于其他要读该变量的线程来说是立即可见的。而普通变量是不能做到这一点的,普通变量的值在线程间传递需要通过主内存来完成。2、有序性:volatile变量的所谓有序性也就是被声明为volatile的变量的临界区代码的执行是有顺序的,即禁止指令重排序。3、受限原子性:这里volatile变量的原子性与synchronized的原子性是不同的,synchronized的原子性是指只要声明为sy
2020-06-14 11:03:46 1919
原创 java线程
并发与并行3.1创建和运行线程多线程创建方式一、二、使用lambda表达式写法更精简Thread 与Runnable关系,看下源码,Runable里走的也是走的run方法方法:把线程和任务合并起来了,方法二,把线程和任务分开来了。Runable更容易与线程池等高级api配合使用。今日完成,多线程两种写法 和使用lambda表达式写法,分析源码Thread 和Runnable关系。序列化和反序列化,对象转化为string,string转化为bean,Integer.valu
2020-06-07 09:52:21 142
原创 minicap工具的使用
1.minicap将这两个文件push到我手机的/data/local/tmp目录下:这里看到minicap可执行文件没有执行权限,adb shell进入到目录下chmod 777 minicapminicap有可执行权限了,接下来测试一下minicap是否可用,其中-P后面跟的参数为你屏幕的尺寸 (我这里是魅族Note6,设置-关于手机-分辨率可以看到1080x1920)adb shell LD_LIBRARY_PATH=/data/local/tmp /data/local/tmp.
2020-05-23 10:04:42 1095
原创 源码包安装RabbitMQ3.6
先安装erlang 依赖,也是门编程语言,下载源码包地址 :https://www.erlang.org/downloads/20.1首先先安装个依赖yum install ncurses-develtar xf otp_src_20.1.tar.gzcd otp_src_20.1./configure --prefix=/usr/local/erlang20 --without-javacmakemake installerl验证cd /usr/local/erlang./e
2020-05-17 09:32:09 592
原创 centos7安装redis5.0.3
修改配置文件 redis.conf绑定改为 0.0.0.0 任意机器都可以访问requiredpass 设置密码将daemonize属性改为yes(表明需要在后台运行)启动redis命令 ./redis-server ../redis.conf./redis-cliauth 密码systemctlstop redis_6379systemctl start...
2020-05-17 09:31:54 168
原创 三大类算法:递归、排序、二分查找
一、递归”递“+”归“。 这两个意思,正是递归思想的精华所在,去的过程叫做递,回来的过程叫做归,在编程语言中对递归可以简单理解为:方法自己调用自己,只不过每次调用时参数不同而已。满足递归的条件:1、递归表达是(规律)如果一个问题的解能够拆分成多个子问题的解,拆分之后,子问题和该问题在求解上除了数据规模不一样之外,求解的思路和该问题的求解思路完全相同,也就是说能够找到一种规律,这种规...
2020-05-17 09:25:10 2094
原创 JDK1.8中HashMap的源码分析
关键的属性分析public class HashMap<K,V> extends AbstractMap<K,V> implements Map<K,V>, Cloneable, Serializable { //Node类型的数组,我们常说的bucket数组,其中每个元素为链表或者树形结构 transient Node<...
2020-04-19 22:45:03 149
原创 散列表(Hash表)
散列表的概述散列结构,散列表(Hash Table)又名哈希表/Hash表是根据键(key)直接访问在内存存储位置的数据结构,利用了数组支持按照下标进行随机访问数据的特性。由数组演变而来的,存的时候,我们这有键key,通过一定散列函数的计算方式,我们把它映射到数组中的某一个位置上进行存储,这样一种关系。取的时候,同一个key根据hash进行运算的结果也是一样的,这样就可以快速找到数组中存储的位...
2020-04-19 22:44:54 731
原创 SpringBoot启动原理之核心注解和run()方法-源码分析
微信公众号:测试加油站关注可了解更多的测试开发技术。问题或建议,请公众号留言;如果你觉得文章对你有帮助,欢迎转发[^1]随着微服务的兴起,SpringBoot框架越来越火,相信大部分公司已经开始转向使用这个框架,我们开发测试平台的时候,也是会使用这个框架。但是这个框架的原理不知道大家是否了解,上一篇文章说了一下它的使用,所以本次说一下SpringBoot的启动原理,每次启动我们都会用到这...
2020-04-16 22:07:08 988
原创 时间复杂度,空间复杂度
算法的复杂度分析主要包含两个方面:时间复杂度分析空间复杂度分析为什么要进行复杂度分析?1:和性能测试相比,复杂度分析有不依赖执行环境、成本低、效率高、易操作、指导性强的特点。2:掌握复杂度分析,将能编写出性能更优的代码,有利于降低系统开发和维护成本。1:时间复杂度表示法算法的执行效率,粗略地讲,就是算法代码执行的时间,那如何在不直接运行代码的前提下粗略的计算执行时间呢?...
2020-04-04 10:48:34 229
原创 Stack源码分析
Stack源码分析Stack底层是数组实现是顺序栈,底层也支持扩容首先写一段入栈和出栈的程序public class JdkStack { public static void main(String[] args) { //创建栈对象 Stack stack = new Stack(); //数据入栈 stac...
2020-04-04 10:48:15 152
原创 ArrayList源码分析
public class ArrayList{ public static void main(String[] args){ List list = new ArrayList(); list.add("a"); list.add("b"); list.add("c"); list.add...
2020-04-04 10:47:26 207
原创 数组、链表、栈、队列
1、理解什么是线性表2、掌握数组数据结构,读懂ArrayList的部分源码3、掌握链表数据结构,读懂LinkedList的部分源码4、掌握栈这种数据结构,读懂stack的部分源码5、掌握队列这种数据结构...
2020-04-04 10:46:29 471
原创 Dubbo SPI 、服务暴露、服务引入源码解析
Dubbo的SPISPI什么是SPI,SPI全称为Service Provider Interface,是一种服务发现机制,SPI的本质是将接口实现类的全限定名配置到文件中,并由服务器加载读取配置文件,加载实现类,这样可以在运行时,动态为接口替换实现类,正因此特性,我们可以很容易的通过SPI机制为我们的程序提供扩展功能,SPI机制在第三方框架中也有所应用,比如 Dubbo 就是通过 SPI 机...
2020-04-04 10:43:16 151
原创 Dubbo简述
Apache Dubbo是一款高性能的RPC框架,Dubbo提供三个核心能力:面向接口的远程方法调用,只智能容错和负载均衡,以及服务自动注册和发现。什么是RPCRPC全称remote procedure call ,即远程过程调用。例如服务A ,和服务B,分别部署在两台机器上,服务A想要调用服务B 里的一个接口,因为不在同一台机器上,是在两台机器上,不同的内存空间,所以这个时候就需要远程调...
2020-04-04 10:42:16 264
原创 Zookeeper详解
zookeeper是一个开源的分布式协调服务,提供分布式数据一致性解决方案,分布式应用程序可以实现数据发布订阅、负载均衡个、命名服务、集群管理分布式锁、分布式队列等功能zookeeper提供了分布式数据一致性解决方案,...
2020-04-03 21:40:04 368 1
原创 Redis-企业级解决方案
一、缓存预热:总结,缓存预热就是系统启动前,提前将相关的缓存数据直接加载到缓存系统。避免在用户请求的时候,先查询数据库,然后再将数据缓存,用户直接查询事先被预热的缓存数据。二、缓存雪崩:缓存雪崩就是瞬间过期的key数据量过大,导致redis没有命中,从而导致对数据库服务器造成压力,如果能有效避免过期时间集中,可以有效解决雪崩现象的出现(约40%),配合其他策略一起使用,并监控服务器的运...
2020-03-14 17:39:57 342
原创 Redis集群
一、主从复制主从复制简介主从复制的作用:读写分离:master写、slave读,提高服务器的读写负载能力负载均衡:基于主从结构,配合读写分离,由slave分担master负载,并根据需求的变化,改变slave的数量,通过多个从节点分数据读取负载,大大提高Redis服务器并发量与数据吞吐量故障恢复:当master出现问题时,由slave提供服务,实现快速的故障恢复数据冗余:实现数...
2020-03-14 17:39:09 94
原创 Redis-基础
罪魁祸首——关系型数据库 性能瓶颈:磁盘IO性能低下(CPU数据交换是和高速缓存cache,cache的数据交换和谁做,和内存。内存的数据交换和谁做,和磁盘做,这些基础数据存在硬盘上,一层层往上传递。数据库是保存在磁盘上的) 扩展瓶颈:数据关系复杂,扩展性差,不便于大规模集群解决思路 降低磁盘IO次数,越低越好 ------内存存储 这样就出现NoSQL 内存型数据库...
2020-03-14 17:37:20 228
原创 移动端专项测试
adb命令稳定性monkey内存使用情况cpu使用情况电量消耗流畅度流量消耗弱网测试弱网延迟测试开源工具 SoloPi 阿里开源 GT腾讯开源已经不更新了各个指标 横向对比、纵向对比ADB ,Android调试桥(Android Debug Bridge)是一种功能多样的命令行工具,可让您与设备进行通信。ADB 分为三部分:PC上的a...
2020-02-11 21:14:57 1354
原创 Spring-Bean的生命周期
自动装配的含义是,javaBean之间的依赖关系,用Autowire 代表的是byName类型,进行装配。而依赖注入是指对这个bean里面的属性赋值,以是一个Bean的生命周期。1、实例化bean对象(通过构造方法或者工厂方法)2、设置对象属性(setter等)(依赖注入)3、如果Bean实现了BeanNameAware接口,工厂调用Bean的setBeanName()方法传递Bean的I...
2020-01-10 19:41:09 157
原创 Spring-IOC原理简述
今天的这个IOC,不打算分析源码了,一方面觉的Spring的源码很庞大,一步步跟的话容易陷入很深的某一个分支里,而且容易遗忘。所以打算简单的说下原理,大家可以先记下来简单的原理,然后再看看大佬们的博客,然后再一步步debug源码,这样估计也就差不多了。那么接下来就先简单说下IOC的原理吧。IOC的从广义范围来说,意思是控制反转,什么是控制反转呢,大家肯定都知道,以前我们要使用一个类里的方法或者...
2020-01-10 19:24:47 642
原创 Mybatis-原生Mybatis原理源码分析篇
Mybatis框架概述Mybatis是持久层的框架,它内部封装了jdbc,使开发的时候只需要关注sql语句本身,不需要话费精力去处理加载驱动、创建连接、创建statement等。下面我们也是通过一个实例来对它进行分析。首先编写一个SqlMapConfig.xml<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE c...
2020-01-02 21:19:25 175
原创 总结2019,展望2020
时间过得如此之快,转眼又到了年底,今天是2019年的最后一天,写下这篇文章,要为这一年的忙碌总结下。最近也经常会看到很多大佬,对测试行业发展的一个展望。例如Facebook去QA化,敏捷测试、DevOps,还有某些大厂已经借助AI技术,进行了测试,还有大数据的测试。 整个行业发展的如此之快,作为测试人员我们都要不断的去学习,无论做测试的左移,还是为了增加更多的测...
2019-12-31 18:54:58 700
原创 性能测试之类加载(五)
一、类的加载虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机的类加载机制。二、类的生命周期类的加载、连接和初始化过程都是在程序运行期间完成的。这个时候类加载的全过程,包括加载、验证、准备、解析和初始化、使用和卸载7个结算,其中验证、准备、解析3个部分统称为连接。“加载”是“类加载”过...
2019-12-31 02:20:09 161
原创 设计模式-建造者设计模式
建造者模式(Builder Pattern),又叫做生成器模式,是一种对象构建模式。它可以将复杂对象的建造过程抽象出来,使这个抽象过程的不同实现方法可以构造出不同表现(属性)的对象。建造者模式是一步一步创建一个复杂的对象,它允许用户只通过指定复杂对象的类型和内容可构建它,用户不需要知道内部的具体构建细节。建造者模式的四个角色:Product(产品角色),一个具体的产品对象Build...
2019-12-30 23:31:30 110
原创 设计模式-代理设计模式
代理模式(Proxy)代理模式的基本介绍1、代理模式:为一个对象提供一个替身,以控制对这个对象的访问。即通过代理对象访问目标对象,这样做的好处是,可以在目标对象实现的基础上,增强额外的功能操作,即扩展目标对象的功能。2、代理模式有不同的形式,主要有三种,静态代理、jdk代理(也叫接口代理)、cglib代理(可以在内存中动态的创建对象,而不需要实现接口)。静态代理静态代理在使用时...
2019-12-30 23:31:21 247
原创 java基础-反射
反射技术:其实就是动态加载一个指定的类,并获取该类中的所有的内容。而且将字节码文件封装成对象,并将字节码文件中的内容都封装成对象,这样便于操作这些成员。简单说:反射技术可以对一个类进行解剖。反射的好处:大大的增强了程序的扩展性。反射的基本步骤:1、获得Class对象,就是获取到指定的名称的字节码文件对象。2、实例化对象,获得类的属性、方法或构造函数。3、访问属性、调用方法...
2019-12-29 16:06:23 114
原创 设计模式-单例设计模式
单例设计模式是指,单例对象的类,只允许实例一个对象,这样,在jvm堆内存中,就只开辟了一块空间来存储这个对象,这种设计的优点是避免了内存中空间的浪费,避免频繁的创建销毁对象,为整个系统提供一个全局的访问的。打比方,windows桌面,我们已经点开了一个回收站,当我们再点击一次回收站的时候,不会再弹出一个回收站的弹窗。饿汉式class Singleton{ //私有化构造函数,让外部不能...
2019-12-26 21:10:25 100
原创 设计模式-简单工厂设计模式
什么是工厂设计模式?工厂设计模式,顾名思义,就是用来生产对象的,在java中,万物皆对象,这些对象都需要创建,如果创建的时候直接new该对象,就会对该对象耦合严重,假如我们要更换对象,所有new对象的地方都需要修改一遍,这显然违背了软件设计的开闭原则,如果我们使用工厂来生产对象,我们就只和工厂打交道就可以了,彻底和对象解耦,如果要更换对象,直接在工厂里更换该对象即可,达到了与对象解耦的目的;所...
2019-12-24 21:11:29 118
原创 博客目录
因目前博客文章数量较大,大家搜索或者查看不是很方便,所以打算建立本目录,同时也是对测试开发技术栈的一个梳理。对博客的定位是对于日常用到技术的一个整理。对于公众号内容是对某一点深入的分析,欢迎大家关注,一起学习进步。一、测试方面:1、单元测试:2、接口自动化总结(1): 接口自动化(2):3、UI自动化测试:appium移动端自动化PC端自动化4、性能测...
2019-12-23 13:00:22 201
chromedriver.exe V2.3
2017-09-11
深入理解java虚拟机
2017-03-31
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人