抽象工厂设计模式
抽象工厂(Abstract Factory)Intent提供一个接口,用于创建 相关的对象家族 。
Class Diagram抽象工厂模式创建的是对象家族,也就是很多对象而不是一个对象,并且这些对象是相关的,也就是说必须一起创建出来。而工厂方法模式只是用于创建一个对象,这和抽象工厂模式有很大不同。
抽象工厂模式用到了工厂方法模式来创建单一对象,AbstractFactory 中的 createProductA() 和 createProductB() 方法都是让子类来实现,这两个方法单独来看就是在创建一个对象,这符合工厂方法模式的定义。
至于创建对象的家族这一概念是在 Client 体现,Client 要通过 AbstractFactory 同时调用两个方法来创建出两个对象,在这里这两个对象就有很大的相关性,Client 需要同时创建出这两个对象。
从高层次来看,抽象工厂使用了组合,即 Cilent 组合了 AbstractFactory,而工厂方法模式使用了继承。
Implementation12345public class AbstractProductA { ...
如何优雅使用Docker
请收下这15个小技巧Tip 1获取最近运行容器的id 这是我们经常会用到的一个操作,按照官方示例,你可以这样做(环境ubuntu):
1234$ ID=$(docker run ubuntu echo hello world)hello world$ docker commit $ID helloworldfd08a884dc79
这种方式在编写脚本的时候很有用,比如你想在脚本中批量获取id,然后进一步操作。但是这种方式要求你必须给ID赋值,如果是直接敲命令,这样做就不太方便了。 这时,你可以换一种方式:
1234567$ alias dl=’docker ps -l -q’$ docker run ubuntu echo hello worldhello world$ dl1904cf045887$ docker commit `dl` helloworldfd08a884dc79
docker ps -l -q命令将返回最近运行的容器的id,通过设置别名(alias),dl命令就是获取最近容器的id。这样,就无需再输入冗长的docker ps -l -q命令了。通过两个斜引号“,可 ...
单击鼠标所展示的浮动文字特效的js
单击鼠标所展示的浮动文字特效的js
1234567891011121314151617181920212223242526272829303132333435363738394041<script type="text/javascript">/*鼠标特效 */ /*这个方法用来随机一个十六进制颜色代码,让每一次点击浮动文字的杨色不同*/ function co(){ var colorElements = "0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f"; var colorArray = colorElements.split(","); var color ="#"; for(var i =0;i<6;i++){ color+=colorArray[Math.floor(Math.random()*16)]; } return color;};var a_idx = 0;j ...
Dubbo知识精华 下
1、了解Dubbo么?Dubbo是阿里巴巴开源的基于 Java 的高性能 RPC 分布式服务框架,现已成为 Apache 基金会孵化项目。
官网:http://dubbo.apache.org
2、为什么要用Dubbo?因为是阿里开源项目,国内很多互联网公司都在用,已经经过很多线上考验。内部使用了 Netty、Zookeeper,保证了高性能高可用性。
使用 Dubbo 可以将核心业务抽取出来,作为独立的服务,逐渐形成稳定的服务中心,可用于提高业务复用灵活扩展,使前端应用能更快速的响应多变的市场需求。
下面这张图可以很清楚的诠释,最重要的一点是,分布式架构可以承受更大规模的并发流量。
下面是 Dubbo 的服务治理图。
3、Dubbo 和 Spring Cloud 有什么区别?两个没关联,如果硬要说区别,有以下几点。
1)通信方式不同
Dubbo 使用的是 RPC 通信,而 Spring Cloud 使用的是 HTTP RESTFul 方式。
2)组成部分不同
4、dubbo都支持什么协议,推荐用哪种?dubbo://(推荐)
rmi:// ...
Dubbo知识精华 上
1、默认使用的是什么通信框架,还有别的选择吗?默认也推荐使用netty框架,还有mina。
2、服务调用是阻塞的吗?默认是阻塞的,可以异步调用,没有返回值的可以这么做。
3、一般使用什么注册中心?还有别的选择吗?推荐使用zookeeper注册中心,还有redis等不推荐。
4、默认使用什么序列化框架,你知道的还有哪些?默认使用Hessian序列化,还有Duddo、FastJson、Java自带序列化。
5、服务提供者能实现失效踢出是什么原理?服务失效踢出基于zookeeper的临时节点原理。
6、服务上线怎么不影响旧版本?采用多版本开发,不影响旧版本。
7、如何解决服务调用链过长的问题?可以结合zipkin实现分布式服务追踪。
8、说说核心的配置有哪些?核心配置有
123456789101112131415dubbo:service/dubbo:reference/dubbo:protocol/dubbo:registry/dubbo:application/dubbo:provider/dubbo:consumer/dubbo:method/
9、dubbo推荐用什么协议?默认使 ...
ZooKeeper 概念
可能是全网把 ZooKeeper 概念讲的最清楚的一篇文章
前言相信大家对 ZooKeeper 应该不算陌生。但是你真的了解 ZooKeeper 是个什么东西吗?如果别人/面试官让你给他讲讲 ZooKeeper 是个什么东西,你能回答到什么地步呢?
我本人曾经使用过 ZooKeeper 作为 Dubbo 的注册中心,另外在搭建 solr 集群的时候,我使用到了 ZooKeeper 作为 solr 集群的管理工具。前几天,总结项目经验的时候,我突然问自己 ZooKeeper 到底是个什么东西?想了半天,脑海中只是简单的能浮现出几句话:“①Zookeeper 可以被用作注册中心。 ②Zookeeper 是 Hadoop 生态系统的一员;③构建 Zookeeper 集群的时候,使用的服务器最好是奇数台。” 可见,我对于 Zookeeper 的理解仅仅是停留在了表面。
所以,通过本文,希望带大家稍微详细的了解一下 ZooKeeper 。如果没有学过 ZooKeeper ,那么本文将会是你进入 ZooKeeper 大门的垫脚砖。如果你已经接触过 ZooKeeper ,那么本文将带你 ...
简单多线程基础
简单多线程基础主要内容:
1234567891011121314151617简述线程,程序、进程的基本概念。以及他们之间关系是什么?线程有哪些基本状态?这些状态是如何定义的?何为多线程?为什么多线程是必要的?使用多线程常见的三种方式线程的优先级Java多线程分类sleep()方法和wait()方法简单对比为什么我们调用start()方法时会执行run()方法,为什么我们不能直接调用run()方法?
1. 简述线程,程序、进程的基本概念。以及他们之间关系是什么?线程与进程相似,但线程是一个比进程更小的执行单位。一个进程在其执行的过程中可以产生多个线程。与进程不同的是同类的多个线程共享同一块内存空间和一组系统资源,所以系统在产生一个线程,或是在各个线程之间作切换工作时,负担要比进程小得多,也正因为如此,线程也被称为轻量级进程。
程序是含有指令和数据的文件,被存储在磁盘或其他的数据存储设备中,也就是说程序是静态的代码。
进程是程序的一次执行过程,是系统运行程序的基本单位,因此进程是动态的。系统运行一个程序即是一个进程从创建,运行到消亡的过程。简单来说,一个进程就是一个执行中的程序,它在计算 ...
简单多线程基础
前言正则表达式,新手见它的感觉就是“这都什么玩意,乱七八糟的,完全不知所云”,但学会它就会体验那种一行代码抵数十上百行,效率飞起的感觉,简直不要太爽。今天小肆先把我自己收藏的一些正则表达式写法分享给大家,当然想深入学习如何写正则表达式,可以去w3c看看教程。
干货一.校验数字
数字:^[0-9]*$
n位的数字:^\d{n}$
至少n位的数字:^\d{n,}$
m-n位的数字:^\d{m,n}$
零和非零开头的数字:^(0|[1-9][0-9]*)$
非零开头的最多带两位小数的数字:^([1-9][0-9]*)+(.[0-9]{1,2})?$
带1-2位小数的正数或负数:^(-)?\d+(.\d{1,2})?$
正数、负数、和小数:^(-|+)?\d+(.\d+)?$
有两位小数的正实数:^[0-9]+(.[0-9]{2})?$
有1~3位小数的正实数:^[0-9]+(.[0-9]{1,3})?$
非零的正整数:^[1-9]\d*$
非零的负整数:^-[1-9][]0-9”*$
非负整数:^\d+$
非正整数:^-[1-9]\d*|0$
非负浮点数:^\d+(.\d+)?$
非正浮点数 ...
基于hystrix为spring-boot+dubbo+zookeeper提供熔断机制
spring-boot-dubbo-zookeeper-hystrix-annotation说明使用注解的方式使用hystrix
我需要引入几个必要的jar
1234567891011121314151617181920212223<dependency> <groupId>com.netflix.hystrix</groupId> <artifactId>hystrix-core</artifactId> <version>1.5.12</version> </dependency> <dependency> <groupId>com.netflix.hystrix</groupId> <artifactId>hystrix-metrics-event-stream</artifactId> ...
基于hystrix为spring-boot+dubbo+zookeeper提供熔断机制
spring-boot-dubbo-zookeeper-hystrix引入spring-boot-dubbo-zookeeper-hystrix-base后会通过Dubbo的Activate机制自动激活HystrixFilter,对dubbo:reference进行资源隔离和熔断保护。
线程池隔离默认按dubbo:reference进行线程池资源隔离,可以认为一个dubbo:reference为一个领域服务,reference里的所有方法在一个线程池资源里运行,多个reference之间线程池资源是隔离的,这样可以根据具体的业务场景对不同的reference设置不同的线程池资源,并且当某个reference出现阻塞故障时不会导致容器线程资源被耗尽,从而影响其他服务。
默认线程池配置如下:
123<dubbo:parameter key="coreSize" value="10"/><dubbo:parameter key="maximumSize" value="20"/><d ...