自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

凌霄的专栏

关注分布式计算,大数据

  • 博客(57)
  • 收藏
  • 关注

原创 hera(赫拉)任务调度系统--为数据平台打造的任务调度系统

hera(赫拉)任务调度系统–为数据平台打造的任务调度系统hera项目背景 在大数据部门,随着业务发展,每天承载着成千上万的ETL任务调度,这些任务集中在hive,shell脚本调度。怎么样让大量的ETL任务准确的完成调度而不出现问题,甚至在任务调度执行中出现错误的情况下,任务能够完成自我恢复甚至执行错误告警与完整的日志查询。hera任务调度系统就是在这种背景下衍生的一款分布式调度...

2019-05-08 14:46:07 12460 5

原创 Netty源码分析之EventLoop

Netty源码分析之EventLoopNetty源码分析之EventLoop简述NioEventLoopGroup关于 Reactor 的线程模型NioEventLoopGroup 与 Reactor 线程模型的对应单线程模型多线程模型主从多线程模型NioEventLoopGroup 类层次结构NioEventLoopGroup 实例化过程NioEventLoo

2018-01-27 11:18:45 586

原创 Netty源码分析之ChannelPipeline

Channel 与 ChannelPipelineChannelPipeline 的初始化再探ChannelPipeline 实例化过程ChannelInitializer 的添加自定义 ChannelHandler 的添加过程ChannelHandler 的名字自动生成 handler 的名字关于 Pipeline 的事件传输机制Outbound 操作outbound o

2018-01-27 01:30:07 386

原创 Netty源码分析之Bootstrap启动过程分析

Bootstrap客户端部分连接源码NioSocketChannel 的初始化过程ChannelFactory和Channel 类型的确定Channel 实例化关于unsafe字段的初始化关于 pipeline 的初始化关于 EventLoop 初始化channel 的注册过程handler 的添加过程客户端连接分析服务器端部分Channel 的初始化过程Channel

2018-01-23 02:10:56 610

原创 Spring IOC 容器源码分析

引言BeanDefinition 接口定义customizeBeanFactorybeanFactory加载 Bean loadBeanDefinitionsbeanFactorydoRegisterBeanDefinitionsprocessBeanDefinition注册 BeanBean 容器实例化完成后准备 Bean 容器 prepareBeanFactoryfactory初

2017-12-31 01:16:15 369

原创 Concurrent包源码解读之CountDownLatch,Semaphore,CyclicBarrier

Concurrent包源码解读之CountDownLatchSemaphoreCyclicBarrierCountDownLatchCountDownLatch使用案例CountDownLatch源码分析CyclicBarrierCyclicBarrier概念CyclicBarrier源码分析SemaphoreSemaphore的作用Semaphore源码分析Semaphore使

2017-12-31 01:12:19 341

原创 Concurrent包源码解读之ReentrantLock,ReentrantReadWriteLock

ReentrantLock概述ReentrantLock的内部同步方式实现ReentrantLock的构造函数ReentrantLock的内部实现总结ReentrantReadWriteLock的实现概述ReentrantReadWriteLock的内部同步方式实现Sync分析获取锁读锁的获取写锁的获取总结释放锁读锁的释放写锁的释放总结总结ReentrantLock概

2017-12-31 01:09:32 374

原创 Concurrent包源码解读之AbstractQueuedSynchronizer

Concurrent包源码解读之AbstractQueuedSynchronizer 1. AQS 设计思想 2. AQS框架调用方式 3. AQS源码详解 3.1 不响应中断的独占锁获取锁的流程 3.2 响应中断的独占锁获取锁的流程 3.3 不响应中断的共享锁获取锁的流程 3.4 响应中断的共享锁获取锁的流程 4 基于AQS实现一个不响应中断的独占锁NonReentrantMute

2017-12-18 16:45:23 422

原创 Zeus源码解读之定时任务执行与手动执行任务的过程分析

Zeus源码解读之定时任务执行与手动执行任务的过程分析zeus集群依赖任务执行模式 宙斯中任务出去任务独立调度之外,支持任务直接的复杂依赖调度,如下图一所示: 图1 A为根任务,B,C依赖A任务,D任务依赖B,C,只有当A执行成功之后,B,C才会执行,只有B,C都执行成功之后,D任务才会执行,C执行失败的情况,D就不会执行。zeus集群依赖任务DAG执行过程源码解读 Zeus的定时调度任务利

