上一篇文章介绍了HashMap的一部分的知识,算是为下面HashMap的进一步学习做准备吧. 然后写的时候一直在思考的一个问题是,这方面的知识网上的资料也是一抓一大把,即使是这样我为什么还要花费时间去写呢.后来我仔细想了一下,其实很简单,虽然大家解读的是同一份源码,但是如果只是看看别人写的文章,源码它真正的思想和魅力你都体会不到一半.所以还是决定自己写写,虽然和别人写的大同小异,但是写完真的能体会到更深层次的东西.再就是我的描述或许不准确甚至说是有错误.希望看到的人可以指出,这样对我也是一种帮助…
HashMap是Java Collection Framework 的重要成员之一.HashMap是基于哈希表的 Map 接口的实现,此实现提供所有可选的映射操作,映射是以键值对的形式映射:key-value.key——此映射所维护的键的类型,value——映射值的类型,并且允许使用 null 键和 null 值.而且HashMap不保证映射的顺序. 简单的介绍一下HashMap,就开始HashMap的源码分析. 首先简单的介绍一下HashMap里都包含的数据结构.觉得还是先贴一张图比较好,结合…
本文要描述的是solr的查询插件,该查询插件目的用于生成Lucene的查询Query,类似于查询条件表达式,与solr查询插件相关UML类图如下: 如果我们强行将上面的类图纳入某种设计模式语言的话,本人姑且将之归入桥接模式(Bridge)吧:QParserPlugin插件的行为依赖于QParser的具体类型 QParserPlugin为抽象类,职责为创建QParser类型对象 package org.apache.solr.search; import org.apache.solr.commo…
1.构造函数 当我们要调用EventBus的功能时,比如注册或者发送事件,总会调用EventBus.getDefault()来获取EventBus实例: public static EventBus getDefault() { if (defaultInstance == null) { synchronized (EventBus.class) { if (defaultInstance == null) { defaultInstance = new EventBus(); } } } r…
在上一篇JDK8源码解析 -- HashMap(一)的博客中关于HashMap的重要知识点已经讲了差不多了,还有一些内容我会在今天这篇博客中说说,同时我也会把一些我不懂的问题抛出来,希望看到我这篇博客的大神帮忙解答困扰我的问题,让我明白一个所以然来.彼此互相进步,互相成长.HashMap从jdk7到jdk8版本改变大,1.新增加的节点在链表末尾进行添加  2.使用了红黑树. 1. HashMap容量大小求值方法 // 返回2的幂次 static final int tableSizeFor(in…
solr索引操作(包括新增 更新 删除 提交 合并等)相关UML图如下 从上面的类图我们可以发现,其中体现了工厂方法模式及责任链模式的运用 UpdateRequestProcessor相当于责任链模式中的处理器角色,我们通过如下的对象图也许更能反映多个UpdateRequestProcessor类型的处理器的活动行为 UpdateRequestProcessorChain为请求处理器链,供客户端调用(内部依赖处理器工厂数组生成不同的处理器) public final class UpdateRe…
今天有兴趣重新看了一下heritrix3.1.0系统里面的线程池源码,heritrix系统没有采用java的cocurrency包里面的并发框架,而是采用了线程组ThreadGroup类来实现线程池的(线程组类似于树结构,一个线程组包含多个子线程组或多个子线程,数据结构类似于composite模式,不过枝节点与叶子节点没有实现类似composite模式的共同接口) 关键类是org.archive.crawler.framework包里面的ToePool类与ToeThread类,前者继承自Thre…
上文描述了solr3.6.0怎么采用maven管理的方式在eclipse中搭建开发环境,在solr中,为了提高搜索性能,采用了缓存机制,这里描述的是LRU缓存,这里用到了 LinkedHashMap类 要基于LinkedHashMap来实现LRU缓存,我们可以选择inheritance, 也可以选择 delegation, 下面是基于delegation的实现方式: import java.util.LinkedHashMap; import java.util.Collection; impo…
  本文作为系列的第一篇,主要描述的是solr3.6.0开发环境的搭建   首先我们需要从官方网站下载solr的相关文件,下载地址为http://archive.apache.org/dist/lucene/solr/3.6.0/ 将下载的文件解压到solr-3.6.0文件夹   然后本人在myeclipse下建立web project,在pom.xml文件添加相关依赖,本人配置如下: <properties> <solr.version>3.6.0</solr.versio…
apache mina是一个基于java nio的网络通信框架,为TCP UDP ARP等协议提供了一致的编程模型:其源码结构展示了优秀的设计案例,可以为我们的编程事业提供参考. 依照惯例,首先搭建apache mina 2.0的开发环境,本人采用maven作为项目管理工具,需要添加的依赖pom.xml文件如下 <properties> <org.slf4j-version>1.6.6</org.slf4j-version> <project.build.sour…
上一个章节,笔者向大家介绍了spring是如何来过滤配置类的,下面我们来看看在过滤出配置类后,spring是如何来解析配置类的.首先过滤出来的配置类会存放在configCandidates列表, 在代码<1>处会先根据配置类的权重做一个排序,权重越低的配置类排在越前,在解析的时候也越先解析.之后会根据configCandidates列表生成一个set集合candidates,防止configCandidates列表存在相同的元素.之后会在<3>处解析这些配置类,并在<4>…
本文主要介绍EventBus3.0的源码 EventBus是一个Android事件发布/订阅框架,通过解耦发布者和订阅者简化 Android 事件传递. EventBus使用简单,并将事件发布和订阅充分解耦,从而使代码更简洁. 本文主要从以下几个模块来介绍 1.EventBus使用 2.EventBus注册源码解析 3.EventBus事件分发解析 4.EventBus取消注册解析   一.EventBus使用 1.首先是注册 EventBus.getDefault().register(thi…
欢迎访问我的个人博客 ,原文链接:http://wensibo.net/2017/09/05/retrofit/ ,未经允许不得转载! 今天是九月的第四天了,学校也正式开学,趁着大学最后一年的这大好时光,抓紧时间赶快学习新知识吧!今天想要与大家一起分享的是Retrofit,由于网上已经有许多讲解Retrofit使用的文章了,本篇文章只会给一个小小的示例,以这个示例作为入口分析其源码,同样也会贴上流程图,以免迷路.话不多说,我们开始吧!!! 关于Retrofit 简介 Retrofit是近来十分火…
作为MVC框架,M(odel)  V(iew)  C(ontroler)之间的联系是必不可少的,今天要说的就是View(视图) 通常我们在写逻辑代码也好或者是在ui组件也好,都需要跟dom打交道,我们好讨厌在逻辑代码里面参杂dom的代码,特别是需要生产dom的代码, 因为这样的缺点: 1. 耦合,难于维护(虽然模版引擎能解决一些问题,但是事件的添加呢?) 2. 代码无法做到美观,节俭,感觉和dom参杂在一起就是一个字,乱!! 介于这样的缺点,Backbone提供了一个View类,用于构造对象,它…
晚上躺在床上,继续完成对Backbone.Collection的源码解析. 首先讲讲它用来干嘛? Backbone.Collection的实例表示一个集合,是很多model组成的,如果用model比喻成数据表中的row,那么collection就是那张数据表. 在mvc单页面程序里面,我们不可能只用一条一条的数据,我们更需要多条数据的处理,并且能够统一的管理这多条数据,无论是网络请求还是前端交互. 就好比前端有一个datagrid,很多row的数据,可以抽象成一个collection,row和c…
一.前言 Vue.js框架是目前比较火的MVVM框架之一,简单易上手的学习曲线,友好的官方文档,配套的构建工具,让Vue.js在2016大放异彩,大有赶超React之势.前不久Vue.js 2.0正式版已出,在体积优化(相比1.0减少了50%).性能提升(相比1.0提升60%).API优化等各方面都更上一层楼. 本文是系列文章,主要想通过对于Vue.js 2.0源码的分析,从代码层面解析Vue.js的实现原理,帮助读者能够更深入地理解整个框架的思想.此篇文章主要介绍前端渲染部分. 不足之处还请批…
HashMap简介 HashMap是基于哈希表实现的,每一个元素是一个key-value对,其内部通过单链表解决冲突问题,容量不足(超过了阀值)时,同样会自动增长. HashMap是非线程安全的,只是用于单线程环境下,多线程环境下可以采用concurrent并发包下的concurrentHashMap. HashMap 实现了Serializable接口,因此它支持序列化,实现了Cloneable接口,能被克隆. HashMap源码剖析 HashMap的源码如下(加入了比较详细的注释): 1 2…
源码解析 基本调用类分析 任务启动由python脚本新建进程进行任务执行,后续执行由Java进行,以下将对java部分进行分 其中的调用原理机制. Engine 首先入口类为com.alibaba.datax.core.Engine的main方法,其中通过调用其本身的静态方法entry,该方法主要针对输入参入进行格式化以及校验: BasicParser parser = new BasicParser(); CommandLine cl = parser.parse(options, args)…
ArrayBlockingQueue源码解析 ArrayBlockingQueue是一个阻塞式的队列,继承自AbstractBlockingQueue,间接的实现了Queue接口和Collection接口.底层以数组的形式保存数据(实际上可看作一个循环数组).常用的操作包括 add ,offer,put,remove,poll,take,peek. 一.类声明 public class ArrayBlockingQueue<E> extends AbstractQueue<E> i…
Angular执行流程 前言 发现最近angularjs在我厂的应用变得很广泛,下周刚好也有个angular项目要着手开始做,所以先做了下功课,从源代码开始入手会更深刻点,可能讲的没那么细,侧重点在于整个执行流程,之后会对angularjs的各个模块再解析下. 目录结构 从angularFiles.js中就可以看到angular.js是如何打包的? 'angularSrc': [ 'src/minErr.js', 'src/Angular.js', 'src/loader.js', 'src/A…
前言: 又是一个大好的周末, 可惜今天起来有点晚, 扒开HashMap和HashTable, 看看他们到底有什么区别吧. 先来一段比较拗口的定义: Hashtable 的实例有两个参数影响其性能:初始容量 和 加载因子.容量 是哈希表中桶 的数量,初始容量 就是哈希表创建时的容量.注意,哈希表的状态为 open:在发生“哈希冲突”的情况下,单个桶会存储多个条目,这些条目必须按顺序搜索.加载因子 是对哈希表在其容量自动增加之前可以达到多满的一个尺度.初始容量和加载因子这两个参数只是对该实现的提示.…
# Angular指令编译原理 前言 angular之所以使用起来很方便,是因为通常我们只需要在html里面引入一个或多个(自定义或内置的)指令就可以完成一个特定的功能(这也是angular推荐的方式),比如:一个简单的双向绑定(用ng-model指令),或者模板循环渲染(用ng-repeat指令),又或者是模板是否显示(用ng-if指令),而对于这些指令的内部实现一般我们无需太多关心(除非你想深入了解),我们更乐意于把侧重点放在指令如何使用(即API)上. 我们知道一个应用是由多个功能组成的,…
Angular作用域 前言 之前我们探讨过Angular的执行流程,在一切准备工作就绪后(我是指所有directive和service都装载完毕),接下来其实就是编译dom(从指定的根节点开始遍历dom树),通过dom节点的元素名(E),属性名(A),class值(C)甚至注释(M)匹配指令,进而完成指令的compile,preLink,postLink,这期间就有可能伴随着作用域的创建和继承(有些指令通过scope字段要求创建自己的(孤立)作用域),从而形成一个作用域(scope)的继承关系.…
在开发iOS的客户端应用时,经常需要从服务器下载图片,虽然系统提供了下载工具:NSData.NSURLSession等等方法,但是考虑到图片下载过程中,需要考虑的因素比较多,比如:异步下载.图片缓存.错误处理.编码解码等,以及实际需要中根据不同网络加载不同画质的图片等等需求,因此下载操作不是一个简单的下载动作就可以解决. 针对上述问题,目前常用的开源库就是SDWebImage,它很好的解决了图片的异步下载.图片缓存.错误处理等问题,得到了广泛的应用,使得设置UIImageView.UIButto…
趁热打铁,将Backbone.Model的源代码注释也发出来. Model是用来干嘛的?写过mvc的同学应该都知道,说白了就是model实例用来存储数据表中的一行数据(row) Backbone利用model的attributes与数据库的字段一一对应,通过ajax获取数据后,在前端进行存储,又提供了一系列的方法, 在改变model实例的同时,完成关联视图view的更新,和服务器端数据的更新,从而达到mvc的效果. 下面就是Backbone.Model的源码注释了,如果错误了还望指出来,或者不清…
现在网上讲解EventBus的文章大多数都是针对2.x版本的,比较老旧,本篇文章希望可以给大家在新版本上面带来帮助. EventBus 是专门为Android设计的用于订阅,发布总线的库,用到这个库的app很多,因为它有很多的优点.比如: 它可以简单Android组件之间的通信 它可以避免了Android四大组件复杂的生命周期处理 它可以让你的代码更为简洁. 先一起了解下如何使用,然后在分析它的源码,知道它的工作原理.我们直接来使用EventBus 3.0,3.x主要的一个新的特性就是使用了注解…
HashMap的前世今生 Java8在Java7的基础上,做了一些改进和优化. 底层数据结构和实现方法上,HashMap几乎重写了一套 所有的集合都新增了函数式的方法,比如说forEach,也新增了很多好用的函数. 前世--Java 1.7 底层数据结构 数组 + 链表 在Java1.7中HashMap使用数组+链表来作为存储结构 数组就类似一个个桶构成的容器,链表用来解决冲突,当出现冲突时,就找到当前数据应该存储的桶的位置(数组下标),在当前桶中插入新链表结点. 如下图所示: 链表结点中存放(…
最近一直在忙于项目开发的事情,没有时间去学习一些新知识,但用忙里偷闲的时间把jdk8的hashMap源码看完了,也做了详细的笔记,我会把一些重要知识点分享给大家.大家都知道,HashMap类型也是面试题百分之九十的概率会考到的一种类.如果有人想要看我在源码中的详情笔记的话,可以去我的gitHub上面去下载看(https://github.com/javJoker/jdk8/blob/master/src/main/java/java/util/HashMap.java).知识在于分享,进步在于学…
这一篇主要讲解的是dolphinscheduler 1.2.0 的master部分的源码,从主类MasterServer开始,从启动到运行,master主要做了以下三件事情 Zookeeper 节点初始化 构建并提交工作流实例,跟踪运行状态 监控其他MasterServer和WorkerServer的健康状态并容错 维系心跳 @PostConstruct public void run(){ //详情见1.zookeeper初始化 zkMasterClient.init(); //详情见2.Ma…
​ 点亮 ️ Star · 照亮开源之路 https://github.com/apache/dolphinscheduler 本文目录 1 DolphinScheduler的设计与策略 1.1 分布式设计 1.1.1 中心化 1.1.2 去中心化 1.2 DophinScheduler架构设计 1.3 容错问题 1.3.1 宕机容错 1.3.2 失败重试 1.4 远程日志访问 2 DolphinScheduler源码分析 2.1 工程模块介绍与配置文件 2.1.1 工程模块介绍 2.1.2 配…