读书笔记 -- 159




概述在我们的开发中,api 接口调用异常是经常会遇到的,任何接口都会有不同概率的异常情况,对于可以重入的接口,为了避免偶发性异常造成的服务的不可用,重试机制就非常有必要了通常我们的接口超时都是符合正态分布的,即 99.9% 的请求超时时间都不会大于某个值,将这个值设置为请求的超时时间是比较合理的,因为即使将超时时间设置为该值的两倍或更高,按照正态分布的概率来看,请求成功率并不会有明显提高,而使用该值作为超时时间可以保证在 99.9% 的情况下请求正常返回,对于异常情况我们添加重试机制就可以大概率减少失败但是需要注意的是,我们的调用链通常是非常长的,如果在多个层级上都添加重试,那么最终将会造成雪崩效应,最底层将受到指数扩大的请求次数,这对于底层服务的压力是非常大的,因此重试的设置需要非常谨慎,这在底层服务出现问题时尤为明显,过度的重试将会成倍加剧问题的严重性,因此,在重试机制的同时增加递增的重试间隔时间或者熔断机制也是非常有必要的,有时间的话博主将会在博客中介绍用于业务熔断组件 Hystrix,敬请期待 guava 提供了非常优雅、方便的重试工具类 -- retryer maven 依赖<dependency> <groupId>com.g
#读书笔记    #技术帖    #龙潭书斋    #技术分享   
概述上一篇日志中,我们介绍了 Retryer 类guava 重试工具库 -- Retryer由于 Retryer 类构造方法参数较多,较为复杂,而使用 RetryerBuilder 要更加简洁明了,也是更加常用的方式 RetryerBuilder 的创建 -- newBuilderRetryerBuilder 的构造方法是 private 的,这也意味着我们不能通过 new 的方式直接创建 RetryerBuilder 对象RetryerBuilder 提供了一个 static 方法:public static <V> RetryerBuilder<V> newBuilder()  通过:RetryerBuilder retryer = RetryerBuilder.newBuilder(); 就可以创建一个 RetryerBuilder 了 Retryer 对象的创建通过 RetryerBuilder 提供的 build 方法就可以创建出一个 
#读书笔记    #技术帖    #龙潭书斋    #技术分享   
概述上一篇日志中,我们介绍了 guava 的区间结构 -- Range区间结构 -- Range 本文中我们来介绍 Range 的集合 -- RangeSet顾名思义,RangeSet 是若干个 Range 组成的 Set 结构,guava 提供的 RangeSet 是一个接口,他有以下实现:TreeRangeSet -- 通过红黑树实现的排序 RangeSetImmutableRangeSet -- 不可变的 RangeSet 由于 RangeSet 是利用 jdk1.6 提供的 NavigableMap 特性实现的,因此只有在 jdk1.6 及以上版本才能使用此功能 RangeSet 的创建TreeRangeSet、ImmutableRangeSet 都提供了 create 方法,用来创建 RangeSet RangeSet<Long> rangeSet = TreeRangeSet
#读书笔记    #技术帖    #龙潭书斋    #range   

200x200


概述有时需要对一个系统中的各个节点提供各种操作,但是对于不同的节点却需要不同的操作考虑一个编译器,我们需要对代码对象进行类型检查、代码优化、流程分析等等操作,对于变量对象、赋值语句对象等等我们都需要进

#读书笔记    #技术帖    #龙潭书斋    #设计模式   

200x200


概述有时我们知道一个算法的所有步骤,但是具体实现却可以有很多种版本,例如一份外卖,用户执行下单、支付、配送、确认收货这几个步骤,但是以配送为例,不同的货品、不同的收货地址需要以不同的配送方式进行配送,

#读书笔记    #技术帖    #龙潭书斋    #模板   

200x200


概述有时,我们需要动态的决定需要在程序中使用一组算法中的某一个,例如众所周知的,在不同的平台,有不同的换行指令,\n、\r 或 \r\n,虽然换行符看上去很简单,但是如果将他们硬编

#读书笔记    #技术帖    #龙潭书斋    #面向对象   

200x200


概述很多情况下,对象的行为依赖于对象的状态,例如对于电商的订单处理系统,订单是否可以支付依赖于订单是否处于待支付状态,对于不同的状态需要进行不同的处理方式State 模式就描述了对象如何在每

#读书笔记    #技术帖    #龙潭书斋    #状态   

200x200


概述有时,多个对象需要依赖某个对象状态的变化,这就是典型的“发布-订阅”模式这样的系统由一系列相互协作的类构成,如何处理一对多的耦合呢?观察者模式就是为了处理这样的场景而存在的一个目标对象可能有任意数

#读书笔记    #技术帖    #龙潭书斋    #java   

200x200


概述很多情况下,对象的操作都支持取消机制,就是将内部状态回退到操作前的版本,这样,你必须在操作执行前将对象的内部状态保存在外部但是对象通常封装了他的状态信息,使得状态不能被其他对象访问,对外暴露内部状

#读书笔记    #技术帖    #龙潭书斋    #面向对象   

200x200


创建型模式抽象工厂模式 -- AbstractFactory  生成器模式 -- Builder  工厂方法 

#读书笔记    #技术帖    #龙潭书斋    #面向对象   



京ICP备15018585号