自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(80)
  • 问答 (1)
  • 收藏
  • 关注

原创 Java设计模式之代理模式

代理模式定义以下引用来自于《head first 设计模式》第十章代理模式为另一个对象提供一个替身或占位符以控制对这个对象的访问。优缺点以下引用来自于参考1代理模式的主要优点有:代理模式在客户端与目标对象之间起到一个中介作用和保护目标对象的作用;代理对象可以扩展目标对象的功能;代理模式能将客户端与目标对象分离,在一定程度上降低了系统的耦合度,增加了程序的可扩展性其主要缺点是:代理模式会造成系统设计中类的数量增加在客户端和目标对象之间增加一个代理对象,会造成请求处理速度变慢

2021-11-02 11:37:52 212

原创 Java设计模式之状态模式

状态模式定义状态模式允许对象在内部状态改变时改变它的行为,对象看起来好像修改了它的类。优缺点主要优点如下。结构清晰,状态模式将与特定状态相关的行为局部化到一个状态中,并且将不同状态的行为分割开来,满足“单一职责原则”。将状态转换显示化,减少对象间的相互依赖。将不同的状态引入独立的对象中会使得状态转换变得更加明确,且减少对象间的相互依赖。状态类职责明确,有利于程序的扩展。通过定义新的子类很容易地增加新的状态和转换。状态模式的主要缺点如下。状态模式的使用必然会增加系

2021-10-29 17:51:30 183

原创 Java设计模式之策略模式

策略模式定义以下定义来自于《head first 设计模式》第一章策略模式定义了算法族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。优缺点以下引用来自于参考1策略模式的主要优点如下。多重条件语句不易维护,而使用策略模式可以避免使用多重条件语句,如 if…else 语句、switch…case 语句。策略模式提供了一系列的可供重用的算法族,恰当使用继承可以把算法族的公共代码转移到父类里面,从而避免重复的代码。策略模式可以提供相同行为的不同实现,客户可

2021-10-29 10:26:58 178

原创 Java设计模式之组合模式

组合模式定义以下引用来自于《head first 设计模式》第九章组合模式允许你将对象组合成树形结构来表现“整体/部分”层次结构。组合能让客户以一致的方式处理个别对象以及对象组合。优缺点以下引用来自于参考1组合模式的主要优点有:组合模式使得客户端代码可以一致地处理单个对象和组合对象,无须关心自己处理的是单个对象,还是组合对象,这简化了客户端代码;更容易在组合体内加入新的对象,客户端不会因为加入了新的对象而更改源代码,满足“开闭原则”;其主要缺点是:设计较复杂,客户端需要花更

2021-10-28 15:22:56 148

原创 Java设计模式之迭代器模式

迭代器模式定义以下引用来自于《head first 设计模式》第九章迭代器模式提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露其内部的表示。优越点以下引用来自于参考1迭代器模式是一种对象行为型模式,其主要优点如下。访问一个聚合对象的内容而无须暴露它的内部表示。遍历任务交由迭代器完成,这简化了聚合类。它支持以不同方式遍历一个聚合,甚至可以自定义迭代器的子类以支持新的遍历。增加新的聚合类和迭代器类都很方便,无须修改原有代码。封装性良好,为遍历不同的聚合结构提供一个统一的接口

2021-10-28 15:21:36 209

原创 Java设计模式之模板方法模式

模板方法模式定义以下引用来自于《head first 设计模式》第8章模板方法模式在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中.模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。优缺点以下引用来自于参考1该模式的主要优点如下。它封装了不变部分,扩展可变部分。它把认为是不变部分的算法封装到父类中实现,而把可变部分算法由子类继承实现,便于子类继续扩展。它在父类中提取了公共的部分代码,便于代码复用。部分方法是由子类实现的,因此子类可以通过扩展方式增加相

2021-10-28 15:18:30 96

原创 Java设计模式-外观模式(Facade模式)

