自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

小张的专栏

个人扯淡博客:http://blog.ztgreat.cn

原创 终于还是有了自己的小站

2018年8月,终于还是有了自己的小站,断断续续写博客也有3年了,感谢当时学校团队里面的学长们,最开始也是在他们的鼓励下,自己才写的,当时也没有想太多,也就简单记录一下吧,那个时候年轻嘛,哈哈,写写算法,简单记录了一下学习的东西,并没有在上面倾注太多的精力,大四的时候断了一年。2017年走出了学校,随后又开始写博客了,期间萌生过想法,搭建一下自己的博客网站,对于程序猿来说,我想这应该很容易,但...

2018-08-26 19:24:00 399 2

原创 ZooKeeper分析-读写请求篇

前言在前面中,我们已经 了解了ZooKeeper 集群的启动,Leader 选举相关流程,下面我们一起来看看ZooKeeper 读写请求处理中的一些相关细节。ZooKeeper 系列文章 会讲一些重要的功能和概念,主要包括:重要概念介绍 - 整体视图的认识服务端启动流程集群选举过程读写请求操作会话管理数据与存储本节主要 讲一下读写请求操作 流程,对于前面内容可以点击相关链接进行跳转。概述在Zookeeper中对于请求分为两类:事务性请求非事务性请求所谓事务性请求,说白了就

2020-05-10 17:57:32 176

原创 ZooKeeper分析-选举篇

前言前面几篇文章讲了整体概念,服务器启动的流程,对于选举过程是一笔带过,我们已经了解了ZooKeeper 集群中的三种服务器角色:Leader,Follower 和Observer,本篇接下来主要讲述Leader选举的相关流程。我们从选举算法概述、服务器启动Leader选举、服务器运行期间Leader选举三个方面探讨实现细节。仅仅分析选举流程 还是比较简单的ZooKeeper 系列文章...

2020-05-05 12:41:49 191

原创 ZooKeeper分析-服务端启动篇

前言今年五一认真整理以前凌凌散散的学习内容,发现虽然看得多,但是如果不去看看源码,真的是不深刻,没什么感觉,这也是为什么要重新整理ZooKeeper的相关学习笔记了,在前面的时候我们介绍ZooKeeper的一些重要的概念,在整体上对ZooKeeper 有了一个简单的认识,下面我们再从服务端的启动流程来了解了解,本小节不会将集群的选举过程,这个将放在下一篇文章中介绍,本节知识整体了解一下服务端的启...

2020-05-03 21:36:28 183

原创 ZooKeeper分析-概览篇

前言最近打算写几篇 深入学习 ZooKeeper 的文章,结合自己的情况和经验,打算从核心功能出发进行研究一下,整个部分不会深入很多细节的代码上面,只做重要的介绍,因为时间的原因 很多点上可能也不会涉及到,对于读者 建议结合源码一起看,不然可能没什么帮助,也记不住的,要学习就适当多看代码,否则只是单纯背书而已,意义不大。在前面也看过部分的Dubbo 的源码,但是写的文章 都太细节化了,不便于了...

2020-05-01 15:53:37 120

原创 dubbo 启动概述(三)-扩展机制浅析

前言在上篇文章,我们了解了Dubbo 服务端的暴露流程,在最后,提出关于一行代码的疑问private static final Protocol protocol = ExtensionLoader.getExtensionLoader(Protocol.class).getAdaptiveExtension();不管是暴露到本地,还是暴露到远程,最后都是调用的**protocol.exp...

2019-12-07 15:21:32 185

原创 dubbo 启动概述(二)-服务暴露

前言在上篇文章中,了解了ServiceBean在spring 中的加载过程,下面我们再来看看ServiceBean是如何暴露的,这部分参考了官方的文档,但是这里不会分析的很仔细,粒度比较粗,只是简单的介绍一些模块,重在思想,如果一行一行的结束代码,估计也会看得爪瞌睡。本文很大程度上参考了官方文档 服务导出并在上面基础上做了增删,很多复杂的地方被我略去了简介Dubbo 服务导出过程始于...

2019-12-01 23:43:21 238

原创 dubbo 启动概述(一)-服务加载

