自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(78)
  • 收藏
  • 关注

原创 Spring IOC 源码分析(二)

上一篇:https://blog.csdn.net/qq_37113604/article/details/97523394Spring源码分析图,这个看起来更清晰一点。https://blog.csdn.net/qq_37113604/article/details/97931101我们继续!Bean容器实例化完成后说道这里,我们回到refresh方法,没错,我们刚说完obt...

2019-07-29 15:34:03 287

原创 Spring IOC 源码分析(一)

简介Spring最重要的概念是IOD和AOP,本篇文章带大家来分析下Spring的IOC容器。源码采用4.3.11,通过基于xml的配置的方式来解析(实际很少人这么做了,至少不是纯xml配置,不过从理解源码的角度来看这种方式比较容易理解)。下面我们开始吧!Spring源码分析图,这个看起来更清晰一点。https://blog.csdn.net/qq_37113604/article/d...

2019-07-27 22:47:06 316

原创 Spring IOC 源码分析 分析图

Spring refresh方法:着重分析下obtainFreshBeanFactory与finishBeanFactoryInitialization:

2019-08-01 09:01:29 390 1

原创 redis实现分布式锁

分布式锁的实现锁是用来解决什么问题的;一个进程中的多个线程,多个线程并发访问同一个资源的时候,如何解决线程安全问题。 一个分布式架构系统中的两个模块同时去访问一个文件对文件进行读写操作 多个应用对同一条数据做修改的时候,如何保证数据的安全性在但进程中,我们可以用到synchronized、lock之类的同步操作去解决,但是对于分布式架构下多进程的情况下,如何做到跨进程的锁。就需要借助...

2019-07-29 20:51:03 344

原创 装饰器模式与IO

装饰器模式允许像一个现有的对象添加新的功能,同时不改变其结构。这种类型的设计模式属于结构性模式。它是作为现有类的一个包装。这种模式创建了一个装饰类,用来包装原有的类,并在保持类方法签名完整性的前提下,提供了额外的功能。我们通过下面的实例来演示装饰器模式的用法。其中,我们将把一个形状装饰上不同的颜色,同时又不改变形状类。定义:装饰器模式是在不必改变原类文件和使用继承的情况下,动态扩展...

2019-07-22 11:15:49 331

原创 模板模式

简介在模板模式中,一个抽象类公开定义了执行它的方法的模板。它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行。这种类型的设计模式属于行为型模式。结构图创建一个定义操作的Game抽象类,其中,模板方法设置为final,这样它就不会被重写。Cricket和Football是扩展了Game的实体类,他们重写了抽象类的方法。代码:创建抽象类,它的模板方法设置为fina...

2019-07-21 17:05:41 96

原创 观察者模式

观察者模式简介观察者模式(又称为发布-订阅模式),是行为型模式的一种,它定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态变化时,会通知所有的观察者对象,使他们能够自动更新自己。观察者模式结构图观察者模式下有如下角色:subject:抽象主题(抽象被观察者),抽象主题角色把所有观察者对象保存在一个集合中,每个主题都可以有任意数量的观察者,抽象...

2019-07-21 15:31:48 152

原创 排序算法-堆排序(java实现)

