![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java
文章平均质量分 71
在下喵星人
这个作者很懒,什么都没留下…
展开
-
Spring源码深度解析之spring整合mybatis原理分析(上)
spring整合mybatis原理分析原创 2022-03-23 23:28:17 · 720 阅读 · 0 评论 -
Dubbo源码分析-服务导出源码解析(三)
在这个版本中dubbo会通过注解@PostConstruct把ServiceBean实例放到ConfigManager中public abstract class AbstractConfig implements Serializable { @PostConstruct public void addIntoConfigManager() { ApplicationModel.getConfigManager().addConfig(this); }......原创 2022-03-17 22:44:20 · 540 阅读 · 0 评论 -
Dubbo源码分析-Spring与Dubbo整合原理与源码分析(二)
Spring与Dubbo整合的整体流程(基于apache-dubbo-2.7.15)因为dubbo有较多的兼容以前的代码比如@DubboReference 以前就有两个版本@Reference 和@com.alibaba.dubbo.config.annotation.Reference ,为了方便文章如果提到@DubboReference其实可能还包括的其他两个注解,其他情况也类似。Spring启动时先根据properties配置生成9个Config对象,如应用配置,注册中心配置等。Spirng原创 2022-03-14 16:26:25 · 2872 阅读 · 0 评论 -
Dubbo源码分析-SPI实现源码解析(一)
Dubbo约定如下SPI文件存储路径在META-INF/dubbo/internal目录下,并且文件名为接口名的全路径名接口包名+接口名每个SPI文件里面格式定义为:扩展名=具体类名,例如dubbo=org.apache.dubbo.rpc.protocol.dubbo.DubboProtocol实现路径:getExtensionLoader(Class<T> type) 就是为该接口new一个ExtensionLoader,然后缓存起来。getAdaptiveEx原创 2022-03-12 21:08:39 · 1406 阅读 · 0 评论 -
设计模式之模板方法模式
前言模板方法设计模式:在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以在不改变算法结构情况下,重新定义算法中的步骤。一、模板方法设计模式我们以冲咖啡和茶为例。当我们不使用模板模式的时候我们会定义如下两个类。public class Coffee { public final void prepareRecipe(){ boilWater(); brew(); pourInCup(); addCond原创 2021-08-22 23:24:12 · 134 阅读 · 0 评论 -
高级排序--希尔排序
文章目录前言一、插入排序的缺点二、希尔排序三、 寻找间隔四、java实现五、总结前言希尔排序是基于插入排序实现的(如果不了解插入排序,可以先阅读这篇文章)一、插入排序的缺点假设数据中最小的数排在靠右端位置上,这本来是较大值的数据所在位置,把这个小数据移动到左边位置上,所有的中间数据项都必须向右移动一位。这个步骤对每一个数据项都执行了将近N次的复制。(虽然不是所有数据项都必须移动N个位置,但是数据项平均移动了N/2位置)执行N次N/2个位移,总共是N2/2N^2/2N2/2次复制。因此,插入排序原创 2021-08-21 10:24:47 · 93 阅读 · 0 评论 -
简单排序--插入排序(三)
前言插入排序算法任然需要O(N^2)的时间,但是一般情况下,他要比冒泡排序快一倍,比选择排序要快一点。一、插入排序假定排序从中间开始,可以更好的理解插入排序。此时,队列左边已经排好序,在队列中间标记一个元素,在这个作为标记的元素左边已经是局部有序,(注意,局部有序在冒泡排序和选择排序中不会出现)这个被标记的元素右边是未排序的。我们需要做的是在左边有序的队列中的适当位置插入被标记的元素。这意味着左边有序的队列需要先向右移腾出空间。而被标记的元素需要出列,以提供位移空间。插入排序的代码如下: pu原创 2021-08-14 12:23:32 · 93 阅读 · 0 评论 -
简单排序--选择排序(二)
前言选择排序改进了冒泡排序,将必要的交换次数从O(N2)O(N^2) O(N2)减少到O(N)O(N)O(N).不幸的是比较次数仍保持为O(N2)O(N^2)O(N2).一、选择排序进行选择排序就是把所有的元素扫描一趟,从中挑出最小的元素,最小的元素和队列最左端的元素交换位置,即放到0号位置。现在最左端的元素是有序的,不需要再交换位置了。(注意,这个算法中有序的元素都排在队列的左边,而冒泡排序则是排在队列右边)排序代码如下: public void selectionSort(){原创 2021-08-11 23:29:20 · 89 阅读 · 0 评论 -
使用LinkedHashMap实现LRU算法
LinkedHashMap是比HashMap多了一个链表的结构。与HashMap相比LinkedHashMap维护的是一个具有双重链表的HashMap,LinkedHashMap支持2中排序一种是插入排序,即插入是什么顺序,读出来的就是什么顺序。一种是使用排序,最近使用的会移至尾部例如 key1 key2 key3 key4,使用key3后为 key1 key2 key4 key3了。accessOrder为true表示使用顺序,false表示插入顺序。基于LinkedHashMap的使用顺序的特性,我们原创 2021-08-08 11:10:16 · 395 阅读 · 0 评论 -
设计模式之装饰器模式
装饰器模式: 动态的将责任附加到对象上。若要扩展功能,装饰器提供了比继承更有弹性的替代方案。装饰器中有两个比较重要的角色,装饰者和被装饰者。被装饰者实现我们的核心逻辑,装饰者只是对这些逻辑进行增强。比如点一杯饮料,冰,加豆浆等都是装饰者,是对我们饮料的增强,而饮料 是被装饰者。装饰器模式UML从UML中可以看到装饰者和被装饰者实现同一接口。装饰者中有一个被装饰者的对象引用。被装饰者的行为增强是通过旧逻辑前后添加新逻辑来实现的。下面以一个饮料费用计算为例,来简单介绍装饰者模式的使用。购买一杯饮料的时原创 2021-07-26 22:41:43 · 141 阅读 · 0 评论 -
设计模式之单例模式
饿汉模式有点类加载时便实例化,线程安全。public class HungrySingleton { private static HungrySingleton hungrySingleton = new HungrySingleton(); private HungrySingleton(){ } public static HungrySingleton getInstance(){ return hungrySingleton; }原创 2021-07-25 22:32:07 · 67 阅读 · 0 评论 -
ReentrantLock实现原理-如何实现一把锁(一)
锁作用可以抽象理解为避免共享资源被并发访问。按照这条概念我们在JAVA中可以定义一下实现。定义一个锁变量state。当多个线程同时范围同一个共享资源时,我们通过cas保证只有一个线程修改成功这个锁变量state成功,即获得锁。其他没有获得锁的线程,不断自旋尝试获得锁。当使用完共享资源时,还原state的值,让其他线程获得锁。定义锁接口public interface Lock { void lock(); void unlock();}按照上面原则具体实现如下:publ原创 2021-07-25 17:14:08 · 271 阅读 · 0 评论 -
java 中Unsafe介绍
Unsafe 是位于sun.misc包下的一个类,它可以让我们直接访问系统内存资源、自主管理内存资源等,这些方法在提升Java运行效率、增强Java语言底层资源操作能力方面起到了很大的作用。但由于Unsafe类使Java语言拥有了类似C语言指针一样操作内存空间的能力,这无疑也增加了程序发生相关指针问题的风险。Unsafe类为一单例实现,提供静态方法getUnsafe获取Unsafe实例,当且仅当调用getUnsafe方法的类为引导类加载器所加载时才合法,否则抛出SecurityException异常。原创 2021-07-25 11:42:37 · 1886 阅读 · 0 评论 -
Spring 监听器listener原理-spring监听器源码分析(三)
Spring 监听器listener原理-基本使用(一)Spring 监听器listener原理-手写监听器(二)Spring 监听器listener原理-spring监听器源码分析(三)概述要理解ApplicationListener的实现原理,需要对Spring的扩展点BeanPostProcessor有一点了解。这个接口是Spring最重要的接口之一,这个接口与Spring Bean的生命周期息息相关,我们常说的实例化前,实例化后,属性注入,初始化前,初始化后等等,其实都是调用了BeanP.原创 2021-07-25 08:31:16 · 1849 阅读 · 3 评论 -
结构体注入VS setter 注入
结构体注入,setter注入是比较常用的依赖注入方式,都有各自的优缺点。setter注入是Spring推荐的依赖注入方式。首先结构体注入有什么问题?1. 不能重新配置和重新注入在Spring参考文档 中基于结构体注入和setter注入有以下陈述:Spring团队通常主张使用setter注入,因为大量的的结构体参数可能会使结构体变得笨重,特别是有些属性是可选的时候。相反setter注入可使对象在以后进行重新配置和重新注入。JMX管理MBean便是一个很好的例子。一些纯粹主义者喜欢基于结构体注入。在实原创 2021-05-05 09:01:21 · 176 阅读 · 0 评论