自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

04stone37

日积月累

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

原创 @Conditional

作用  根据特定条件来控制Bean的创建行为,比如说只有某个Bean被创建才会创建另外一个Bean。使用  @Conditional元数据为实现Condition接口类的集合,matches返回true则创建Bean。可以使用在类型和方法上,与其它创建Bean的注解配合使用。类型级别,可以在@Component 或是 @Configuration类上使用;方法级别,可以用在@B...

2018-06-30 17:51:31 277

原创 @Import

作用  @Import 被用来整合所有在@Configuration注解中定义的bean配置,类似于将多个XML配置文件导入到单个XML文件的情形。使用  与@Configuration配合使用,如下所示:@Configuration@Import({JavaConfigA.class,JavaConfigB.class})public class ParentConfig...

2018-06-30 17:32:49 246

原创 Java 注解 Annotation

作用  为 Java 代码提供元数据,类似于生活中的标签;注解的属性(元数据)  注解的属性也叫做成员变量,注解只有成员变量,没有方法。注解属性的定义方式为:以“无形参的方法”形式来声明,其方法名定义了该成员变量的名字,其返回值定义了该成员变量的类型,如下所示:@Target(ElementType.TYPE)@Retention(RetentionPolicy.RUNTIM...

2018-06-30 16:56:44 138

原创 @ComponentScan

作用  指定扫描路径(定义bean的class文件所在路径);工作原理  要创建Bean的class文件集合形成扫描路径,传入@ComponentScan,然后由ComponentScanAnnotationParser或者ClassPathBeanDefinitionScanner对扫描路径下的class文件扫描解析,如下图所示: ClassPathBeanDefinition...

2018-06-29 18:00:11 1277

原创 GetAndPut操作线程安全性

问题描述   在使用map时经常有这样的诉求:首先通过get判断元素是否存在,如果存在则返回;否则,通过put添加新的元素,整个逻辑要求是线程安全的。putIfAbsentHystrix 熔断器Factory的实现逻辑如下所示。   优点:性能比使用synchronized高;   缺点:并发高时,会有额外的HystrixCircuitBreakerImpl实例被创建;pu...

2018-06-27 11:29:16 443

原创 熔断器HystrixCircuitBreaker

熔断器  熔断器是Fail-Fast机制的实现,开关能保证服务调用者在调用异常服务时, 快速返回结果, 避免大量的同步等待. 并且熔断器能在一段时间后继续侦测请求执行结果, 提供恢复服务调用的可能。状态图      “关闭”状态。熔断器处于关闭状态时,请求被通过。如果失败率低于设定阈值,则熔断器保持关闭状态,否则状态切换为打开状态。“打开”状态。熔断器处于打开状态时,请求被禁止...

2018-06-27 10:58:39 555

原创 Hystrix工作流程

工作流程  工作流程主要分为三部分:调用请求封装成HystrixCommand、执行请求调用第三方服务和调用结果处理,如下图所示: 命令执行执行方式execute() — 同步调用,阻塞等待直至返回结果或者抛出异常;queue() — 返回Future;observe() — 返回Observable,立即执行,通过subscribe获取结果,相当于异步回调;toObse...

2018-06-26 20:51:01 1006

原创 InheritableThreadLocal

作用  当前线程创建子线程时,子线程能够继承父线程中的ThreadLocal变量;public class Test { static ThreadLocal<String> threadLocal = new InheritableThreadLocal<>();// static ThreadLocal<String> threadL...

2018-06-25 20:50:52 269

原创 maven-deploy-plugin

功能  将Jar包上传到远程Maven仓库。Goalsdeploy:deploy 自动打包并上传到远程Maven仓库;deploy:deploy-file 将指定Jar包上传到远程Maven仓库;配置文件pom.xml<distributionManagement> <repository> ...

2018-06-25 20:00:57 1840

原创 maven-jar-plugin

功能  将当前项目打包为Jar包Goalsjar:jar 将classes目录下的class文件及其它资源文件打包为Jar包;jar:test-jar 将test classes目录下的class文件及其它资源文件打包为Jar包;基本使用<project> ... <build> <plugins> ...

2018-06-25 19:38:43 1968

原创 Hystrix隔离策略

Hystrix隔离方案   Hystrix提供了两种隔离的解决方案:线程隔离和信号量隔离,默认为线程隔离。private static final ExecutionIsolationStrategy default_executionIsolationStrategy = ExecutionIsolationStrategy.THREAD; public static enum E...

2018-06-25 15:56:58 1940 1

原创 分布式配置中心Diamond

架构设计  Diamond架构由三部分组成:ConfigServer、DataServer和MySql存储,如下图所示: ConfigServer:管理DataServer集群,将客户端与DataServer集群解耦,上下线、扩容对客户端不感知;DataServer:提供配置的持久化管理、动态推送等服务; MySql存储:配置数据的持久化存储,采用一主两备的部署方式保障数据的安全;...

2018-06-24 11:37:20 6029

原创 StringBuilder解析

实现原理1. 创建实例  StringBuilder实例被创建时,有一定容量的char[]被创建。 public StringBuilder() { super(16); }AbstractStringBuilder(int capacity) { value = new char[capacity]; }2. appen...

2018-06-23 15:50:12 396

原创 ZooKeeper双机房部署方案讨论

背景  对于ZK集群,理论上至少三个机房才能真正做到跨机房容灾。但在实际环境中,由于成本的原因,大多中小公司采用双机房部署的方案,存在两种形式。方案一:非对等部署  非对等部署:投入更多的资源重点维护某个机房,如下图所示。优点集群总量可为奇数,容错性更好;有一定的跨机房容灾能力,机房B挂掉认可正常运行;缺点存在数据丢失的可能(机房A被毁,且Master在机房...

2018-06-23 14:25:50 7827

原创 阿里为什么不用 ZooKeeper 做服务发现?

转载:https://kuaibao.qq.com/s/20180606B0DUOJ00?refer=spider原因  在服务发现领域,ZooKeeper并不是最佳的选择。原因可以从客户端和服务端两个方向进行分析。   客户端ZK服务端集群的地址列表是写死在客户端的,不支持动态变更;不支持同机房优先策略;没有针对服务端集群完全不可用时的容灾手段;服务端写能...

2018-06-23 13:26:21 2063

原创 获取FatJar资源URL

背景知识:Archive  Archive表示归档文件,通常为tar/zip等格式压缩包,Jar包为zip格式归档文件。SpringBoot抽象了Archive的概念,分为JarFileArchive(Jar包)和ExplodedArchive(文件目录)。 获取嵌套资源过程获取当前Jar包代表的Archive;根据过滤条件筛选出当前Jar包嵌套的资源;获取当前Jar包代表...

2018-06-22 14:04:44 521

原创 代理启动Launcher

整体过程Spring Boot打包插件将启动类设为org.springframework.boot.loader.JarLauncher;JarLauncher内部通过反射调用应用程序入口类,启动应用;Launcher类体系 JarLauncher 、WarLauncher 、PropertiesLauncher代表了Spring Boot的三种代理启动方式。Step1: ...

2018-06-22 10:45:55 1258

原创 FatJar技术

概念  将一个jar及其依赖的三方jar全部打到一个包中,这个包即为FatJar。作用  作用: Jar包隔离,避免Jar冲突。打包方式maven-shade-plugin插件;spring-boot-maven-plugin插件(Spring Boot打包插件);嵌套Jar资源加载方案  思路:扩展Jar URL协议+定制ClassLoader;扩展Ja...

2018-06-21 19:19:42 6335

原创 打包可执行Jar

打包插件 <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-p...

2018-06-21 17:07:29 155

原创 Jar URL协议解析

Jar URL格式jar:<url>!/{entry} 如:jar:http://www.example.com/ex.jar!/com/demo/Class.classJar URL作用  作用: Jar包中资源文件的路径表示Jar URL分类Jar file(Jar包本身):jar:http://www.foo.com/bar/baz.jar!/Jar ...

2018-06-21 16:00:40 4081

原创 Jar包资源文件的加载

加载方式  如下图所示,通过通过类加载器 ClassLoader的getResource或者getResourceAsStream方法获取资源文件。 存在问题  问题:无法加载嵌套Jar包中的资源。举例,A.jar中包含一个资源文件B.jar,同时B.jar中资源文件C.jpg,如果想加载C.jpg则不支持。解决方案  扩展URL的Jar协议及定制ClassLoader,具体...

2018-06-21 15:39:54 386

原创 URL协议处理器Handler

URL组成  URL格式: protocol://[authority]hostname:port/resource?queryString   说明:每种协议对应一种特定handler进行解析处理,JDK内置了HTTP 、 File 、 FTP和Jar等协议的。Handler   作用:每个Handler解析一种特定的协议,获取资源;   命名规范: Handler类的命名模式为...

2018-06-21 14:04:47 2447 3

原创 jar打包命令使用

语法用法: jar {ctxui}[vfmn0PMe] [jar-file] [manifest-file] [entry-point] [-C dir] files … 选项:-c 创建新档案;-t 列出档案目录;-x 从档案中提取指定的 (或所有) 文件;-u 更新现有档案;-v 在标准输出中生成详细输出;-f 指定档案文件名;-m 包含指定清单文件中的清...

2018-06-21 10:54:01 1146

原创 Class.getResource和ClassLoader.getResource的区别分析

Class.getResource实现原理  使用加载当前类的类加载器加载指定资源;使用说明path不以’/’开头时,以类所在的包路径为基准路径获取资源;path以’/’开头时,以ClassPath为基准路径获取资源; 代码实现 public java.net.URL getResource(String name) { name = r...

2018-06-19 10:01:08 326

转载 如何在eclipse中debug调试进入JDK源码及显示调试过程中的局部变量的值

转载:https://blog.csdn.net/ftp_2014/article/details/51087603对于想了解JDK源码的朋友来说,通过调试JDK源码来学习是一个常用的方法。但是默认的情况下,eclipse是不支持进入jdk源码中进行调试和显示当前变量的。 本文主要解决两个问题: (1)如何进入jdk源码中进行调试 (2)如何在进入jdk源码中进行调试的时候显示当前...

2018-06-15 14:55:22 450

原创 HTTP2伪头部字段

伪头部字段  伪头部字段是http2内置的几个特殊的以”:”开始的key,用于替代HTTP/1.x中请求行/响应行中的信息,比如请求方法,响应状态码等,内置的伪头部字段列表如下: /** * {@code :method}. */ METHOD(":method"), /** * {@code :scheme}. ...

2018-06-11 12:32:04 3549

原创 HTTP2 Stream标识符

Stream标识符作用:唯一标识连接内的某个流,用31位无符号整型标识,范围2~2^31-1; 注意:0x0用来表示连接控制信息流,不能用来标识流;0x1用于标识升级到HTTP/2的客户端流,不能用来标识流;新建流第一次被使用时,低于此标识符的并且处于空闲”idle”状态的流都会被关闭;创建规则:已使用的流标识符不能被再次使用;新建流的标识符要大于已有流和预留的流的标...

2018-06-10 12:39:39 2574

转载 HTTP2流和多路复用

转载:http://www.blogjava.net/yongboy/archive/2015/03/19/423611.html流流(stream),一个完整的请求-响应数据交互过程,具有如下几个特点:双向性:同一个流内,可同时发送和接受数据;有序性:帧(frames)在流上的发送顺序很重要. 接收方将按照他们的接收顺序处理这些frame. 特别是HEADERS和DATA fra...

2018-06-10 10:56:05 6268 1

原创 HTTP2帧

简介  帧是数据交换的基本单元,必须归属于某个流才能被发送;帧格式  帧通用格式:Header(固定9字节)+ Payload(根据帧类型变化),如下所示:+-----------------------------------------------+| Length (24) |+-----------...

2018-06-09 18:03:51 1145

原创 HTTP2二进制协议

介绍  与Http1.x(文本协议)不同,Http2是一个二进制协议,体现在10种不同类型的二进制帧上。为什么使用二进制协议?性能。二进制协议的解析效率超高,几乎没有解析代价;带宽。二进制协议没有冗余字段,占用带宽少;压缩及Https技术弱化了文本协议的价值;二进制格式二进制协议 VS 文本协议二进制协议 二进制协议一般消息头固定和消息体变长 ,每个字段固定...

2018-06-08 18:58:25 5792 1

原创 HTTP2多路复用

HTTP2.0多路复用 VS HTTP1.1长连接复用HTTP1.1的Pipeling方式本质是将请求串行化处理,后面的请求必须等待前面请求的返回才能被执行,一旦有某请求超时等,后续请求只能被阻塞,即线头阻塞;HTTP/2多个请求可同时在一个连接上并行执行。某个请求任务耗时严重,不会影响到其它连接的正常执行; 参考:https://www.cnblogs.com/etoah/...

2018-06-08 15:27:12 2110

原创 maven-shade-plugin介绍及使用

基本功能maven-shade-plugin提供了两大基本功能:将依赖的jar包打包到当前jar包(常规打包是不会将所依赖jar包打进来的);对依赖的jar包进行重命名(用于类的隔离);Goals maven-shade-plugin 只存在一个goal shade:shade,需要将其绑定到 phase package 上,使用框架如下:<project&gt...

2018-06-08 10:29:47 81166 8

原创 HTTP2介绍

简介HTTP2的核心是性能优化,主要是延时和带宽两方面。与HTTP1.X相比的优势在于:低延时。多路复用(一个域名一个连接)避免了连接频繁创建和慢启动过程;Server Push实现了资源“预读”,提前将资源推送到客户端。带宽占用少。头部压缩技术减少了头部字段对带宽的资源占用; The focus of the protocol is on performance; spec...

2018-06-07 14:17:03 629

原创 HTTP2头部压缩

存在问题  HTTP1.x的header很多时候都是重复多余的,导致带宽的浪费。解决方案  HTTP2.0使用HPACK算法对头部进行压缩,既避免了重复header的传输,又减小了需要传输数据的大小。适用场景  带宽资源有限或者收费的场景,如移动端设备。HPACK基本原理  客户端和服务端分别缓存一份索引表,如果头部存在于索引表,则用对应的索引值;否则进行霍夫曼编码,并...

2018-06-07 11:15:04 2387

原创 HTTP2的协议协商机制

背景知识URI模式  HTTP/2 使用和 HTTP/1.1 一样的 “http” 和 “https” 的 URL 模式。同时 HTTP/2 和 HTTP/1.1 也共享了相同的默认端口号:”http” 的 80 端口,”https” 的 443 端口。版本标识符字符串 “h2c” 标示运行在明文 TCP 之上的 HTTP/2 协议(http模式);字符串 “h2” 标示使用了...

2018-06-06 19:48:00 954

原创 断点续传原理

断点续传原理服务端将文件分割成若干个小文件;客户端并行下载,并记录下载进度;如果出现下载中断,重新提交下载请求,从下一下载位置开始继续下载;  可能出现问题及解决方案问题:断点续传过程中,文件发生变化; 方案:如果文件发生变化(MD5、时间戳等),直接报错或者全部重新下载;HTTP实现原理  使用Range(请求头)、Content-Range(响应头)表示下...

2018-06-06 16:39:03 1754

原创 OpenSSL

是什么?OpenSSL是一套开源的加密套件函数库,主要功能有:实现了常见的加密算法;实现了TLS及ALPN等协议;版本查看openssl version对ALPN支持  OpenSSL 对 ALPN 的支持是在 2015年1月 发布的 1.0.2 版本中加入的,因此想要启用 ALPN 则必需升级版本到 1.0.2 以上。目前主流的操作系统的 OpenSSL 版本情...

2018-06-06 14:58:41 1049

原创 ALPN协议

协议介绍  ALPN (Application Layer Protocol Negotiation)是TLS的扩展,允许在安全连接的基础上进行应用层协议的协商。ALPN支持任意应用层协议的协商,目前应用最多是HTTP2的协商。在2016年,ALPN已经完全替代NPN了。   ALPN allows the application layer to negotiate which pr...

2018-06-06 11:41:14 9041

空空如也

空空如也

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

TA关注的人

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