前言在项目启动过程中,dubbo服务如何随项目的启动而发布?dubbo如何随着spring容器的初始化而启动?我们使用的dubbo 注解@Service 是如何工作的(或者xml 配置),下面我们将来分析dubbo 服务端是如何随着Spring 启动而启动的,本文主要分析基于注解方式。本文需要Spring 启动流程加载的一些知识,这里不会细讲,具体可以参考我以前写的Spring IOC相关的...

2019-11-30 21:30:06 84

原创 Guava EventBus 源码分析

前言EventBus是Guava的事件处理机制,是设计模式中的观察者模式(生产/消费者编程模型)的优雅实现。EventBus是一个非常优雅和简单解决方案,我们不用创建复杂的类和接口层次结构。传统上,Java的进程内事件分发都是通过发布者和订阅者之间的显式注册实现的。设计EventBus就是为了取代这种显示注册方式,使组件间有了更好的解耦。EventBus不是通用型的发布-订阅实现,不适用于...

2019-06-08 13:40:24 128

原创 springboo2.x权限 demo(shiro,sprng security,oauth2)

前言这是一篇关于权限方面的文章,这是去年的时候结合一些简单的项目,自己抽空瞎折腾的学习demo,进行了一定的整理,涉及的内容包括spring boot 2.x,shiro,spring security,oauth2公布出来的目的??,方便爱学习的你(骗赞)。本文也不得介绍这些项目流程,也不会讲解怎么实现的,毕竟都是套路,难度不大,自己debug 调试,也算是能力的提高。每个项目中很...

2019-01-12 18:52:20 1812

原创 Netty源码分析三 Future,Promise

前言前面 分析了Netty整体的流程 和 Channel的结构,我们看到 Netty 中有很多的异步调用,所以在介绍更多 NIO 相关的内容之前,我们来看看它的异步接口是怎么实现的。回顾前面我们在介绍 Echo 例子的时候,已经用过了 ChannelFuture 这个接口了,接下来我们就来看看 Netty 中的异步调用是如何实现的。客户端// Start the client.Chan...

2019-01-12 17:48:20 332

原创 Spring Bean 生命周期

原文发布于: http://blog.ztgreat.cn/article/68前言在前面 我们分析了Spring BeanFactory,Spring IOC,Spring AOP,对于IOC的部分,我们跟踪了整个bean的初始化过程:Spring源码分析:IOC容器初始化(一)Spring源码分析:IOC容器初始化(二)这里我们对Spring Bean的生命周期单独做一个总结,...

2019-01-05 17:06:52 419

原创 Netty源码分析二 Channel实现

原文发布于: http://blog.ztgreat.cn/article/67前言2018年最后几天,争取憋一篇文章出来( >﹏<。)~在上文 Netty源码分析一 初识Netty 中利用官方的例子Echo 把Netty的整体流程走马观花的过了一遍,现在我们就一起来分析Netty中的一些具体模块,看Netty 是如何封装实现Java 中的NIO 的,今天我们来看看Netty...

2018-12-31 20:59:58 200

原创 Netty源码分析一 初识Netty

前言开始进入Java NIO系列的深入学习了,Netty 是Java系的一个著名NIO框架,Netty在互联网领域获得了广泛的应用,一些著名的开源组件也基于Netty构建,比如RPC框架、zookeeper等。Netty从使用的角度来说非常的简单,套官方的Demo就可以了,当然对于我们大部分的猿类来说仅仅是使用是不可能的,对于一些核心的技术知识,必须要知其所以然,不然长江后浪推前浪,前浪死在沙...

2018-12-23 18:59:21 210

原创 图解B树的前世今生

背景注:本文假设读者有搜索树(排序树)的基础知识。我们知道计算的存储系统是一个分级结构(一般来讲,存储器速度越快,价格也越高,因而也越难满足大容量的要求)首先容量和类型不同的存储器在访问速度上的差异是极其悬殊的,就以我们最常见的磁盘以及内存这两级存储为例:就传统的旋转式磁盘而言 它的访问速度大致是毫秒量级,而典型的内存呢 大致是在纳秒量级,如果 以一秒为基准,前者是10的-3次方 而后者...

2018-12-07 20:06:12 889

原创 Spring源码分析:AOP分析(三)

