
java
文章平均质量分 74
吐蕃圣僧
能和我打成平手的,天底下没有几个!!
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
spring依赖注入populateBean
spring属性依赖注入简介原创 2022-12-22 17:39:24 · 220 阅读 · 1 评论 -
spring创建对象doCreateBean
准备工作做完后,我们以简单的视角来看看spring是如何创建对象的原创 2022-12-14 17:09:49 · 468 阅读 · 0 评论 -
spring的Schedule定时任务执行源码分析
spring的定时任务原理解析原创 2022-03-22 10:30:16 · 1299 阅读 · 0 评论 -
SpringCloudAlibaba的NacosClient自动注册
概要此篇博客重点将是SpringCloudAlibaba的nacos的客户端是怎么在启动的时候,把自己的服务注册到注册中心的。流程图下面是流程图步骤maven仓库地址原创 2022-02-21 17:27:21 · 856 阅读 · 0 评论 -
简单实现rpc调用
rpc调用代码地址 查看代码rpc称远程调用过程,在rpc调用过程中需要解决的几个问题。代理协议序列化技术选型协议,我们使用java的socket编程套接字代理,使用java的动态代理序列化,使用java的原生的序列化。架构模型注册中心提供服务注册,服务发现,注册中心之间的集群(暂不实现)客户端启动时,向注册中心注册自己提供的服务。调用方查询像注册中心查询到当前的服务,在本地进行存储。数据结构说明 - 注册中心提供服务注册接口类public class原创 2021-05-31 19:48:44 · 1618 阅读 · 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 · 191 阅读 · 0 评论 -
ConfigurationClassParser解析
参考spring源码阅读环境准备 ConfigurationClassPostProcessor 注册BeanFactoryPostProcessor 接口调用源码分析BeanDefinitionRegistryPostProcessor详解ConfigurationClassPostProcessor解析前言上一篇我们写到了ConfigurationClassPostProcessor解析到了ConfigurationClassParser的创建和解析。这里我们具体分析spring原创 2021-02-03 15:13:58 · 614 阅读 · 0 评论 -
ComponentScanAnnotationParser与ClassPathBeanDefinitionScanner解析
参考spring源码阅读环境准备 ConfigurationClassPostProcessor 注册BeanFactoryPostProcessor 接口调用源码分析BeanDefinitionRegistryPostProcessor详解ConfigurationClassPostProcessor解析前言上一篇我们写到了ConfigurationClassPostProcessor解析到了ComponentScanAnnotationParser的创建和解析。这里我们具体分析s原创 2021-02-03 14:31:49 · 269 阅读 · 0 评论 -
BeanDefinitionRegistryPostProcessor详解
接口该接口继承了BeanFactoryPostProcessor接口,此接口中只有一个方法,就是postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry)代码public interface BeanDefinitionRegistryPostProcessor extends BeanFactoryPostProcessor { /** * Modify the application context's intern原创 2021-01-19 09:31:30 · 9033 阅读 · 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 · 395 阅读 · 0 评论 -
ConfigurationClassPostProcessor 等关键组件注册
ConfigurationClassPostProcessor 注册在实例化类中,用到了ConfigurationClassPostProcessor 的方法,发现这个类直接就存在与容器中,所以作者找了下这个组件注册到BD容器的时序。代码入口 org.springframework.context.annotation.AnnotationConfigApplicationContext#AnnotationConfigApplicationContext(java.lang.Class<原创 2021-01-15 15:54:02 · 571 阅读 · 0 评论 -
jvm cpu百分之四百
背景典型的订单导出。因为最开始使用分页导出,一次5000条,现在的数据量上去了。需要业务频繁操作,然后对于导出的逻辑也做了处理,从多表查询全部替换为单表查询。问题执行订单导出的时候,直接服务器飙升400的cpu,内存70。服务直接卡死。追踪问题使用命令:toptop -p 线程号H 进入jstack 线程 进程jstat 查看垃圾回收服务器cpu直接百分之四百内存占用70%jstack命令无法执行定位问题jmap -dump 命令执行获取使用mat内存分析工具原创 2020-12-23 11:39:38 · 4909 阅读 · 0 评论 -
ConfigurationClassPostProcessor解析
上一章: spring源码环境搭建https://blog.youkuaiyun.com/qq_22986265/article/details/108293026构造public AnnotationConfigApplicationContext(Class<?>... annotatedClasses) { this(); register(annotatedClasses); refresh(); }原创 2021-01-21 19:29:43 · 1482 阅读 · 0 评论 -
手写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 · 238 阅读 · 0 评论 -
手写LinkedList代码(增删改查)笔记
开始的时候作者觉得这还不简单, 开始写的时候才发现键盘按不下去, 通过反复的阅读jdk的源码和反复的编写, 作者终于可以无压力的写出增删改查给初学源码的同学们建议, 最好还是自己去实现一遍下面是代码, 经过反复的阅读, 作者的代码已经和jdk的代码有高度的相似, 也有很多不足的地方/** * 自己实现一个双向链表 */public class MyLinkedList<E> { /** * 当前链表长度 */ private int size; /** *.原创 2020-06-25 18:23:10 · 335 阅读 · 0 评论 -
从semaphore分析aqs
介绍semaphore是一个java多线程并发工具包里面的一个并发工具类. 它主要用于协调多线程下的线程之间的通信. 它非常适用于限流.使用semaphore的使用很简单 , 我们模拟有一个线程池,最多只能同时被10个线程同时操作,如果超出10个, 就让后面的线程进行等待.import java.util.concurrent.LinkedBlockingDeque;import java.util.concurrent.Semaphore;/** * 业务场景: 模仿一个数据库连接池,原创 2020-06-11 22:54:35 · 333 阅读 · 0 评论 -
java设计模式之桥梁
1,需求某公交车站有线路a到达a地点,线路b到达b地点,现在有旅客c去b地点,d取a地点,需要使用a,b两个线路2,分析 公交车站可能并不单单是两个线路,可以抽取出来一个接口,每条线路都实现该接口,具有到底目的地的功能 ,旅客也可以抽取一个公共的接口,每个旅客为具体的实现。3,代码//车站public interface Station { /** * 到达目的地原创 2017-12-06 17:23:42 · 212 阅读 · 0 评论 -
java编程思想笔记15-泛型
一般的类和方法,只能使用具体的类型:要么是基本类型,要么是自定义的类.如果要编写可以应用与多种类型的代码,这种刻板的限制对代码的束缚就会很大.在面向对象的编程语言中,多态算是一种泛化机制.例如方法中接收object类型作为参数,便可以接收任意类型的参数.15.1 与c++的比较理解java泛型的局限是什么,为什么会有这些局限,理解了边界所在,你才能成为程序高手.15.2 简单泛型有很多原因促成了泛原创 2018-01-18 08:56:27 · 258 阅读 · 0 评论 -
java编程思想笔记16-数组
16.1 数组为什么特殊数组与其他种类的容器之间的区别有三个方面:效率,类型和保存基本类型的能力.在java中数组是一个效率最高的存储和随机访问对象引用序列的方式.数组就是一个简单的线性序列,这使得元素访问非常快速.但是为这种速度所付出的代价是数组对象的大小被固定,并且在其声明周期里不可改变.随着自动装包机制的出现,容器已经与数组几乎一样地运用于基本类型中了.数组唯一的优势就是效率了.然而需要解决原创 2018-01-18 08:56:53 · 221 阅读 · 0 评论 -
java设计模式之原型
一.介绍 原型模式:就是允许一个对象可以创建另外一个可以定制的对象,根本无需直到任何创建对象的细节,工作原理是:通过将一个原型对象传给另外一个发动创建的对象,这个发送创建的对象通过请求原型对象拷贝它们自己来创建. 在使用了java的clone()方法之后,也就是自己传给自己,自己调用自己,自己复制一个自己 类图 二.代码public class MainTest { public st原创 2018-01-18 11:08:10 · 204 阅读 · 0 评论 -
java编程思想笔记17-容器深入研究
17.1 完整的容器分类法java5添加了Queue接口(LinkedList已经视线了该接口并做了修改),及其实现PriortyQueue和各种风格的BlockingQueue,其BlokingQueue为多线程使用ConcurrentMap接口及其实现ConcurrentHashMap,也是用于多线程机制的.CopyOnWriteArrayList和CopyOnWriteArraySet,也是原创 2018-01-18 08:57:10 · 394 阅读 · 0 评论 -
java设计模式之装饰器
一.简介普通班的学生在上课的时候是听课,而小班的学生在上课的之前会预习,下课之后会复习,他们相当于普通学生的加强版.我们可以选择使用继承来实现他们的关系,但是这并不复合继承的思想,超级班的学生并不是普通班的学生中的一员.我们选择使用装饰器模式,使用一个新类,在这个类中引入我们需要加强的类(被装饰者),这样我们对它原先的方法进行重写.这样的好处在于我们并不需要维护复杂的继承关系.二.结构被装饰对象:...原创 2018-02-01 16:10:49 · 214 阅读 · 0 评论 -
java设计模式之迭代器
一.简介在我们使用的jdk的api中有着大量的集合容器,而这些容器需要一个统一的遍历方式,这个遍历方式就是实现iterable接口,这个接口获取一个迭代器.这个迭代器有统一的遍历方法.至于每个容器他们的具体实现细节由各个集合自己去实现.二.结构迭代器角色:定义可以对容器进行迭代的抽象方法;具体迭代角色:一般存在于容器内部,它由容器来产生;抽象容器角色:定义了获取迭代器角色的接口,并且有容器自己的属...原创 2018-02-02 11:00:32 · 186 阅读 · 0 评论 -
java编程思想笔记01-对象导论
对象导论我们之所以将自然界分解,组织成各种概念,并按照其含义分类,主要是因为我们是整个口语交流社会共同遵守的协定的参与者,这个协定以语言的形式固定下来......除非赞同这个协定中规定的有关语言信息的组织和分类,否则我们根本无法交谈.1.1 抽象过程所有的编程语言都提供抽象机制.可以认为,人们能够解决问题的复杂性直接取决于抽象的类型和质量.所谓的"类型"是指"抽象的是什么".汇编语言是对机器语言的原创 2018-01-15 11:55:35 · 217 阅读 · 0 评论 -
java设计模式之备忘录
一.简介 话说,我小时候玩小霸王游戏中坦克大战的闯关游戏中,哪个时候我们基本上每次过了一关都会保存进度,如果不玩了,或者是下一关太难过了每过了,这样我们就可以回到原先的时候,回到原先的进度继续游戏.这样我们就回到过去了.二.结构备忘录(Memento)角色:备忘录角色存储"备忘发起者角色"的内部状态;在黑箱和自述历史模式的情况下,不允许除了发起人之外的人访问自己.备忘发起者角色:创建一个备忘录,在原创 2018-01-19 16:28:03 · 595 阅读 · 0 评论 -
java设计模式之模版方法
一.简介 我们往往遇见一些问题我们知道它的解决流程,或者说是大概的思路,但是我们不知道它的具体的实现.就像我们的tomcat针对发起的http请求,它知道请求的流程,但是不知道具体逻辑和返回数据,这样我们继承了它的httpservlet类,实现它们的doget方法和dopost方法.实现我们需要实现的具体细节.二.结构抽象模版类:定义一个或者多个抽象方法,这些方法称为基本操作,原创 2018-01-20 10:47:28 · 176 阅读 · 0 评论 -
java-深虚笔记之内存区域
概述java程序员把内存控制的权利交给了虚拟机,一旦出现内存泄漏和溢出问题,如果不了解虚拟机是怎样使用内存的,那么排查错误将会成为一项异常艰难的工作运行时数据区域程序计数器字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码指令,分支、循环、跳转、异常处理、线程恢复等基础功能都要依赖这个计数器来完成。每条线程都需要有一个独立的程序计数器,各个线程之间...原创 2018-07-08 13:04:30 · 239 阅读 · 0 评论 -
java编程思想之并发
并发这一集消耗了我太多的时间,但是还是差很多意思。并发的多面性使用并发需要解决的问题有多个,而实现并发的方式也有多种,并且在这两者之间没有明显的映射关系(通常只具有模糊的界限)。更快的执行并发通常是提供运行在单处理器上程序的性能。上下文切换(好像多线程并没有是没用,增加了上线文切换)阻塞,特别是io的阻塞事实上,从性能上来看,如果没有任务会阻塞,那么在单处理...原创 2018-06-19 23:58:26 · 294 阅读 · 0 评论 -
关于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 · 3754 阅读 · 3 评论 -
java编程思想笔记14-类型信息
运行时类型信息使得你可以在程序运行时发现和使用类型信息.14.1 为什么需要RTTI(runtime type information)代码操作的是基类的引用,而调用的是子类的方法,这种情况在编译器是不知道该引用的具体类型,所以需要运行时类型信息.14.2 Class对象要理解rtti在java中的工作远离,首先必须直到类型信息在运行时是如何标识的.这项工作是由称为Class对象的特殊对象完成的,原创 2018-01-17 21:12:17 · 224 阅读 · 0 评论 -
java编程思想笔记13-字符串
可以证明,字符串操作是计算机程序中最常见的行为.13.1 不可变string实际上是丢弃原先的对象,重新创建了一个对象;String a = "154541651561154541651561";String b = "154541651561154541651561";System.out.println(a == b);// true13.2 重载 + StringBuilder不可变性原创 2018-01-17 21:10:56 · 177 阅读 · 0 评论 -
java设计模式之工厂方法
一.工厂方法构成抽象工厂角色(简单工厂中不需要):工厂方法法模式的核心,与应用程序无关,任何在模式内创建对象的工厂类必须实现的接口;具体工厂角色:实现抽象工厂角色的类,负责对象的具体创建的逻辑,应用程序调用具体执行的逻辑;抽象产品:产品的超类型接口,也是工厂方法模式所接收到的创建对象的类型;具体产品角色:实现了抽象产品定义的接口,具体产品与具体工厂相对应类图原创 2018-01-14 22:43:24 · 241 阅读 · 0 评论 -
java设计模式之生成器
一.概述当我们需要一架飞机时,它们的组成有内部极其复杂的逻辑.部件的构成不是直接内部一个单位完成,而是由多个厂家来完成.我们在完成.概念:当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时,当构造过程允许被构造的对象有不同的标识时.这种方式我们称为生成器模式.简单而言,它有点类似工厂模式,他的目的是为了分离复杂对象的构建与它的表示相分离.二.为什么需要生原创 2018-01-12 18:04:40 · 217 阅读 · 0 评论 -
java设计模式之单例
1,为什么需要单例设计模式单例模式与工具类提到单例设计模式就不得不提工具类了,在网上有许多关于它们的说法,这些我指出本人自己的看法,如有不对,请指出,我觉得从核心的角度来说,单例工具类的区别在于:单例是容器的思想,这个对象维护了一些自己的属性,比如:Runtime类维护系统运行的状态和属性,线程池维护了自己的属性,强调的是自己本身。我们会关注系统运行的参数,也会关注线程池中有多少个线程.工具类强调原创 2017-12-14 16:41:29 · 223 阅读 · 0 评论 -
java设计模式之观察者
一,观察者模式中涉及到的角色抽象主题(抽象被观察者,目标角色),它知道它的观察者,可以有任意多个观察者观察同一个目标。并且提供添加和删除观察者对象的接口,因为主题唯一依赖的事物是一个实现了Observer接口的对象列表。具体的主题(抽象主体的实现),将有关状态存入各个具体观察者角色对象。当它的状态发生改变时,向它的各个观察者发出通知。抽象观察者角色,为那些在目标发生改变时需要知道目标信息的对象原创 2018-01-03 22:03:35 · 170 阅读 · 0 评论 -
java设计模式之享元设计模式
一.构成单纯享元模式抽象享元角色:定义了公共的接口,所有的具体享元角色需要实现的接口,那些需要外蕴状态的操作可以通过方法的参数传入.具体享元角色:实现抽线享元角色所规定的公共接口,如果有内蕴状态的话必须负责为内蕴状态提供存储空间.享元内蕴状态的属性必须与对象所处的环境无关,也就是说内蕴状态是不可以变化的.从而使得享元对象可以在系统中公用.享元工厂角色:负责创建和管理享元角色,必须保原创 2018-01-11 22:39:24 · 206 阅读 · 1 评论 -
java设计模式之代理
一.组成部分抽象角色(cglib子类代理中不需要);为代理者和真实角色提供公共的接口;代理角色,代理角色内部包含了对真实角色的引用,而它们实现同样的接口,往往可以完全替代真实角色,并且在调用真实角色的方法时可以做前置和后置的处理.真实角色:代理角色所代表的真实对象.是我们最终需要使用的对象.二.代码a.静态代理class MainTest {原创 2018-01-11 16:49:27 · 177 阅读 · 0 评论 -
java设计模式之中介
一,中介者模式的组成部分抽象的中介者角色:定义统一的接口用于同事者之间的通信;具体的中介者角色:通过调用各个同事角色实现协作行为;抽象的同事者角色:定义统一的规范,使得每个同事都必须到注册到中介者;具体的同事者角色:只需要对具体的中介者进行调用二,代码public class MainTest { public static void m原创 2018-01-10 22:58:16 · 163 阅读 · 0 评论 -
关于maven中profiles多环境的配置
问题在传统项目中需要手动修改配置来进行打包,而我们是程序员,是以不可配置为耻,可配置为荣的。步骤1,在pom文件中添加一个环境的配置<profiles> <profile> <!-- 本地开发环境 --> <id>local</id> <activation> <activeB原创 2017-12-06 14:46:47 · 608 阅读 · 0 评论 -
java中unicode编码和utf8编码相互转换
1,在开发中经常会遇见有些编码使用到unicode编码的,而与我们通常使用的utf8编码不一致2,代码 /** * <p>转为unicode 编码<p> * * @param str * @return unicodeString */ public static String encode(String str) { Str原创 2017-12-06 11:42:54 · 13013 阅读 · 0 评论