性能开发测试课程基础篇
文章平均质量分 86
此为一门性能开发测试课程
NeilNiu
日拱一卒无有尽,功不唐捐终入海!
展开
-
性能测试监控指标及分析调优
1、CPU,如果存在大量的计算,他们会长时间不间断的占用CPU资源,导致其他资源无法争夺到CPU而响应缓慢,从而带来系统性能问题,例如频繁的FullGC,以及多线程造成的上下文频繁的切换,都会导致CPU繁忙,一般情况下CPU使用率原创 2022-08-19 23:30:53 · 1407 阅读 · 0 评论 -
Spring的AOP
动态代理特点:字节码随用随创建,随用随加载作用:不能修改源码的基础上对方法增强分类: 基于接口的动态代理 基于子类的动态代理基于接口的动态代理: 涉及的类:Proxy 提供者:JDK官方如何创建代理对象: 使用Proxy类中的newProxyInstance方法创建代理对象的...原创 2019-12-07 20:04:46 · 125 阅读 · 0 评论 -
Spring的IOC和DI
IOC的原理反射,AOP的是代理1、IOC和DI的关系:关于IOC和DI,控制反转和依赖注入IOC 控制反转,以前的使用类里的方法,需要创建对象,调用里面的方法,现在创建对象 是靠spring 来管理,从之前的主动创建对象使用方法,到现在的被动等待spring创建好对象。DI,是依赖注入,把创建的对象放到spring容器中,某个类里使用某个对象的时候,需要注入到这个类里面,对属性赋...原创 2019-12-07 20:04:39 · 285 阅读 · 0 评论 -
Spring 通过注解配置bean
微信公众号:测试加油站关注可了解更多的测试开发技术。问题或建议,请公众号留言;如果你觉得文章对你有帮助,欢迎转发[1]Java配置是Spring4.x推荐的配置方式,可以完全替代xml配置。Spring 的java配置是通过这两个注解实现的,@Configuration 和@Bean@Configuration 作用到类上,相当一个xml配置文件@Bean 作用于方法上,相当...原创 2019-11-19 21:52:33 · 173 阅读 · 0 评论 -
Springboot打war包步骤
一、修改pom.xml文件将默认的jar方式改为war,将jar包修改成war包<packaging>war</packaging>二、修改启动类,继承org.springframework.boot.web.servlet.support.SpringBootServletInitializer,实现configure方法:为什么继承该类,SpringB...原创 2019-08-07 22:19:44 · 284 阅读 · 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 · 176 阅读 · 0 评论 -
Mybatis-缓存机制
像大多数的持久化框架一样,Mybatis也提供了缓存策略,通过缓存策略来减少数据库的查询次数,从而提高性能。 Mybatis中缓存分为一级缓存,二级缓存。Mybatis一级缓存Mybatis的一级缓存默认是开启的,而且是不能关闭的。一级缓存是指SqlSession级别的缓存,当在同一个SqlSession中进行相同的SQL语句查询时,第二次以后的查询不会从数据库查询,而是直接...原创 2019-12-21 16:49:45 · 173 阅读 · 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 · 155 阅读 · 0 评论 -
Mybatis-原生Mybatis原理分析
MyBatis框架概述 mybatis是一个优秀的基于java的持久层框架,它内部封装了jdbc,使开发者只需要关注sql语句本身,而不需要花费精力去处理加载驱动、创建连接、创建statement等繁杂的过程。 mybatis通过xml或注解的方式将要执行的各种statement配置起来,并通过java对象和statement中sql的动态参数进行映射生成最终执...原创 2019-12-21 16:48:54 · 254 阅读 · 0 评论 -
SpringMVC-拦截器
SpringMVC的拦截器类似于Servlet开发中的Filter,用于对处理器进行预处理和后处理的过滤器是Servlet 规范中的一部分,任何的java web工程都可以使用拦截器是SpringMVC框架自己的,只能用在SpringMVC框架的工程中。过滤器在url-pattern中配置了/*之后,可以对所有要访问的资源拦截拦截器它只会拦截访问的控制器方法,如果访问的是jsp、h...原创 2019-12-14 17:55:04 · 202 阅读 · 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 · 181 阅读 · 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 · 162 阅读 · 0 评论 -
SpringMVC-请求参数的绑定和常用注解
基本类型和String类型作为参数<a href = "test/testString?userName=aa">测试字符串</a>@Controller@RequestMapping("/test")public class test{ @RequestMapping("testString") public String testStrin...原创 2019-12-14 17:54:31 · 134 阅读 · 0 评论 -
SpringMVC-SpringMVC的概念
我们的开发架构一般都是基于两种形式,一种是C/S架构,也就是客户端/服务器,另一种是B/S架构,也就是浏览器服务器。在JavaEE开发中,几乎全都是基于B/S架构的开发。那么在B/S架构中,系统标准的三层架构包括:表现层、业务层、持久层。表现层: 也就是我们所说的web层,它负责接收客户端请求,向客户端响应结果,通常客户端使用http协议请求web层,web需要接收http...原创 2019-12-14 17:54:14 · 128 阅读 · 0 评论 -
SpringBoot启动原理之核心注解和run()方法-源码分析
微信公众号:测试加油站关注可了解更多的测试开发技术。问题或建议,请公众号留言;如果你觉得文章对你有帮助,欢迎转发[^1]随着微服务的兴起,SpringBoot框架越来越火,相信大部分公司已经开始转向使用这个框架,我们开发测试平台的时候,也是会使用这个框架。但是这个框架的原理不知道大家是否了解,上一篇文章说了一下它的使用,所以本次说一下SpringBoot的启动原理,每次启动我们都会用到这...原创 2020-04-16 22:07:08 · 1057 阅读 · 0 评论 -
Spring-IOC原理简述
今天的这个IOC,不打算分析源码了,一方面觉的Spring的源码很庞大,一步步跟的话容易陷入很深的某一个分支里,而且容易遗忘。所以打算简单的说下原理,大家可以先记下来简单的原理,然后再看看大佬们的博客,然后再一步步debug源码,这样估计也就差不多了。那么接下来就先简单说下IOC的原理吧。IOC的从广义范围来说,意思是控制反转,什么是控制反转呢,大家肯定都知道,以前我们要使用一个类里的方法或者...原创 2020-01-10 19:24:47 · 665 阅读 · 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 · 187 阅读 · 0 评论 -
Spring+SpringMVC+Mybatis搭建web开发项目
前面的几篇博客,意在讲解Spring、SpringMVC以及Mybatis框架,单个框架的使用及原理。本文分享的是从零到有搭建ssm一个web开发项目,写文本文章意在让大家了解一个web开发框架搭建过程,从中了解每一步的含义,与此同时对比后面我将会分享出来的使用SpringBoot搭建一个web开发工程,是多么的简便,但是如果你不了解ssm框架,那么你就不会深入的理解SpringBoot是怎么做...原创 2019-12-14 17:57:02 · 1539 阅读 · 1 评论 -
SpringMVC-原理简述
SpringMVC的入门案例配置核心控制器,一个Servlet<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaL...原创 2019-12-14 17:54:00 · 193 阅读 · 0 评论 -
创建一个springboot工程的步骤
首先new一个工程,选择maven,名字命名为com.bee ,artifactId 为bee,二、创建new 出每一个module,名字为bee-web,bee-dao,bee-service,bee-client三、配置maven 文件,修改setting路径,设置为国内下载的地址,四、删除根目录下的src文件夹五、主pom.xml配置把springboot的包引进来,并且有个...原创 2019-03-04 21:47:54 · 1030 阅读 · 0 评论 -
ConcurrentHashMap
并发容器原创 2020-08-02 12:20:54 · 165 阅读 · 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 · 181 阅读 · 0 评论 -
散列表(Hash表)
散列表的概述散列结构,散列表(Hash Table)又名哈希表/Hash表是根据键(key)直接访问在内存存储位置的数据结构,利用了数组支持按照下标进行随机访问数据的特性。由数组演变而来的,存的时候,我们这有键key,通过一定散列函数的计算方式,我们把它映射到数组中的某一个位置上进行存储,这样一种关系。取的时候,同一个key根据hash进行运算的结果也是一样的,这样就可以快速找到数组中存储的位...原创 2020-04-19 22:44:54 · 855 阅读 · 0 评论 -
三大类算法:递归、排序、二分查找
一、递归”递“+”归“。 这两个意思,正是递归思想的精华所在,去的过程叫做递,回来的过程叫做归,在编程语言中对递归可以简单理解为:方法自己调用自己,只不过每次调用时参数不同而已。满足递归的条件:1、递归表达是(规律)如果一个问题的解能够拆分成多个子问题的解,拆分之后,子问题和该问题在求解上除了数据规模不一样之外,求解的思路和该问题的求解思路完全相同,也就是说能够找到一种规律,这种规...原创 2020-05-17 09:25:10 · 2252 阅读 · 0 评论 -
时间复杂度,空间复杂度
算法的复杂度分析主要包含两个方面:时间复杂度分析空间复杂度分析为什么要进行复杂度分析?1:和性能测试相比,复杂度分析有不依赖执行环境、成本低、效率高、易操作、指导性强的特点。2:掌握复杂度分析,将能编写出性能更优的代码,有利于降低系统开发和维护成本。1:时间复杂度表示法算法的执行效率,粗略地讲,就是算法代码执行的时间,那如何在不直接运行代码的前提下粗略的计算执行时间呢?...原创 2020-04-04 10:48:34 · 257 阅读 · 0 评论 -
Stack源码分析
Stack源码分析Stack底层是数组实现是顺序栈,底层也支持扩容首先写一段入栈和出栈的程序public class JdkStack { public static void main(String[] args) { //创建栈对象 Stack stack = new Stack(); //数据入栈 stac...原创 2020-04-04 10:48:15 · 168 阅读 · 0 评论 -
LinkedList源码分析
LinkedList源码分析原创 2020-04-04 10:47:44 · 101 阅读 · 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 · 226 阅读 · 0 评论 -
数组、链表、栈、队列
1、理解什么是线性表2、掌握数组数据结构,读懂ArrayList的部分源码3、掌握链表数据结构,读懂LinkedList的部分源码4、掌握栈这种数据结构,读懂stack的部分源码5、掌握队列这种数据结构...原创 2020-04-04 10:46:29 · 515 阅读 · 0 评论 -
五、JDK命令行工具jps、jstat、jmap、jstack、jhat、jinfo
一、jps,查看虚拟机进程的命令参数说明-q:只输出进程 ID-m:输出传入 main 方法的参数-l:输出完全的包名,应用主类名,jar的完全路径名-v:输出jvm参数二、jstat,查看虚拟机统计信息监视命令jstat -gcutil 进程id 多少毫秒查询一次 共查询多少次 ,查看垃圾收集的状况,例如下图,进程号10066 ,1000毫秒查询一次...原创 2019-01-03 09:43:32 · 745 阅读 · 0 评论 -
四、理解GC日志、内存分配与回收策略
33.125:[GC [DefNew:3324K->152K(3712K),0.0025925secs]3324K->152K(11904K),0.0031680 secs]100.667:[FullGC [Tenured:0K->210K(10240K),0.0149142secs]4603K->210K(19456K),[Perm:2999K->2999K(21248K)],0.0150...原创 2018-12-25 13:12:46 · 308 阅读 · 0 评论 -
三、垃圾收集器类型
收集算法是内存回收的方法论,那么垃圾回收器是内存回收的具体实现。本次讨论的收集器基于JDK1.7之后的HotSpot虚拟机。在谈垃圾收集器的上下文语境中,它们可以解释如下。并行(Parallel):指多条垃圾收集线程并行工作,但此时用户线程仍然处于等待状态。并发(Concurrent):指用户线程和垃圾收集线程同时执行(但不一定是并行的,可能会交替执行),用户程序在继续运行,而垃圾...原创 2018-12-06 09:11:45 · 342 阅读 · 4 评论 -
二、垃圾回收算法与思想
主要的垃圾回收算法一、引用计数器引用计数器实现很简单,对于一个对象A,只要有任何一个对象引用了A,则A的引用计数器就加1。当引用失效时,引用计数器就减1。只要对象A的引用计数器的值为0。则对象A就不可能再被使用了。只要为每个对象配备一个整型的计数器即可。但是计数器有个一个严重的问题,即无法处理循环引用的情况。因此在java的垃圾回收器中,没有使用这个算法。二、标记-清除算法标记-清...原创 2018-11-27 13:15:34 · 195 阅读 · 2 评论 -
一、java虚拟机内存模型
一、java虚拟机内存模型是java程序运行的基础,为了能使java应用程序正常运行,JVM虚拟机将其内存分为程序计数器、虚拟机栈、本地方法栈、java堆和方法区。程序计数器用于存放下一条运行的指令;虚拟机栈和本地方法栈用于存放函数调用堆栈信息;java堆用于存放java程序运行时所需的对象;方法区用于存放程序的类元数据信息。1、程序计数器,是一块很小的内存空间。由于jav...原创 2018-11-20 09:09:54 · 441 阅读 · 2 评论 -
设计模式-建造者设计模式
建造者模式(Builder Pattern),又叫做生成器模式,是一种对象构建模式。它可以将复杂对象的建造过程抽象出来,使这个抽象过程的不同实现方法可以构造出不同表现(属性)的对象。建造者模式是一步一步创建一个复杂的对象,它允许用户只通过指定复杂对象的类型和内容可构建它,用户不需要知道内部的具体构建细节。建造者模式的四个角色:Product(产品角色),一个具体的产品对象Build...原创 2019-12-30 23:31:30 · 123 阅读 · 0 评论 -
设计模式-单例设计模式
单例设计模式是指,单例对象的类,只允许实例一个对象,这样,在jvm堆内存中,就只开辟了一块空间来存储这个对象,这种设计的优点是避免了内存中空间的浪费,避免频繁的创建销毁对象,为整个系统提供一个全局的访问的。打比方,windows桌面,我们已经点开了一个回收站,当我们再点击一次回收站的时候,不会再弹出一个回收站的弹窗。饿汉式class Singleton{ //私有化构造函数,让外部不能...原创 2019-12-26 21:10:25 · 116 阅读 · 0 评论 -
设计模式-代理设计模式
代理模式(Proxy)代理模式的基本介绍1、代理模式:为一个对象提供一个替身,以控制对这个对象的访问。即通过代理对象访问目标对象,这样做的好处是,可以在目标对象实现的基础上,增强额外的功能操作,即扩展目标对象的功能。2、代理模式有不同的形式,主要有三种,静态代理、jdk代理(也叫接口代理)、cglib代理(可以在内存中动态的创建对象,而不需要实现接口)。静态代理静态代理在使用时...原创 2019-12-30 23:31:21 · 282 阅读 · 0 评论 -
设计模式-简单工厂设计模式
什么是工厂设计模式?工厂设计模式,顾名思义,就是用来生产对象的,在java中,万物皆对象,这些对象都需要创建,如果创建的时候直接new该对象,就会对该对象耦合严重,假如我们要更换对象,所有new对象的地方都需要修改一遍,这显然违背了软件设计的开闭原则,如果我们使用工厂来生产对象,我们就只和工厂打交道就可以了,彻底和对象解耦,如果要更换对象,直接在工厂里更换该对象即可,达到了与对象解耦的目的;所...原创 2019-12-24 21:11:29 · 128 阅读 · 0 评论 -
java基础-IO(Input Output)流(三)
File类用来将文件或者文件夹封装成对象方便对文件与文件夹的属性信息进行操作File对象可以作为参数传递给流的构造函数class FileDemo{ public static void main(String[] args) { } public static void consMethod() { ...原创 2019-09-02 23:29:36 · 120 阅读 · 0 评论 -
java基础-IO(Input Output)流(二)
字符流里面有自己的技术缓冲区,缓冲区的出现提高了对数据的读写效率。字符流提供相应的缓冲区对象BufferedWriterBufferedRead缓冲区的出现是为了提高流的操作效率而出现的所以在创建缓冲区之前,必须要先有流对象写入数据class BufferedWriterDemo{ public static void main(String[] args)...原创 2019-08-19 23:29:23 · 211 阅读 · 0 评论