摘要:
[TOC] 1. 从乐观锁和悲观锁谈起 乐观锁和悲观锁是两种不同的解决并发问题的策略。悲观锁策略假定任何一次并发都会发生冲突,所以总是采用最严格的方式来进行并发控制。java中的独占锁(synchronized和重入锁)就是典型悲观锁实现,它只允许线程互斥的访问临界区,也就是阻塞式的同步方式。而乐观 阅读全文
摘要:
[TOC] 1. 关于synchronized关键字 java中要实现多线程的互斥同步访问,最简单的方式就是使用synchronized关键字。被其修饰的代码,相当于加了独占锁,线程只能互斥的访问,即同一时间只有一个线程能够访问这部分代码,其他线程只能在外等待。那么synchronized是如何做到 阅读全文
摘要:
[TOC] 1.关于volatile volatile是java语言中的关键字,用来修饰会被多线程访问的共享变量,是JVM提供的轻量级的同步机制,相比同步代码块或者重入锁有更好的性能。它主要有两重语义,一是保证多个线程对共享变量访问的可见性,二防止指令重排序。 2.语义一:内存可见性 2.1 一个例 阅读全文
摘要:
[TOC] 1. 前言 代理模式可以说是生活中处处可见。比如说在携程上定火车票,携程在这里就起到了一个代理的作用,比起我们在官网上或者直接去柜台订票,携程可以为用户提供更多人性化的选择。再比如代购,我自己的mbp就是委托别人从香港买回来的,那么那个代购人就相当于代理,免去了我来回的车费以及办签证的麻 阅读全文
摘要:
[TOC] 1. 前言 现实世界中山寨这种行为往往意味着假冒伪劣,备受批判。但是在软件开发中,山寨却又不少可取之处。首先其“成分”和“质量”和原创不相上下;其次相比原创一个东西的时间开销,山寨一个出来总归是省时省力的,毕竟对于计算机,克隆一个对象要比创建一个对象性能好得多(拷贝对象不会执行构造方法) 阅读全文
摘要:
[TOC] 1. 前言 插头转换器我们应该都用过。当我们要使用二插头的电器而身边只有3孔的插座时,一个插头转换器就能解决插头和插座不匹配的问题。如下图所示 插头转换器其实只做了一件事,就是把原本不能使用的三孔插座转换成了能使用的二孔插座。而这也正是我们接下来要讲的适配器模式的本质:把不能被客户端使用 阅读全文
摘要:
[TOC] 1.前言 直接new一个对象是最简单的创建对象的方式,但大量出现在业务代码中会带来至少两个问题。1:创建对象的细节直接暴露在业务代码中,修改实现细节必须修改相关的大量客户端代码。2:直接面向具体类型编程,违反了面向接口编程的原则,系统进行扩展时也不得不进行大量修改。要使得系统具有的良好的 阅读全文
摘要:
[TOC] 1. 前言 单例模式可以说是最简单也是最常见的设计模式了,有些语言比如scala甚至在语言层面对其进行了支持。单例是指类的实例在全局只有一个。什么时候我们希望类的实例在整个JVM进程中只有一个?比如说线程池:创建开销很大;还有缓存:占用内存空间很多,而且超过一个也不利于维护。还有其他比如 阅读全文
摘要:
1. 前言 在平时的项目开发中,我们常会碰到这样的需求。整个业务流程可以由若干操作完成,其中某些操作对所有客户都一样,是不变的,而有些操作确需要由客户端决定,是经常会改变的。比如事务操作,流程可以定义为: 1.开启事务 2.对数据库进行操作 3.成功则提交事务否则回滚 在这个事务操作流程中,1和3是 阅读全文
摘要:
1. 什么是设计模式 首先,设计模式是针对软件开发过程中可能存在的问题的一系列解决方案,常见的有23种。它是开发人员经过无数工程实践总结出来的一套模版,是特定情境下针对特定问题的最佳实践。 其次,设计模式也代表了一种设计思想,它构建了系统中不同角色的交互模型,便于我们直观把握和分析系统的主要矛盾。 阅读全文