自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

小鲁班-JAVA开发

热衷于技术,喜欢java开发工作,实践来自理论,随时记笔记

  • 博客(160)
  • 资源 (13)
  • 收藏
  • 关注

原创 JVM对象分配过程

对象分配流程图1、依据逃逸分析,是否可以栈上分配?如果可以,则使用标量替换,把对象分配到栈空间上,如果线程销毁或方法调用结束后,自动销毁,不需要GC回收器介入。进行第3步操作。2、不满足逃逸分析,判断对象是否是大对象?如果是,直接分配到堆上 Old Generation 老年代上。如果对象变为垃圾后,由老年代GC 收集器(比如 Parallel Old, CMS, G1)回收。不是大对象,则进行第3步操作。3、判断是否可以在 TLAB中分配?如果是,在 TLAB中分配堆上Eden区。否则..

2021-12-28 22:17:28 1282

原创 MySQL基础-索引选择为啥使用B+Tree

1

2021-12-26 17:22:53 1634

原创 MyBatis源码分析-plugin执行过程

前面的几篇文章已经讲了配置文件所有属性解析都在这个方法里XMLConfigBuilder的parseConfiguration方法里,下面我们看下它是怎么解析plugin。解析plugin的方法pluginElement解析plugins的子节点interceptor,获取子节点的属性值。然后添加到Configuration的addInterceptor方法,最终添加​​​​​​到InterceptorChain的interceptors集合中下面我们自己定一个plugin,将..

2021-12-05 22:27:12 1334

原创 MyBatis源码分析-数据源及事务管理器获取过程

前一篇文章中,我们已经看到配置文件的解析过程,配置文件所有属性解析都在这个方法里XMLConfigBuilder的parseConfiguration方法,接下来我们先看下配置文件中数据源的获取过程。先看下数据源的结构parseConfiguration方法,数据源解析方法environmentsElement。先获取节点environments里的default的环境变量值,可以看到environments可以配置多个environment节点,既可以指定多个环境的数据源配置信息,然后...

2021-12-05 13:33:24 589

原创 MyBatis源码分析-配置文件解析过程

首先我们看数据源的节点数据<environments default="development"> <environment id="development"> <!--type="JDBC" 代表使用JDBC的提交和回滚来管理事务--> <transactionManager type="JDBC" /> <!-- mybatis提供了3种数据源类型,分别是:

2021-12-05 12:25:09 361 1

原创 MyBatis源码分析-环境搭建及数据源配置解析顺序

1.搭建maven工程,引入以下mybatis和mysql数据的jar包 <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.7</version> </dependency>

2021-12-05 10:00:26 101

原创 serialVersionUID的作用

serialVersionUID是一个非常重要的字段,java的序列化机制是通过在运行时判断类的serialVersionUID来验证版本的一致性。在进行反序列化时,JVM会把字节流中传来的serialVersionUID与本地相应实体类的serialVersionUID进行比较,如果一致,则可以进行反序列化,否则会出现序列化版本不一致的问题,InvalidClassException异常。一般来说定义InvalidClassException有两种方式①、默认的1L,private static.

2021-11-21 14:24:18 1013

原创 Spring AOP中Introduction的使用

Introduction是啥?在Spring中如果有一个已经存在的service,我们想对其进行增强,但是又不想改变其代码,这个时候就可以使用Introduction来处理。具体怎么实现,看下面的详细例子。引入jar包 <dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId&gt

2021-11-13 21:45:40 745

原创 Spring中Lookup注解的使用