个人扯淡博客:http://blog.ztgreat.cn前言在上篇博客中,分析了Spring Aop的Advice的实现过程,其中Spring对Advice 使用了适配器模式,将Advice包装成了Interceptor,在最后,我们通过Spring提供的接口,实现了PointCut,Advice ,Advisor,至此更加的明白了三者的关系。在前面的配置中,对于每一个需要被代理的be...

2018-11-24 14:48:49 227

原创 Spring源码分析:AOP分析之Advice

个人扯淡博客:http://blog.ztgreat.cn前言上篇文章中我们先从动态代理技术谈起,简单的分析了动态代理技术,接着对Spring 中的AOP 以ProxyFactoryBean为例,通过简单的配置,对Spring AOP的基本实现和工作流程进行了简单的梳理,通过ProxyFactoryBean 得到AopProxy对象。对于JDK的AopProxy代理对象,使用是Invoc...

2018-11-16 19:15:44 2758

原创 基于Netty的代理工具Proxy

前言个人扯淡博客:http://blog.ztgreat.cnNetty是一个高性能、异步事件驱动的NIO框架,提供了对TCP、UDP和文件传输的支持,对于目前而言,只要互联网存在,那么网络IO 也将存在,就目前的形式而言,硬件越来越好,带宽也越来越大,这个时候IO的瓶颈就凸显了出来,个人觉得,掌握一门IO框架是很重要的,不能仅仅的学会做点应用层,对于中下层还是需要熟悉的,这样才能健全整个...

2018-11-08 19:05:27 4495 6

原创 Spring源码分析:AOP分析(一)

前言个人扯淡博客:http://blog.ztgreat.cnSpring 的两大核心,一是IOC,我们之前已经学习过,而另一个则是大名鼎鼎的 AOP,AOP的具体概念我就不介绍了,我们今天重点是要从源码层面去看看 spring 的 AOP 是如何实现的。在Spring AOP实现中,使用的核心技术是动态代理,生成代理类有两种策略:jdk动态代理和cglib动态代理。下面简要的谈一谈这...

2018-11-08 19:02:50 213

原创 Spring源码分析:循环依赖

前言个人扯淡博客:http://blog.ztgreat.cn前面分析了Spring BeanFactory,接着分析了Spring IOC的初始化过程,对整个流程有了一定的认识,当然没有面面俱到,当然也不可能,我自己本身定位就是把握主要脉络,前面遗留了一个问题,就是在Spring IOC最后初始化单例bean的时候,针对循环依赖的处理问题,学习一下思想,处理方式,这是这篇文章的主要目的。...

2018-11-08 19:01:46 666

原创 Spring源码分析:IOC容器初始化(二)

个人扯淡博客:http://blog.ztgreat.cn前言在前面分析了Spring IOC的初始化过程的前半部分,今天分析一下初始化过程中一个非常重要的环节—初始化所有的 singleton beans需要以下基础内容:Spring源码分析:Spring IOC容器初始化(一)Spring-BeanFactory源码分析(一)Spring-统一资源加载策略Spring-Bea...

2018-10-18 09:13:25 308

原创 Spring源码分析:IOC容器初始化(一)

个人扯淡博客:http://blog.ztgreat.cn前言在前面 先分析了最底层的IOC容器BeanFactory,接着简单分析了高级形态的容器ApplicationContext,在ApplicationContext 中我们知道一个核心方法 refresh,这里面就是IOC容器的初始化流程,在前面并没有直接去分析它,只是简单的分析了BeanDefinition的载入,解析注册,有了...

2018-10-18 09:12:29 351

原创 Spring源码分析:BeanFactory (二)

个人扯淡博客:http://blog.ztgreat.cn前言在前面我们简单的分析了BeanFactory的结构,ListableBeanFactory,HierarchicalBeanFactory,AutowireCapableBeanFactory。主要核心类DefaultListableBeanFactory,通过编程启动IOC容器 将BeanFactory的功能逐渐的剥离开来,方...

2018-10-18 09:11:12 402

原创 Spring-统一资源加载策略

