11 2017 档案
分布式锁 并发 自旋 优化 二
摘要:说明: 1.每个请求在获取锁时,会进队列,并在本节点上本地变量自旋 2.在获取redis锁时先自旋,实际是能保证一个请求只会进行一次setnx,当然在多节点下,存在不是一次的情况,即在本节点获取到线程锁了,但是没获取到redis锁,这时候会进行redis锁的自旋,一个节点只会存在一个请求的redis 阅读全文
posted @ 2017-11-23 17:02 zjj911 阅读(1063) 评论(0) 推荐(0)
分布式锁 并发 自旋 优化
摘要:记录本人在实际业务中遇到的问题和解决方案。 业务场景:影院营销活动 肯定是需要一套统一的解决方案1.线上做活动,活动有资源限制,比如总金额1W元,1单补贴一定数量金额,无资源后停止活动2.活动的并发量有高有低,最高甚至存在秒抢活动,最低可能1小时就1单3.活动存在资源恢复,即取消订单等,取消后要恢复 阅读全文
posted @ 2017-11-21 18:40 zjj911 阅读(1033) 评论(0) 推荐(0)
TreeMap 原理
摘要:基于jdk1.8 TreeMap第一个想到的就是有序,当然也不是线程安全 TreeMap实现NavigableMap接口,说明支持一系列的导航方法 一、构造方法 二、put方法 通过put方法,我们就能看出基本数据结构和内存结构了,包括排序等等,这是一个信息量最大的方法 三、get方法 四、其它 T 阅读全文
posted @ 2017-11-15 12:21 zjj911 阅读(1393) 评论(0) 推荐(1)
java8 LinkedHashMap 原理
摘要:LinkedHashMap 原理 基于jdk1.8 HashMap原理:http://www.cnblogs.com/zhaojj/p/7805376.html LinkedHashMap 继承HashMap 没有重写put resize等方法 因此基本数据结构是相同的数组、链表、红黑树 说说不同: 阅读全文
posted @ 2017-11-14 15:14 zjj911 阅读(3595) 评论(0) 推荐(0)
java8 HashTable 原理
摘要:HashTable原理 Hashtable是基于陈旧的Dictionary类的,HashMap是Java 1.2引进的Map接口的一个实现。Hashtable中的方法是同步的,而HashMap方法(在缺省情况下)是非同步的。 HashMap原理:http://www.cnblogs.com/zhao 阅读全文
posted @ 2017-11-10 12:20 zjj911 阅读(3217) 评论(0) 推荐(0)
java8 HashMap源码 详细研读
摘要:HashMap原理 目的: 单纯分析和学习hashmap的实现,不多说与Hashtable、ConcurrentHashMap等的区别。 基于 jdk1.8 在面试中有些水平的公司比较喜欢问HashMap原理,其中涉及的点比较多,而且大多能形成连环炮形式的问题。 一般连环炮,一环不知道后面试官也就不 阅读全文
posted @ 2017-11-09 17:41 zjj911 阅读(10996) 评论(3) 推荐(4)
设计模式解释器
摘要:解释器模式设计原则:遵循单一职责常用场景:有一种语言被频繁的使用使用概率:0.00009%复杂度:中高变化点:语言的规则选择关键点:被频繁使用的语言是否可用文法表示逆鳞:语言的规则无限制增长或规则十分不稳定主要思想:一般主要应用在OOP开发中的编译器的开发比如正则的匹配,spring典型的调度任务中的expression表达式的解析 public interface Expression { ... 阅读全文
posted @ 2017-11-07 19:06 zjj911 阅读(238) 评论(0) 推荐(0)
设计模式中介者
摘要:中介者模式设计原则:遵循迪米特,破坏单一职责常用场景:一个系列的对象交互关系十分复杂使用概率:10%复杂度:中变化点:对象之间的交互选择关键点:复杂的交互关系是否有共性可被中介者承担逆鳞:中介者无法工作主要思想:租房子找中介,这样就和房东没什么直接关系了,我有事也不用麻烦房东,房东有事也不找我即两个对象需要有关系,但是类中不定义和依赖,而是把这种关系找一个中介类去维护比如我是 租房的类 我要找房... 阅读全文
posted @ 2017-11-07 18:58 zjj911 阅读(196) 评论(0) 推荐(0)
设计模式访问者
摘要:访问者模式设计原则:遵循倾斜的开闭原则常用场景:作用于一个数据结构之上的操作经常变化使用概率:5%复杂度:高变化点:数据结构之上的操作选择关键点:数据结构是否稳定以及操作是否经常变化逆鳞:数据结构的不稳定常用场景:假如一个对象中存在着一些与本对象不相干(或者关系较弱)的操作,为了避免这些操作污染这个对象,则可以使用访问者模式来把这些操作封装到访问者中去。假如一组对象中,存在着相似的操作,为了避免出... 阅读全文
posted @ 2017-11-07 18:40 zjj911 阅读(147) 评论(0) 推荐(0)
设计模式状态
摘要:状态模式设计原则:遵循单一职责、依赖倒置、开闭原则常用场景:一个对象在多个状态下行为不同,且这些状态可互相转换使用概率:20%复杂度:中变化点:状态的种类选择关键点:这些状态是否经常在运行时需要在不同的动态之间相互转换逆鳞:无相关设计模式策略模式:二者的实现方式非常相似,策略接口与状态接口,具体的策略与具体的状态以及二者都拥有的上下文,如果看它们的类图,会发现几乎一模一样,而二者不同的地方就在于,... 阅读全文
posted @ 2017-11-07 16:31 zjj911 阅读(141) 评论(0) 推荐(0)
设计模式备忘录
摘要:备忘录模式设计原则:遵循迪米特、开闭原则常用场景:需要在对象的外部保存该对象的内部状态使用概率:5%复杂度:中变化点:无选择关键点:是否可以在必要的时候捕捉到对象的内部状态逆鳞:大对象的备份主要思想:简单理解就是把对象的变化保存起来进行备份,可以恢复简单实现在每次对象属性变化前把属性存起来,或者暴力的直接深克隆对象,然后把对象存起来. public class Person { priv... 阅读全文
posted @ 2017-11-07 16:24 zjj911 阅读(127) 评论(0) 推荐(0)
设计模式命令
摘要:命令模式设计原则:遵循迪米特、开闭原则常用场景:行为的请求者与行为的处理者耦合度过高使用概率:20%复杂度:中高变化点:命令的种类选择关键点:请求者是否不需要关心命令的执行只知道接受者逆鳞:命令的种类无限制增长相关设计模式职责链模式:容易将二者关联在一起的原因是,二者都是为了处理请求或者命令而存在的,而且二者都是为了将请求者与响应者解耦,不同的是命令模式中,客户端需要知道一个命令的接受者,在创建命... 阅读全文
posted @ 2017-11-07 12:11 zjj911 阅读(141) 评论(0) 推荐(0)
设计模式责任链
摘要:责任链模式设计原则:遵循迪米特常用场景:一个请求的处理需要多个对象当中的一个或几个协作处理使用概率:15%复杂度:中变化点:处理链的长度与次序选择关键点:对于每一次请求是否每个处理的对象都需要一次处理机会逆鳞:无主要思想:有点类似黑盒测试,只知道现在有一个方法需要调用,但是调用到哪,谁最终完成了这个方法以及怎么完成的不知道所谓责任链指这里的拥有这个处理方法的类有很多,但是处理需要一定的条件,比如最... 阅读全文
posted @ 2017-11-07 11:51 zjj911 阅读(172) 评论(0) 推荐(0)
设计模式迭代
摘要:迭代器模式设计原则:遵循迪米特常用场景:需要迭代访问一个聚合对象中的各个元素,且不暴露该聚合对象内部的表示使用概率:99.99999%复杂度:中变化点:聚合对象的种类选择关键点:客户端是否关心遍历的次序逆鳞:无相关设计模式访问者模式:二者都是迭代的访问一个聚合对象中的各个元素,不同的是,访问者模式中,扩展开放的部分在作用于对象的操作上,而迭代器模式中,扩展开放的部分在聚合对象的种类上,而且二者的实... 阅读全文
posted @ 2017-11-03 17:16 zjj911 阅读(346) 评论(0) 推荐(0)
设计模式观察者
摘要:观测者模式设计原则:遵循迪米特、开闭原则常用场景:需要将观察者与被观察者解耦或者是观察者的种类不确定使用概率:40%复杂度:中变化点:观察者的种类与个数选择关键点:观察者与被观察者是否是多对一的关系逆鳞:观察者之间有过多的细节依赖主要思想:其实比较简单,是发布-订阅形式的,就是类之间的关系,观察者与被观察者被观察者的属性变化了,那观察者就要随着改变,不过不是观察者一直监视着,而是被观察者主动通知现... 阅读全文
posted @ 2017-11-03 17:06 zjj911 阅读(165) 评论(0) 推荐(0)
设计模式模板方法
摘要:模板方法模式设计原则:破坏里氏替换,体现功能复用常用场景:一批子类的功能有可提取的公共算法骨架使用概率:80%复杂度:中低变化点:算法骨架内各个步骤的具体实现选择关键点:算法骨架是否牢固逆鳞:无主要思想定义一个抽象类,在抽象类中定义一个主方法,比如是某个算法,或者要做的某件事,再定义一些抽象方法,这些抽象方法会在主方法中调用,这样主方法实际就相当于模板,其规定好了要做的这件事的所有步骤,而其中部分... 阅读全文
posted @ 2017-11-03 16:45 zjj911 阅读(167) 评论(0) 推荐(0)
设计模式策略
摘要:策略模式设计原则:遵循单一职责、依赖倒置、迪米特、开闭原则常用场景:算法或者策略需要经常替换使用概率:60%复杂度:中变化点:策略的种类选择关键点:客户端是否依赖于某一个或若干个具体的策略逆鳞:无主要思想:实际就是简单的接口实现对外提供一套约定好的方法即接口,然后进行不同的实现一般使用在相差不大的一套算法中比如加减乘除 对外提供一个calculate方法,想用相应的计算则初始化相应算法实现类 ... 阅读全文
posted @ 2017-11-03 16:32 zjj911 阅读(132) 评论(0) 推荐(0)
设计模式享元
摘要:享元模式设计原则:无常用场景:一些状态相同的对象被大量的重复使用使用概率:90%复杂度:中变化点:无选择关键点:被共享的对象是否可以将外部状态提取出来逆鳞:没有将外部状态提取完全主要思想:其实就是共享模式开局创建n多同一个类实例,用一定的方法管理这些实例,当我们要用时,通过管理类去获取实例不用平凡的初始化销毁实例等场景 数据连接池,线程池等等 public class MyThreadPool ... 阅读全文
posted @ 2017-11-02 16:54 zjj911 阅读(150) 评论(0) 推荐(0)
设计模式组合
摘要:组合模式设计原则:遵循依赖倒置、开闭原则,破坏接口隔离常用场景:当有一个结构可以组合成树形结构,且需要向客户端提供一致的操作接口,使得客户端操作忽略简单元素与复杂元素使用概率:30%复杂度:中变化点:节点的数量选择关键点:对外提供一致操作接口的结构是否可转化为树形结构逆鳞:结构不稳定或结构中的节点有递归关系主要思想:体现部分与整体的层次结构一般都持有多个本类型的其它对象实例 常见的就是树形结构 ... 阅读全文
posted @ 2017-11-02 16:41 zjj911 阅读(147) 评论(0) 推荐(0)
设计模式桥接
摘要:桥接模式设计原则:遵循单一职责、迪米特、开闭原则,体现功能复用常用场景:一个对象有多个维度的变化,需要将这些维度抽离出来,让其独立变化使用概率:20%复杂度:中高变化点:维度的扩展与增加选择关键点:是否可以将对象拆分成多个不相关的维度逆鳞:无主要思想:桥接类 实际也相当于一个组合类,该类持有不同接口或抽象类的对象,使用时赋予不同的子类说是桥就是一个连接比如 接口1 实现类11 实现类12 ... 阅读全文
posted @ 2017-11-02 16:23 zjj911 阅读(187) 评论(1) 推荐(1)
设计模式外观
摘要:外观模式设计原则:遵循迪米特常用场景:一个子系统需要对外提供服务使用概率:60%复杂度:中变化点:无选择关键点:子系统对外提供服务是否需要依赖很多的类逆鳞:子系统对外提供的服务的变化或子系统本身的不稳定相关设计模式中介者模式:二者都是为了处理复杂的耦合关系,不同的是外观模式处理的是类之间复杂的依赖关系,中介者模式处理的是对象之间复杂的交互关系主要思想把多个类的调用简化集中到一个类中,完成一个完整的... 阅读全文
posted @ 2017-11-02 16:09 zjj911 阅读(144) 评论(0) 推荐(0)
设计模式代理
摘要:代理模式设计原则:体现功能复用常用场景:需要修改或屏蔽某一个或若干个类的部分功能,复用另外一部分功能,可使用静态代理,若是需要拦截一批类中的某些方法,在方法的前后插入一些一致的操作,假设这些类有一致的接口,可使用JDK的动态代理,否则可使用cglib使用概率:99.99999%复杂度:中高变化点:静态代理没有变化点,动态代理的变化点为具有相同切入点的类选择关键点:静态代理选择的关键点是是否要复用被... 阅读全文
posted @ 2017-11-02 15:55 zjj911 阅读(155) 评论(0) 推荐(0)
设计模式装饰
摘要:装饰模式设计原则:遵循迪米特、单一职责、开闭原则,破坏里氏替换,体现功能复用常用场景:一个类需要动态的添加功能,且这些功能可以相互叠加使用概率:99.99999%复杂度:中变化点:动态添加的功能或者说装饰器选择关键点:添加的功能是否需要动态组装逆鳞:无主要思想:创建装饰类继承或实现 需要被装饰类相同的父类或接口持有被装饰类实例调用被装饰类方法在前后可增加功能和代理模式的区别在于,理论上装饰模式不控... 阅读全文
posted @ 2017-11-02 15:52 zjj911 阅读(140) 评论(0) 推荐(0)
设计模式适配器
摘要:适配器模式设计原则:遵循开闭原则、体现功能复用常用场景:需要使用一个类的功能,但是该类的接口不符合使用场合要求的接口,可使用定制适配器,又或者是有一个接口定义的行为过多,则可以定义一个缺省适配器,让子类选择性的覆盖适配器的方法使用概率:40%复杂度:中变化点:无选择关键点:定制适配器的选择关键点在于是否有更加优良的替代方案,缺省适配器的选择关键点在于接口中的方法是否可以不全部提供,且都有缺省方案逆... 阅读全文
posted @ 2017-11-02 12:12 zjj911 阅读(163) 评论(0) 推荐(0)
设计模式原型模式
摘要:结果 深复制2: 阅读全文
posted @ 2017-11-01 17:41 zjj911 阅读(143) 评论(0) 推荐(0)
设计模式建造者
摘要:建造者抽象化 形成抽象建造者和实际建造者 建造者干事简化 阅读全文
posted @ 2017-11-01 16:37 zjj911 阅读(120) 评论(0) 推荐(0)
设计模式抽象工厂
摘要:抽象工厂模式设计原则:遵循单一职责、依赖倒置、开闭原则常用场景:需要一个接口可以提供一个产品族,且不必知道产品的具体种类使用概率:30%复杂度:中变化点:工厂与产品的种类选择关键点:产品族是否需要一起提供,且是否有一致的接口逆鳞:无相关设计模式建造者模式:两者都是建造一批对象或者说产品,不同的是两者的目的和实现手段,在建造者模式中,是为了复用对象的构建过程而定义了一个指挥者,而在抽象工厂模式中,是... 阅读全文
posted @ 2017-11-01 15:28 zjj911 阅读(175) 评论(0) 推荐(0)