摘要: 我们不仅仅希望防止某个线程使用某个状态时,另一个线程在修改它;我们还希望某个线程修改了某个状态后,其他线程能够看到状态的变化。 一、可见性 重排序:在没有同步的情况下,编译器、处理器可能对代码的执行顺序进行一些调整 例如如下代码,由于没有使用同步机制,读线程可能看不见ready的修改,而一直循环下去 阅读全文
posted @ 2016-10-22 22:12 HectorHou 阅读(1307) 评论(0) 推荐(0) 编辑
摘要: 一个对象是否需要是线程安全的取决于它是否被多个线程访问。 当多个线程访问同一个可变状态量时如果没有使用正确的同步规则,就有可能出错。解决办法: 不在线程之间共享该变量 将状态变量修改为不可变的 在访问状态变量时使用同步机制 完全由线程安全类构造的程序也不一定是线程安全的,线程安全类中也可以包含非线程 阅读全文
posted @ 2016-10-22 20:08 HectorHou 阅读(536) 评论(0) 推荐(1) 编辑
摘要: 当使用new实例化一个类时,使用的是实现,而不是接口,代码捆绑着具体类会导致代码更脆弱缺乏弹性,使用松耦合的OO模式可以得到解脱。 工厂:封装对象的创建,处理创建对象的细节 静态工厂:利用静态方法定义一个简单的工厂。优点:不需要创建工厂类的实例化。缺点:不能通过继承改变创建方法行为。 简单工厂:简单 阅读全文
posted @ 2016-10-22 13:24 HectorHou 阅读(970) 评论(0) 推荐(0) 编辑
摘要: 单件模式:确保一个类只有一个实例,并提供一个全局访问点。 特点: 单例模式确保一个实例被创建,并且任意时刻都只有一个对象。 特征是构造函数为私有,然后声明一个私有静态成员作为类对象,对外提供一个静态类方法创建该对象 在创建对象时会先判断是否已经创建,若是则直接返回已经创建的对象,若没有则创建新对象 阅读全文
posted @ 2016-10-21 19:54 HectorHou 阅读(317) 评论(0) 推荐(0) 编辑
摘要: 装饰者模式:动态的将责任附加到对象上,若要扩展功能,装饰者提供了更有弹性的替代方案。 设计原则: 类的设计应该对拓展开放,对修改关闭。允许类容易拓展,在不修改现有代码的情况下添加新的行为 特点: 装饰者和被装饰对象有相同的超类型,我们利用继承达到“类型匹配”,而不是利用继承获得“行为”。 装饰者模式 阅读全文
posted @ 2016-10-19 23:33 HectorHou 阅读(345) 评论(0) 推荐(0) 编辑
摘要: 观察者模式(Observer Pattern):观察者模式定义了对象之间的一对多依赖,这样一来,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新。 推拉两种获取数据方式: 推:可以把数据当做数据对象的方式传给观察者 拉:通过getter方法获取数据 设计原则: 为了交互对象之间的松耦合而努 阅读全文
posted @ 2016-10-19 16:56 HectorHou 阅读(366) 评论(0) 推荐(0) 编辑
摘要: 策略模式:策略模式定义了算法族,分别封装起来,让他们可以相互替换,此模式让算法的变化独立于使用算法的客户。 设计原则: 找出应用中可能需要变化之处,把他们独立出来,不要和那些不需要变化的代码混在一起。以便以后轻松的更改或扩充此部分,而不影响不需要变化的其他部分 针对接口编程而不是针对实现编程。实际的 阅读全文
posted @ 2016-10-18 23:46 HectorHou 阅读(354) 评论(0) 推荐(0) 编辑
摘要: 连接远程仓库 注册github 创建SSH Key:ssh-keygen -t rsa -C "youremail@example.com" -》生成.ssh目录,里面有id_rsa(私钥)和id_rsa.pub(公钥) 将公钥添入 Github SSH Key (SSH Key可以有多个,方便多台 阅读全文
posted @ 2016-10-18 16:00 HectorHou 阅读(178) 评论(0) 推荐(0) 编辑
摘要: 集中式 vs 分布式管理工具 集中式(svn,cvs):版本库是集中存放在中央服务器的,工作时要先从中央服务器取得最新的版本,然后开始干活,干完活了,再把自己的活推送给中央服务器。缺点:必须联网才能工作,要求带宽。 分布式(git):分布式版本控制系统根本没有“中央服务器”,每个人的电脑上都是一个完 阅读全文
posted @ 2016-10-18 15:46 HectorHou 阅读(312) 评论(0) 推荐(0) 编辑