- 博客(101)
- 资源 (8)
- 收藏
- 关注
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 设计模式入门总目录
设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。大概总结了一下GOF的23种设计模式,并且将每一种设计模式加入代码进行说明,希望更加方便理解和以后的查阅。一般总体来说GOF设计模式分为三大类:创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 结构型模式,共七种:适配器模式、
2022-03-18 17:46:45
705
4
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 BFS,DFS,以及图(Graph),树(Tree)的思考
最近刷leetcode发现了很多题有使用到树,图,dfs和bfs,回想当时在离散数学,图论,还有数据结构的课上都有讨论过这方面的问题,于是就想尽自己的力去总结一份文档分享出来,也方便自己需要的时候查阅。个人理解可能并不准确,如有问题请联系修改。 这里做个目录吧: 1.图论中图的基础定义: BFS,DFS,以及图(Graph),树(Tree)的思考(1)_PigeonEssence的博客-CSDN博客我们在算法题以及很多算法理论中,经常会讨论到DFS和BFS算...
2021-11-11 16:27:16
14714
14
原创 使用Docker Compose运行Springboot遇到的问题
为了便于部署,使用了docker去打包了redis,mysql,emqx.es和业务服务的镜像,在此期间遇到了一系列问题,做个记录。
2024-08-15 14:21:44
532
原创 CentOS7 内网安装mosquitto
mosquitto是一款实现了消息推送协议 MQTT v3.1 的开源消息代理软件,Mosquitto轻量,适用于低功耗单板计算机到完整服务器的所有设备。Mosquitto项目还提供了用于实现MQTT客户端的C库以及非常受欢迎的mosquitto_pub和mosquitto_sub命令行MQTT客户端。testa只能订阅/req/#主题、发布/res/#主题,testb正好相反。,然后根据信息选择对应的版本。因为涉及到make的指令,所以g++也需要安装。上查找对应的版本然后上传到堡垒机。
2023-04-07 12:09:38
1067
原创 Redis的基础使用
Redis 默认了16个数据库,0-15redis keykeys * 查看所有的keyEXISTS name 判断key是否存在move name 1 移除当前keyEXPIRE name time 设置过期时间(s)ttl name 查看当前key的剩余时间五大数据类型String 字符串类型SET key1 v1 # 设置值keys * # 获得所有jkeyget key1 # 获得值EXISTS key1 # 判断某个key是否存在APPEND ke
2022-05-07 17:36:24
664
原创 JUC(3)
文章基于【狂神说Java】JUC并发编程最新版通俗易懂_哔哩哔哩_bilibili 视频总结而来13. 四大函数式接口函数式接口只有一个方法的接口,比如runnable:@FunctionalInterfacepublic interface Runnable { /** * When an object implementing interface <code>Runnable</code> is used * to create a
2022-05-06 09:24:08
111
原创 JUC(2)
文章基于【狂神说Java】JUC并发编程最新版通俗易懂_哔哩哔哩_bilibili 视频总结而来目录7.集合类不安全ArrayList不安全的解决办法:HashSet不安全的解决办法:HashMap不安全的解决方法:8.Callable和runnable的区别:9. JUC 三大常用辅助类CountDownLatchCyclicBarrier10. 读写锁ReadWriteLock11. 阻塞队列四组API:SynchronousQueue:1
2022-05-05 10:56:05
167
原创 JUC(1)
文章基于【狂神说Java】JUC并发编程最新版通俗易懂_哔哩哔哩_bilibili 视频总结而来目录1. 什么是 JUC2. 线程和进程3.Lock锁4.生产者和消费者问题5.Conditional6. 锁问题1. 什么是 JUCjuc就是 java并发包java.util.concurrent JUCjava.util.concurrent.atomic 原子性java.util.concurrent.locks lock锁java.util
2022-05-05 08:50:26
193
原创 Docker 基本安装与使用
一.Docker概述产品: 开发-到上线 两套环境,应用环境,应用配置!1.解决 “在我的电脑上可以运行的问题”2.解决配置开发环境麻烦的问题3.开发即运维Docker:jar+环境(镜像) 进行打包 下载镜像,直接运行即可。Doker的思想来自于集装箱,每一个箱子相互隔离,可以将服务器压榨到极致。相对于虚拟机技术,十分轻巧。vm:Linux centOS原生镜像(一个电脑),虚拟出一系列的硬件,运行一个完整的操作系统。 隔离需要开启多个虚拟机(笨重)1.资源占用多2.冗
2022-04-18 17:29:41
978
1
原创 IK分词器自定义词典问题
在学习ES的IK分词器的时候,遇到了一些小问题,总结一下:1.下载分词器:IK分词器的下载在:https://github.com/medcl/elasticsearch-analysis-ik/releases/tag/v7.6.2不是直接下载源码,版本和es版本对应2.安装分词器:直接解压到es的plugins文档下面,新建一个ik的文件夹。重启es可以看到加载分词器插件成功3.分词算法:IK有两个分词算法: ik_smart是最少切分,ik_max.
2022-04-11 16:40:34
1061
原创 JVM内存模型整理
目录一、 虚拟机栈:1.局部变量表2.操作数栈3.动态连接4.方法返回地址5.附加信息二、 本地方法栈:三、 PC寄存器:四、 堆:GC:1.永久代:2.新生代:3.老年代:五、方法区:Class常量池:运行时常量池:字符串常量池:六、元空间:参考:根据 JVM 规范,JVM 内存共分为虚拟机栈、堆、方法区、程序计数器、本地方法栈五个部分。 一、 虚拟机栈: 虚拟机栈是每个线程有一个私有的栈,随着...
2022-03-22 15:12:29
1503
1
原创 Int,Integer的一些理解
package num;/** * @author Zeyu Wan * @version 1.0.0 * @ClassName NumberTest2.java * @Description Number Test * @createTime 2022年03月21日 13:15:00 */public class NumberTest2 { public static void main(String[] args) { float f1 = 19920....
2022-03-21 15:57:52
263
原创 传递方式的一些小问题
package num;/** * @author Zeyu Wan * @version 1.0.0 * @ClassName ArrayTest.java * @Description 数组测试 * @createTime 2022年03月21日 13:21:00 */public class ArrayTest { public static void main(String[] args) { String str = "good"; ch.
2022-03-21 14:43:30
391
原创 《设计模式入门》 设计原则
设计原则(design principle)是2018年由全国科学技术名词审定委员会公布的计算机科学技术名词。在进行软件系统设计时所要遵循的一些经验准则,应用该准则的目的通常是为了避免某些经常出现的设计缺陷。实际上,这些原则的目的只有一个:降低对象之间的耦合,增加程序的可复用性、可扩展性和可维护性。1.开闭原则(Open Close Principle):开闭原则规定了,一个软件实体,如类,模块和函数应该对外扩展开放,对内修改关闭。在程序需要进行拓展的时候,不能去修改原有的代码,实现一个
2022-03-21 09:20:36
184
原创 《设计模式入门》 24.解释器模式
解释器模式(Interpreter Pattern)提供了评估语言的语法或表达式的方式,它属于行为型模式。这种模式实现了一个表达式接口,该接口解释一个特定的上下文。这种模式被用在 SQL 解析、符号处理引擎等。解释器模式一般分为五类:抽象解释器(AbstractExpression):具体的解释任务由各个实现类完成。 终结符表达式(TerminalExpression):实现与文法中的元素相关联的解释操作,通常一个解释器模式中只有一个终结表达式,但有多个实例,对应不同的终结符。 非终结符表达式(
2022-03-18 17:05:44
106
原创 《设计模式入门》 23.中介者模式
定义一个中介对象来封装一系列对象之间的交互,使原有对象之间的耦合松散,且可以独立地改变它们之间的交互。中介者模式又叫调停模式,它是迪米特法则的典型应用。我们接触最多的情况就比如是在ORM框架中,中间层负责了应用层与数据库层的交互,将应用层与数据库层解耦,比如mybaties的应用。中介者模式一般分类四类:抽象中介者(Mediator)角色:它是中介者的接口,提供了同事对象注册与转发同事对象信息的抽象方法。 具体中介者(ConcreteMediator)角色:实现中介者接口,定义一个 List
2022-03-18 16:00:07
526
原创 《设计模式入门》 22.访问者模式
访问者模式就是将作用于某种数据结构中的各元素的操作分离出来封装成独立的类,使其在不改变数据结构的前提下可以添加作用于这些元素的新的操作,为数据结构中的每个元素提供多种访问方式。它将对数据的操作与数据结构进行分离。简单来说就是我们可以通过不同的访问者的身份进行区分,然后让他们看到自己想看到的东西,或者我们想让他们看到的东西。访问者模式包含以下主要角色:抽象访问者(Visitor)角色:定义一个访问具体元素的接口,为每个具体元素类对应一个访问操作 visit() ,该操作中的参数类型标识了被访问的具
2022-03-18 15:22:57
487
原创 《设计模式入门》 21.备忘录模式
备忘录模式就是在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,以便以后当需要时能将该对象恢复到原先保存的状态。该模式又叫快照模式。我们在很多地方可以看到版本快照,很多都是使用的备忘录模式来进行版本的管理。备忘录模式一般分为三个大类:发起人(Originator)角色:记录当前时刻的内部状态信息,提供创建备忘录和恢复备忘录数据的功能,实现其他业务功能,它可以访问备忘录里的所有信息。 备忘录(Memento)角色:负责存储发起人的内部状态,在需要的时候提供这些内部状态给
2022-03-17 17:32:28
1211
原创 《设计模式入门》 20.状态模式
在状态模式中,我们创建表示各种状态的对象和一个行为随着状态对象改变而改变的 context 对象。简单理解,就是一个拥有状态的context对象,在不同的状态下,其行为会发生改变。比如我们见得最多的,就是线程的状态:多线程存在 5 种状态,分别为新建状态、就绪状态、运行状态、阻塞状态和死亡状态,各个状态当遇到相关方法调用或事件触发时会转换到其他状态 ,这就是状态模式的一个经典应用。一般来说,状态模式分为三类:抽象状态角色(State):接口或抽象类,负责对象状态定义,并且封装环境角色以实现状
2022-03-17 15:13:30
432
原创 《设计模式入门》 19.命令模式
命令模式就是将一个请求封装为一个对象,使发出请求的责任和执行请求的责任分割开。这样两者之间通过命令对象进行沟通,这样方便将命令对象进行储存、传递、调用、增加与管理。一般命令模式由四类组成:抽象命令类(Command)角色:声明执行命令的接口,拥有执行命令的抽象方法 execute()。 具体命令角色(Concrete Command)角色:是抽象命令类的具体实现类,它拥有接收者对象,并通过调用接收者的功能来完成命令要执行的操作。 实现者/接收者(Receiver)角色:执行命令功能的相关操作,是
2022-03-16 15:36:59
210
原创 《设计模式入门》 18.责任链模式
责任链模式(Chain of Responsibility Pattern)为请求创建了一个接收者对象的链。这种模式给予请求的类型,对请求的发送者和接收者进行解耦,请求沿着责任链传递,直到有一个对象处理了它为止。责任链上的处理者负责处理请求,客户只需要将请求发送到责任链上即可,无须关心请求的处理细节和请求的传递,所以责任链将请求的发送者和请求的处理者解耦了。一般来说,责任链模式由三类构成:抽象处理者(Handler)角色:定义一个处理请求的接口,包含抽象处理方法和一个后继连接。 具体处理者
2022-03-16 13:24:00
422
原创 《设计模式入门》 17.迭代器模式
迭代器模式就是提供一种方法,顺序访问一个聚合对象中各个元素, 而又无须暴露该对象的内部表示。也就是说可以让我们以相同的方式,遍历不同的数据结构元素,这些数据结构包括;数组、链表、树等,而用户在使用遍历的时候并不需要去关心每一种数据结构的遍历处理逻辑,从让使用变得统一易用。不同种类的对象可能需要不同的遍历方式,所以我们对每一种类型的对象配一个迭代器,最后把多个迭代器合成一个进行调用。一般,迭代器模式分为四个角色:迭代器角色(Iterator):定义遍历元素所需要的方法,一般...
2022-03-14 17:30:44
548
原创 《设计模式入门》 16.观察者模式
定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。也就是就是当一个行为发生时传递信息给另外一个用户接收做出相应的处理,但是两者之间没有直接的耦合关联。观察者模式一般分为4类:抽象被观察者角色:也就是一个抽象主题,它把所有对观察者对象的引用保存在一个集合中,每个主题都可以有任意数量的观察者。抽象主题提供一个接口,可以增加和删除观察者角色。一般用一个抽象类和接口来实现。 抽象观察者角色:为所有的具体观察者定义一个接口,在得到主题通知时更新自己。
2022-03-10 17:36:09
566
4
原创 《设计模式入门》 15.模板模式
模板模式就是父类模板定义一个操作中算法的骨架,而将一些步骤延迟到子类中,模板方法使得子类可以不改变算法的结构即可重定义该算法的某些特定步骤。模板这种东西我们在很多地方都会有接触。比如常用的freemaker就是经典的模板,我们可以简单的理解成,我们先规定一个大的框架,相当于爸爸把儿子的路安排的明明白白,单儿子能把这条路走成什么样,就要看儿子自己的造化了。模板模式一般分为两类 :抽象父类(AbstractClass):实现了模板方法,定义了算法的骨架。 具体类(C...
2022-03-10 14:35:47
206
原创 《设计模式入门》 14.策略模式
策略模式定义了一系列算法,将每一个算法封装起来,并让它们可以相互替换。策略模式让算法独立于使用它的客户而变化。也就是可以解决一堆ifelse难以维护的问题。如果在一个系统里面有许多类,它们之间的区别仅在于它们的行为,那么使用策略模式可以动态地让一个对象在许多行为中选择一种行为,然后我们对具体行为进行包装,对用户提供行为接口,一方面对我们的内部算法进行了保密封装,另一方面减少了用户端的if-else判断。一般策略模式分为三类:抽象策略角色: 这个是一个抽象的角色,通常情况下使用接口或者抽象类去
2022-03-09 16:29:24
211
原创 《设计模式入门》 13.享元模式
享元模式(Flyweight Pattern)就是通过共享的方式高效的支持大量细粒度的对象。一般情况下,享元模式应用于在有大量对象时,有可能会造成内存溢出的情况。我们把其中共同的部分抽象出来,如果有相同的业务请求,直接返回在内存中已有的对象,避免重新创建。一般来说享元模式的结构有两个要求: 内部状态指对象共享出来的信息,存储在享元信息内部,并且不回随环境的改变而改变; 外部状态指对象得以依赖的一个标记,随环境的改变而改变,不可共享。 在JAVA中,这也是很常见的一种模式了,在ja
2022-03-08 16:48:15
244
原创 《设计模式入门》 12.组合模式
组合模式有时又叫作部分-整体模式,它是一种将对象组合成树状的层次结构的模式,用来表示“部分-整体”的关系,使用户对单个对象和组合对象具有一致的访问性。也就是说这种把相似对象(也可以称作是方法)组合成一组可被调用的结构树对象的设计思路叫做组合模式。讨论组合模式,我们一般会讨论决策树。也就是说我们一般可以把组合模式看成一个链接组织起来的结构树,这种模式一般在结构树的解决方案用的非常多。一般组合模式由三个角色构成:抽象构件(Component)角色:它的主要作用是为树叶构件和树枝构件声明公共接口,
2022-03-08 10:17:52
268
原创 《设计模式入门》 11.桥接模式
桥接模式简单来说就是将抽象部分与它的实现部分分离,使它们都可以独立地变化。一些组合中如果有如果每一个类都实现不同的服务可能会出现笛卡尔积,而使用桥接模式就可以非常简单的将抽象化与实现化脱耦,使得二者可以独立地变化。怎么理解呢,假设我们有一个支付订单的任务,我们可以通过支付宝和微信支付来实现支付,支付宝和微信支付又分别对应了人脸识别和指纹识别。支付方式和验证方式可以两两对应,这时候的选择就产生了笛卡尔积:支付宝+人脸,支付宝+指纹,微信+人脸,微信+指纹。随着支付方式和验证方式的增加,我们产生的笛
2022-03-07 10:05:28
346
原创 《设计模式入门》 10.外观模式
外观模式也叫门面模式(Facade Pattern):外部与一个子系统的通信必须通过一个统一的外观对象进行,为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。门面模式又称为外观模式,它是一种对象结构型模式。简单来说就是隐藏了系统的复杂性,并向客户端提供了一个可以访问系统的接口,让客户可以更简单的使用这个系统。这个模式中,一般存在3个角色。门面角色:外观模式的核心。它被客户角色调用,它熟悉子系统的功能。内部根据客...
2022-03-04 16:54:18
277
原创 《设计模式入门》 9.代理模式
代理模式可以说是我们在java学习中非常常见的一个设计模式了,在很多地方我们都可以看到代理模式的影子。比如:Spring 的 Proxy 模式(AOP编程 )AOP的底层机制就是动态代理 mybatis中执行sql时mybatis会为mapper接口通过jdk动态代理的方法生成接口的实现类 Feign对于加了@FeignClient 注解的类会在Feign启动时,为其创建一个本地JDK Proxy代理实例,并注册到Spring IOC容器可以看出,代理模式就是给...
2022-03-04 13:32:45
481
原创 《设计模式入门》 8.装饰器模式
装饰器模式主要用于对象的功能扩展。我们使用装饰类动态的将新功能附加到对象上。在对象功能扩展方面,它比继承更有弹性。装饰器的核心就是再不改原有类的基础上给类新增功能,并且不改变原有类。一般我们提到对象功能扩展,很大一部分都会联想到使用继承,或者AOP的方式。我们使用装饰器模式来设计程序,不仅能避免AOP的复杂,还能解决继承不断横向扩展导致子类膨胀的问题,我们不在考虑大量子类的维护了。装饰模式一共有四部分组成:抽象组件角色(Component):定义一个对象接口,以规范准备接受附...
2022-03-02 10:42:19
259
原创 《设计模式入门》7.适配器模式
适配器模式的主要作用就是把原本不兼容的接口,通过适配修改做到统一。比如美版和港版电脑的插头与国行不一样,所以我们需要更换电源适配器,或者增加一个转换插头来解决问题。适配器模式一般分为三种:1.类适配器模式:将一个类转换成满足另一个新接口的类创建一个新类,继承原有的类,实现新的接口2.对象适配器模式:将一个对象转换成满足另一个新接口的对象创建一个Wrapper类,持有原类的一个实例,在Wrapper类中调动实例的方法3.接口适配器模式:当不希望实现一个接口中所有的方法时
2022-03-01 16:18:49
253
原创 《设计模式入门》6.原型模式
一般我们对于原型模式的定义就是:用原型实例指定创建对象的种类并且通过拷贝这些原型对象创建新的对象。简单来说就是一个deep copy。所以我们再讨论原型模式之前,先讨论一下拷贝。=========================================================================拷贝一般在java的拷贝中,分为深拷贝(DeepCopy)和浅拷贝(ShallowCopy)。浅拷贝:将一个对象拷贝后,基本数据类型的变量都会重新创建,而引
2022-02-28 17:26:01
304
原创 《设计模式入门》 5.建造者模式
造者模式(Builder Pattern):将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。建造者模式是一步一步创建一个复杂的对象,它允许用户只通过指定复杂对象的类型和内容就可以构建它们,用户不需要知道内部的具体构建细节。建造者模式属于对象创建型模式。根据中文翻译的不同,建造者模式又可以称为生成器模式。 简单来说,假设我们需要装电脑主机,都是电脑但是配置可能不同,有的人光追,有的人想要AMD全家桶。那我们需要的就是创建电脑这个对...
2022-02-28 11:30:17
345
NIO的简单理解SelectorTest.java
2021-11-12
IO测试代码_IOTest.java
2021-11-12
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人