自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

转载 精通Dubbo——Dubbo支持的协议的详解

Dubbo支持dubbo、rmi、hessian、http、webservice、thrift、redis等多种协议,但是Dubbo官网是推荐我们使用Dubbo协议的。下面我们就针对Dubbo的每种协议详解讲解,以便我们在实际应用中能够正确取舍。dubbo协议缺省协议,使用基于mina1.1.7+hessian3.2.1的tbremoting交互。 连接个数:单连接 连接方式:长连接 ...

2018-12-29 10:44:10 227

转载 Clickhouse集群应用、分片、复制

通常生产环境我们会用集群代替单机,主要是解决两个问题:效率 稳定如何提升效率?一个大大大任务,让一个人干需要一年,拆解一下让12个人同时干,可能只需要1个月。对于数据库来说,就是数据分片。如何提升稳定性?所谓稳定就是要保证服务时刻都能用,也常说高可用。这就像团队里必须有二把手,老大有事不在,老二要能顶上。对于数据库来说,就是数据备份。而集群是解决这两个问题的最佳手段。话说,三个臭皮...

2018-11-30 19:03:27 3481 1

转载 [Curator] Leader Election 的使用与分析

【转载】http://www.voidcn.com/article/p-ornzyvyy-bqr.htmlLeader ElectionCurator在选主方式上除了提供Leader Latch,还有一个更为经典的方式:Leader Election,一种基于选举而非抢占的选主方式。1. 关键APIorg.apache.curator.framework.recipes.leade...

2018-11-20 20:27:29 1167

转载 [Curator] Path Cache 的使用与分析

Path CachePath Cache其实就是用于对zk节点的监听。不论是子节点的新增、更新或者移除的时候,Path Cache都能对子节点集合的状态和数据变化做出响应。1. 关键 APIorg.apache.curator.framework.recipes.cache.PathChildrenCacheorg.apache.curator.framework.recipes....

2018-11-20 20:24:25 1168

转载 ReentrantLock实现原理深入探究

前言这篇文章被归到Java基础分类中,其实真的一点都不基础。网上写ReentrantLock的使用、ReentrantLock和synchronized的区别的文章很多,研究ReentrantLock并且能讲清楚ReentrantLock的原理的文章很少,本文就来研究一下ReentrantLock的实现原理。研究ReentrantLock的实现原理需要比较好的Java基础以及阅读代码的能力,有...

2018-11-19 20:10:08 207

转载 Java并发之AQS详解

一、概述  谈到并发,不得不谈ReentrantLock;而谈到ReentrantLock,不得不谈AbstractQueuedSynchronized(AQS)!  类如其名,抽象的队列式的同步器,AQS定义了一套多线程访问共享资源的同步器框架,许多同步类实现都依赖于它,如常用的ReentrantLock/Semaphore/CountDownLatch...。  以下是本文的目录大...

2018-11-19 20:08:33 119

转载 Hadoop2源码分析-MapReduce v2架构

转载:http://www.cnblogs.com/smartloli/p/4434490.html1.概述  前面我们已经对Hadoop有了一个初步认识,接下来我们开始学习Hadoop的一些核心的功能,其中包含mapreduce,fs,hdfs,ipc,io,yarn,今天为大家分享的是mapreduce部分,其内容目录如下所示:MapReduce V1 MapReduce V2...

2018-10-17 13:56:33 783

转载 Hadoop2源码分析-准备篇

1.概述  我们已经能够搭建一个高可用的Hadoop平台了,也熟悉并掌握了一个项目在Hadoop平台下的开发流程,基于Hadoop的一些套件我们也能够使用,并且能利用这些套件进行一些任务的开发。在Hadoop的应用级别上,我们接着往后面去研究学习,那就是Hadoop的源码了,作为Hadoop开发人员,我们得去学习和研究Hadoop得实现原理,底层框架的设计,编码的实现过程等等,下面就开始我们今...

2018-10-17 13:45:03 175

转载 MapReduce的执行机制

