java
文章平均质量分 88
小號子
这个作者很懒,什么都没留下…
展开
-
java源码分析之-ConcurrentHashMap1.8
超详细ConcurrentHashMap 1.8源码剖析,各种细节解答原创 2020-06-27 21:37:07 · 3652 阅读 · 7 评论 -
二叉树遍历
import java.util.ArrayList;import java.util.LinkedList;import java.util.List;import java.util.Queue;public class BinaryTreeIteration { public static void main(String[] args) { //构造指定节点个数的二叉...原创 2018-05-29 12:38:41 · 170 阅读 · 0 评论 -
【dubbo源码分析】5. dubbo消费端 - ProxyFactory使用 Invoker创建消费端调用代理类
首先来看看proxyFactory: private static final ProxyFactory proxyFactory = ExtensionLoader.getExtensionLoader(ProxyFactory.class).getAdaptiveExtension();根据 Adaptive类/com.alibaba.dubbo.rpc.ProxyFactory 之 Adap...原创 2018-04-13 13:01:23 · 1076 阅读 · 0 评论 -
【dubbo源码分析】4.dubbo消费端-消费端 DubboProtocol 服务消费 refer 过程
DubboProtocol.refer() 过程==============================================================代码分析==============================================================================================================...原创 2018-04-13 12:48:29 · 934 阅读 · 0 评论 -
【dubbo源码分析】3.dubbo消费端-Referenceconfig 初始化之远程注册中心方式初始化
1 构建注册中心信息列表:loadRegistries(false) 负责将注册中心集群配置地址 [<dubbo:registry address="10.0.28.54:2181;10.0.28.54:2182;10.0.28.54:2183" protocol="zookeeper" id="com.alibaba.dubbo.config.RegistryConfig" />]...原创 2018-04-13 11:58:16 · 2903 阅读 · 0 评论 -
【dubbo源码分析】2.dubbo消费端-ReferenceConfig初始化过程
主要流程分为:1.如果为本地服务 (Injvm)则直接调用InjvmProtocol进行订阅服务初始化;2.如果配置直连urls,则根据各url.protocol进行初始化服务;3.如果为远程注册中心,则获取注册中心列表,依次订阅服务进行服务初始化详情请查看 referenceconfig 初始化之远程注册中心...原创 2018-04-13 11:52:14 · 1323 阅读 · 0 评论 -
【dubbo源码分析】9.dubbo的consumer和provider调用交互过程
本文主要介绍consumer和provider在具体服务调用的时候是如何进行交互的。首先我们要清楚在consumer启动后对于服务接口生成了怎样的接口代理类和provider端对于服务的实现类有生成了怎么样代理类供Invoker使用。下面以Dubbo提供的demo来讲解。先来回顾一下1.provider端1.1.provider为各个服务实现类(如 DemoServiceImpl)都怎么生成装饰类...原创 2018-04-13 11:49:25 · 3174 阅读 · 0 评论 -
【dubbo源码分析】dubbo com.alibaba.dubbo.common.extension.ExtensionFactory之Adaptive类
@SPIpublic interface ExtensionFactory { <T> T getExtension(Class<T> type, String name);}ExtensionFactory 是根工厂类,是后续获取各个Extension的基础,是其他Extension的ObjectFactory在ExtensionLoader 中有个私有构造函...原创 2018-04-13 11:41:54 · 899 阅读 · 0 评论 -
【dubbo源码分析】dubbo关键类 ExtensionLoader
ExtensionLoader 几个重要方法:1.getExtensionLoader(Class type); 根据 class 从缓存中获取可用的ExtensionLoader 工厂,如果没有则创建新实例( new ExtensionLoader(Class type))并放入缓存中2.getAdaptiveExtension(); 获取AdaptiveExtension 实例 【包含被@A...原创 2018-04-13 11:38:40 · 228 阅读 · 0 评论 -
git常用命令
#创建版本库 #创建目录 mkdir test cd test pwd #把目录变成git可以管理的仓库 git init#查看工作区和版本库里面最新版本的区别 git diff HEAD -- readme.txt git diff 是工作区和暂存区的对比 git diff -- cached 是暂存区和分支的对比 git diff HEAD -- readme.txt 工作区和...原创 2018-04-13 11:36:42 · 139 阅读 · 0 评论 -
【dubbo源码分析】7.dubbo服务端-dubbo-provider加载过程
本文使用的是dubbo-2.5.8版,注册中心是zk(使用不同端口构建第一个伪集群)配置文件: debbo-demo-provider.xml<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dubbo="http://code.alibabatech.com/schema/dubbo" ...原创 2018-04-13 10:12:01 · 356 阅读 · 0 评论 -
【dubbo源码分析】8.dubbo服务端-DubboProvider服务端暴露过程详解
provider服务暴露过程分为两种:1.发布本地服务【Injvm】,主要供本地环境服务间调用2.发布远程服务【protocol】,根据注册中心地址列表将服务依次发布到注册中心上。整体交互图如下:下面开始讲解本地暴露和远程暴露过程:1.本地服务暴露(Injvm)1.1 本地服务 Invoker构建ServiceConfig.java: private static final Protocol p...原创 2018-04-13 10:48:42 · 918 阅读 · 0 评论 -
ZooKeeper 配置文件(zoo.cfg)详解
参数名说明clientPort客户端连接server的端口,即对外服务端口,一般设置为2181吧。dataDir存储快照文件snapshot的目录。默认情况下,事务日志也会存储在这里。建议同时配置参数dataLogDir, 事务日志的写性能直接影响zk性能。tickTimeZK中的一个时间单元。ZK中所有时间都是以这个时间单元为基础,进行整数倍配置的。例如,session的最小超时时间是2*tic...原创 2018-04-18 17:47:21 · 948 阅读 · 0 评论 -
【dubbo源码分析】1. dubbo消费端 - dubbo-consumer加载流程
dubbo-demo-consumer.xml:Main启动入口:加载配置文件时spring读取META_INF/spring.handler文件进行xsd文件配置解析(DubboNamespaceHandler)初始化Bean:当初始化<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.d...原创 2018-04-18 17:41:16 · 306 阅读 · 0 评论 -
【dubbo源码分析】6. dubbo消费端-Consumer如何通过引用代理调用具体服务方法
由文章 5.ProxyFactory使用 Invoker创建消费端调用代理类 知 DemoService引用代理类为:因此,当我们调用demoService.sayHello("world") 方法时,将会调用代理类proxy0.sayHello()public class proxy0 implements ClassGenerator.DC, EchoService, DemoService...原创 2018-04-18 17:29:45 · 758 阅读 · 0 评论 -
java volatile关键字解析
volatile这个关键字可能很多朋友都听说过,或许也都用过。在Java 5之前,它是一个备受争议的关键字,因为在程序中使用它往往会导致出人意料的结果。在Java 5之后,volatile关键字才得以重获生机。 volatile关键字虽然从字面上理解起来比较简单,但是要用好不是一件容易的事情。由于volatile关键字是与Java的内存模型有关的,因此在讲述volatile关键之前,我们转载 2017-08-30 14:29:36 · 219 阅读 · 0 评论