3 九月清晨柳成荫

我要认证

磨砺修仙,法力无边。

等级
TA的排名 6w+

模板方法模式 - 父类定义步骤的模式

现实生活中很多事情都包含几个实现步骤,例如请客吃饭,无论吃什么,一般都包含点单、吃东西、买单等几个步骤,通常情况下这几个步骤的次序是点单->吃东西->买单。但是第二步吃东西里,到底是先吃汉堡还是先吃鸡肉卷,这个步骤是可变的。定义定义一个操作中算法的框架,而将一些步骤延迟到子类中。模板方法模式使得一个子类可以不改变一个算法的结构即可重新定义该算法的某些特定步骤。结构AbstractClass(抽象类)在抽象类中定义一系列基本操作,这些基本操作可以是具体的,也可以是抽象的,每一个基本操作对

2020-10-26 20:29:30

策略模式 - 合适的方案才是最好的方案

在很多情况下,实现某个目标的途径不止一条,例如在外出旅游时游客可以选择多种不同的出行方式,如骑自行车、坐汽车、坐火车、坐飞机,根据实际情况选择最合适的一种出行方式。定义定义一系列算法,将每一个算法封装起来,并让它们可以相互替换。策略模式让算法可以独立于使用它的客户而变化。结构Context(环境类)环境类是使用算法的角色,它在解决某个问题时可以采用多种策略。在环境类中维持一个对抽象策略类的引用实例,用于定义所采用的策略。Strategy(抽象策略类)抽象策略类为所支持的算法声明抽象方法,是所有

2020-10-26 19:52:24

装饰模式 - 给已有的功能增加额外的职责

对新房进行装修并没有改变房屋用于居住的本质,但它可以让房子变得更漂亮,更能满足居家需求。装饰模式可以在不改变一个对象本身的基础上给对象增加额外的新行为,在现实生活中到处存在这种情况。定义动态的给一个对象增加一些额外的职责。就扩展而言,装饰模式提供了一种比使用子类更加灵活的替代方案。结构Component(抽象构件)它是具体构件和抽象装饰类的共同父类,声明了在具体的构件中实...

2020-10-26 19:07:55

抽象工厂模式 - 产品等级与产品族的纠缠

工厂方法模式中的每个具体工厂只有一个或者一组重载的工厂方法,只能生产一种产品,可能会导致系统中存在大量的工厂类,会增加系统的开销。有时候需要工厂可以提供多种产品对象,而不是单一的产品对象。例如一个电器工厂,它可以生产电视、电冰箱、洗衣机、空调之类的。这时候就可以将一些相关产品组成一个产品族,由一个工厂来统一生产。产品等级结构即产品的继承结构,如一个抽象类是电视机,其子类包括海尔电视机...

2020-10-26 11:17:56

工厂方法模式 - 抽象工厂与抽象产品的结合

工厂方法模式是在简单工厂模式上再加了一层,添加了一个抽象工厂和具体工厂。即不再使用一个工厂类来统一负责所有产品的创建,而是把创建具体产品的任务交给了专门的工厂子类去完成。比如说,我要生产矩形、圆形、菱形这三种形状,就不再使用一个工厂了,而是让矩形工厂、圆形工厂、菱形工厂去完成,而这三个工厂又是形状工厂(抽象工厂)的子工厂。如果我们想要新生产一个椭圆形,只需要新增一个椭圆形工厂就行,让椭圆形工厂去完...

2020-10-26 11:14:58

简单工厂模式 - 工厂模式基础之魂

简单工厂模式并不属于GoF的23种经典模式,但它通常作为其他工厂模式的基础。定义定义一个工厂类,它可以根据参数的不同返回不同类的实例,被创建的实例通常都具有共同的父类。结构Factory(工厂角色)即工厂类,它是简单工厂模式的核心。负责创建所有产品实例的内部逻辑,它可以直接被外界直接调用,用来创建所需要的产品对象。该类内部提供一个静态方法factoryMethod(),用...

2020-10-26 10:48:20

算法 - Java实现二分、插值、斐波那契查找法