堆排序(heapsort)是指利用堆这种数据结构所设计的一种排序算法,它是选择排序的一种。可以利用数组的特点快速定位指定索引的元素。堆分为大根堆与小根堆。是完全二叉树。满二叉树与完全二叉树满二叉树:除了叶子节点之外的每一个节点都有两个孩子,并且所有的叶子都在同一层上,这样的二叉树称为满二叉树。1.叶子节点只能出现在最下一层,出现在其他层就不可能达成平衡。 2.非叶子节点的度一定是2(...

2019-07-19 10:56:49 120

原创 排序算法-快速排序之普通快排、双轴快排、三轴快排 另外关于挖坑实现快排的效率问题(java实现)

快速排序基本思想通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另一部分的所有数据要小,然后再按此方法对着两部分数据分别快排。整个排序过程可以递归进行,以此达到数据变为有效序列。假设要排序的数组为A[0],A[1].....A[N-1],首先任意选取一个数据(通常选用数组的第一个数)作为关键数据,然后将所有比他小的数都放到它左边,所有比它大的数都放到它右边,这个过...

2019-07-18 13:40:45 1423

原创 排序算法-归并排序及其优化(Java实现)

归并排序归并排序(merge sort)是建立在归并操作上的一种有效的排序算法。该算法是采用分治法的一个非常典型的应用。作为一种典型的分而治之思想的算法应用,归并排序的实现有两种方法:自上而下的递归(所有递归的方法都可以迭代重写,所以有了下面第二种) 自下而上的迭代和选择排序一样,归并排序性能不受输入数据的影响,但表现比选择排序好得多,因为始终都是O(nlogn)的时间复杂度,代价是需...

2019-07-16 09:41:32 964

原创 排序算法-希尔排序(Java实现)

希尔排序希尔排序是希尔(Donald Shell)于1959年提出的一种排序算法。希尔排序也是一种插入排序,它是直接插入排序经过改进之后的一个更高效的版本,也称为缩小增量排序,同时该算法是冲破O(n2)的第一批算法之一。它与插入排序的不同之处在于,它会优先比较距离较远的元素。希尔排序又叫缩小增量排序。希尔排序是把记录按下表的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每...

2019-07-15 08:32:26 136

原创 排序算法-插入排序 及其优化-折半插入排序(java实现)

插入排序(Insertion Sort)插入排序(Insertion-Sort)的算法描述是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上,通常采用in-place排序(即只需用到O(1)的额外空间的排序),因而在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间。算法描述...

2019-07-11 10:13:36 284

原创 排序算法-选择排序(Java实现)

选择排序表现最稳定的排序算法之一,因为无论什么数据进去都是O(n2)的时间复杂度,所以用到它的时候,数据规模越小越好。唯一的好处可能就是不占用额外的内存空间了吧。理论上讲,选择排序可能也是平时排序一般人想到的最多的排序方法了吧。概念:选择排序(Selection-sort)是一种简单直观的排序算法。它的工作原理:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余...

2019-07-10 09:59:17 287

原创 排序算法-冒泡排序及优化(Java实现)

冒泡排序冒泡排序是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。1.1 算法描述比较相邻的元素。如果第一个比第二个大,就交换它们两个; 对每一对相邻元素作同样的工作,从开始第一对到结尾的最...

2019-07-09 11:11:55 277

原创 ActiveMQ学习(二)

消息的发送策略持久化消息,默认情况下,生产者发送的消息时持久化的。消息发送到broker后,producer会等待broker对这条消息的处理情况的反馈,默认情况是同步的需要堵塞等待,效率较低,可以设置消息发送端发送持久化消息的异步方式。connectionFactory.setUseAsyncSend(true)回执窗口大小设置,通过这个来控制borker在确认收到消息前,生产者...

2019-07-03 21:37:08 321

原创 ActiveMQ学习(一)

ActiveMQ简介消息中间件利用高效可靠的消息传递机制进行平台无关的数据交流,并基于数据通信来进行分布式系统的集成。通过提供·消息传递和消息排队模型,它可以在分布式环境下扩展进程间的通信。关注于数据的发送和接受,利用高效可靠的异步消息传递机制继承分布式系统。应用场景异步消息:应用解耦:流量削峰:安装与启动ActiveMQ:1.上传Active...

2019-07-01 15:45:54 223

原创 线程安全

线程安全当多个线程访问一个对象时,如果不用考虑这些线程在运行时环境下的调度和交替执行,也不需要进行额外的同步,或者在调用方进行任何其他的协调操作,调用这个对象的行为都可以获得正确的结果,那这个对象是线程安全的。这个定义比较严谨,它要求线程安全的代码都必须具备一个特征:代码本身封装了所有必要的正确性保障手段(如互斥同步等),令调用者无须关心多线程问题,更无须自己才起任何措施来保证多线程的正确...

2019-06-25 14:04:52 174

原创 Java内存模型与线程

JVM试图定义一种Java内存模型(Java Memory Model JMM)来屏蔽各种硬件和操作系统的内存访问差异,以实现让Java程序在各种平台下都能达到一致的内存访问效果。在此之前如c/c++等直接使用物理硬件和操作系统的内存模型,因此,会由于不同平台上内存模型的差异,有可能导致程序在一套平台上并发完全正常,而在另一套平台上并发访问却经常出错。JDK1.5后,JMM已经完善和成熟起来了。...

2019-06-24 08:57:38 201

原创 虚拟机字节码执行引擎(二)

方法调用方法调用并不等同于方法执行,方法调用阶段唯一任务就是确定调用哪个方法,暂时还不涉及方法内部的具体运行过程。在程序运行时,进行方法调用时最普遍最频繁的操作,但前面讲过,class文件的编译过程并不包含连接步骤,一切方法调用在class文件里存储的都是符号引用,而不是方法在实际运行时内存布局中的入口地址(直接引用)。这个特性给Java带来了更强大的动态扩展能力,但也使得Java方法调用过程...

2019-06-18 10:21:03 139

原创 Java晚期(运行期)优化

概述Java程序起初是通过解释器(Interperter)进行解析执行的,当虚拟机发现某个代码或方法特别频繁时,就会把这些代码认定为热点代码(hot spot code)。为了提高热点代码执行效率,运行时,会将其编译为本地的机器码,并进行各种层次优化,完成这个任务的编译器称为即时编译器(Just In Time Compiler JIT编译器)。JIT并不是虚拟机必须部分,JVM也没有规...

2019-06-17 15:29:56 390

原创 Java早期编译优化

概述Java语言编译期是一段不确定的操作过程,可能指前端编译器(叫编译器的前端更准确)把*.java文件转变为*.class文件的过程,也可能指虚拟机后端编译器(JIT编译器 Just Time Compiler)把字节码转为机器码的过程;还可能指静态提前编译器(AOT编译器)直接把*.java文件编译为本地机器代码的过程。列举下这三类编译过程中又代表性的编译器:前端编译器:Sun的J...

2019-06-12 10:46:34 198 1

原创 Integercache问题

昨天在开发中遇到一个问题,定义了两个Integer变量,暂且定义为Integer a; Integer b;这两个值由前端赋值并传到后台,前台传的是a = 12345, b = 12345, 但我在后台比较的时候 if (a == b),却返回false,好无语啊,不都是123吗?为什么返回false,后来改为equals(),返回true,但其中的有些端倪还不太清楚,现总结下:我们知...

2019-06-10 20:11:17 948 2

原创 tomcat:正统的类加载器架构

主流的Java Web服务器,如Tomcat、Jetty、WebLogic、WebSphere或其他服务器,都实现了自己定义的类加载器(一般都不止一个)。因为一个功能健全的Web服务器,要解决如下几个问题:部署在同一个服务器上的两个Web应用程序所使用的Java类库相互隔离。这是最基本的需求,两个不同的应用程序可能会依赖同一个第三方类库的不同版本,不能要求一个类库在一个服务器中只有一份,服务器...

2019-06-10 19:35:41 595

原创 虚拟机字节码执行引擎(一)

代码编译的结果从本地代码转为字节码,是存储格式发展的一小步,却是编程语言发展的一大步。概述执行引擎是Java虚拟机最核心的组成部分之一。虚拟机是一个相对于物理机的概念,这两种代码都有代码执行能力,其区别是物理机的执行引擎是直接建立在处理器、硬件、指令集和操作系统上的,而虚拟机的执行引擎则是由自己实现的,因此可以自行制定指令集与执行引擎的结构体系。并且能够执行不被硬件直接支持的指令集格式。...

2019-05-27 20:33:25 128

原创 Java类加载机制(三)

类加载器虚拟机设计团队把类加载阶段中的:通过一个类的全限定名来获取描述此类的二进制字节流,这个动作放到Java虚拟机外部去实现,以便让应用程序自己决定如何获取所需要的类。实现这个动作的代码模块称为“类加载器”。类加载器可以说是Java语言的一项创新,也是Java语言流行的重要原因之一,它最初是为了满足Java Applet的需求而开发出来的。虽然现在Java Applet技术基本上已经死掉...

2019-05-26 08:59:43 82

原创 Java类加载机制(二)

验证验证是连接阶段第一步,这一阶段目的是确保class文件字节流信息符合当前虚拟机要求,并且不会危害虚拟机自身安全。Java语言相对于c/c++是安全的,使用纯粹的Java代码无法做到如访问数组边界以外的数据,将一个对象转型为它并未实现的类型、跳转到不存在的代码行之类的事,如果这样做了,编译器将拒绝编译。但是class文件并不一定从Java源码编译而来,可以使用任何途径产生,甚至可以用十六...

2019-05-23 10:59:10 127

原创 Java类加载机制(一)

概述虚拟机把描述类的数据从class文件加载到内存,并对数据进行校验、解析、初始化,最终形成被虚拟机直接使用的Java类型,这就是虚拟机的类加载机制。与编译时进行连接工作的语言不同,在Java中,类型的加载、连接、初始化都在程序运行期间完成。这种策略虽然会稍微增加一些性能开销,但是会为Java应用程序提高高度的灵活性,Java中天生可以动态扩展的语言特性就算是依赖运行期动态加载和动态连接这...

2019-05-21 13:45:43 146

转载 b+树图文详解

转载自:伯乐专栏作者/玻璃猫,微信公众号 - 梦见漫画:什么是b+树这一次我们来介绍 B+ 树。一个m阶的B树具有如下几个特征:1.根结点至少有两个子女。2.每个中间节点都包含k-1个元素和k个孩子,其中 m/2 <= k <= m3.每一个叶子节点都包含k-1个元素,其中 m/2 <= k <= m4.所有的叶子结点都位于同一层。...

2019-05-20 09:30:24 389

原创 BTree与B+Tree详解

首先B-tree树即B树,B即Balanced,平衡的意思。因为B树的原英文名称为B-tree,而国内很多人喜欢把B-tree译作B-树,其实,这是个非常不好的直译,很容易让人产生误解。如人们可能会以为B-树是一种树,而B树又是另一种树。而事实上是,B-tree就是指的B树B+树索引时B+树在数据库中的一种实现,是最常见也是数据库中使用最频繁的一种索引。B+树中的B代表平衡(balance)...

2019-05-20 09:17:48 1207

原创 策略模式

https://www.cnblogs.com/lewis0077/p/5133812.html

2019-05-15 14:06:05 98

原创 cglib动态代理源码解析 超级详细

一、CGLIB动态代理实例小A同学想要找女朋友,自己又不好意思,所以需要一个媒婆帮助他找对象,媒婆作为小A的代理,下面我们使用cglib动态代理,来用代码实现下:xiaoA:public class XiaoA { public void findLove(){ System.out.println("我是小A,帮我找个女朋友"); }}meipo:public ...

2019-05-13 20:31:20 2835

原创 代理模式 静态代理与动态代理 绝对通俗易懂

静态代理:假设现在有一个人(person接口),他的名字叫A(class A implement person),小A 40岁了必须要找对象,但是呢自己比较害羞不好意思开口,这样就需要一个媒婆来帮他找对象(MeiPo 代理类),至此就是静态代理模式,下面我们用带来实现下。Person:public interface Person { void findLove();}A:...

2019-05-12 09:43:17 406

原创 Java高级特性 反射

https://blog.csdn.net/sinat_38259539/article/details/71799078

2019-05-10 09:38:04 184

原创 工厂模式与抽象工厂模式

创建型模式共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。简单工厂模式首先简单工厂模式不属于23种设计模式,简单工厂一般分为:普通简单工厂,多方法简单工厂,静态方法简单工厂。下面例子中鼠标,键盘,耳麦为产品,惠普,戴尔为工厂。简单工厂模式简单工厂模式不是 23 种里的一种,简而言之,就是有一个专门生产某个产品的类。比如下图中的鼠标工厂,专业生产鼠标...

2019-05-07 20:57:38 133

原创 建造者模式

https://blog.csdn.net/u010102390/article/details/80179754

2019-05-07 17:16:34 89

原创 dubbo中文官方文档(新地址)

看了几篇关于dubbo的博客,基本上都是从官方API copy 的所以有什么问题,直接看API就完事了https://dubbo.gitbooks.io/dubbo-user-book/content/configuration/xml.html

2019-04-25 16:04:01 2090 1

原创 dubbo常用配置

1.启动服务检查假设a依赖b,b依赖c,如果c没有启动,而b启动了,此时如果b启动了检查到c没有启动,那么b就会报错,导致a也不可用。这时候就应该通过check=false设置关闭启动检查服务,默认是true。应用标签:dubbo:referencedubbo:consumer check=”false” 没有服务提供者的时候不会报错dubbo:registry...

2019-04-24 22:08:59 285 1

原创 dubbo角色及运转流程分析

dubbo中的角色Container 容器Provider 生成者Consumer 消费者Registry 注册中心Monitor 监控中心dubbo的流程首先,加载dubbo容器,这里我们来看下源码dubbo都加载了哪些容器:这里我们使用的是dubbo的main方法启动dubbo,首先找到dubbo的main方法:com.alibaba.dubbo.cont...

2019-04-23 21:55:57 294 2

原创 zookeeper使用zkClient实现简单的master选举

什么是master选举?为了保证服务的7*24小时可用,不能有过长的故障时间,于是我们使用服务器集群,采用master+slave。集群中有一台主机和多台备机,主机对外提供服务,备机监听主机状态,一旦主机宕机,备机必须迅速接管主机继续向外提供服务。在这个过程中从备机选出一台机器作为主机的过程就是Master选举。master选举利用了zookeeper临时节点的临时性与唯一性与zookee...

2019-04-21 23:06:08 491

原创 Timer与ExecutorService的比较

这里ExecutorService就不讲了,可以看下我之前的一篇博客:https://blog.csdn.net/qq_37113604/article/details/89396015首先看下Timer的使用:Java中需要使用Timer与TimerTask两个类来配合完成定时任务。Timer是一种定时器工具,用来在一个后台线程计划执行指定任务,而TimerTask是一个抽象类,代表...

2019-04-21 11:12:55 396 1

空空如也

空空如也

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

TA关注的人

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