- 博客(184)
- 资源 (20)
- 收藏
- 关注

原创 设计模式系列--23种常见设计模式之适配器模式(14)
适配器模式顾名思义,进行适配,常见的电源适配器就是一个典型的适配过程。对于开发来说,就是将一个类的接口转换成另外一个接口,使得原本由于接口不兼容而不能一起工作的那些类可以一起工作比如我们以前开发的EDI系统,其特性之一就是满足了AB客户间的通信,适配了AB客户不同的数据请求,已实现能正常交互,也是一种中间件的思想。由EDI直接对接AB,而不需要AB直接对接。还有常用的数据库驱动,spring工程中根据不同的配置,使用不同的驱动程序客户A:package cn.pers.sample..
2021-02-08 10:31:49
425

原创 设计模式系列--23种常见设计模式之建造者模式(13)
建造者模式(Builder Pattern):将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。建造者模式是一种对象创建型模式。一般会定义一个公共的抽象建造者,定义了具体需要建造哪些部分;设置具体的执行者,构建建造过程,顺序等;定义抽象的公共出的产品对象,提取通用的属性。实现过程:按需获取或创建对应的具体建造器,执行者执行构造过程,获取生产的结果。如下:定义一个建造者:package cn.pers.sample.build;/** * 定义的
2021-01-28 17:50:21
314

原创 设计模式系列--23种常见设计模式之原型模式(12)
原型模式用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象,让创建的新对象保持和原有对象相同的内容原型模式其实就是从一个对象再创建另外一个可定制的对象,而且不需要指定任何创建的细节,就像克隆。比如如下代码实例:公共代码Address类:package cn.pers.sample.prototype;import lombok.Getter;import lombok.Setter;import java.io.Serializable;/** * @aut
2020-12-08 14:03:54
135

原创 设计模式系列--23种常见设计模式之单例模式(11)
单例模式保证一个类仅有一个实例,并提供一个访问它的全局访问点。Java中单例模式定义:“一个类有且仅有一个实例,并且自行实例化向整个系统提供。”所有类都有构造方法,不编码则系统默认生成空的构造方法,若有显示定义的构造方法,默认的构造方法就会失效。分析:1、通常我们可以让一个全局变量使得一个对象被访问,但它不能防止你实例化多个对象;一个最好的办法就是,让类自身负责保存它的唯一实例;这个类可以保证没有其他实例可以被创建,并且它可以提供一个访问该实例的方法。2、单例模式因为封装了它的唯一
2020-11-19 20:23:47
180

原创 设计模式系列--23种常见设计模式之抽象工厂模式(10)
抽象工厂模式一个抽象的父类定义公共接口,里面定义了一系列产品的生产规范;(多产品)不同的子类都基于父类的实现,定义了一系列符合自己要求的生产规范,公共规范+自有规范;(多等级)每个孙子辈的子类实现具体的生产细节。抽象工厂模式是一系列相关或相互依赖的接口或抽象,无须指定他们具体的类。它针对的是有多个产品的等级结构。而工厂方法模式针对的是一个产品的等级结构。抽象工厂结构图:编者按:1、同工厂方法比较,二者都是选择对应的工厂,由工厂生产对应的产品,目标在于工厂的选择和改变。2、不
2020-11-12 15:02:43
325

原创 设计模式系列--23种常见设计模式之工厂方法模式(9)
工厂方法模式一个抽象的父类定义公共接口,设计工厂的生产规范,不同的子类实现工厂接口,生成具体的对象,每个生产的对象也是父类定义对象的具体实现。这样做的目的是将类的实例化操作延迟到子类中完成,按照通用父类引用,运行时决定具体的使用过程。工厂方法结构图:编者按:1、简单工厂模式的最大优点在于工厂类中包含了必要的逻辑判断,根据客户端的选择条件动态实例化相关的类,对于客户端来说,去除了与具体产品的依赖。只需告知工厂要什么;2、工厂方法模式实现,在于工厂类中定义了产品的实现标准,客户端的.
2020-11-12 15:02:03
132

原创 设计模式系列--23种常见设计模式之简单工厂(8)
简单工厂:实际的使用需求只和工厂对接,不关注具体的实现过程,需要什么,告诉工厂,工厂直接给我们返回产品。比如:我们现在设置了一个产品类型Product,下属有苹果Apple,香蕉Banana,橘子Orange等等;现在有一个工厂类 FruitFactory,专门生产Product,具体生产哪个,你告诉我名字就行getProduct(String name).这就是一个简单工厂类的实现过程,工厂作为交互类,细节工厂决定,需求由目标群体决定。产品类:package cn.pers.
2020-11-12 11:05:04
122

原创 设计模式系列--23种常见设计模式之迪米特法则(7)
迪米特法则(LKP:Least Knowledge Principle,又叫最少知识原则)概念一个软件实体应当尽可能少的与其他实体发生相互作用。每一个软件单位对其他的单位都只有最少的知识,而且局限于那些与本单位密切相关的软件单位。换句话说:如果两个类不必彼此直接通信,那么这两个类就不应当直接的相互作用;如果其中一个类需要调用另一个类的某一个方法的话,可以通过第三者转发这个调用。目的解耦,降低类之间的耦合。由于每个类尽量减少对其他类的依赖,很容易使得系统的功能模块相互独立,相互之间也就不存
2020-11-11 16:50:34
217

原创 设计模式系列--23种常见设计模式之合成/聚合复用原则(6)
合成/聚合复用原则(Composition/Aggregation Reuse Principle) 也可以叫 组合复用原则。概念是指在一个新的对象中,使用已有的对象,使之成为新对象的一部分,正常发挥其作用。使用原则要尽量使用合成/聚合,尽量不要使用继承。具体实现聚合用来表示“拥有”关系,原有的合成新的,新的不存在了,旧的依然可以存在。整体与部分的关系。代表部分的对象有可能会被多个代表整体的对象所共享,而且不一定会随着某个代表整体的对象被销毁或破坏而被销毁或破坏,部分的生命周期可.
2020-11-10 22:45:28
284

原创 设计模式系列--23种常见设计模式之里氏代换原则(5)
概念里氏代换原则(Liskov Substitution Principle LSP)子类型必须能够替换掉他们的父类型。一个软件实体如果使用的是一个父类的话,一定可以用它的子类替换。任何基类可以出现的地方,子类一定可以出现。 LSP是继承复用的基石,只有当衍生类可以替换掉基类,软件单位的功能不受到影响时,基类才能真正被复用,而衍生类也能够在基类的基础上增加新的行为。里氏代换原则是对“开-闭”原则的补充。实现“开-闭”原则的关键步骤就是抽象化。而基类与子类的继承关系就是抽象化的具体实现,所以里
2020-11-07 13:46:38
161

原创 设计模式系列--23种常见设计模式之依赖倒转原则(4)
概念依赖倒转原则(Dependence Inversion Principle, DIP)1、高层模块不应该依赖低层模块,两者都应该依赖其抽象2、抽象不应该依赖细节,细节应该依赖抽象问题由来依赖具体的细节后,需要扩展一个新的细节,就需要同步的对相关模块进行修改。解决方案抽象具体的实现过程,形成比如接口,抽象类等,依赖抽象层,具体的执行细节交给执行过程中再去决定(多态的原理)。上一节说了开放封闭原则,讲究 要抽象和解耦,易扩展,所以依赖倒转原则的目的也是一致的。简单理解比如 我
2020-11-05 20:33:13
166

原创 设计模式系列--23种常见设计模式之开放封闭原则(3)
概念开放封闭原则(OCP,Open Closed Principle)是所有面向对象原则的核心。软件设计本身所追求的目标就是封装变化、降低耦合,而开放封闭原则正是对这一目标的最直接体现。对于开放,我们是指在对外扩展,新需求,新功能需要加入,我们的软件本身是易于扩展的,所以“适应时代的发展需要”;对于封闭,我们是指软件本身的功能是不允许修改的,要保持独立性和稳定性,避免再次发生改动。问题由来比如我们有个实现各种计算的功能,加减乘除,现在需要再加上 取余运算;此时 需要在原有的实现类中 添加
2020-11-02 15:37:36
256

原创 设计模式系列--23种常见设计模式之单一职责原则(2)
概念单一职责原则(SRP:Single responsibility principle)又称单一功能原则,它规定一个类应该只有一个发生变化的原因。通俗来讲就是 一个类或模块应该有且只负责一件事。为什么,因为假如负责了2件事,任何一件事需要改变就引起了该模块的改变,违反了 “一个类应该只有一个发生变化的原因”。所以就可以简单的理解为就是 一个类或模块细分到只负责一个功能,这就要求了这个类不能太臃肿,要简单精细。问题由来有一个类T负责两个不同的职责:职责P1和职责P2。当因为职责P1的需求发
2020-10-28 11:06:50
196

原创 RocketMQ系列(三)---RocketMQ路由中心NameServer
目录一、NameServer功能二、路由中间件设计思路三、NameServer启动流程四、路由注册1、路由元信息2、路由注册3、路由删除4、路由发现一、NameServer功能(路由管理,路由注册,服务发现)1、为了管理和维护配置信息,状态信息,集群中的各个组件,通过它来了解全局信息。2、各个角色定期向NameServer上报自己的状态,超时未上报的视...
2019-06-12 22:44:16
1461

原创 RocketMQ系列(二)---RocketMQ环境搭建
RocketMQ环境搭建:官网参考地址,RocketMQ源代码地址,RocketMQ-externals源代码地址.1.检查jdk、maven;2.start nameserver;3.start broker;4.shutdown servers;5.rocketmq console;6.源代码导入学习;7.生产环境配置。
2019-05-06 14:18:14
1069
2

原创 RocketMQ系列(一)---RocketMQ介绍及入门使用
《RocketMQ实战与原理解析》《RocketMQ技术内幕》消息队列:应用解耦,流量控制,消息分发。RocketMQ设计目标。
2019-05-05 22:59:23
6664
1

原创 设计模式系列--23种常见设计模式之开篇(1)
前一段时间看了《大话设计模式》这本书,觉得很不错,而建议大家去看。从今天开始,这一系列文章主要去写设计模式相关,那么参考原作者的目录结构和文章的内容,根据自己的一些理解,进行一些总结归纳,感谢原作者的诙谐幽默的教学风格和简单易懂的说明,也让我对设计模式有了新的认识。 第一篇文章,按照惯例,一般都是做个简单的说明,那我们就先说一下常用的遵循的原则,和对所有的设计模式的一个简单归类。面向...
2018-05-17 22:12:12
306

原创 java面试系列--J2SE基础(十四)
31. Java IO与NIO。本文主要来自 http://tutorials.jenkov.com/java-nio/nio-vs-io.html原文是英文版,可以去学习下原文的系列文章,下文主要我在原文的基础上做了翻译和个人理解。在学习Java NIO和IO的API时候,我们很快就会想到这样一个问题:什么时候应该使用IO,什么时候应该使用NIO?在本文中,我将尝试阐明Java NIO和IO之间...
2018-04-17 22:10:57
252

原创 java面试系列--J2SE基础(十三)
29. foreach与正常for循环效率对比。foreach与for如何选择:数组结构的数据,建议使用普通for循环,它采用下标访问,检索速度很快,但是foreach性能也还可以。链表结构的数据,一般不要使用普通for循环获取数据,会依次检索,效率低,数据量很大时异常占用资源。代码实例:package com.ws.compareforeach;import java.util.ArrayL...
2018-03-09 20:53:38
248

原创 java面试系列--J2SE基础(十二)
28. wait()和sleep()的区别。wait是java.lang包的,属于Object的方法,sleep是属于Thread的方法;wait的时候,当前线程会释放资源锁,然后进入等待锁定池,只有针对此对象调用notify方法后本线程才会继续执行,sleep的时候,当前资源锁并没有释放,直到sleep结束然后继续执行;sleep的时候一般都要对异常进行处理,捕捉或外抛,而且sleep方法是一个...
2018-03-05 23:27:26
232

原创 java面试系列--J2SE基础(十一)
27. Concurrent包里的其他东西:ArrayBlockingQueue、CountDownLatch等等。ArrayBlockingQueue介绍:ArrayBlockingQueue是一个由数组支持的有界阻塞队列,继承自AbstractBlockingQueue,实现了BlockingQueue接口(Queue接口和Collection接口)。此队列按 FIFO(先进先出)原则对元素进...
2018-03-04 17:10:01
331

原创 java面试系列--J2SE基础(十)
26. ThreadPool用法与优势。类简介:public class ThreadPoolExecutor extends AbstractExecutorService 一个 ExecutorService,它使用可能的几个池线程之一执行每个提交的任务,通常使用 Executors 工厂方法配置。线程池解决的问题:1、增强性能;2、绑定和管理资源;线程池可以解决两个不同问题:由于减...
2018-03-03 17:00:14
255

原创 java面试系列--J2SE基础(九)
25. ThreadLocal的设计理念与作用。官方JDK7释义:以下节选自官方api中释义:This class provides thread-local variables. These variables differ from their normal counterparts in that each thread that accesses one (via its get or s...
2018-03-03 16:26:25
204

原创 java面试系列--J2SE基础(八)
24. 写出生产者消费者模式。生产者消费者模式介绍:生产者生产数据到缓冲区中,消费者从缓冲区中取数据。如果缓冲区已经满了,不能继续生产,则生产者线程阻塞等待,直到有空闲缓冲区可供继续生产;如果缓冲区为空,不能继续消费,则消费者线程阻塞等待,直到缓冲区有新产生可供消费。常见场景:比如厂家生产一批东西到商场,顾客消费者到商场买东西,厂家即为生产者,商场即为缓冲区,顾客即为消费者。缓冲区作用:1. 解耦...
2018-02-08 21:04:01
298

原创 java面试系列--J2SE基础(七)
22. 线程同步的方法:sychronized、lock、reentrantLock等。synchronized:在资源竞争一般,偶尔需要同步,synchronized是很合适的;因为编译程序通常会尽可能的进行优化synchronize。所以synchronized可读性非常好,容易理解和使用,但是对竞争资源激烈时会降低性能;ReentrantLock: 提供了多样化的同步,可以根据具体情况获取锁...
2018-01-30 17:11:49
314

原创 java面试系列--J2SE基础(六)
21. 实现多线程的两种方法:Thread与Runable。Thread是Class,要求单一继承,不能再继承其他类,有一定的局限性;Runable是接口Inteface,接口可以实现多个,方便拓展。在Java当中,线程通常都有五种状态,创建、就绪、运行、阻塞和死亡。 第一是创建状态。在生成线程对象,并没有调用该对象的start方法,这是线程处于创建状态。 第二是就绪状态。
2018-01-30 10:31:58
243

原创 java面试系列--J2SE基础(五)
20. java多态的实现原理。多态可以理解为 “引用”,对于面向对象,多态分为编译时多态和运行时多态。其中编辑时多态是静态的,主要指方法的重载,它是根据参数列表的不同(个数、类型)来区分不同的函数,通过编辑之后会变成两个不同的函数,在运行时谈不上多态。而运行时多态是动态的,它是通过动态绑定来实现的,也就是我们所说的多态性。所以可以这样理解:(可以结合这个定义及下面的代码实
2018-01-29 15:15:39
257

原创 java面试系列--J2SE基础(四)
16. Java面向对象的三个特征与含义。三大特征是:封装、继承和多态。封装是指将某事物的属性和行为包装到对象中,这个对象只对外公布需要公开的属性和行为,而这个公布也是可以有选择性的公布给其它对象。在java中能使用private、protected、public三种修饰符或不用(即默认default)对外部对象访问该对象的属性和行为进行限制。简单的说,一个类就是一个封装了数据以及操作这些数据的代
2018-01-18 22:16:48
319

原创 java面试系列--J2SE基础(三)
14. try catchfinally,try里有return,finally还执行么?1)、不管是否出现异常,finally块中代码都会执行;2)、当try和catch中有return时,finally仍然会执行;3)、finally是在return后面的表达式运算后执行的,具体返回哪一个,看下面的例子,不建议在finally里return,一般finally用于比如关闭资源等;
2018-01-15 21:25:35
256

原创 java面试系列--J2SE基础(二)
9. Map、Set、List、Queue、Stack的特点与用法。参考 https://www.cnblogs.com/yw-ah/p/5841369.htmlCollection 是对象集合, Collection 有两个子接口 List 和 SetList 可以通过下标 (1,2..) 来取得值,值可以重复Set 只能通过游标来取值,并且值是不能重复的ArrayList...
2018-01-13 11:33:02
325
1

原创 java面试系列--J2SE基础(一)
从今天开始整理一个系列文章,忘了上次从哪里看到的这些问题,都是些常见的面试题,当时把问题记了下来,今天开始,一一解答学习,顺便提升自己的技术知识基础水平,如有不正确的地方,可提出来共勉,谢谢。------------------------------------------------------------------------------------------------------
2018-01-12 16:25:14
533
原创 小白也来学架构--存储高性能(五)
NoSQL: 关系型数据库成熟在强大的sql功能和ACID属性,所以广泛应用。随着数据量级的增加,业务逻辑的复杂,数据结构的多样,全文检索的性能等,出现了不同NoSQL解决方案,Not Only SQL。常见的有如下四类:1、K-V存储:解决无法存储的数据结构问题,比如Redis。2、文档数据库:解决强schema约束的问题,比如MongoDB。3、列式数据库:解决大数据场景下的IO问题,比如HBase。4、全文搜索引擎:解决全文搜索性能问题,比如Elasticsearch。...
2021-03-25 20:57:38
435
1
原创 小白也来学架构--存储高性能(四)
存储方面一般我们能想到的三个:关系型数据库、NoSQL、缓存。关系型数据库主要介绍:读写分离 和 分库分表。读写分离: 1、分散压力到多节点,存储压力未改变,包括一主一从、一主多从、多主多从。 2、考虑复制延时,从而带来复杂性,一般解决的常见方法:写操作后的读操作指定发给主服务器;读从机失败后再读一次主机;关键业务读写在从,非关键业务读写分离。分库分表:分散访问压力,分散存储压力。 1、业务分库:按照业务模块将数据分散到不同的数据库服务器。同时带来其他问题,比如:join操作(...
2021-03-18 20:45:12
364
原创 小白也来学架构--架构设计流程(三)
架构设计我们一般遵循这样的流程:(1)分析系统复杂性,明确和梳理出系统的复杂点。比如是业务逻辑复杂,还是性能瓶颈,是系统部署运维困难,还是可用性差等等。做好这一步,可以避免我们花费无用功,避免设计优化完毕却与实际情况大相径庭;对于多复杂点,可以排列优先级,规划和合并,同类同处理。(2)设计主要方案和备选方案。一般我们可以设计出3--5个来,各自的差异性要大,技术选型也要大胆,不要局限性,从宏观层面去分析,而不是具体的分析什么接口什么数据这样的细节。(3)评估和选择备选方案。能参与评选的,基本都是
2021-01-20 21:55:28
362
6
原创 小白也来学架构--架构设计原则(二)
架构设计原则:合适、简单、演化合适:一个落地的好的架构一定是和当前环境所匹配的,也就是相对最合适的,没有说一味的追求高新立意 或是 多牛的新技术。只有结合当前系统环境,业务分析,层次结构,开发需要,运维环境,服务资源等等约束下,选择与之相匹配的才是合适和优秀的架构设计。简单:简单一定高于复杂。复杂包括结构的复杂性 和 逻辑的复杂性,而复杂所带来的就是各种成本的增加,对应的上层合适中,就是系统环境需求复杂,比如服务器资源增多,运维成本增大;业务逻辑复杂,拉长逻辑战线;开发复杂,迭代速度慢,成本高...
2021-01-20 21:30:34
166
1
原创 小白也来学架构--架构基础(一)
系统:有一群有关联的个体组成,根据某种规则运作,能组成个别元件不能单独完成的工作的群体。即“总体”、“整体”子系统:一群有关联的个体组成的系统,一般是大系统中的一部分。软件模块:一致而又互相紧密关联的软件组织。包含程序和数据结构。软件组件:自包含的、可编程的、可重用的、与语言无关的软件单元。易于组装到其他应用程序中。软件框架:为了实现某个业界标准或完成特定基本任务的软件组件的规范,也是为了实现规范,所提供的基础功能的软件产品。软件架构设计的目的是为了解决复杂度带来的问题...
2021-01-18 22:04:00
240
1
原创 Springboot 中Scheduled使用问题的记录
Springboot 中Scheduled使用问题的记录@Scheduled(fixedRate=5000):上一次开始执行时间点后5秒再次执行; 如果开始后5秒内任务没有处理完,则第6秒不会新开始任务,等当前任务执行完毕之后继续执行。@Scheduled(fixedDelay=5000):上一次执行完毕时间点5秒再次执行; 避免了上述情况。@Scheduled(initialDelay=1000, fixedDelay=5000):第一次延迟1秒执行,然后在上一次执行完毕时间点5秒再次执行;避免.
2020-11-19 20:45:22
1041
转载 HttpClient 4.3连接池参数配置及源码解读
本文转自https://www.cnblogs.com/trust-freedom/p/6349502.html 目前所在公司使用HttpClient 4.3.3版本发送Rest请求,调用接口。最近出现了调用查询接口服务慢的生产问题,在排查整个调用链可能存在的问题时(从客户端发起Http请求->ESB->服务端处理请求,查询数据并返回),发现原本的HttpClient连接池中的...
2020-11-12 15:06:14
876
原创 我的管理类联考考研经验分享
我的管理类联考考研经验分享距离去年考研已经一年了,也已经开学2个多月了,今天有时间去总结分享下我的一些管理类(EMBA,MBA,MEM,MPACC等)考研的经验,希望能帮到一些有考研想法的在职和在校生。说的不好,还望指正。1、资料类:买了 199管综联考真题,英语二真题,逻辑1001,轻松数学公关,长难句解密,一本作文书,一个时政类阅读,还有预测题。上面一堆废话, 有用的永远都只有2个, 管综真题,英语真题, 其他的都统统不建议买。原因:乱花钱,不实用,浪费时间,在职的需要的就是高效 和 方法
2020-11-01 16:24:28
1966
3
python环境安装V1.1.docx
2020-11-11
go运行环境安装V1.1.docx
2020-11-11
open-falcon安装V1.1.docx
2020-11-11
Windows安装ELK步骤.doc
2020-11-11
IBM_MQ参考资料
2017-06-14
SSM框架开发所需jar包
2015-08-25
分支界限法(ACM程序设计,算法竞赛)
2012-06-05
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人