个人扯淡博客:http://blog.ztgreat.cn前言在前面我们初步简单的分析了一下BeanFactory的体系结构,第一步我们需要从配置文件中读取配置信息,JDK所提供的访问资源的类(如java.net.URL、File等),并不能很好的满足各种底层资源的访问需求,比如缺少从类路径或者Web容器的上下文获取资源的操作类。Spring 设计了一个Resource接口,它为应用提供...

2018-09-27 12:58:54 728

原创 Spring-BeanFactory源码分析(一)

个人扯淡博客:http://blog.ztgreat.cn前言Spring 版本:5.0.9.RELEASE正式进入Spring 源码分析这个模块了,对于spring这个庞大的工程,如果要一点点的完全分析是非常困难的,对于应用型框架,我还是偏向于掌握思想或者设计,而不是记住代码,对于初次看spring源码,相信大家都很头大,而且看懂并不一定就是理解了,想要更好的效果,就要记录下来,扯...

2018-09-27 12:56:29 3065 1

原创 Java NIO之Selector 浅析

个人扯淡博客:http://blog.ztgreat.cnJava NIO 由以下几个核心部分组成:1、Buffer2、Channel3、Selector在Java NIO之Channel、Buffer中 简单的介绍了Buffer,Channel ,本文主要讲解NIO的Selector相关知识,Selector是整个NIO的核心,理解selector机制是理解整个NIO的关键所在。...

2018-09-27 12:52:37 6405 1

原创 乱弹 --- Linux 之 I/O模型

随着现在互联网技术的发展,在以前对一个网站的要求都不高,但是现在要求越来越高了,不断的优化服务,不断的提高硬件设施,在以前I/O方面的消耗还影响不大,但是现在I/O的瓶颈越来越凸显,了解I/O模型,能了解I/O的发展历史,同时也能帮助我们写出更加健壮的代码。一般来说,I/O模型可以分为阻塞/非阻塞和同步/异步,我们先从阻塞/非阻塞模型说起。在Linux 系统中,Linux内核会将所有的外部...

2018-08-12 17:52:12 127

原创 Java NIO之Channel、Buffer

Java NIO 由以下几个核心部分组成:BufferChannelSelector传统的IO操作面向数据流,面向流 的 I/O 系统一次一个字节地处理数据,意味着每次从流中读一个或多个字节,直至完成,数据没有被缓存在任何地方。NIO操作面向缓冲区( 面向块),数据从Channel读取到Buffer缓冲区,随后在Buffer中处理数据。什么是Buffer(缓冲区)?Bu...

2018-08-09 21:03:44 231

原创 Spring Session 源码分析(2)——Session机制的实现细节

在Spring Session 源码分析(1)中,梳理了一下Spring Session 接管Tomcat Session的过程,通过配置DelegatingFilterProxy 和指定过滤器名称,spring 接收到请求后,包装HttpServletRequest ,HttpServletResponse ,然后再传递到后续应用,因此没有特殊的需求,需要把DelegatingFilterPro...

2018-08-07 22:42:22 182

原创 深入理解ClassLoader工作机制(jdk1.8)

ClassLoader 顾名思义就是类加载器,ClassLoader 作用:负责将 Class 加载到 JVM 中审查每个类由谁加载(父优先的等级加载机制)将 Class 字节码重新解析成 JVM 统一要求的对象格式类加载时机与过程类从被加载到虚拟机内存中开始,直到卸载出内存为止,它的整个生命周期包括了:加载、验证、准备、解析、初始化、使用和卸载这7个阶段。其中,验证、准备和解...

2018-08-05 23:28:46 27259 4

原创 Spring Session 源码分析(1)——springSessionRepositoryFilter

Tomcat Session对于session 是一个老生畅谈的话题了,Session管理是JavaEE容器比较重要的一部分, Tomcat中主要由每个context容器内的一个Manager对象来管理session。对于这个manager对象的实现,可以根据tomcat提供的接口或基类来自己定制,同时,tomcat也提供了标准实现。 在每个context对象,即web app都具有一个...

2018-08-02 19:38:29 7027

原创 Java 线程池 --- ThreadPoolExecutor源码分析