外观模式(Facade模式)定义一下引用来自于《head first 设计模式》第七章外观模式提供了一个统一的接口,用来访向子系统中的一群接口。外观定义了一个高层接口,让子系统更容易使用。优缺点以下引用来自于参考1外观(Facade)模式是“迪米特法则”的典型应用,它有以下主要优点。降低了子系统与客户端之间的耦合度,使得子系统的变化不会影响调用它的客户类。对客户屏蔽了子系统组件,减少了客户处理的对象数目,并使得子系统使用起来更加容易。降低了大型软件系统中的编译依赖性,简化了系统在不

2021-10-21 17:55:23 169

原创 Java设计模式-适配器模式(Adapter模式)

适配器模式(Adapter模式)定义适配器模式将一个类的接口,转换成客户期望的另一个接口。适配器让原本接口不兼容的类可以合作无间。使用场景引用参考1适配器模式(Adapter)通常适用于以下场景。以前开发的系统存在满足新系统功能需求的类,但其接口同新系统的接口不一致。使用第三方提供的组件,但组件接口定义和自己要求的接口定义不同。优缺点该模式的主要优点如下。客户端通过适配器可以透明地调用目标接口。复用了现存的类,程序员不需要修改原有代码而重用现有的适配者类。将目标类和适

2021-10-21 11:01:50 222

原创 Java设计者模式之装饰器模式

装饰着模式定义以下引用来自于 《head first 设计模式》装饰者模式动态地将责任附加到对象上。若要扩展功能,装饰者提供了比继承更有弹性的替代方案。使用场景以下引用来自于参考1前面讲解了关于装饰器模式的结构与特点,下面介绍其适用的应用场景,装饰器模式通常在以下几种情况使用。当需要给一个现有类添加附加职责,而又不能采用生成子类的方法进行扩充时。例如,该类被隐藏或者该类是终极类或者采用继承方式会产生大量的子类。当需要通过对现有的一组基本功能进行排列组合而产生非常多的功能时,采用继承关

2021-10-20 16:02:43 101

原创 Java设计模式之工厂模式