一、二分查找法二分查找法,就是对一个有序数组进行拆分。找到这个数组的中间的那个数的值,将查找的这个数与其比较。这里是从小到大排序的,如果比这个中间值小,就在把中间值左边看成一个数组,在这个数组里继续二分查找,直到查到(或者查完全部也没查到).如果比这个中间值大,就在把中间值右边看成一个数组,在这个数组里继续二分查找,直到查到(或者查完全部也没查到).代码实现public class BinarySearchDemo { public static void main(String[] ar

2020-07-29 23:48:38

算法 - Java实现八大内排序算法(图解)

排序分类1、内部排序指将需要处理的所有数据都加载到内部存储器中进行排序。2、外部排序数据量过大,无法全部加载到内存中,需要借助外部存储进行排序。一、冒泡排序冒泡排序也属于内部排序法,属于交换排序。基本思想通过对待排序序列从前向后(从下标较小的元素开始),依次比较相邻元素的值,若发现逆序则交换,使值较大的元素逐渐从前移向后部,就像水底下的气泡一样逐渐向上冒。因为排序的过程中,各元素不断接近自己的位置,如果一趟比较下来没有进行过交换,就说明序列有序,因此要在排序过程中设置一个标志flag判断

2020-07-29 19:35:56

Nacos - 支持MySQL8并切换为MySQL存储

在1.3.1版本之前,Nacos不支持MySQL8。今天想在Linux上做一下集群(之前图方便,都是在Windows上操作的),想起这个问题,所以就在博客上记录一下。在此之前的版本,要想支持MySQL8.0,需要自己下载源码进行修改,然后编译。我这里以1.1.4版本为例。支持MySQL81、下载源码 - Nacos下载地址2、导入到Idea中(会下载很多依赖,可以直接根据步骤找到文件,使用记事本打开)3、修改pom文件,引入MySQL8.0的依赖4、修改MysqlHealthCheckPr

2020-07-15 17:29:52

支付宝支付 - 沙箱环境简单使用

创建应用1、进入支付宝开放平台 支付宝开放平台2、完善信息3、接入应用支付宝使用的加密方式1、对称加密 - 不安全即加密和解密用同一种算法(钥匙),比如发送方给接受方要发送一串文字,但是不能让人知道,所以需要加密,将加密后的字符串通过网络传输,给到接收方,接收方收到秘闻,用同一种算法获取明文。因此只要知道了这种算法(钥匙),在网络传输中截取到,就可以随意解密,这种方式不安全。2、非对称加密即加密时用算法A(秘钥A),解密的时候用算法B(秘钥B),即使在网络传输截取到密文,由于不知道秘

2020-07-10 14:41:17

接口调用幂等性问题及解决方案

什么是接口调用幂等性问题?现如今我们的系统大多拆分为分布式架构、微服务架构,一套系统中包含了多个子系统服务,而一个子系统服务往往会去调用另一个服务,而服务调用服务无非就是使用RPC通信或者RESTFUL,既然是通信,那么就有可能在服务器处理完毕后返回结果的时候挂掉,这个时候用户端发现很久没有反应,那么就会多次点击按钮,这样请求有多次,那么处理数据的结果是否要统一呢?那是肯定的!接口幂等性就是用户对于同一操作发起的一次请求或者多次请求的结果是一致的, 不会因为多次点击而产生了副作用:比如说支付场景,用户购

2020-07-02 22:13:27

SSO - 使用cookie和session实现单点登录

什么是单点登录单点登录(SingleSignOn,SSO),就是通过用户的一次性鉴别登录。当用户在身份认证服务器上登录一次以后,即可获得访问单点登录系统中其他关联系统和应用软件的权限,同时这种实现是不需要管理员对用户的登录状态或其他信息进行修改的,这意味着在多个应用系统中,用户只需一次登录就可以访问所有相互信任的应用系统。这种方式减少了由登录产生的时间消耗,辅助了用户管理,是目前比较流行的。cookie+session实现单点登录之前的文章有记录过使用CAS开源项目来实现单点登录,也有通过JWT来实现

2020-06-22 01:19:45

SpringSession - 分布式Session解决方案及SpringSession基本使用

分布式Session的几种解决方案1、Session复制Tomcat服务器互相同步session。优点:web-server (Tomcat) 原生支持,只需要修改配置文件缺点:1、session同步需要数据传输,占用大量网络带宽,降低了服务器群的业务处理能力2、任意一台web-server保存的数据都是所有web-server的sesdion总和,受到内存限制无法水平扩展更多的web-server3、大型分布式集群情况下,由于所有web-server都全量保存数据,所以此方案不可取。2

2020-06-20 20:39:49

OAuth2 - 第三方登录之新浪微博登录

之前写过一篇OAuth2 - 第三方登录之微信登录,但是微信的开放平台的资质需要有公司/企业才能注册。如果是个人的话,可以使用其他个人开发者就可以使用的。比如QQ、新浪微博。QQ的话,需要审核之后才能使用,需要手持身份证照。而微博的话,在开发期间使用无需审核就可以使用。微博开放平台 - 创建应用微博 - 开放平台地址1、登录之后选择网站接入2、完善个人开发者信息3、创建应用创建自己要使用微博登录功能的应用。4、设置回调地址即登录授权成功之后的回调地址5、添加测试用户测试用户即微

2020-06-19 23:31:43

REST - RESTFUL风格是什么以及Java中怎么使用

什么是 RESTFUL 风格?REST(英文:Representational State Transfer,简称REST)描述了一个架构样式的网络系统,指的是一组架构约束条件和原则,满足这些约束条件和原则的应用程序或设计就是 RESTful。REST并没有一个明确的标准,而更像是一种设计的风格。Representational(表述性) : REST 资源实际上可以用各种形式来进行表述,包括 XML、JSON 甚至 HTML——最适合资源使用者的任意形式。State(状态):当使用 REST 的时候

2020-06-09 01:21:57

JDK - CentOS7下安装JDK8

JDK1.8下载地址:JDK1.8下载地址,选择tar.gz包1、将tar.gz包上传我这里上传到/usr/local,版本为1.8.0_2212、解压cd /usr/java/tar -zxvf jdk-8u221-linux-x64.tar.gz3、配置环境变量修改profile文件vi /etc/profile在文件末尾添加如下配置:JAVA_HOME=/usr/java/jdk1.8.0_221CLASSPATH=$JAVA_HOME/lib/PATH=$PATH:$JA

2020-06-05 21:47:34

MySQL - Linux安装和卸载MySQL8、配置远程连接授权

本文是在Cent OS7下通过yum源来进行安装MySQL8.0,下载地址:MySQL源安装包安装1、通过wget命令下载本文在/home目录下进行,一般也可以在/local/usr/下进行。wget https://dev.mysql.com/get/mysql80-community-release-el7-1.noarch.rpm2、yum安装MySQL源yum localinstall mysql80-community-release-el7-1.noarch.rpm检查是否安装

2020-06-05 21:36:26

Redis - 实现分布式锁的阶段演进

①演进阶段一获得锁就执行业务逻辑,没有获得锁就继续调用这个方法形成一个自旋,就类似于synchronized。伪代码:public void getData(){ boolean lock = redisTemplate.opsForValue.setUfAbsent("lock","1111"); if(lock){ // 执行业务.. // 删除锁 redisTemplate.delete("lock");

2020-05-29 15:27:25

Spring - JSR303数据校验

在做项目的时候需要对表单的值进行校验,只有校验通过才能提交,一般来说前端和后端都需要做校验,JSR303是做后端校验的一种方式。JSR303简介JSR是Java Specification Requests的缩写,意思是Java 规范提案。是指向JCP(Java Community Process)提出新增一个标准化技术规范的正式请求。任何人都可以提交JSR,以向Java平台增添新的API和服务,JSR已成为Java界的一个重要标准。JSR-303是JAVA EE 6 中的一项子规范,叫做Bean V

2020-05-14 16:00:12

NVM - node.js版本管理工具的安装及基本使用

简介nvm全名node.js version management,是一个nodejs的版本管理工具,通过它可以安装和切换不同版本的nodejs,解决了新老项目维护时切换node的问题。下载及配置GitHub:nvm-windows注意事项:不要把nvm安装在中文路径或是文件夹带有空格的路径下,这会导致nvm部分命令失效。配置淘宝镜像nvm默认的下载地址http://nodejs.org/dist/是国外服务器,速度非常慢,因而可以切换到淘宝的镜像,下载速度会快很多(尤其体现在下载npm的时候

2020-05-09 19:22:34

查看更多

勋章 我的勋章
  • GitHub
    GitHub
    绑定GitHub第三方账户获取
  • 签到新秀
    签到新秀
    累计签到获取,不积跬步,无以至千里,继续坚持!
  • 新人勋章
    新人勋章
    用户发布第一条blink获赞超过3个即可获得
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
  • 1024勋章
    1024勋章
    #1024程序员节#活动勋章,当日发布原创博客即可获得
  • 勤写标兵Lv4
    勤写标兵Lv4
    授予每个自然周发布9篇以上(包括9篇)原创IT博文的用户。本勋章将于次周周三上午根据用户上周的博文发布情况由系统自动颁发。