- 博客(76)
- 资源 (1)
- 收藏
- 关注
原创 SpringCloudAlibaba的NacosClient自动注册
概要此篇博客重点将是SpringCloudAlibaba的nacos的客户端是怎么在启动的时候,把自己的服务注册到注册中心的。流程图下面是流程图步骤maven仓库地址
2022-02-21 17:27:21 784
原创 springBoot整合tomcat
前言springBoot版本 2.2.2-release思考springBoot要整合tomcat,参考springMvc项目。有3点需要做tomcat 启动tomcat怎么加载DispatcherServlet(把dispatcherServlet加入到tomcat容器中)mvc自动配置(mvc的一些类,要自动装配到spring容器中)DispatcherServlet是springMvc中提供的一个转发调度所有的http请求的类,我们所有的controller的请求都会先经过这里。
2022-01-26 14:18:02 5677 1
原创 spring-aop入口
技术背景java的动态字节码技术让java能够使用动态代理,而动态代理可以让我们在运行时改变一个类的运行逻辑。代理spring入口代码对spring代码进行了截取 // 创建实例 instanceWrapper = createBeanInstance(beanName, mbd, args); .... // 依赖注入,主要为属性的依赖注入 populateBean(beanName, mbd, instanceWrapper); // bean执行awa
2021-11-30 16:40:09 345
原创 spring依赖注入
依赖注入其实就是属性设置,在spring的环境下,因为对象是spring帮我们创建的,对面里面很多依赖也是spring的对象。这些工作都是spring来帮我们完成。属性值包括几个,属性是引用类型的,属性是基本类型的。这里我们主要讲一讲基本类型的。思考本质上就是给对象设置属性值,就是我们通常写的代码new一个对象,然后给对象赋值public class Test{ public static class PopA{ private String username; public voi
2021-09-10 09:57:49 113
原创 类上注解信息的收集
在spring情况下,我们经常使用@Resource,@Autowired,@PostConstruct的注解,这些注解肯定是需要处理的。处理这些注解分为两步,第一,先收集这些注解,第二对这些注解进行方法调用或者属性注入。本文主要讲属性的收集。思考正常情况下,我们怎么去收集类上面的注解呢?伪代码// 缓存对象与 注解的映射关系 private static Map<Class, List<Object>> annotions = new HashMap<>();
2021-09-09 09:57:49 165
原创 spring 单例的循环依赖
现象两个类都是spring的单例类,两个类里面有一个成员变量,变量都是对方。这样构成了循环依赖。 @Componentpublic class BeanA{ @Resource private BeanB beanB; }@Componentclass BeanB{ @Resource private BeanA beanA; }现在假设我们来创建对象,首先我们来创建a,然后发现a里面有个b,这个时候我们来创建b,b又触发我们创建a。这个时候构成了一个循环依赖的问题
2021-09-08 10:13:48 153
原创 spring单例bean的创建
设计假设我们自己来设计怎么去创建bean,有几种方案可以提供每次需要的时候new一个对象(这个也是我们常用的)对第一个进行升级,把new对象的工作交给工厂假设我们的对象是稳定的,而且是线程安全的,那么我们可以使用同一个对象,可以把这个对象缓存起来。放到一个容器,每次需要用的时候拿出来spring做的事情就是帮我们创建对象,并且把对象缓存到一个Map容器中,需要的时候从容器获取即可。上图关键的前置条件在bean创建之前有些工作时必须完成的,它们是创建bean的必要条件BeanDefi
2021-09-07 09:28:12 526
原创 registerBeanPostProcessors方法调用
类说明public interface BeanPostProcessor { @Nullable default Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException { return bean; } @Nullable default Object postProcessAfterInitialization(Object bean, String bea
2021-09-01 17:25:13 134
原创 spring-boot整合Hikari实现多数据源starer
项目地址点击前往功能展示引入 <dependency> <groupId>com.paper.tiger</groupId> <artifactId>multipart-datasource-spring-star</artifactId> <version>1.0.1-SNAPSHOT</version> </de
2021-06-08 19:25:33 1863 1
原创 简单实现rpc调用
rpc调用代码地址 查看代码rpc称远程调用过程,在rpc调用过程中需要解决的几个问题。代理协议序列化技术选型协议,我们使用java的socket编程套接字代理,使用java的动态代理序列化,使用java的原生的序列化。架构模型注册中心提供服务注册,服务发现,注册中心之间的集群(暂不实现)客户端启动时,向注册中心注册自己提供的服务。调用方查询像注册中心查询到当前的服务,在本地进行存储。数据结构说明 - 注册中心提供服务注册接口类public class
2021-05-31 19:48:44 1547 3
原创 mybatis源码调试环境搭建
下载版本为3.5.8自行从github上下载,笔者这里提供自己的仓库地址:前往操作步骤删除pom中下面元素<optional>true</optional>删除pdf的plugin <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-pdf-plugin</artifactId
2021-05-07 14:17:34 159
原创 ConfigurationClassParser解析
参考spring源码阅读环境准备 ConfigurationClassPostProcessor 注册BeanFactoryPostProcessor 接口调用源码分析BeanDefinitionRegistryPostProcessor详解ConfigurationClassPostProcessor解析前言上一篇我们写到了ConfigurationClassPostProcessor解析到了ConfigurationClassParser的创建和解析。这里我们具体分析spring
2021-02-03 15:13:58 577
原创 ComponentScanAnnotationParser与ClassPathBeanDefinitionScanner解析
参考spring源码阅读环境准备 ConfigurationClassPostProcessor 注册BeanFactoryPostProcessor 接口调用源码分析BeanDefinitionRegistryPostProcessor详解ConfigurationClassPostProcessor解析前言上一篇我们写到了ConfigurationClassPostProcessor解析到了ComponentScanAnnotationParser的创建和解析。这里我们具体分析s
2021-02-03 14:31:49 233
原创 ConfigurationClassPostProcessor解析
上一章: spring源码环境搭建https://blog.csdn.net/qq_22986265/article/details/108293026构造public AnnotationConfigApplicationContext(Class<?>... annotatedClasses) { this(); register(annotatedClasses); refresh(); }
2021-01-21 19:29:43 1450
原创 BeanDefinitionRegistryPostProcessor详解
接口该接口继承了BeanFactoryPostProcessor接口,此接口中只有一个方法,就是postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry)代码public interface BeanDefinitionRegistryPostProcessor extends BeanFactoryPostProcessor { /** * Modify the application context's intern
2021-01-19 09:31:30 8933 6
原创 BeanFactoryPostProcessor 接口调用源码分析
接口介绍这两个接口放在一起贴出来public interface BeanFactoryPostProcessor { /** * 在标准初始化之后修改应用程序上下文的内部bean工厂。所有的bean定义都将被加载,但是还没有bean被实例化。这允许重写或添加 * @param beanFactory the bean factory used by the application context * @throws org.springframework.beans.BeansExc
2021-01-18 15:13:10 360
原创 ConfigurationClassPostProcessor 等关键组件注册
ConfigurationClassPostProcessor 注册在实例化类中,用到了ConfigurationClassPostProcessor 的方法,发现这个类直接就存在与容器中,所以作者找了下这个组件注册到BD容器的时序。代码入口 org.springframework.context.annotation.AnnotationConfigApplicationContext#AnnotationConfigApplicationContext(java.lang.Class<
2021-01-15 15:54:02 538
原创 jvm cpu百分之四百
背景典型的订单导出。因为最开始使用分页导出,一次5000条,现在的数据量上去了。需要业务频繁操作,然后对于导出的逻辑也做了处理,从多表查询全部替换为单表查询。问题执行订单导出的时候,直接服务器飙升400的cpu,内存70。服务直接卡死。追踪问题使用命令:toptop -p 线程号H 进入jstack 线程 进程jstat 查看垃圾回收服务器cpu直接百分之四百内存占用70%jstack命令无法执行定位问题jmap -dump 命令执行获取使用mat内存分析工具
2020-12-23 11:39:38 4868
原创 java 处理图片图片合成
最近写了一个java的图片合成相关的项目,真的是一踩一个坑,下面博主说说遇见的一些坑和怎么解决的这些问题。 本文主要讲图片合成,加文字还是比较简单的。先讲下我的需求,把一张图片盖到另外一张图片上面,然后在图片上加上字第一个版本最开始的时候我用的是thumbnailator工具包,如上图效果但是问题来了,这张图有很大的问题,两个图都是透明度发生了变化。第二个版本使用java自带的Graphics2D代码如下 String blackPath = ""; String fon
2020-12-11 16:08:40 1389 1
原创 spring源码阅读环境准备
想要在自己电脑上debug调试spring,首先需要几个准备工作java环境1.8+gradlespring 源码下载作者自己修改过的gitee上面的代码https://gitee.com/LieFengHenNen/spring-source-test.gitspring的github地址https://github.com/spring-projects/spring-framework/tree/5.1.x作者自己的代码引用的享学课堂的jack老师的,本人也是他带入.
2020-08-29 21:27:52 466
原创 java数字类型与byte数组的转换
最近写通信协议相关的项目, 自己封装了一套数据转换, 主要用于各种数据跟byte[]数组的转换, 可以直接哪去使用/** * @dec: byte 数据转换类 * @author: 鸠摩智 * @date: 2020/6/15 */public final class ByteUtils { private ByteUtils() {} /** * long值转化为byte数组 * * @param value 数值 * @param isBig 是否大端模式 .
2020-08-10 22:46:15 1541
原创 ThreadLocal源码分析
数据结构方法源码解读set 方法获取mappublic void set(T value) { //获取当前线程 Thread t = Thread.currentThread(); // 获取map, 该map保存在Thread对象成员变量中 ThreadLocal.ThreadLocalMap map = getMap(t); // 判断map是否为空 if (map != null)
2020-08-10 22:29:37 121
原创 使用aqs简单实现可重入锁
介绍Lock接口, 该接口定义了java语言中显式锁的基本方法AbstractQueuedSynchronizer抽象类, 采用模版方法设计模式, 其中的模版方法实现了锁的完整流程, 而我们只需要把需要重写的方法进行一个实现即可实现自己的锁.protected boolean tryAcquire(int arg) – 尝试获取许可protected boolean tryRelease(int arg) – 尝试释放许可protected boolean isHeldExclusi
2020-08-05 23:46:00 665
原创 centos7安装mysql5.7.9
资源链接:https://pan.baidu.com/s/1pLO264DsuZhots5tgj-pCg 提取码:efjk安装步骤mkdir /soft# 上传文件到该目录cp mysql-5.7.9-linux-glibc2.5-x86_64.tar.gz /usr/local/cd /usr/local/# 安装依赖 yum install -y libaio# 下面是mysql自己的安装步骤代码 文件目录 /mysql-5.7.9-linux-glibc2.5-x86_
2020-08-03 14:34:10 184
原创 redis6.06集群
安装准备系统版本centos7 64位redis版本redis-4.0.66台虚拟机hostport节点属性192.168.42.1006379master192.168.42.1016379master192.168.42.1026379master192.168.42.1036379slave192.168.42.1046379slave192.168.42.1056379slave配置修改修改redis.
2020-07-31 11:42:28 409
原创 redis哨兵安装(高可用)
安装环境准备centos7redis-4.0.6三台虚拟机hostport节点属性192.168.42.1006379master192.168.42.1016379slave192.168.42.1026379slave默认已经安装了了主从, 如果要看主从去楼主的另外一篇文章 https://blog.csdn.net/qq_22986265/article/details/107687876端口开启开启26379端口firewa
2020-07-30 14:03:17 148
原创 redis主从安装
安装环境准备centos7redis-4.0.6三台虚拟机hostport节点属性192.168.42.1006379master192.168.42.1016379slave192.168.42.1026379slave配置文件修改主节点 192.168.42.100配置项配置值配置说明bind此处注释掉绑定的iprequirepass123456(密码)当前密码masterauth1234
2020-07-30 13:34:45 135
原创 手写ArrayList增删改查(笔记)
闲话少说, 原理大家都懂, 直接上代码/** * 手写一个ArrayList * @param <E> */public class MyArrayList<E> { /** * 当前存储的容量 */ private int size; /** * 存放对象的数组 */ private Object[] objects; /** * 数组初始容量 */ private static final int INITIAL_SIZE.
2020-06-25 21:28:26 215
原创 手写LinkedList代码(增删改查)笔记
开始的时候作者觉得这还不简单, 开始写的时候才发现键盘按不下去, 通过反复的阅读jdk的源码和反复的编写, 作者终于可以无压力的写出增删改查给初学源码的同学们建议, 最好还是自己去实现一遍下面是代码, 经过反复的阅读, 作者的代码已经和jdk的代码有高度的相似, 也有很多不足的地方/** * 自己实现一个双向链表 */public class MyLinkedList<E> { /** * 当前链表长度 */ private int size; /** *.
2020-06-25 18:23:10 308
原创 从semaphore分析aqs
介绍semaphore是一个java多线程并发工具包里面的一个并发工具类. 它主要用于协调多线程下的线程之间的通信. 它非常适用于限流.使用semaphore的使用很简单 , 我们模拟有一个线程池,最多只能同时被10个线程同时操作,如果超出10个, 就让后面的线程进行等待.import java.util.concurrent.LinkedBlockingDeque;import java.util.concurrent.Semaphore;/** * 业务场景: 模仿一个数据库连接池,
2020-06-11 22:54:35 298
原创 以太坊服务节点搭建
以太坊在centos上安装以太坊安装所需环境yum update -y && yum install git wget bzip2 vim gcc-c++ ntp epel-release nodejs cmake -y安装gowget https://dl.google.com/go/go1.10.linux-amd64.tar.gztar -C /usr/loc...
2019-03-08 10:06:57 2577
原创 关于PriorityQueue队列排序问题
java版本1.8发现问题, 发现PriorityQueue的排序居然没有任何效果, 程序如下public class MainTest { public static void main(String[] args) { PriorityQueue<Integer> tasks = new PriorityQueue<>( ...
2018-09-28 18:32:48 3656 3
原创 java-深虚笔记之内存区域
概述java程序员把内存控制的权利交给了虚拟机,一旦出现内存泄漏和溢出问题,如果不了解虚拟机是怎样使用内存的,那么排查错误将会成为一项异常艰难的工作运行时数据区域程序计数器字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码指令,分支、循环、跳转、异常处理、线程恢复等基础功能都要依赖这个计数器来完成。每条线程都需要有一个独立的程序计数器,各个线程之间...
2018-07-08 13:04:30 218
原创 java编程思想之并发
并发这一集消耗了我太多的时间,但是还是差很多意思。并发的多面性使用并发需要解决的问题有多个,而实现并发的方式也有多种,并且在这两者之间没有明显的映射关系(通常只具有模糊的界限)。更快的执行并发通常是提供运行在单处理器上程序的性能。上下文切换(好像多线程并没有是没用,增加了上线文切换)阻塞,特别是io的阻塞事实上,从性能上来看,如果没有任务会阻塞,那么在单处理...
2018-06-19 23:58:26 275
原创 java设计模式之迭代器
一.简介在我们使用的jdk的api中有着大量的集合容器,而这些容器需要一个统一的遍历方式,这个遍历方式就是实现iterable接口,这个接口获取一个迭代器.这个迭代器有统一的遍历方法.至于每个容器他们的具体实现细节由各个集合自己去实现.二.结构迭代器角色:定义可以对容器进行迭代的抽象方法;具体迭代角色:一般存在于容器内部,它由容器来产生;抽象容器角色:定义了获取迭代器角色的接口,并且有容器自己的属...
2018-02-02 11:00:32 171
原创 java设计模式之装饰器
一.简介普通班的学生在上课的时候是听课,而小班的学生在上课的之前会预习,下课之后会复习,他们相当于普通学生的加强版.我们可以选择使用继承来实现他们的关系,但是这并不复合继承的思想,超级班的学生并不是普通班的学生中的一员.我们选择使用装饰器模式,使用一个新类,在这个类中引入我们需要加强的类(被装饰者),这样我们对它原先的方法进行重写.这样的好处在于我们并不需要维护复杂的继承关系.二.结构被装饰对象:...
2018-02-01 16:10:49 189
原创 java设计模式之命令
一.简介我们在给使用遥控器给控制电视的时候,这种方式正符合了我们java中的命令设计模式,我们自己就是客户端,电视代表了接收者,它会执行具体的动作,整个遥控器是调用者,具体按键开机,关机,变化频道是具体的命令类.二.结构抽象命令角色:它定义了具体命令者的统一的接口,该接口中的方法由调用者来统一调用.具体命令角色:实现了抽象命令角色,引入了接收者,使用接收者做具体的命令操作.抽象
2018-01-31 16:10:39 170
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人