设计模式
LTELTY
一句话说完所有事
展开
-
分布式事务解读
什么是事务?事务由一组操作构成,我们希望这组操作能够全部正确执行,如果这一组操作中的任意一个步骤发生错误,那么就需要回滚之前已经完成的操作。也就是同一个事务中的所有操作,要么全都正确执行,要么全都不要执行。事务的四大特性 ACIDA 原子性(Atomicity)原子性要求,事务是一个不可分割的执行单元,事务中的所有操作要么全都执行,要么全都不执行。C 一致性(Consistency)一...转载 2019-04-07 18:46:55 · 274 阅读 · 0 评论 -
外观模式(Facade模式)
在现实生活中,常常存在办事较复杂的例子,如办房产证或注册一家公司,有时要同多个部门联系,这时要是有一个综合部门能解决一切手续问题就好了。软件设计也是这样,当一个系统的功能越来越强,子系统会越来越多,客户对系统的访问也变得越来越复杂。这时如果系统内部发生改变,客户端也要跟着改变,这违背了“开闭原则”,也违背了“迪米特法则”,所以有必要为多个子系统提供一个统一的接口,从而降低系统的耦合度,这就是外观...原创 2019-05-28 23:25:34 · 566 阅读 · 0 评论 -
GoF 的 23 种设计模式的分类和功能
设计模式有两种分类方法,即根据模式的目的来分和根据模式的作用的范围来分。1. 根据目的来分根据模式是用来完成什么工作来划分,这种方式可分为创建型模式、结构型模式和行为型模式3 种。创建型模式:用于描述“怎样创建对象”,它的主要特点是“将对象的创建与使用分离”。GoF 中提供了单例、原型、工厂方法、抽象工厂、建造者等 5 种创建型模式。 结构型模式:用于描述如何将类或对象按某种布局组...原创 2019-05-28 21:45:52 · 249 阅读 · 0 评论 -
七大设计原则----合成复用原则
合成复用原则的定义合成复用原则(Composite Reuse Principle,CRP)又叫组合/聚合复用原则(Composition/Aggregate Reuse Principle,CARP)。它要求在软件复用时,要尽量先使用组合或者聚合等关联关系来实现,其次才考虑使用继承关系来实现。如果要使用继承关系,则必须严格遵循里氏替换原则。合成复用原则同里氏替换原则相辅相成的,两者都是开闭...原创 2019-05-28 21:41:28 · 603 阅读 · 0 评论 -
悲观锁与乐观锁
引言乐观锁对应于生活中乐观的人总是想着事情往好的方向发展,悲观锁对应于生活中悲观的人总是想着事情往坏的方向发展。这两种人各有优缺点,不能不以场景而定说一种人好于另外一种人。悲观锁总是假设最坏的情况,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会阻塞直到它拿到锁(共享资源每次只给一个线程使用,其它线程阻塞,用完后再把资源转让给其它线程)。传统的关系...原创 2019-04-30 18:03:20 · 188 阅读 · 0 评论 -
负载均衡三个特性
引言负载均衡设备作为纵跨网络2-7层协议的设备,往往放置在网络设备和应用设备的连接处,对工程师在网络和应用基本知识方面的要求远高于其他设备,所以我们要在基本功能的理解上下更多的功夫。负载均衡设备还有另外一个称呼:4/7层交换机,但它首先是个2-3层交换机,这要求我们首先掌握2-3层的基本知识,然后才是本文介绍的内容。服务器负载均衡有三大基本Feature:负载均衡算法健康检查会话保持...原创 2019-04-19 15:50:04 · 1641 阅读 · 0 评论 -
分布式事务与一致性算法Paxos & raft & zab
1.CAP原理要想数据高可用,就得写多份数据写多分数据就会导致数据一致性问题数据一致性问题会引起性能问题2.一致性模型弱一致性最终一致性(一段时间达到一致性)强一致1、2 异步冗余;3是同步冗余3. 扩展服务的方案数据分区: uid % 16数据镜像:让多有的服务器都有相同的数据,提供相当的服务(冗余存储,一般3份为好)4.两种方案的事务问题A向B汇钱,两个用户不在一个...原创 2019-04-27 13:43:23 · 299 阅读 · 0 评论 -
消息队列
原文:https://github.com/Snailclimb/JavaGuide/blob/master/docs/system-design/data-communication/message-queue.md一 什么是消息队列二 为什么要用消息队列(1) 通过异步处理提高系统性能(削峰、减少响应所需时间)(2) 降低系统耦合性三 使用消息队列带来的一些问题四 JMS VS A...原创 2019-04-27 13:39:23 · 152 阅读 · 0 评论 -
采用线程池同步、异步处理任务
目的采用线程池进行异步任务处理线程池创建线程池阿里JAVA编码规约,建议采用ThreadPoolExecutor创建线程池。private static ExecutorService simpleExecutorService = new ThreadPoolExecutor( 200, 300, 0L, TimeUnit...原创 2019-04-25 22:08:46 · 4208 阅读 · 0 评论 -
Kafka学习
kafka简介Kafka 是LinkedIn 开发的一个高性能、分布式的消息系统,广泛用于日志收集、流式数据处理、在线和离线消息分发等场景。虽然不是作为传统的MQ来设计,在大部分情况,Kafaka 也可以代替原先ActiveMQ 等传统的消息系统。Kafka 将消息流按Topic 组织,保存消息的服务器称为Broker,消费者可以订阅一个或者多个Topic。为了均衡负载,一个Topic 的...原创 2019-06-02 19:18:17 · 203 阅读 · 0 评论