当我们只用几行代码就可以运行一个MapReduce作业时,我们是否知道其实里面隐藏着大量的执行细节.本文就是来揭示一个Hadoop运行作业的执行细节.运行MapReduce作业的过程将包含以下四个实体1. 客户端.提交hadoop作业2. 分布式文件系统(一般为HDFS),3. JobTracker.协调作业的运行4. TaskTracker运行作业划分后的任务客户端提交作业:1. ...

2018-10-17 13:41:11 138

转载 MapReduce剖析笔记之五:Map与Reduce任务分配过程

转载:https://www.cnblogs.com/esingchan/p/3940565.html在上一节分析了TaskTracker和JobTracker之间通过周期的心跳消息获取任务分配结果的过程。中间留了一个问题,就是任务到底是怎么分配的。任务的分配自然是由JobTracker做出来的,具体来说,存在一个抽象类:TaskScheduler,主要负责分配任务,继承该类的有几个类:C...

2018-10-17 13:39:15 1243

转载 分布式任务编排调度框架设计

运维焦油坑随着互联网+和去IOE浪潮的推进,传统行业X86服务器的数量逐渐增多。服务器数量剧增带来的直接后果就是运维复杂度的增加。原本一个人可以轻松维护十几台甚至几十台服务器:写几个常用的监控和配置下发脚本、或者利用cronTab制作几个定时任务就可以搞定。当服务器的数量由几十上升到几百,几千时,量变就引起了质变;而且随着应用数量的增多,需要同时对多个应用进行快速高效的备份或者持续部署等非...

2018-09-18 16:53:18 5856 1

转载 elasticJob分片跑批

业务迅速发展带来了跑批数据量的急剧增加。单机处理跑批数据已不能满足需要,另考虑到企业处理数据的扩展能力,多机跑批势在必行。多机跑批是指将跑批任务分发到多台服务器上执行,多机跑批的前提是”数据分片”。elasticJob通过JobShardingStrategy支持分片跑批。跑批配置需要做如下修改: shardingTotalCount:作业分片总数。jobShardingStrateg...

2018-09-18 10:18:23 5222

转载 gRPC服务发现&负载均衡

构建高可用、高性能的通信服务,通常采用服务注册与发现、负载均衡和容错处理等机制实现。根据负载均衡实现所在的位置不同,通常可分为以下三种解决方案:1、集中式LB(Proxy Model)在服务消费者和服务提供者之间有一个独立的LB,通常是专门的硬件设备如 F5,或者基于软件如 LVS,HAproxy等实现。LB上有所有服务的地址映射表,通常由运维配置注册,当服务消费方调用某个目标服务时,它向LB发起...

2018-07-03 20:48:55 515

转载 hive存储处理器(StorageHandlers)以及hive与hbase整合

此篇文章基于hive官方英文文档翻译,官方的英文地址为:1.https://cwiki.apache.org/confluence/display/Hive/StorageHandlers2.https://cwiki.apache.org/confluence/display/Hive/HBaseIntegration 一 存储处理器介绍通过HIVE存储处理器,不但可以让hive基于hbase实...

2018-07-03 14:16:11 3650 1

转载 【git】初次运行 Git 前的配置

初次运行 Git 前的配置一般在新的系统上,我们都需要先配置下自己的 Git 工作环境。配置工作只需一次,以后升级时还会沿用现在的配置。当然,如果需要,你随时可以用相同的命令修改已有的配置。Git 提供了一个叫做 git config 的工具(译注:实际是 git-config 命令,只不过可以通过 git 加一个名字来呼叫此命令。),专门用来配置或读取相应的工作环境变量。而正是由这些环境变量,决...

2018-06-29 10:25:19 318

转载 redis源码解读总结(redis一致性哈希实现)

最近工作中一直在用redis进行缓存功能的实现,redis的源码虽然只有一万多行,但是确实值得研究一下,以下个人的一点研究和看法(本来打算用图表示,实在找不到一种好的画图工具来描述,因此就用文字描述了),希望能跟各位共勉之。一、1.构建JedisShardInfo列表List<JedisShardInfo> jedisShardInfoList,其中JedisShardInfo包含了服...

2018-05-29 20:01:14 682

转载 【spring ioc源码学习】三、自定义配置文件读取