在多线程编程中,或多或少都听过或者使用过线程池,合理利用线程池能够带来三个好处。降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。提高响应速度。当任务到达时,任务可以不需要等到线程创建就能立即执行。提高线程的可管理性。线程是稀缺资源,如果无限制的创建,不仅会消耗系统资源,还会降低系统的稳定性,使用线程池可以进行统一的分配,调优和监控。但是要做到合理的利用线程池,必

2018-01-23 21:13:57 426

原创 Java 多线程 --- FutureTask 源码分析

在多线程编程中,创建线程可以直接继承Thread,也可以实现Runnable接口。但是这2种方式都有一个缺陷就是:在执行完任务之后无法获取执行结果。 如果需要获取执行结果,就必须通过共享变量或者使用线程通信的方式来达到效果,这样使用起来就比较麻烦。而自从Java 1.5开始,就提供了Callable和Future,FutureTask,通过它们可以在任务执行完毕之后得到任务执行结果,

2018-01-18 20:07:07 314

原创 Java 并发 --- ConcurrentSkipListMap源码分析

在学习ConcurrentSkipListMap 之前 我们需要先来学习一种随机化的数据结构–跳跃表(skip list) 对于数组的查找可以有很多方法,如果是有序的,那么可以采用二分查找,二分查找要求元素可以随机访问,所以决定了需要把元素存储在连续内存。这样查找确实很快,但是插入和删除元素的时候,为了保证元素的有序性,就需要大量的移动元素了。 对于链表而言,不能进行随机访问,也就是说不能单纯的

2018-01-16 19:14:39 303

原创 Java 并发 --- Thread 源码浅析

在多线程编程中,如果要使用线程来执行任务,那么最简单的方式就是使用Thread类来创建一个线程,当然也可以使用线程池的方式。 线程是在进程中执行的单位,线程的资源开销相对于进程的开销是相对较少的,所以我们一般创建线程执行,而不是进程执行。 本文不是学习Thread的使用,而是通过Thread类来一探线程从创建到结束的过程。继承体系 Thread类实现了Runnable接口,因此Thr

2018-01-08 14:10:33 345

原创 Java 并发 --- CopyOnWriteArrayList 源码分析

CopyOnWriteArrayList,顾名思义,Write的时候总是要Copy,读写分离的思想,通俗地讲,当我们往一个容器添加元素的时候,不直接往当前容器添加,而是先将当前容器复制出一个新的容器,然后在新的容器里添加元素,添加玩元素之后再讲原来容器的引用指向新的容器。

2018-01-04 12:49:30 214

原创 Java 并发 --- 阻塞队列总结

前面我们把阻塞队列学习完了,现在过段时间来进行总结一下,也算是复习回顾知识,比较才能明白使用的场景。

2017-12-27 20:15:49 868

原创 Java 并发 --- 非阻塞队列之ConcurrentLinkedQueue源码分析

在并发编程中,有时候需要使用线程安全的队列,如果要实现一个线程安全的队列有两种方式:一种是使用阻塞算法,另一种是使用非阻塞算法,在前面我们逐一分析过阻塞队列,这篇文章过后,会写篇关于阻塞队列的总结,也算是回顾知识,非阻塞的实现方式则可以使用循环cas的方式来实现,对于循环cas的算法,都已经遇到多了,在阻塞队列中,也有使用循环cas的队列,比如:SynchronousQueue

2017-12-19 19:48:53 370 2

原创 Java集合之ConcurrentHashMap源码分析

注:本文源码是JDK8的版本ConcurrentHashMap 介绍(jdk 1.8)ConcurrentHashMap是HashMap的升级版,HashMap是非线程安全的集合,ConcurrentHashMap则可以支持并发操作, HashMap是我们平时开发过程中用的比较多的集合,ConcurrentHashMap就算用得少,但是听过的肯定不少,一起来研究研究吧

2017-12-16 18:37:19 1287 1

原创 Java 并发 --- Exchanger源码分析

Exchanger 是一个用于线程间协作的工具类,Exchanger用于进行线程间的数据交换,它提供一个同步点,在这个同步点,两个线程可以交换彼此的数据。这两个线程通过exchange 方法交换数据,如果第一个线程先执行exchange 方法,它会一直等待第二个线程也执行exchange 方法,当两个线程都到达同步点时,这两个线程就可以交换数据。

2017-12-07 20:42:55 2226 1

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