摘要:
Synchronized Synchronized 是通过对象内部的一个叫做监视器锁(monitor)来实现的,监视器锁本质又是依赖于底层的操作系统的 Mutex Lock(互斥锁)来实现的。而操作系统实现线程之间的切换需要从用户态转换到核心态,这个成本非常高,状态之间的转换需要相对比较长的时间,这 阅读全文
摘要:
关于责任链模式,其有两种形式,一种是通过外部调用的方式对链的各个节点调用进行控制,从而进行链的各个节点之间的切换;另一种是链的每个节点自由控制是否继续往下传递链的进度,这种比较典型的使用方式就是Netty中的责任链模式。 定义 避免请求发送者与接收者耦合在一起,让多个对象都有可能接收请求,将这些对象 阅读全文
摘要:
定义 将一个接口转换为客户端所期待的接口,从而使两个接口不兼容的类可以在一起工作 适配器模式还有个别名叫:Wrapper(包装器),顾名思义就是将目标类用一个新类包装一下,相当于在客户端与目标类直接加了一层。IT世界有句俗语:没有什么问题是加一层不能解决的 适配器模式分为类结构型模式和对象结构型模式 阅读全文
摘要:
使用场景 这个设计模式一般在最初写代码的时候基本上是不会预先想到的,都是在后期不断重构的过程中被提炼出来的。简单来说就是:当你发现你写了两个或者多个几乎一毛一样的类,只是有些方法的实现方式不一致的时候,你就要停下来想想了,如果你又发现在使用这些类的地方调用方法顺序都一样,不要犹豫请使用模板方法模式重 阅读全文
摘要:
定义 策略模式定义了一系列的算法,并将每一个算法封装起来,使他们可以相互替换 使用场景 当你写代码的时候发现一个操作有好多种实现方法,而你需要根据不同的情况使用if-else等分支结构来确定使用哪种实现方式的时候,想一想这个模式。 普通实现 如果我们正常写代码,平时也应该这样,首先保证把功能正确的实 阅读全文
摘要:
定义 装饰模式是在不必改变原类和使用继承的情况下,动态地扩展一个对象的功能。它是通过创建一个包装对象,也就是装饰来包裹真实的对象。 使用场景 需要在运行时动态的给一个对象增加额外的职责时候 需要给一个现有的类增加职责,但是又不想通过继承的方式来实现的时候(应该优先使用组合而非继承),或者通过继承的方 阅读全文
摘要:
背景: 当一个类的构造函数参数个数超过4个,而且这些参数有些是可选的参数,考虑使用构造者模式。 当一个类的构造函数参数超过4个,而且这些参数有些是可选的时,我们通常有两种办法来构建它的对象。 例如我们现在有如下一个类计算机类Computer,其中cpu与ram是必填参数,而其他3个是可选参数,那么我 阅读全文
摘要:
spring 容器启动过程 1 new applicationcontext() 2 这个方法 1 读取配置类 2 调用refresh() 3 refresh()--> 1 invokeBeanFactoryPostProcess(beanFactory) > 把配置类解析成临时的beanDefin 阅读全文
摘要:
如果两个操作访问同一个变量,且这两个操作中有一个为写操作,此时这两个操作之间就存在数据依赖性。 数据依赖分下列三种类型: 名称 代码示例 说明 写后读 a=1;b=a 写一个变量之后,再读这个位置 写后写 a=1;a=2 写一个变量之后,再写这个变量 读后写 a=b;b=1 读一个变量之后,再写这个 阅读全文
摘要:
a << b就表示把a转为二进制后左移b位(在后面添b个0)。例如100的二进制为1100100,而110010000转成十进制是400,那么100 << 2 = 400。可以看出,a << b的值实际上就是a乘以2的b次方,因为在二进制数后添一个0就相当于该数乘以2。 通常认为a << 1比a * 阅读全文