我们知道在spring容器中单独的一个抽象类是不能成为一个bean的,那么有没有办法呢?这个时候我们可以使用Lookup注解,我们可以看下spring的扫描bean部分逻辑。我们知道在spring中要想成为一个bean,必须先生成BeanDefinition对象,如果一个抽象类中没有含有Lookup注解的方法,在spring扫描时就会被排除掉。 /** * 1、判断是不是独立的类,非静态内部类则无法生成bean, * 2、判断是不是接口或者抽象类(有一种特殊情况),是则无法生成 * 3、判

2021-10-26 11:32:24 735

原创 阅读Spring之前需要了解的部分基础组件

BeanDefinition:Class可以用来描述一个类的属性和方法等等其他信息,BeanDefintion可以描述spring的bean信息,比如beanClass,scope、lazyInit,autowireMode以及属性和方法等等其他信息重要的实现接口和类:...

2021-10-19 19:28:09 93

原创 spring framework源码编译步骤

最近又在重新系统地研究spring源码,避免不了需要偶自己看源码和调试,所以总结了spring源码编译的方法和步骤1.源码github下载地址:https://github.com/spring-projects/spring-framework可以选择不同的分支下载2、本文以5.3版本为例,在idea中导入源码...

2021-10-18 19:57:19 317 1

原创 简单模拟手写Spring框架

只是简单的按照Spring的执行流程写了一下代码,当然跟Spring源码是有很大的差别,可以拿来学习,不喜勿碰。支持单例和原型的bean,以及初始化前、初始化、初始化后的方法执行,可以解析各种定义的注解执行流程工程机构关键代码,代码路径:xqc-structure: 模拟手写springpackage com.xqc.context;import com.xqc.annotation.*;import com.xqc.aware.XqcBeanAware;impor..

2021-10-17 11:06:17 132

原创 Spring推断构造方法和应用场景初步分析

1.工程结构依赖jar包<dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>5.0.4.RELEASE</version> </dependency>2、将Ord.

2021-10-15 09:59:42 136

原创 ApplicationContext相关功能说明和使用

ApplicationContext继承了EnvironmentCapable、 ListableBeanFactory、HierarchicalBeanFactory、 MessageSource、 ApplicationEventPublisher、 ResourcePatternResolver 6个接口。如图而其中ListableBeanFactory和HierarchicalBeanFactory又继承了BeanFactory,所有ApplicationContext也是BeanFacto

2021-09-22 12:53:38 638

原创 解决zookeeper写入数据前几位乱码问题

在springboot+dubbo+zookeeper+seata框架整合时,需要将seata的配置信息写入到zookeeper中,发现在zookeeper创建节点,写入的数据前几位一直是乱码,困扰了很久,最终完美解决。所有的节点下面的值都有这个问题。seata配置信息transport.type=TCPtransport.server=NIOtransport.heartbeat=truetransport.enableClientBatchSendRequest=falsetran

2021-06-26 09:43:05 653

原创 org.apache.dubbo.config.ApplicationConfig#0“ contains illegal character, only digit, letter, ‘-‘, ‘_

java.lang.IllegalStateException: Invalid name="org.apache.dubbo.config.ApplicationConfig#0" contains illegal character, only digit, letter, '-', '_' or '.' is legal. at org.apache.dubbo.config.utils.ConfigValidationUtils.checkProperty(ConfigValidation...

2021-06-22 16:31:23 1761 1

原创 prometheus+grafana运维监控系统搭建

环境

2021-04-10 17:32:36 170 2

原创 本机MySQL-1862密码过期解决方法

错误信息截图意思就是密码过期,解决方法如下:1、用root用户登录cmd窗口,执行命令mysql -uroot -p,然后输入密码如果直接输入以上命令不行,则进入mysql安装目录的bin文件夹下输入上面的命令2、直接执行命令set password=password('密码')以上两步即可解决...

2021-04-10 14:23:02 386

原创 Redis压测工具

执行redis-benchmark命令可以看到每个命令的压测结果:

2021-04-07 00:28:29 230

原创 Redis是单线程吗?

严格来讲Redis并不是单线程的。单线程只是在执行客户端提交的命令时会进行排队然后逐条执行,而其他的操作,比如持久化、异步删除、集群同步都是由其它的额外线程执行的。

2021-04-07 00:21:33 646

原创 Redis使用

Redis5种数据类型string(字符串)、hash(哈希)、list(列表)、set(集合)、zset(sorted set 有序集合)

2021-04-05 22:50:15 107

原创 JAVA并发三大特性

1、原子性2、可见性3、有序性

2021-03-28 23:23:20 128

原创 MySQL解压版的安装方法

1.找到解压之后的目录2.在目录下新建my.ini文件

2021-03-28 20:53:04 111

原创 JAVA内存模型

对象头、指针类型、对齐填充

2021-03-28 00:35:27 65

原创 操作系统底层认知

CPU发展中,比较著名的摩尔定律: 摩尔定律是英特尔创始人之一戈登·摩尔的经验之谈,其核心内容为:集成电路上可以容纳的晶体管数目在大约每经过18个月便会增加一倍。换言之,处理器的性能每隔两年翻一倍。摩尔定律是内行人摩尔的经验之谈,汉译名为“定律”,但并非自然科学定律,它一定程度揭示了信息技术进步的速度。CPU经过几年的发展,速度已经非常快,而内存虽然经过几年的发展,也比较快,但CPU的性能远远快于内存性能。CPU每次都要去内存中读取数据,内存性能比较慢,效率比较低,而且CPU和内...

2021-03-27 23:23:18 168

原创 ForkJoin框架原理

ForkJoin是java1.7才引入的,由大神Doug Lea写的任务性质类型CPU密集型CPU密集型也叫计算密集型,系统的硬盘、内存性能相对于CPU会好很多,此时系统运作大部分的状况是CPU Loading 100%、CPU要读写I/O(硬盘、内存),I/O在很短的时间内就可以完成,而CPU还有许多运算要处理,CPU Loading很高。在大部分系统中,大部分时间用来做计算、逻辑判断等CPU动作的程序成为CPU bound。CPU bound的程序一般CPU使用率比较高。这可能是任务

2021-03-23 23:57:19 126

原创 ActiveMQ、RabbitMQ、RocketMQ、Kafka的比较

特性 ActiveMQ RabbitMQ RocketMQ Kakfa 开发语言 java erlang java scala 单机吞吐量 万级 万级 10万级 10万级(可达18万) 时效性 ms级(毫秒) us级(微秒) ms级(毫秒) ms级(以内毫秒) 可用性 高(主从架构) 高(主从架构) 非常高(分布式架构) 非常高(分布式架构) 功能特性 1

2021-03-21 21:49:34 200

原创 java常用的对象转map的几种方式

创建对象Userpackage com.xqc; import java.util.Date; public class User { /** * * ID */ private Integer id; /** * * 用户名 */ private String userName; /** * * 岗位ID */ private Long jobId;