2017-11-06 16:41:14 1913

原创 Zeus源码剖析之事件处理机制

Zeus的事件处理机制中对观察着模式的应用可以说是用到了极致,因此在分析解读zeus中的事件处理机制之前,我们先简单的脑补一下观察者设计模式。观察者设计模式,简单来说,就是一个对象观察另一个对象,当被观察的对象发生变化时,观察者也会跟着变化。 观察者模式举一个简单的例子,老鹰抓小鸡的游戏,package designPatterns.observer.eagle;/** * @time 2017/

2017-11-02 00:01:34 1166

原创 王阳明心学研究

总纲 王阳明心学主要包括三个方面理论:一是心即理;二是知行合一;三是致良知;王阳明认为,心就是天地万物的主宰,心无外物,心无外理;卷一 圣人之学也就是心学,圣学的目的也是让人恢复灵明的本体。人的本体复归了,“以此乎纯天理之心,发之事父便是孝,发之事君便是忠”; 王阳明所谓的知行合一便是本体,即灵明不昧的本心。知行正如本体作用,本体和作用是不可分离的,亦如灯和灯光是一体一样。真如他所说“知之...

2019-11-13 09:23:43 1738

原创 设计模式学习笔记----外观模式模式

定义:外观模式是软件工程中常用的一种软件设计模式。它为子系统中的一组接口提供一个统一的高层接口。这一接口使得子系统更加容易使用。 在外观模式的作用下,我们客户端只依赖外观一个接口,而在原始的方式下,我们的客户端依赖于整个子系统,所以外观模式主要解决的是类之间的耦合过于复杂。相比起观察者模式,适配器模式等适合小规模使用的设计模式,外观模式更多的是大范围的使用,它会是很多时候支撑我们整个架构的...

2019-08-31 21:14:14 268

原创 设计模式学习笔记----装饰器模式

装饰模式 动态的给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更为灵活

2019-08-31 20:18:23 232

原创 设计模式学习笔记----策略模式模式

定义:策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化。 分析下定义,策略模式定义和封装了一系列的算法,它们是可以相互替换的,也就是说它们具有共性,而它们的共性就体现在策略接口的行为上,另外为了达到最后一句话的目的,也就是说让算法独立于使用它的客户而独立变化,我们需要让客户端依赖于策略接口。@FunctionalInter...

2019-08-31 19:44:22 180

原创 《遇见未知的自己》读书笔记

凡是你抗拒的,都会持续一旦那个令你快乐的情境或者事物不存在了,你的快乐也就随之消失了。而喜悦不同,它是由内向外的绽放,从你的内心深处油然而生的任何能丢弃自己不实的身份认同,而且不被自己的思想,情绪以及身体所限制和阻碍的人,都能展现出真我的特质 我们自以为可以操控我们的生活,做出自由的选择,但实际上,我么是一部自动化模式制约下的机器,很多时候身不由己。你不是你的工作,你不是你的表现,你不是...

2019-07-11 22:11:42 392

原创 ECMAScript 6学习笔记之----数组的扩展

扩展运算符 … rest的逆运算扩展运算符(spread)是三个点(…)。它好比 rest 参数的逆运算,将一个数组转为用逗号分隔的参数序列。//rest参数逆运算print(...[1, 2, 3])print([1, 2, 3])print(1, ...[2, 3, 4], 5)作用合并数组。代替数组applyfunction f(x,y,z) { consol...

2019-04-27 10:45:42 207

原创 ECMAScript 6学习笔记之----async 函数

含义async 函数是什么?一句话,它就是 Generator 函数的语法糖。前文有一个 Generator 函数,依次读取两个文件。const fs = require('fs');const readFile = function (fileName) { return new Promise(function (resolve, reject) { fs.readFile...

2019-04-21 16:56:28 205

原创 ECMAScript 6学习笔记之----Generator函数和异步应用

基本概念 Generator 函数是 ES6 提供的一种异步编程解决方案,语法行为与传统函数完全不同。Generator 函数有多种理解角度。语法上,首先可以把它理解成,Generator 函数是一个状态机,封装了多个内部状态。执行 Generator 函数会返回一个遍历器对象,也就是说,Generator 函数除了状态机,还是一个遍历器对象生成函数。返回的遍历器对象,可以依次遍历 Gener...

2019-04-21 16:55:56 176

原创 ECMAScript 6学习笔记之----Reflect

Reflect对象与Proxy对象一样,也是 ES6 为了操作对象而提供的新 API。Reflect对象的设计目的有这样几个。将Object对象的一些明显属于语言内部的方法(比如Object.defineProperty),放到Reflect对象上。现阶段,某些方法同时在Object和Reflect对象上部署,未来的新方法将只部署在Reflect对象上。也就是说,从Reflect对象上可以拿...

2019-04-21 16:55:15 170

原创 ECMAScript 6学习笔记之----Proxy

Proxy概述Proxy 用于修改某些操作的默认行为,等同于在语言层面做出修改,所以属于一种“元编程”(meta programming),即对编程语言进行编程。Proxy 可以理解成,在目标对象之前架设一层“拦截”,外界对该对象的访问,都必须先通过这层拦截,因此提供了一种机制,可以对外界的访问进行过滤和改写。Proxy 这个词的原意是代理,用在这里表示由它来“代理”某些操作,可以译为“代理器...

2019-04-21 16:54:24 165

原创 ECMAScript 6学习笔记之----对象的扩展

Object.is Object.is就是部署这个算法的新方法。它用来比较两个值是否严格相等,与严格比较运算符(===)的行为基本一致。 ES5 比较两个值是否相等,只有两个运算符:相等运算符()和严格相等运算符(=)。它们都有缺点,前者会自动转换数据类型,后者的NaN不等于自身,以及+0等于-0。JavaScript 缺乏一种运算,在所有环境中,只要两个值是一样的,它们就应该相等。prin...

2019-04-21 16:53:44 145

原创 ECMAScript 6学习笔记之----函数的扩展

函数参数设置默认值ES6 允许为函数的参数设置默认值,即直接写在参数定义的后面。function log(x, y = 'World') { console.log(x, y);}log('Hello') // Hello Worldlog('Hello', 'China') // Hello Chinalog('Hello', '') // Hellofunction P...

2019-04-21 16:53:07 142

原创 ECMAScript 6学习笔记之----正则的扩展

RegExp构造函数RegExp构造函数的参数有两种情况。第一种情况是,参数是字符串,这时第二个参数表示正则表达式的修饰符(flag)。var regex = new RegExp('xyz', 'i');// 等价于var regex = /xyz/i;第二种情况是,参数是一个正则表示式,这时会返回一个原有正则表达式的拷贝。var regex = new RegExp(/xyz/...

2019-04-21 16:52:28 149

原创 ECMAScript 6学习笔记之----字符串的扩展

String的基本方法charAt,concat,slice,substr,indexOf,trimvar stringObject = new String(" hello, world ");print(stringObject.charAt(0));print(stringObject[1]);print(stringObject.concat([',java', 'go']))...

2019-04-21 16:51:41 178

原创 ECMAScript 6学习笔记之----变量的解构赋值

数组的结构赋值 ES6 允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构(Destructuring)。let [a, b, c] = [1, 2, 3]print(a)let [x, , y] = [1, 2, 3]print(y)let [x1, y1, z1] = new Set(['a', 'b', 'c']);print(x1)-----1-...

2019-04-21 16:50:32 137

原创 ECMAScript 6学习笔记之----Let和const命令

基本使用ES6 新增了let命令,用来声明变量。它的用法类似于var,但是所声明的变量,只在let命令所在的代码块内有效。{ let a = 10; var b = 1;}console.log("b = " + b);//console.log("a = " + a);暂时性死区 暂时性死区的本质就是,只要一进入当前作用域,所要使用的变量就已经存在了,但是不可...

2019-04-21 16:49:15 187

原创 类型信息--深入理解反射

什么是RTTI RTTI(Run-Time Type Identification)运行时类型识别,其作用是在运行时识别一个对象的类型和类信息,运行时识别一个对象的类型。主要有两种方式,一种是“传统的”的RTTI,另一种是反射机制,它允许我们在运行时发现和使用类的信息。abstract class Shape { void draw() { System.out.pr...

2019-04-07 19:05:29 221

原创 ECMAScript 6学习笔记之----Symbol

文章目录什么是Symbol作为属性名的Symbol消除魔术字符串属性名的遍历总结什么是Symbol Symbol是ES6新引入的原始数据类型,表示独一无二的值。他是JavaScript语言的第七种数据类型,前六种是:undefined,null,布尔型(Boolean),字符串(String), 数值Number,对象(Object) 。作为属性名的Symbol 由于每一个Symbol值都...

2019-01-26 22:50:24 226

原创 ECMAScript 6学习笔记之---- Promise

Promise作用Promise 是异步编程的一种解决方案,比传统的解决方案——回调函数和事件——更合理和更强大。Promise使用

2019-01-19 22:56:54 202

原创 Netty源码分析---MpscLinkedQueue

 MpscLinkedQueue是netty自己实现的线程安全的队列,与JDK通过

2018-11-18 23:55:25 2247

原创 Spring中Bean容器DefaultListableBeanFactory核心实现源码分析

文章目录DefaultListableBeanFactory的继承结构BeanFactoryAliasRegistrySimpleAliasRegistryBeanDefinitionRegistrySingletonBeanRegistryDefaultSingletonBeanRegistry单例类的获取过程与循环依赖的实现原理FactoryBeanRegistrySupportListabl...

2018-10-18 20:08:36 3295 1

原创 Netty源码分析---FastThreadLocal

FastThreadLocal实现原理 FastThreadLocal是JDK中ThreadLocal的扩充,通过对重建FastThreadLocal的线程建立索引的方式来存储线程本地变量。get set值的过程中根据整形索引index实现线程本地变量的快速访问。通过index索引访问线程本地变量具有比ThreadLocal通过ThreadLocalMap访问线程变量更快的效率。 Thread...

2018-10-01 00:06:49 311

原创 String源码解读以及的intern()方法探究

文章目录String的属性构造函数intern()方法String的属性先看下String的属性如下:/**通过数组存储值*/private final char value[];/** 默认hashcode 为0 */private int hash; // Default to 0/**描述序列化类中的串行化字段*/private static final ObjectStre...

