- 博客(35)
- 收藏
- 关注
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 线程安全的高效LRU
线程安全的高效LRU前言这两天面试的时候遇见了一个问题,就是LRU如何保证线程安全的情况下又能高效的使用,允许牺牲一些数据的精确性。面试中过于紧张,脑子比较乱,没有想到一个比较好的解决方案。特写此文,不仅是给出一个解决方案,更是对自己的一种警示,要时刻保持冷静的头脑。线程安全LRU是通过HashMap和链表合二为一构成的,在Java中可以重写LinkHashMap的方法来实现LRU...
2018-04-14 01:57:42
3536
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 并发容器之ConcurrentHashMap
并发容器之ConcurrentHashMap并发容器之ConcurrentHashMap前言Before JDK 1.8数据结构确定Segment位置Segment内确定具体桶的位置同步方式扩容机制求sizeAfter JDK 1.8数据结构重要属性同步方式扩容机制求size与HashMap 的不同前言鉴于HashMap在多线程...
2018-04-07 23:23:51
551
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 Java内存模型与线程
Java内存模型与线程硬件的效率与一致性Java内存模型1 主内存与工作内存2 内存间交互操作3 对于volatile型变量的特殊规则4 对于long和double行变量的特殊规则5 原子性可见性与有序性6 先行发生原则Java与线程1 线程的实现2 Java线程调度2 状态转换Java内存模型与线程1. 硬件的效率与一致性大...
2018-02-12 21:25:27
125
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 虚拟机类加载机制
虚拟机类加载机制类加载的时机类加载的过程1 加载2 验证3 准备4 解析5 初始化类加载器1 类与类加载器2 双亲委派模型虚拟机类加载机制 与那些在编译时需要连接工作的语言不用,Java中类型的加载和初始化过程都是在程序运行期间完成1. 类加载的时机从类被加载到虚拟机内存中开始,到卸载出内存为止,类的生命周期包括加载(Loa...
2018-02-12 15:45:06
110
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 垃圾收集器与内存分配策略
垃圾收集器与内存分配策略1 概述2 对象已死吗21 引用计数算法22 可达性算法23 再谈引用24 生存or死亡25 回收方法区3 垃圾收集算法31 标记-清除算法32 复制算法33 标记-整理算法34 分代收集算法4 HotSpot算法41 枚举根节点42 安全点42 安全区域5 垃圾收集器51 Serial收集器52 ParNew收集器5...
2018-02-12 00:40:12
115
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 垃圾收集器与内存分配策略
垃圾收集器与内存分配策略1 概述2 对象已死吗21 引用计数算法22 可达性算法23 再谈引用24 生存or死亡25 回收方法区3 垃圾收集算法31 标记-清除算法32 复制算法33 标记-整理算法34 分代收集算法4 HotSpot算法41 枚举根节点42 安全点42 安全区域5 垃圾收集器51 Serial收集器52 ParNew收集器5...
2018-02-11 01:15:38
1305
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 Java内存区域与内存溢出异常
Java内存区域与内存溢出异常1 运行时数据区域11 程序计数器12 Java虚拟机栈13 本地方法栈13 Java堆14 方法区非堆15 运行时常量池16 直接内存2 HotSpot虚拟机对象探秘21 对象的创建22 对象的内存布局23 对象的访问定位3 OutOfMemoryError异常31 Java堆异常32 虚拟机栈和本地方法栈溢出33 方法区...
2018-02-11 00:16:05
106
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 深入理解HashMap
1. 基本特性2. 存储特点及重要属性3. 确定哈希桶数组索引位置4. 分析HashMap的put方法5. 扩容机制6. 线程安全性1. 基本特性 关注点 结论 HashMap是否为空 key和value都可为空 HashMap是否有重复数据 key重复会覆盖,value允许重复 HashMap是否有序 无序:...
2018-01-29 22:00:45
337
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 Spring源码之AOP
Spring源码之AOP概述设计原理ProxyFactoryBean生成AopProxy代理对象Spring AOP拦截器调用的实现1 JdkDynamicAopProxy的invoke拦截2 CglibAopProxy的intercept拦截3 目标方法的调用4 AOP拦截器链的调用5 配置通知器6 Advice通知的实现Spring源码之AOPAOP是Aspect-Orie
2017-08-20 21:41:11
619
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 Spring源码之IoC
Spring源码之IoCIoC容器BeanFactory和ApplicationContext1 容器2 容器设计3 BeanFactory和FactoryBeanIoC的初始化流程1 BeanDefinition的Resource定位2 BeanDefinition的载入和解析3 BeanDefinition在IoC容器中的注册IoC的依赖注入循环依赖Spring源码之IoC
2017-08-20 21:36:14
201
原创 浅谈Map
浅谈Map浅谈Map前言LinkHashMap数据结构特性实现LRUTreeMapweakHashMap前言Map主要有HashMap,TreeMap,LinkHashMap,weakHashMap。HashMap的分析已经在之前的文章中有说过,HashMap链接,故本文主要是对其余的Map进行叙述LinkHashMap数据结构采用...
2018-04-07 23:50:07
308
原创 何为fail-fast?
fail-fast fail-fast机制,是一种错误检测机制。它只能被用来检测错误,因为JDK并不保证fail-fast机制一定会发生。1 fail-fast简介fail-fast 机制是java集合(Collection)中的一种错误机制。当多个线程对同一个集合的内容进行操作时,就可能会产生fail-fast事件。例如:当某一个线程A通过iterator去遍历某集合的过程...
2018-02-28 17:17:26
442
原创 浅谈List
1. List集合1.1 ArrayList1.11 基本特点1.12 源码分析1.13 ArrayList的优缺点1.14 ArrayList和Vector的区别1.15 为什么ArrayList的elementData是用transient修饰1.2 LinkedList1.21 与ArrayList对比1.22 特性1.23 源码分析1.3 CopyOnW...
2018-02-28 17:12:51
1033
原创 组合模式
组合模式1. UML类图2. 定义3. 通用代码4. 应用4.1 优点4.2 缺点4.3 使用场景5. 透明的组合模式5.1 UML类图5.2 透明模式和安全模式5.3 透明模式demo5.4 优点组合模式将对象组合成树形结构以表示“部分-整体”的层次结构,使得用户对单个对象和组合对象的使用具有一致性1. UML类图2....
2018-02-27 10:55:51
174
原创 装饰模式
装饰模式1. UML类图2. 定义3. 通用源码4. 应用4.1 优点4.2 缺点4.3 使用场景装饰模式动态地给一个对象添加一些额外的职责,就增加功能来说,装饰模式相比生成子类更为灵活1. UML类图2. 定义Component抽象构件:是一个接口或者是抽象类,最核心的对象,最原始的对象ConcreteComponent具体...
2018-02-27 10:55:11
152
原创 享元模式
享元模式使用共享对象可有效地支持大量的细粒度对象1. UML类图2. 定义Flyweight抽象享元角色:简单地说就是一个产品的抽象类,同时定义出对象的外部状态和内部状态的接口或实现ConcreteFlyweight具体享元角色:具体的一个产品类,实现抽象角色定义的业务。该角色中需要注意的是内部状态处理应该与环境无关,不应该出现一个操作改变了内部状态,同时修改了外部...
2018-02-27 10:54:31
188
原创 适配器模式
适配器模式1. UML类图1.1 类适配器1.2 对象适配器2. 定义3. 通用代码4. 应用4.1 优点4.2 使用场景4.3 注意事项适配器模式将一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作1. UML类图1.1 类适配器1.2 对象适配器2...
2018-02-27 10:53:54
122
原创 桥梁模式
桥梁模式1. UML类图2. 定义3. 通用源码4. 应用4.1 优点4.2 使用场景桥梁模式将抽象和实现解耦,使得两者可以独立地变化1. UML类图2. 定义Abstraction抽象化角色:它的主要职责是定义出该角色的行为,同时保存一个对实现化角色的引用,该角色一般是抽象类Implementor实现化角色:它是接口或者抽象类...
2018-02-27 10:53:21
138
原创 门面模式
门面模式1. UML类图2. 定义3. 通用代码4. 应用4.1 优点4.2 缺点4.3 使用场景5. 注意事项5.1一个子系统可以有多个门面5.2 门面不参与子系统内的业务逻辑门面模式要求一个子系统的外部与其内部的通信必须通过一个统一的对象进行。门面模式提供一个高层次的接口,使得子系统更易用使用1. UML类图 类图虽然简单,...
2018-02-27 10:52:27
481
原创 代理模式
代理模式1. UML类图2. 通用代码3. 优点4. 普通代理和强制代理4.1 普通代理4.2 强制代理5. 动态代理代理模式为其他对象提供一种代理以控制对这个对象的访问1. UML类图2. 通用代码聚合式的代理,产生该代理的实例,然后把被代理者的通过构造函数传递进来//抽象主题类public interface Sub...
2018-02-27 10:51:46
106
原创 状态模式
状态模式当一个对象内在状态改变时允许其改变行为,这个对象看起来像改变了其类1. UML类图2. 定义State抽象状态角色:接口或者是实现类,负责对象状态定义,并且封装环境角色以实现状态切换ConcreteState具体状态角色:每一个具体状态必须完成两个职责:本状态的行为管理以及趋向状态处理,通俗地说,就是本状态下要做的事情,以及本状态如何过渡到其他状态Cont...
2018-02-25 21:31:05
122
原创 中介者模式
中介者模式UML类图定义通用源码应用1 优点2 缺点3 使用场景中介者模式用一个中介对象封装一系列的对象交互,中介者使各对象不需要显示地相互作用,从而使其耦合松散,而且可以独立地改变他们之间的交互1. UML类图2. 定义Mediator抽象中介者角色:抽象中介者角色定义同意的接口,用于各同时角色之间的通信ConcreteMe...
2018-02-25 21:30:31
139
原创 责任链模式
责任链模式UML图相关定义通用代码应用1 优点2 缺点3 注意事项责任链模式使多个对象都有机会处理请求,从而避免了请求的发送者和接受者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有对象处理它位置1. UML图2. 相关定义抽象的处理者: 定义请求的处理方法handleMessage,唯一对外开放方法定义...
2018-02-25 21:29:42
126
原创 模板方法模式
模板方法模式UML类图特征通用代码应用1 优点2 缺点3 使用场景模板方法模式定义了一个操作中的算法的框架,而将一些步骤延迟到子类中,使得子类可以不改变一个算法的结构即可以重定义该算法的某些特定步骤1. UML类图2. 特征如上类图,AbstractClass叫做抽象模板,它的方法分为两类:基本方法:基本方法也叫基本操作,是...
2018-02-25 21:29:09
122
原创 命令模式
命令模式UML类图相关定义通用源码应用1 优点2 缺点3 扩展命令模式将一个请求封装成一个对象,从而让你使用不同的请求把客户端参数化,对请求排队或者记录请求日志,可以提供命令的撤销和恢复功能1. UML类图2. 相关定义Receive接受者角色:干活的角色,命令传递导这里被执行Command命令角色:需要执行的所有命令都在这里...
2018-02-25 21:28:30
145
原创 解释器模式
解释器模式给定一门语言,定义它的文法的一种表示,并定义一个解释器,该解释器使用该表示来解释语言中的句子1. UML类图2. 定义AbstractExpression抽象解释器:具体的解释任务由各个实现类完成,具体的解释器分别由TerminalExpression和NonTerminalExpression完成TerminalExpression终结符表达式:实现与文...
2018-02-25 21:27:54
109
原创 观察者模式
观察者模式UML类图定义通用代码应用1 优点2 缺点3 使用场景观察者模式定义对象间一种一对多的依赖关系,使得每当一个对象改变状态,则所有依赖于它的对象都会得到通知并被自动更新1. UML类图2. 定义Subject被观察者:定义被观察者必须实现的职责,它必须能够动态的增加、取消观察者。他一般是抽象类或者是实现类,仅仅完成作为被...
2018-02-25 21:27:23
104
原创 访问者模式
访问者模式封装一些作用于某种数据结构中的各元素的操作,它可以在不改变数据结构的前提下定义作用于这些元素的新的操作1. UML类图2. 定义Visitor抽象访问者:抽象类或者接口,声明访问者可以访问哪些元素,具体到程序中就是visit方法的参数定义哪些对象是可以被访问的ConcreteVisitor具体访问者:它影响访问者访问到一个类后该怎么敢, 要做什么事情El...
2018-02-25 21:26:47
118
原创 策略模式
策略模式定义一组算法,将每个算法都封装起来,并且使他们之间可以互换1. UML类图2. 定义 主要采用的是面向对象的继承和多态机制Context封装角色:也叫作上下文角色,起承上启下封装的作用,屏蔽高层模块对策略、算法的直接访问,封装可能存在的变化Strategy抽象策略角色:策略、算法家族的抽象,通常为接口,定义每个策略或算法必须具有的方法和属性,Alg...
2018-02-25 21:26:07
296
原创 备忘录模式
备忘录模式UML类图定义通用代码应用1 使用场景2 注意事项扩展1 clone方式的备忘录2 多状态的备忘录模式3 多备份的备忘录4 封装得更好一点备忘录模式在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样以后就可将该对象恢复到原先保存的状态1. UML类图2. 定义 通俗地说,备忘...
2018-02-25 21:25:27
155
原创 原型模式
原型模式通用源码应用1 优点2 使用场景原型模式的注意事项原型模式用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象1. 通用源码//原型模式通用源码public class PrototypeClass implements Cloneable{ //覆写父类Object方法 @Override pub...
2018-02-25 19:59:34
306
原创 建造者模式
建造者模式UML类图定义通用代码应用1 优点2 使用场景3 注意事项建造者模式将一个复杂对象的构建与他的表示分离,使得同样的构建过程可以创建不同的表示1. UML类图2. 定义在建造者模式中,有如下4个角色Product产品类:通常是实现了模板方法模式,也就是有模板方法和基本方法Builder抽象建造者:规范产品的组建,一...
2018-02-25 19:59:00
102
原创 单例模式
单例模式 确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例单例模式饿汉式懒汉式线程不安全懒汉式线程安全双重检验锁双重检验锁volatile静态内部类枚举 Enum优缺点和使用场景1. 饿汉式public class Singleton{ //类加载时就初始化 private static final Sin...
2018-02-25 19:58:15
139
原创 工厂方法模式
工厂方法模式UML类图通用代码工厂方法模式的应用优点使用场景简单工厂模式多个工厂模式替代单例模式延迟初始化工厂方法模式 定义一个用于创建对象的接口,让子类决定实例化哪一个类,工厂方法使一个类的实例化延迟到其子类1. UML类图2. 通用代码//抽象产品类public abstract class Product{...
2018-02-25 19:57:37
171
原创 抽象工厂模式
抽象工厂模式UML类图代码实现具体分析优缺点和使用场景1 优点2 缺点3 使用场景抽象工厂模式 为创建一组相关或相互依赖的对象提供一个接口,而且无须制定他们的具体类1. UML类图2. 代码实现//抽象产品类public abstract class AbstractProductA{ //每个产品共有的方...
2018-02-25 19:55:37
217
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人