工厂模式认识工厂模式所有的工厂模式都用来封装对象的创建。工厂方法模式(Factory Method Pattern)通过让子类决定该创建的对象是什么,来达到将对象的创过封装的目的。简单工厂定义以下引用自**《head first 设计模式》**书中对简单工厂的描述简单工厂其实不是一个设计模式,反而比较像是- -种编程习惯。但由于经常被使用,所以我们给它一一个"Head First Pattern荣誉奖"。有些开发人员的确是把这个编程习惯误认为是“工厂模式”(Factory Pattern

2021-10-12 09:44:39 394

原创 java设计模式之命令模式

命令模式定义命令模式:将“请求”封装成对象,以便封装成对象,以便使用不同的请求,队列或者日志请求来参数化其他对象。模式也支持可撤销的操作。将一个请求封装为一个对象,使发出请求的责任和执行请求的责任分割开。这样两者之间通过命令对象进行沟通,这样方便将命令对象进行储存、传递、调用、增加与管理。例如:activiti的cmd来操作mybatis框架从而操作数据库使用场景界面的一个按钮都是一条命令模拟CMD(DOS命令)订单的撤销/恢复触发-反馈机制activiti(工作流

2021-10-11 17:28:25 110

原创 设计模式(Java)之观察者模式

观察者模式定义观察者模式定义了对象之间的一对多依赖, 这样一来,当一个对象改变状态时,它的所有依赖着都会受到通知并自动更新。这种模式有时又称作发布-订阅模式、模型-视图模式,它是对象行为型模式。使用场景对象间存在一对多关系,一个对象的状态发生改变会影响其他对象。当一个抽象模型有两个方面,其中一个方面依赖于另一方面时,可将这二者封装在独立的对象中以使它们可以各自独立地改变和复用。实现类似广播机制的功能,不需要知道具体收听者,只需分发广播,系统中感兴趣的对象会自动接收该广播。多层级嵌套使

2021-04-28 17:23:08 71

原创 使用spring aop进不了切面(@Aroud)

自定义切面的注解,使用的时候一直进不了切面即直接使用b()调用方法,这里其实使用的是this对象去调用的,而aop只有使用代理对象去调用才可以。正确用法:@Autowiredprivate Test test;@RequestMapping("/a")public void a () {test.b();}@Retrypublic void b () {System.out.println(“123”);}直接注入对象,即使用spring的代理对象,然后调用———————————

2021-04-27 10:54:57 2081

原创 设计模式(Java)之单例模式

单例模式定义单例模式确保一个类只有一个实例(私有化构造方法),并提供一个全局访问点(static getNewInstance)。常用场景1 多线程的线程池设计常用单例模式。原因:线程池要方便对池中的线程进行控制2应用程序的日志操作类。原因:防止共享问题常用实现懒汉式, 经典实现(线程不安全)public class Singleton { private static Singleton uniqueInstance; private Singleton() {}

2021-04-26 18:36:36 93

原创 设计模式(Java)之七大设计原则

设计模式(Java)之七大设计原则七大设计原则单一职责原则降低类的复杂度,一个类只负责一个职责。接口隔离原则如果对于实现类来说。接口不是最小接口,则没必要实现其全部方法。对接口进行拆分尽量将臃肿庞大的接口拆分成更小的和更具体的接口依赖倒置原则要依赖抽象,不要依赖具体类指导方针变量不可以持有具体类应用不要让类派生自具体类不要覆盖基类中已实现的方法里氏替换原则继承必须确保超类所拥有的性质在子类中仍然成立(Inheritance should ensure that any p

2021-04-26 17:28:05 104

转载 Redis之3种常用的缓存读写策略

Redis之3种常用的缓存读写策略这3 种缓存读写策略各有优劣,不存在最佳,需要我们根据具体的业务场景选择更适合的。Cache Aside Pattern(旁路缓存模式)Cache Aside Pattern 是我们平时使用比较多的一个缓存读写模式,比较适合读请求比较多的场景。Cache Aside Pattern 中服务端需要同时维系 DB 和 cache,并且是以 DB 的结果为准。下面我们来看一下这个策略模式下的缓存读写步骤。写 :先更新 DB然后直接删除 cache 。读 :

2021-02-20 15:08:19 1058

原创 Spring 事务传播行为

Spring 事务传播行为前言Spring在TransactionDefinition接口中规定了7种类型的事务传播行为。事务传播行为是Spring框架独有的事务增强特性,他不属于的事务实际提供方数据库行为。这是Spring为我们提供的强大的工具箱,使用事务传播行可以为我们的开发工作提供许多便利。但是人们对他的误解也颇多,你一定也听过“service方法事务最好不要嵌套”的传言。要想正确的使用工具首先需要了解工具。本文对七种事务传播行为做详细介绍,内容主要代码示例的方式呈现。什么是事务传播行

2021-01-30 22:00:19 100

原创 spring事务失效的原因与场景

spring事务失效的原因与场景Spring的事务在什么样的情况下会失效?1底层数据库不支持事务如MySQL的MyISAM 引擎是不支持事务操作的,如果底层使用MySQL数据库和MyISAM 引擎。那么spring事务事务管理会失效。2没有被spring管理如下面例子所示:// @Servicepublic class OrderServiceImpl implements OrderService { @Transactional public void updateOrde

2021-01-26 17:22:45 238

原创 Java并发之一些重要的锁概念

Java并发之一些重要的锁概念内置锁即sychronized显示锁如ReentrantLock公平锁对于公平锁来说,其内部维护了一个FIFO的队列,先申请的线程优先获取锁。而对于非公平锁来说,申请锁的线程可能插队,后申请锁的线程有可能先拿到锁。对ReentrantLock类而言,通过构造函数传参可以指定该锁是否是公平锁,默认是非公平锁。一般情况下,非公平锁的吞吐量比公平锁大,如果没有特殊要求,优先使用非公平锁。可重入锁某个线程已经获得某个锁,可以再次获取锁而不会出现死锁。

2021-01-25 21:22:03 98

原创 JVM入门之类加载器

JVM入门之类加载器JVM架构体系[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JtKNBVLX-1611303275103)(https://note.youdao.com/yws/api/personal/file/F88865AE2E12481A9226A102289EDEF9?method=download&shareKey=8f3e2a79c31985c4a432e9aa401f07a7)]类加载器负责加载class文件,class文件在文件开头有特

2021-01-22 16:14:13 138

原创 Java并发之线程池

Java并发之线程池使用线程池的好处:降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。提高响应速度。当任务到达时,任务可以不需要的等到线程创建就能立即执行。提高线程的可管理性。线程是稀缺资源,如果无限制的创建,不仅会消耗系统资源,还会降低系统的稳定性,使用线程池可以进行统一的分配,调优和监控。ThreadPoolExecutorRunnable 接口和 Callable 接口的区别:Runnable自 Java 1.0 以来一直存在,但Callable仅在 Java

2021-01-19 17:22:08 88

原创 Java并发之`ReadWriteLock`和`BlockingQueue`

Java并发之ReadWriteLock和BlockingQueueReadWriteLock一个 ReadWriteLock保持一对一联系 locks,只读操作和书写。ReadWriteLock管理一组锁,一个是只读的锁,一个是写锁。Java并发库中ReetrantReadWriteLock实现了ReadWriteLock接口并添加了可重入的特性。主要方法: /** * Returns the lock used for reading. *读锁 * @re

2021-01-18 23:33:58 80

原创 Java并发之AQS 组件:CountDownLatch ,CyclicBarrier和Semaphore

Java并发之AQS 组件:CountDownLatch ,CyclicBarrier和SemaphoreCountDownLatch (倒计时器)CountDownLatch 是一个同步工具类,用来协调多个线程之间的同步。这个工具通常用来控制线程等待,它可以让某一个线程等待直到倒计时结束,再开始执行。重要方法//调用await()方法的线程会被挂起,它会等待直到count值为0才继续执行public void await() throws InterruptedException { };

2021-01-18 17:02:09 188

原创 Java并发之线程创建方式

Java并发之线程创建方式继承Thread类实现多线程class MyThread extends Thread { public MyThread() { } @Override public void run() { }}实现Runnable接口class MyThread implements Runnable{ @Override public void run() { }}实现Callable接口class My

2021-01-18 15:44:58 49

原创 MySql sql注入问题的学习

MySql sql注入问题什么是SQL注入?SQL注入是影响企业运营最具有破坏性的漏洞之一。应用程序向后台数据库进行SQL查询时,如果为攻击者提供了影响该查询的能力,就会引起SQL注入。示例:name = "Robert');DROP TABLE students;--"query = "INSERT INTO students (name) VALUES ('%s')" % (name)conn.executescript(query)也就是说,这段包含DROP TABLE关键字的数据

2021-01-15 11:28:49 270 2

原创 mysql事务的学习

mysql事务事务的特性(ACID)**原子性(Atomicity)????*事务是最小的执行单位,不允许分割。事务的原子性确保动作要么全部完成,要么完全不起作用;**一致性(Consistency):**执行事务前后,数据保持一致,例如转账业务中,无论事务是否成功,转账者和收款人的总额应该是不变的;**隔离性(Isolation):**并发访问数据库时,一个用户的事务不被其他事务所干扰,各并发事务之间数据库是独立的;**持久性(Durability):**一个事务被提交之后。它对数据库中数据的

2021-01-13 16:07:41 126

原创 MySql索引的学习

MySql索引说说你对 MySQL 索引的理解?MYSQL官方对索引的定义为:索引(Index)是帮助MySQL高效获取数据的数据结构,所以说索引的本质是:数据结构。可以简单的理解为“排好序的快速查找数据结构”,数据本身之外,数据库还维护者一个满足特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据,这样就可以在这些数据结构上实现高级查找算法。这种数据结构,就是索引。下图是一种可能的索引方式示例。左边的数据表,一共有两列七条记录,最左边的是数据记录的物理地址为了加快Co

2021-01-13 14:01:09 89

原创 java并发之CAS自旋锁

CAS (Compare And Swap)概念CAS的全称是Compare-And-Swap,它是CPU并发原语。比较交换(自旋锁)它的功能是判断内存某个位置的值是否为预期值,如果是则更改为新的值,这个过程是原子的CAS并发原语体现在Java语言中就是sun.misc.Unsafe类的各个方法。调用UnSafe类中的CAS方法,JVM会帮我们实现出CAS汇编指令,这是一种完全依赖于硬件的功能,通过它实现了原子操作,再次强调,由于CAS是一种系统原语,原语属于操作系统用于范畴,是由若干条指令组成

2021-01-07 15:11:44 264 1

原创 java并发之 volatile 关键字

volatile 关键字volatile修饰变量:指示 JVM,这个变量是共享且不稳定的,每次使用它都到主存中进行读取。volatile 关键字 除了防止 JVM 的指令重排 ,还有一个重要的作用就是保证变量的可见性。并发编程的3个重要特性:原子性 : 一个的操作或者多次操作,要么所有的操作全部都得到执行并且不会收到任何因素的干扰而中断,要么所有的操作都执行,要么都不执行。synchronized 可以保证代码片段的原子性。可见性 :当一个变量对共享变量进行了修改,那么另外的线程都是立即可以看

2021-01-07 14:49:18 103

原创 Redis(狂神说 )学习使用笔记

Redis(Remote Dictionary Server )学习使用笔记NoSQl概述Not only sql(非关系型数据库)为什么要用nosql?传统的关系型数据库虽然得到了广泛的应用,但是它依旧有自己无法克服的瓶颈问题,当遇到如下问题,sql就显得非常吃力:每秒上万次的读写请求,硬盘IO此时也将变为性能瓶颈面对海量数据,势必涉及到分库分表,难以维护。大数据查询SQL效率极低,数据量到达一定程度时,查询时间会呈指数级别增长难以横向扩展,无法简单地通过增加硬件、服务节点来提高系统性能这个时候

2020-12-22 22:58:43 642

原创 xshell连接云服务器Socket error Event: 32 Error: 10053.

xshell连接云服务器Socket error Event: 32 Error: 10053.Socket error Event: 32 Error: 10053.Connection closing…Socket close.Connection closed by foreign host.Disconnected from remote host(121.36.50.245) at 22:28:25.Type `help’ to learn how to use Xshell promp

2020-12-14 23:01:35 2055

原创 docker使用外部配置文件安装启动redis

docker使用外部配置文件安装启动redis1拉取自己想要安装的镜像版本(本例使用5.0.9)docker pull redis:5.0.9#查看是否拉去成功docker images2建立宿主机映射目录mkdir /home/dockers/redis/confmkdir/home/dockers/redis/data3从官网下载redis.conf放入宿主机映射目录/home/dockers/redis/conf配置文件redis.conf github下载路径:https:/

2020-12-10 23:08:28 205

原创 nignx的学习和使用

nignx的学习和使用基本概念Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(俄文:Рамблер)开发的,第一个公开版本0.1.0发布于2004年10月4日。其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好。Nginx,专为性能优化而开发,性能是其最重要的考量,实现上非常注重效率能够支持高达 50,000

2020-12-10 17:22:30 1587 1

原创 Java容器学习笔记

Java容器参考:https://snailclimb.gitee.io/javaguide.list,map ,set的数据结构先来看一下 Collection 接口下面的集合。ListArraylist: Object[]数组Vector:Object[]数组LinkedList: 双向链表(JDK1.6 之前为循环链表,JDK1.7 取消了循环)SetHashSet(无序,唯一): 基于 HashMap 实现的,底层采用 HashMap 来保存元素LinkedHashSet:

2020-12-08 16:45:02 128 1

原创 java理论知识笔记一:常见容易混淆的知识点

java理论知识笔记一:常见容易混淆的知识点java基础1跳出多重循环:带有标号的的break语句, public static void main(String[] args){ int[][] array = new int[][]{{1,2,3,4}, {5,6,7,8}, {9,10,11,12}}; int target = 4; Here: try { boolean falg=true;

2020-12-06 22:45:17 95

原创 分布式全局唯一id----雪花算法

雪花算法分布式全局唯一idSnowFlake 算法,是 Twitter 开源的分布式 id 生成算法。其核心思想就是:使用一个 64 bit 的 long 型的数字作为全局唯一 id。在分布式系统中的应用十分广泛,且ID 引入了时间戳,基本上保持自增的,后面的代码中有详细的注解。1.全局唯—2.趋势递增3.单调递增4.信息安全5.含时间戳其他方案的缺点(1)uuid.太长,不递增。影响数据库性能(2)数字库自增整形。不适用大数据,分布式。重复。对数据库压力大。(3)基于Redis生成全

2020-12-06 22:40:37 430

原创 docker 安装seata1.2.0(单机),注册到nacos,使用mysql数据库

docker 安装seata1.2.0(单机),注册到nacos,使用mysql数据库1拉取镜像,查看镜像#拉取镜像docker pull seataio/seata-server:1.2.0#查看镜像docker images2 使用自定义配置文件创建#宿主机创建配置文件存放目录vim /usr/local/dockers/seata/config/registry.conf3写入nacos注册配置registry { # file 、nacos 、eureka、redis

2020-11-29 19:11:47 695 1

原创 springcloud stream 无法连结rabbitmq org.springframework.amqp.AmqpConnectException: java.net.ConnectExcep

springcloud stream 无法连结rabbitmq org.springframework.amqp.AmqpConnectException: java.net.ConnectException: Connection refused: connect在网上看到很多人说要修改rabbitmq的文件rabbitmq.conf配置文件。不然无法远程连接。然而我修改了还是没用。就考虑到不是这个原因。英文我其他组件可以连接这个mq我就想到是版本不匹配的原因,因为以前连不上zookeeper就是这

2020-11-20 00:19:39 1300 3

原创 工作流引擎activit的学习使用记录

工作流引擎activit的学习使用记录工作流(Workflow),就是通过计算机对业务流程自动化执行管理。Activiti 是一个工作流引擎, activiti 可以将业务系统中复杂的业务流程抽取出来,使用专门的 建模语言(BPMN2.0)进行定义,业务系统按照预先定义的流程进行执行,实现了业务系统的业务 流程由 activiti进行管理,减少业务系统由于流程变更进行系统升级改造的工作量,从而提高系统的 健壮性,同时也减少了系统开发维护成本。1,ProcessEngine一般创建方式:// 创建pr

2020-10-23 15:27:10 210

原创 阿里巴巴java开发手册-编程规约阅读笔记

编程规约命名风格接口和实现类命名规则1)【强制】对于 Service 和 DAO 类,基于 SOA 的理念,暴露出来的服务一定是接口,内部的实现类用 Impl 的后缀与接口区别。三层架构各层命名规约:A) Service/DAO 层方法命名规约1) 获取单个对象的方法用 get 做前缀。2) 获取多个对象的方法用 list 做前缀,复数形式结尾如:listObjects。3) 获取统计值的方法用 count 做前缀。4) 插入的方法用 save/insert 做前缀。5) 删除的方法用

2020-10-22 11:39:33 206

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除