2021-01-17 15:04:44 35600

原创 MapStruct使用和原理分析

在代码开发中,经常会遇到不同实体类之间的字段copy,以前经常用到的有通过set赋值或者apache、spring的BeanUtils.copyProperties(),原生的set赋值随便速度比较快,但是当字段多的时候,就显得比较麻烦了,每个都要自己手动set一下值,而apache、spring的BeanUtils.copyProperties()可以解决这种字段比较多的情况,但是这种方式有个弊端,就是,字段的类型和名称都必须一样才可以,否则copy时会被忽略掉。知道接触了一种新的方式,使用MapStru

2020-12-25 21:31:19 1829

原创 java设计模式-外观模式

外观模式:隐藏系统的复杂性,向客户端提供了一个客户端可以访问系统的接口、减少客户端对系统的复杂性。代码示例:1.创建接口Shapepublic interface Shape { void draw();}2.创建实现类Rectangle、Circle、Square类/** * 矩形 */public class Rectangle implements Shape{ @Override public void draw() { Sys

2020-12-13 14:46:53 108

原创 java设计模式-装饰器模式(包装模式)

装饰器模式:在不必改变原类文件和使用继承的情况下,动态的扩展一个对象的功能。它是通过创建一个包装对象,也就是装饰来包裹真实的对象。装饰器模式的使用过程:1.创建一个接口,然后写方法2.创建类实现该接口,并实现接口里的方法3.创建包装类,也实现上面的接口和方法4.在包装类中声明被包装类的类型,通过构造器的方式注入5.在包装类中,不需要修改的方法,直接调用被包装类的方法即可,只需要修改的自己关注的方法。代码示例1.创建接口Ups,并声明了3个方法public interface Ups {

2020-12-13 14:17:00 924

原创 线程笔记分享

在一个进程中,多个线程可以共享进程中的相同的内存和文件资源。单线程:排队执行、在同一时间内,只能执行一个任务,CPU利用率大幅度降低,这是最大的缺点。多线程:在同一时间内可以执行多个任务、这是多线程最大的优点。实现线程的方式,继承Thread,实现Runnable接口,Thread实际上也是实现了Runnable接口,之间是多态关系,继承Thread最大的局限是java不支持多继承,所以一般建议实现Runnable接口。线程调用start方法比较耗时,大概四个步骤,1.通过jvm告诉操作系统创建T

2020-12-06 13:22:48 78

原创 系统CPU飙高分析步骤

1.top命令,查看cpu比较高的进程ID2.找到cpu比较高的进程ID之后,然后使用top -Hp 进程ID查看占用cpu比较高的线程3.找到占用cpu比较高的线程ID,使用printf '%x\n' 线程ID,将线程ID转化为16进制显示4.使用jstatck 进程ID|grep -a 线程的16进制(-a 30是显示前30行)打印出线程栈信息然后通过打印出的线程栈信息分析cpu比较高的原因打印进程下所有的线程栈信息,输出到指定目录,便于进行日志分析jstack 进程ID >/hom

2020-12-06 13:16:22 399

原创 命令查询mysql安装位置

show VARIABLES like '%base%';结果

2020-11-26 21:03:54 204

原创 理解SPI机制

SPI ,全称为 Service Provider Interface,是一种服务发现机制。它通过在ClassPath路径下的META-INF/services文件夹查找文件,自动加载文件里所定义的类。Dubbo、JDBC中都使用到了SPI机制,springboot也使用了spi机制,但是它并没有使用原生的,而是自己做了扩展。例子说明工程结构新建spi-interface工程,编写接口StuService和方法run新建spi-girl类,引入spi-interface工程依赖,StuGirlSe

2020-11-02 23:48:37 285

原创 Spring循环依赖问题分析和解决

项目路径:https://gitee.com/wuhan1/spring-parent.git下的spring-10循环依赖出现的三种情况1、构造器参数循环依赖2、setter方式单例,singleton3、setter方式原型模式,prototype一、构造参数依赖,新建StuServiceA和StuServiceB,之间相互引用public class StuServiceA { private StuServiceB stuServiceB; public Stu.

2020-10-12 23:09:49 183

原创 Spring 自定义标签的使用

工程目录:https://gitee.com/wuhan1/spring-parent/tree/master/spring-12自定义标签有什么用? 自定义标签可以说是spring为了给类似你我这样的开发人员扩展组件使用的,因为它提供了一个标准的公共可插拔的接口;目前我们都知道spring非常强大,不过实际上除了spring-core和spring-beans外,其他都是通过自定义标签扩展实现的,其次还有一些开源组件也是,如dubbo等。所以,对于想扩展spring组件的小伙伴来说,了解如何...

2020-10-12 23:07:12 384

原创 Spring源码日志分析

1.jdk自带的java util logging,即jul日志输出格式:从源码可以看到jul的Logger是个具体的类2.apache的commons-logging,即jcl输出结果,没有任何配置从表面看起来是使用的jul,实际上是什么样的,查看源码Log是一个接口,而不是具体的实现类看LogFactory.getLog源码,实际上是有一个数组,里面放了4种日志打印方式然后通过反射获取数组里的对象 private Log createLogFromClass(String lo

2020-10-09 23:38:26 356

原创 DCL实现单例要不要加volatile修饰

单例模式的DCL(Double-checked locking 双重校验锁定模式)写法:public class DclSingleton { private static volatile DclSingleton dclSingleton = null; public static DclSingleton getDclSingleton(){ if(dclSingleton == null){ synchronized (DclSing

2020-09-28 23:15:46 498

原创 Spring bean的生命周期总结

bean的行为模式分两种:单例模式:由ioc容器负责非单例模式:spring ioc容器不负责此种模式的生命周期,只负责创建初始化bean生命周期最简单的一种情况:实例化——》设置属性——》使用复杂的情况(实际可能只会用到其中的几步):1.实例化2.设置属性3.如果实现了BeanNameAware接口(bean名字关注接口),则可以获取正在实例化的bean的名字(bean id)4.如果实现了BeanFactoryAware接口(bean 工厂关注接口),则可以获取bean工厂5.如果实

2020-09-20 21:10:59 276

client-0.0.1-SNAPSHOT.jar

Java Redis线程池ShardedJedisPool 使用方法,Java Jedis连接池的使用

2019-12-09

jenkins.zip

Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能

2019-11-08

jd-gui-windows-1.6.3.zip

java反编译工具,支持用java8 lambda表达式写的代码,进行反编译查看

2019-10-28

Redis-x64-3.2.100.zip

redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步

2019-09-30

zookeeper-3.4.6.zip

ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。

2019-09-30

elastic-job-lite-console.zip

Elastic-Job是一个分布式调度解决方案,由两个相互独立的子项目Elastic-Job-Lite和Elastic-Job-Cloud组成。Elastic-Job-Lite定位为轻量级无中心化解决方案,使用jar包的形式提供分布式任务的协调服务;Job-Cloud采用自研Mesos Framework的解决方案,额外提供资源治理、应用分发以及进程隔离等功能(PS:我在这里只说Elastic-Job-Lite,因为Job-Cloud我没去研究)

2019-09-30

nginx_win.rar

Nginx在做反向代理时,提供性能稳定,并且能够提供配置灵活的转发功能。Nginx可以根据不同的正则匹配,采取不同的转发策略,比如图片文件结尾的走文件服务器,动态页面走web服务器,只要你正则写的没问题,又有相对应的服务器解决方案,你就可以随心所欲的玩。并且Nginx对返回结果进行错误页跳转,异常判断等。如果被分发的服务器存在异常,他可以将请求重新转发给另外一台服务器,然后自动去除异常服务器。

2019-09-30

zookeeper文件

zookeeper工具,本地一台电脑搭建zookeeper伪集群,经测试可以使用

2018-08-11

tomcat-8.5.32-win-x64

tomcat-8.5.32-win-x64,欢迎大家多多下载,使用时记得给好评,谢谢!!!

2018-07-30

vue.min.js

vue开发,欢迎大家多多下载,使用时记得给好评,谢谢!!!

2018-07-30

dubbo-admin

分布式,dubbo-admin,分布式服务查看,微服务等等等等等等等等

2018-07-29

mycat-linux版

mycat linux版的中间件,mysql分库分表、读写分离,

2018-07-28

Mycat-server-win

mycat windows版的中间件,mysql分库分表、读写分离,

2018-07-27

空空如也

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

TA关注的人

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