一、环境准备  在文件读取的时候,第9步我们发现spring会根据标签的namespace来选择读取方式,联想spring里提供的各种标签,比如<aop:xxx>等应该会有不同的读取和解析方式,这一章我们来找一个其他文件,了解下spring自定义标签和配置的读取流程。  手边正好有一套dubbo的源码,因此为了区别与spring的原生读取,就使用它来进行分析。  首先spring的配置...

2018-05-29 11:21:14 191

转载 【spring ioc源码学习】二、配置文件读取

一、环境准备  对于学习源码来讲,拿到一大堆的代码,脑袋里肯定是嗡嗡的,所以从代码实例进行跟踪调试未尝不是一种好的办法,此处,我们准备了一个小例子:package com.zjl;public class Person { private String name; public String getName() { return name; } ...

2018-05-29 11:20:10 163

转载 【spring ioc源码学习】一、IOC简介

一、程序实例  假设一个简单地实例,我们有一个人,人可能有姓名,年龄等属性,每天上下班的时候需要坐车,他可能做小轿车,suv等,这样一个场景。我们很容易想到如下代码:  1、人的对象类,包括两个属性,姓名和车package com.zjl.ioc;public class Person { String name; Driveable driveable; public...

2018-05-29 11:18:07 181

转载 Spring InitializingBean init-method @PostConstruct 执行顺序

Spring 容器中的 Bean 是有生命周期的,Spring 允许在 Bean 在初始化完成后以及 Bean 销毁前执行特定的操作,常用的设定方式有以下三种: 通过实现 InitializingBean/DisposableBean 接口来定制初始化之后/销毁之前的操作方法;通过 元素的 init-method/destroy-method属性指定初始化之后 /销毁之前调用的操作方法;在指定方法...

2018-05-28 15:17:11 3290

转载 ConcurrentHashMap的jdk1.7源码

ConcurrentHashMap的锁分段技术:假如容器里有多把锁,每一把锁用于锁容器其中一部分数据,那么当多线程访问容器里不同数据段的数据时,线程间就不会存在锁竞争,从而可以有效的提高并发访问效率,这就是ConcurrentHashMap所使用的锁分段技术。首先将数据分成一段一段的存储,然后给每一段数据配一把锁,当一个线程占用锁访问其中一个段数据的时候,其他段的数据也能被其他线程访问。 1.类变...

2018-05-24 23:29:44 123

转载 HashMap源码解析(基于JDK1.7)

一、HashMap简介哈希表(hash table)也叫散列表,是一种非常重要的数据结构,应用场景及其丰富,许多缓存技术(比如memcached)的核心其实就是在内存中维护一张大的哈希表,而HashMap的实现原理就是基于此。那么什么是哈希表呢? 在讨论哈希表之前,我们先大概了解下其他数据结构在新增,查找等基础操作执行性能数组:采用一段连续的存储单元来存储数据。对于指定下标的查找,时间复杂度为O(...

2018-05-24 13:05:38 148

转载 Java源码分析之HashMap(JDK1.8)

一、HashMap概述  HashMap是常用的Java集合之一,是基于哈希表的Map接口的实现。与HashTable主要区别为不支持同步和允许null作为key和value。由于HashMap不是线程安全的,如果想要线程安全,可以使用ConcurrentHashMap代替。二、HashMap数据结构  HashMap的底层是哈希数组,数组元素为Entry。HashMap通过key的hashCod...

2018-05-24 13:03:01 109

转载 Java NIO:浅析I/O模型

也许很多朋友在学习NIO的时候都会感觉有点吃力,对里面的很多概念都感觉不是那么明朗。在进入Java NIO编程之前,我们今天先来讨论一些比较基础的知识:I/O模型。下面本文先从同步和异步的概念 说起,然后接着阐述了阻塞和非阻塞的区别,接着介绍了阻塞IO和非阻塞IO的区别,然后介绍了同步IO和异步IO的区别,接下来介绍了5种IO模型,最后介绍了两种和高性能IO设计相关的设计模式(Reactor和Pr...

2018-05-22 17:05:49 102

转载 [笔试题] 如何判断主机是大端还是小端(字节序)

所谓大端就是指高位值在内存中放低位地址,所谓小端是指低位值在内存中放低位地址。比如0x12345678在大端机上是12345678,在小端机上是78564312,而一个主机是大端还是小端要看cpu类型以及运行在上面的操作系统。同一款cpu在不同的操作系统使用的大小端情况是不同的。当然我们通常使用的x86+windows是小端。首先我们给出大小端的定义:小端:较高的有效字节存放在较高的的存储器地址,...

2018-05-21 16:47:55 2682 1

转载 大端小端格式详解

1. 什么是大端,什么是小端:所谓的大端模式,是指数据的低位保存在内存的高地址中,而数据的高位,保存在内存的低地址中;所谓的小端模式,是指数据的低位保存在内存的低地址中,而数据的高位保存在内存的高地址中。2.为什么会有大小端:为什么会有大小端模式之分呢?这是因为在计算机系统中,我们是以字节为单位的,每个地址单元都对应着一个字节,一个字节为8bit。但是在C语言中除了8bit的char之外,还有16...

2018-05-21 16:40:30 134

转载 HTTP请求返回状态码详解

当用户试图通过 HTTP 访问一台正在运行 Internet 信息服务 (IIS) 的服务器上的内容时,IIS 返回一个表示该请求的状态的数字代码。状态代码可以指明具体请求是否已成功,还可以揭示请求失败的确切原因。1xx - 信息提示这些状态代码表示临时的响应。客户端在收到常规响应之前,应准备接收一个或多个 1xx 响应。· 100 - Continue 初始的请求已经接受,客户应当继续发送请求的...

2018-05-21 14:41:32 777

转载 xargs命令详解,xargs与管道的区别

阅读目录为什么要用xargs,问题的来源xargs是什么,与管道有什么不同xargs的一些有用的选项回到顶部为什么要用xargs,问题的来源在工作中经常会接触到xargs命令,特别是在别人写的脚本里面也经常会遇到,但是却很容易与管道搞混淆,本篇会详细讲解到底什么是xargs命令,为什么要用xargs命令以及与管道的区别。为什么要用xargs呢,我们知道,linux命令可以从两个地方读取要处理的内容...

2018-05-20 14:37:20 184

转载 linux 查询目录下包含关键字的所有文件

查找目录下的所有文件中是否含有某个字符串 find .|xargs grep -ri "IBM" 查找目录下的所有文件中是否含有某个字符串,并且只打印出文件名 find .|xargs grep -ri "IBM" -l 1.正则表达式  (1)正则表达式一般用来描述文本模式的特殊用法,由普通字符(例如字符a-z)以及特殊字符(称为元字符,如/、*、?等)组成。 (2)基本元字符集及其含义 ^ :...

2018-05-19 15:13:29 15738

转载 深入理解JAVA I/O系列六:Linux中的IO模型

IO模型  linux系统IO分为内核准备数据和将数据从内核拷贝到用户空间两个阶段。 这张图大致描述了数据从外部磁盘向运行中程序的内存中移动的过程。用户空间、内核空间  现在操作系统都是采用虚拟存储器,那么对32位操作系统而言,它的寻址空间(虚拟储存空间)为4G(2的32次方)。操作系统的核心是内核,独立于普通的应用程序,可以访问受保护的内存空间,也有访问底层硬件设备的所有权限。为了保证用户进程不...

2018-05-19 13:57:41 139

转载 redis集群同步迁移方法(二):通过redis-migrate-tool实现

前篇介绍的redis replication方法,操作步骤多,而且容易出错。在git上看到一些开源工具也能实现同步迁移功能,而且步骤简单,比如redis-port,redis-migrate-tool等工具。实验演示使用redis-migrate-tool,将redis cluster 迁移到一个单实例redis中。1.redis-migrate-tool的安装见https://github.co...

2018-05-18 18:33:57 1498

转载 redis集群同步迁移方法(一):通过redis replication实现

讲到redis的迁移,一般会使用rdb或者aof在主库做自动重载到目标库方法。但该方法有个问题就是无法保证源节点数据和目标节点数据保持一致,一般线上环境也不允许源库停机,所以要在迁移过程后还要实现同步达到数据的一致性。公司线上环境使用的是redis自己的cluster,每个节点都拥有多个rdb和aof文件,使用原始方法无疑是难上加难。本文主要讨论两种方法来实现不停机源库前提下,实现源库(redis...

2018-05-18 18:25:32 1785

转载 基于Token的WEB后台认证机制

几种常用的认证机制HTTP Basic AuthHTTP Basic Auth简单点说明就是每次请求API时都提供用户的username和password,简言之,Basic Auth是配合RESTful API 使用的最简单的认证方式,只需提供用户名密码即可,但由于有把用户名密码暴露给第三方客户端的风险,在生产环境下被使用的越来越少。因此,在开发对外开放的RESTful API时,尽量避免采用H...

2018-05-18 00:06:20 398

转载 HTTP cookies 详解

HTTP cookies,通常又称作"cookies",已经存在了很长时间,但是仍旧没有被予以充分的理解。首要的问题是存在了诸多误区,认为cookies是后门程序或病毒,或压根不知道它是如何工作的。第二个问题是对于cookies缺少一个一致性的接口。尽管存在着这些问题,cookies仍旧在web开发中起着如此重要的作用,以至于如果cookie在没有可替代品出现的情况下消失,我们许多喜欢的Web应用...

2018-05-16 16:12:27 8742

转载 理解Cookie和Session机制

目录Cookie机制什么是CookieCookie的不可跨域名性Unicode编码:保存中文BASE64编码:保存二进制图片设置Cookie的所有属性Cookie的有效期Cookie的修改、删除Cookie的域名Cookie的路径Cookie的安全属性JavaScript操作Cookie案例:永久登录Session机制什么是Session实现用户登录Session的生命周期Session的有效期S...

2018-05-16 14:26:40 397

转载 在Java路上,看过的一些书、源码和框架

参考文章:https://www.jianshu.com/p/4a41ee88bd82面试经历关于Java面试,你应该准备这些知识点关于Java面试,你应该准备这些知识点(续)前段时间抽空整理了面试经历,收到不少的关注,很多同学私信我平时都是如何get到这些知识的,是否有一些相关的书单,Java的源码太多了,应该如何看,框架的代码应该如何阅读等等问题。现在想想,以前也这样迷茫过,整个方向不明确,做...

2018-05-15 13:18:14 271

转载 ThreadLocal原理详解

ThreadLocal是什么首先,它是一个数据结构,有点像HashMap,可以保存"key : value"键值对,但是一个ThreadLocal只能保存一个,并且各个线程的数据互不干扰。ThreadLocal<String> localName = new ThreadLocal();localName.set("hello");String name = localName.g...

2018-05-15 13:08:40 131

转载 java程序员必精--从源码讲解java线程池ThreadPoolExecuter的实现原理、各种坑、如何监控

类结构图示例自带线程池的各种坑基础参数源码分析java.util.concurrent.ThreadPoolExecutor构造方法重要的成员变量ctl线程池状态要牢记以下几点:与ctl相关的三个方法workerscompletedTaskCount线程池的运行添加任务execute方法往线程池添加线程addWorker方法成功添加worker工作线程需要线程池处于以下两种状态中的一种内部类Wor...

2018-05-14 19:23:09 160

转载 深入分析java线程池的实现原理

前言线程是稀缺资源,如果被无限制的创建,不仅会消耗系统资源,还会降低系统的稳定性,合理的使用线程池对线程进行统一分配、调优和监控,有以下好处:1、降低资源消耗;2、提高响应速度;3、提高线程的可管理性。Java1.5中引入的Executor框架把任务的提交和执行进行解耦,只需要定义好任务,然后提交给线程池,而不用关心该任务是如何执行、被哪个线程执行,以及什么时候执行。demo1、Executors...

2018-05-14 19:19:43 115

转载 jdk的动态代理及为什么需要接口

参考文章:https://blog.csdn.net/zxysshgood/article/details/78684229动态代理有关,无非是使用JDK动态代理,和cglib动态代理。一直不待明白的是为什么,jdk的动态代理需要接口才能实现,这也是其短板和令人诟病的地方。很多的博文说的很复杂,代码一大堆,没有太明白。手打了一下,参考了一些优秀的博文,在这里给自己做个总结。首先,动态代理是个挺有用...

2018-05-14 16:34:46 11925 4

空空如也

空空如也

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

TA关注的人

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