
性能开发测试课程基础篇
文章平均质量分 86
此为一门性能开发测试课程
NeilNiu
日拱一卒无有尽,功不唐捐终入海!
展开
-
性能测试监控指标及分析调优
1、CPU,如果存在大量的计算,他们会长时间不间断的占用CPU资源,导致其他资源无法争夺到CPU而响应缓慢,从而带来系统性能问题,例如频繁的FullGC,以及多线程造成的上下文频繁的切换,都会导致CPU繁忙,一般情况下CPU使用率原创 2022-08-19 23:30:53 · 1537 阅读 · 0 评论 -
ConcurrentHashMap
并发容器原创 2020-08-02 12:20:54 · 195 阅读 · 0 评论 -
AQS
AQS原创 2020-08-02 12:19:59 · 486 阅读 · 0 评论 -
CAS
CAS简介CAS全称Compare-And-Swap,中文含义“比较并交换”,它是一种思想,一种算法。在多线程的情况下,为了保证并发的安全性,我们可以使用互斥锁,而CAS的特点是避免使用互斥锁,当多个线程同时使用CAS更新同一个变量时,只有其中一个线程能够操作成功,而其他线程都会更新失败。不过和同步互斥锁不同的是,CAS不会让失败的线程阻塞,而是被告知这次由于竞争而导致的操作失败,但还可以再次尝试。CAS广泛用在并发编程领域中,以实现那些不会被打断的数据交换操作,从而实现无锁的安全。CAS思原创 2020-07-26 22:39:52 · 224 阅读 · 0 评论 -
java内存模型总结
在说java内存模型之前,先澄清下JVM内存结构与Java内存模型Java作为一种面向对象的语言原创 2020-07-25 22:33:12 · 230 阅读 · 0 评论 -
ThreadLocal
1111原创 2020-07-25 22:30:02 · 154 阅读 · 0 评论 -
java中的锁类型
一、偏向锁原创 2020-06-27 16:45:29 · 595 阅读 · 0 评论 -
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 · 290 阅读 · 0 评论 -
volatile特性及实现原理
一个volatile变量自身具有以下三个特性:1、可见性:即当一个线程修改了声明为volatile变量的值,新值对于其他要读该变量的线程来说是立即可见的。而普通变量是不能做到这一点的,普通变量的值在线程间传递需要通过主内存来完成。2、有序性:volatile变量的所谓有序性也就是被声明为volatile的变量的临界区代码的执行是有顺序的,即禁止指令重排序。3、受限原子性:这里volatile变量的原子性与synchronized的原子性是不同的,synchronized的原子性是指只要声明为sy原创 2020-06-14 11:03:46 · 2096 阅读 · 0 评论 -
java线程
并发与并行3.1创建和运行线程多线程创建方式一、二、使用lambda表达式写法更精简Thread 与Runnable关系,看下源码,Runable里走的也是走的run方法方法:把线程和任务合并起来了,方法二,把线程和任务分开来了。Runable更容易与线程池等高级api配合使用。今日完成,多线程两种写法 和使用lambda表达式写法,分析源码Thread 和Runnable关系。序列化和反序列化,对象转化为string,string转化为bean,Integer.valu原创 2020-06-07 09:52:21 · 205 阅读 · 0 评论 -
源码包安装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 · 654 阅读 · 0 评论 -
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 · 201 阅读 · 0 评论 -
三大类算法:递归、排序、二分查找
一、递归”递“+”归“。 这两个意思,正是递归思想的精华所在,去的过程叫做递,回来的过程叫做归,在编程语言中对递归可以简单理解为:方法自己调用自己,只不过每次调用时参数不同而已。满足递归的条件:1、递归表达是(规律)如果一个问题的解能够拆分成多个子问题的解,拆分之后,子问题和该问题在求解上除了数据规模不一样之外,求解的思路和该问题的求解思路完全相同,也就是说能够找到一种规律,这种规...原创 2020-05-17 09:25:10 · 2380 阅读 · 0 评论 -
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 · 214 阅读 · 0 评论 -
散列表(Hash表)
散列表的概述散列结构,散列表(Hash Table)又名哈希表/Hash表是根据键(key)直接访问在内存存储位置的数据结构,利用了数组支持按照下标进行随机访问数据的特性。由数组演变而来的,存的时候,我们这有键key,通过一定散列函数的计算方式,我们把它映射到数组中的某一个位置上进行存储,这样一种关系。取的时候,同一个key根据hash进行运算的结果也是一样的,这样就可以快速找到数组中存储的位...原创 2020-04-19 22:44:54 · 910 阅读 · 0 评论 -
SpringBoot启动原理之核心注解和run()方法-源码分析
微信公众号:测试加油站关注可了解更多的测试开发技术。问题或建议,请公众号留言;如果你觉得文章对你有帮助,欢迎转发[^1]随着微服务的兴起,SpringBoot框架越来越火,相信大部分公司已经开始转向使用这个框架,我们开发测试平台的时候,也是会使用这个框架。但是这个框架的原理不知道大家是否了解,上一篇文章说了一下它的使用,所以本次说一下SpringBoot的启动原理,每次启动我们都会用到这...原创 2020-04-16 22:07:08 · 1116 阅读 · 0 评论 -
时间复杂度,空间复杂度
算法的复杂度分析主要包含两个方面:时间复杂度分析空间复杂度分析为什么要进行复杂度分析?1:和性能测试相比,复杂度分析有不依赖执行环境、成本低、效率高、易操作、指导性强的特点。2:掌握复杂度分析,将能编写出性能更优的代码,有利于降低系统开发和维护成本。1:时间复杂度表示法算法的执行效率,粗略地讲,就是算法代码执行的时间,那如何在不直接运行代码的前提下粗略的计算执行时间呢?...原创 2020-04-04 10:48:34 · 289 阅读 · 0 评论 -
Stack源码分析
Stack源码分析Stack底层是数组实现是顺序栈,底层也支持扩容首先写一段入栈和出栈的程序public class JdkStack { public static void main(String[] args) { //创建栈对象 Stack stack = new Stack(); //数据入栈 stac...原创 2020-04-04 10:48:15 · 191 阅读 · 0 评论 -
LinkedList源码分析
LinkedList源码分析原创 2020-04-04 10:47:44 · 122 阅读 · 0 评论 -
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 · 258 阅读 · 0 评论 -
数组、链表、栈、队列
1、理解什么是线性表2、掌握数组数据结构,读懂ArrayList的部分源码3、掌握链表数据结构,读懂LinkedList的部分源码4、掌握栈这种数据结构,读懂stack的部分源码5、掌握队列这种数据结构...原创 2020-04-04 10:46:29 · 565 阅读 · 0 评论 -
Redis-企业级解决方案
一、缓存预热:总结,缓存预热就是系统启动前,提前将相关的缓存数据直接加载到缓存系统。避免在用户请求的时候,先查询数据库,然后再将数据缓存,用户直接查询事先被预热的缓存数据。二、缓存雪崩:缓存雪崩就是瞬间过期的key数据量过大,导致redis没有命中,从而导致对数据库服务器造成压力,如果能有效避免过期时间集中,可以有效解决雪崩现象的出现(约40%),配合其他策略一起使用,并监控服务器的运...原创 2020-03-14 17:39:57 · 410 阅读 · 0 评论 -
Redis集群
一、主从复制主从复制简介主从复制的作用:读写分离:master写、slave读,提高服务器的读写负载能力负载均衡:基于主从结构,配合读写分离,由slave分担master负载,并根据需求的变化,改变slave的数量,通过多个从节点分数据读取负载,大大提高Redis服务器并发量与数据吞吐量故障恢复:当master出现问题时,由slave提供服务,实现快速的故障恢复数据冗余:实现数...原创 2020-03-14 17:39:09 · 120 阅读 · 0 评论 -
Redis-高级
Redis在linux下安装持久化事务删除策略redis.conf高级数据类型原创 2020-03-14 17:38:15 · 156 阅读 · 0 评论 -
Redis-基础
罪魁祸首——关系型数据库 性能瓶颈:磁盘IO性能低下(CPU数据交换是和高速缓存cache,cache的数据交换和谁做,和内存。内存的数据交换和谁做,和磁盘做,这些基础数据存在硬盘上,一层层往上传递。数据库是保存在磁盘上的) 扩展瓶颈:数据关系复杂,扩展性差,不便于大规模集群解决思路 降低磁盘IO次数,越低越好 ------内存存储 这样就出现NoSQL 内存型数据库...原创 2020-03-14 17:37:20 · 300 阅读 · 0 评论 -
Spring-Bean的生命周期
自动装配的含义是,javaBean之间的依赖关系,用Autowire 代表的是byName类型,进行装配。而依赖注入是指对这个bean里面的属性赋值,以是一个Bean的生命周期。1、实例化bean对象(通过构造方法或者工厂方法)2、设置对象属性(setter等)(依赖注入)3、如果Bean实现了BeanNameAware接口,工厂调用Bean的setBeanName()方法传递Bean的I...原创 2020-01-10 19:41:09 · 208 阅读 · 0 评论 -
Spring-IOC原理简述
今天的这个IOC,不打算分析源码了,一方面觉的Spring的源码很庞大,一步步跟的话容易陷入很深的某一个分支里,而且容易遗忘。所以打算简单的说下原理,大家可以先记下来简单的原理,然后再看看大佬们的博客,然后再一步步debug源码,这样估计也就差不多了。那么接下来就先简单说下IOC的原理吧。IOC的从广义范围来说,意思是控制反转,什么是控制反转呢,大家肯定都知道,以前我们要使用一个类里的方法或者...原创 2020-01-10 19:24:47 · 703 阅读 · 0 评论 -
Mybatis-原生Mybatis原理源码分析篇
Mybatis框架概述Mybatis是持久层的框架,它内部封装了jdbc,使开发的时候只需要关注sql语句本身,不需要话费精力去处理加载驱动、创建连接、创建statement等。下面我们也是通过一个实例来对它进行分析。首先编写一个SqlMapConfig.xml<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE c...原创 2020-01-02 21:19:25 · 216 阅读 · 0 评论 -
设计模式-建造者设计模式
建造者模式(Builder Pattern),又叫做生成器模式,是一种对象构建模式。它可以将复杂对象的建造过程抽象出来,使这个抽象过程的不同实现方法可以构造出不同表现(属性)的对象。建造者模式是一步一步创建一个复杂的对象,它允许用户只通过指定复杂对象的类型和内容可构建它,用户不需要知道内部的具体构建细节。建造者模式的四个角色:Product(产品角色),一个具体的产品对象Build...原创 2019-12-30 23:31:30 · 151 阅读 · 0 评论 -
设计模式-代理设计模式
代理模式(Proxy)代理模式的基本介绍1、代理模式:为一个对象提供一个替身,以控制对这个对象的访问。即通过代理对象访问目标对象,这样做的好处是,可以在目标对象实现的基础上,增强额外的功能操作,即扩展目标对象的功能。2、代理模式有不同的形式,主要有三种,静态代理、jdk代理(也叫接口代理)、cglib代理(可以在内存中动态的创建对象,而不需要实现接口)。静态代理静态代理在使用时...原创 2019-12-30 23:31:21 · 309 阅读 · 0 评论 -
java基础-反射
反射技术:其实就是动态加载一个指定的类,并获取该类中的所有的内容。而且将字节码文件封装成对象,并将字节码文件中的内容都封装成对象,这样便于操作这些成员。简单说:反射技术可以对一个类进行解剖。反射的好处:大大的增强了程序的扩展性。反射的基本步骤:1、获得Class对象,就是获取到指定的名称的字节码文件对象。2、实例化对象,获得类的属性、方法或构造函数。3、访问属性、调用方法...原创 2019-12-29 16:06:23 · 146 阅读 · 0 评论 -
设计模式-单例设计模式
单例设计模式是指,单例对象的类,只允许实例一个对象,这样,在jvm堆内存中,就只开辟了一块空间来存储这个对象,这种设计的优点是避免了内存中空间的浪费,避免频繁的创建销毁对象,为整个系统提供一个全局的访问的。打比方,windows桌面,我们已经点开了一个回收站,当我们再点击一次回收站的时候,不会再弹出一个回收站的弹窗。饿汉式class Singleton{ //私有化构造函数,让外部不能...原创 2019-12-26 21:10:25 · 139 阅读 · 0 评论 -
设计模式-简单工厂设计模式
什么是工厂设计模式?工厂设计模式,顾名思义,就是用来生产对象的,在java中,万物皆对象,这些对象都需要创建,如果创建的时候直接new该对象,就会对该对象耦合严重,假如我们要更换对象,所有new对象的地方都需要修改一遍,这显然违背了软件设计的开闭原则,如果我们使用工厂来生产对象,我们就只和工厂打交道就可以了,彻底和对象解耦,如果要更换对象,直接在工厂里更换该对象即可,达到了与对象解耦的目的;所...原创 2019-12-24 21:11:29 · 153 阅读 · 0 评论 -
Mybatis-缓存机制
像大多数的持久化框架一样,Mybatis也提供了缓存策略,通过缓存策略来减少数据库的查询次数,从而提高性能。 Mybatis中缓存分为一级缓存,二级缓存。Mybatis一级缓存Mybatis的一级缓存默认是开启的,而且是不能关闭的。一级缓存是指SqlSession级别的缓存,当在同一个SqlSession中进行相同的SQL语句查询时,第二次以后的查询不会从数据库查询,而是直接...原创 2019-12-21 16:49:45 · 190 阅读 · 0 评论 -
Mybatis-基于代理实现CURD
基于代理实现CURD根据ID查询在持久层接口中添加findById方法public User findById(Integer id);在用户的映射配置文件中配置<select id="findById" resultType="com.jd.domain.User"> select id,userName as userName ,birthd...原创 2019-12-21 16:49:19 · 178 阅读 · 0 评论 -
Mybatis-原生Mybatis原理分析
MyBatis框架概述 mybatis是一个优秀的基于java的持久层框架,它内部封装了jdbc,使开发者只需要关注sql语句本身,而不需要花费精力去处理加载驱动、创建连接、创建statement等繁杂的过程。 mybatis通过xml或注解的方式将要执行的各种statement配置起来,并通过java对象和statement中sql的动态参数进行映射生成最终执...原创 2019-12-21 16:48:54 · 287 阅读 · 0 评论 -
Spring+SpringMVC+Mybatis搭建web开发项目
前面的几篇博客,意在讲解Spring、SpringMVC以及Mybatis框架,单个框架的使用及原理。本文分享的是从零到有搭建ssm一个web开发项目,写文本文章意在让大家了解一个web开发框架搭建过程,从中了解每一步的含义,与此同时对比后面我将会分享出来的使用SpringBoot搭建一个web开发工程,是多么的简便,但是如果你不了解ssm框架,那么你就不会深入的理解SpringBoot是怎么做...原创 2019-12-14 17:57:02 · 1807 阅读 · 1 评论 -
SpringMVC-拦截器
SpringMVC的拦截器类似于Servlet开发中的Filter,用于对处理器进行预处理和后处理的过滤器是Servlet 规范中的一部分,任何的java web工程都可以使用拦截器是SpringMVC框架自己的,只能用在SpringMVC框架的工程中。过滤器在url-pattern中配置了/*之后,可以对所有要访问的资源拦截拦截器它只会拦截访问的控制器方法,如果访问的是jsp、h...原创 2019-12-14 17:55:04 · 237 阅读 · 0 评论 -
SpringMVC-文件上传和异常处理
SpringMVC-文件上传和异常处理1. 导入文件上传的jar包<dependency><groupId>commons-fileupload</groupId><artifactId>commons-fileupload</artifactId><version>1.3.1</version>...原创 2019-12-14 17:54:49 · 214 阅读 · 0 评论 -
SpringMVC-响应数据和结果视图
一、返回值分类1、字符串@Controller@RequestMapping("test")public class test{ @RequestMapping("testString") public String testString(Model model){ User user = new User(); us...原创 2019-12-14 17:54:41 · 189 阅读 · 0 评论