2018-09-23 10:31:52 314

原创 AtomicReferenceFieldUpdater源码阅读笔记

AtomicReferenceFieldUpdater使用 AtomicReferenceFieldUpdater的作用就是原子更新类中被volatile修饰的字段,具体使用如下:class Person { volatile String name = "lx";}public class ReferenceFieldUpdaterTest { publi...

2018-09-14 23:57:18 1928

原创 InheritableThreadLocal使用与源码分析

InheritableThreadLocal使用 子线程需要获取父线程中的ThreadLocal中的值的时候,使用InheritableThreadLocalpublic class TestInheritableThreadLocal { public static final SecureRandom random = new SecureRandom(); pu...

2018-09-12 00:53:13 188

原创 Comparable和Comparator源码分析与对比

Comparable使用 Comparable只是一个简单的接口,public interface Comparable<T> { public int compareTo(T o);}使用如下:public class Person implements Comparable<Person> { int age; Str...

2018-09-08 15:35:24 632

原创 Scala学习笔记——(Loan Pattern)借贷模式

Scala中的Loan Pattern 资源回收是计算机工程实践中一项重要的实现模式。对于具有GC的程序设计语言,它仅仅实现了内存资源的自动回收,而对于诸如文件IO,数据库连接,Socket连接等资源需要程序员自行实现资源的回收。  该问题可以形式化地描述为:给定一个资源R,并将资源传递给用户空间,并回调算法f: R => T;当过程结束时资源自动释放。- Input: Giv...

2018-09-08 01:58:30 441

原创 Scala学习笔记——函数式编程

在函数式编程中,函数式第一等级的值,就像数据变量的值一样,你可以从函数中组合形成新函数(如`tan(x)=sin(x)/cos(x))`,可以将函数赋值给变量,也可以将函数作为参数传递给其它函数,还可以将函数作为其它函数的返回值。当一个函数采用其它函数作为变量或返回值时,它被称为高阶函数。object FactorialApp extends App { def factoria...

2018-09-08 01:15:38 285

原创 Scala学习笔记——case模式匹配

简单匹配 简单匹配Boolean值val boolSeq = Seq(true, false) for (bool <- boolSeq) { bool match { case true => println("hi true") case false => println("hi false") } }mat...

2018-09-08 00:54:36 808

原创 Scala学习笔记——implicit隐式

隐式参数 简单隐式参数实现如下:implicit隐式传入参数 def calcTa2(a: Int)(implicit b: Int): Float = a*b implicit val t = 3 println(calcTa2(10))隐式转换函数对double值进行隐式转换object ImplicitTest extends App { impli...

2018-09-08 00:53:30 770 2

空空如也

空空如也

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

TA关注的人

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