自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(47)
  • 收藏
  • 关注

原创 《设计模式》——建造者模式

1、介绍1.1背景当一个类的内部数据过于复杂的时候(通常是负责持有数据的类,比如Config、VO、PO、Entity…),要创建的话可能就需要了解这个类的内部结构,还有这些东西是怎么组织装配等一大坨乱七八糟的东西,这个时候就会增加学习成本而且会很混乱,这个时候就想啊想一种什么法子来管理一下这个类中的数据呢,怎么在创建的时候让它按部就班的来,并且代码可读性很好别让我看花了眼啊,我要的东西也能都很好设置进来,这就是Builder模式的应用场景,Builder模式可以将一个类的构建和表示进行分离。1.2适

2021-02-21 20:56:05 131

原创 《设计模式》——工厂模式

1、优缺点和应用场景在《简单工厂模式》一节我们介绍了简单工厂模式,提到了简单工厂模式违背了开闭原则,而“工厂方法模式”是对简单工厂模式的进一步抽象化,其好处是可以使系统在不修改原来代码的情况下引进新的产品,即满足开闭原则。优点:用户只需要知道具体工厂的名称就可得到所要的产品,无须知道产品的具体创建过程。灵活性增强,对于新产品的创建,只需多写一个相应的工厂类。典型的解耦框架。高层模块只需要知道产品的抽象类,无须关心其他实现类,满足迪米特法则、依赖倒置原则和里氏替换原则。缺点:类的个数容易过

2021-02-07 19:35:48 138

原创 《设计模式》——简单工厂

什么是简单工厂?1、简单工厂模式(Simple Factory Pattern):又称为静态工厂方法(Static Factory Method)模式,它属于类创建型模式。在简单工厂模式中,一个抽象的产品类,可以派生出多个具体的产品类,它们都具有共同的父类。我们再来看下简单工厂模式的UML图:2、简单工厂模式的构成工厂类:工厂类是我们的核心类,它负责创建所有实例的内部逻辑,工厂类可以直接被调用创建我们的产品实例。抽象产品类:简单工厂模式所创建的所有对象的父类,它负责描述所有实例所拥有的公

2021-01-30 14:01:35 230 1

原创 《设计模式》——里氏替换原则

1、什么是里氏替换原则Liskov于1987年提出了一个关于继承的原则“Inheritance should ensure that any property proved about supertype objects also holds for subtype objects.”——“继承必须确保父类所拥有的性质在子类中仍然成立。”也就是说,当一个子类的实例应该能够替换任何其父类的实例时,它们之间才具有is-A关系。该原则称为Liskov Substitution Principle——里氏替换原则

2021-01-24 11:32:11 314

原创 《设计模式》——组合优于继承原则

一、组合优于继承通常我们都听说过组合优于继承原则,但是可能不太明白为什么要这样用?本篇文章就以不同的场景,来阐述继承在某些场景下的缺点,以及组合的巧妙之处。二、代码示例1、场景一制作一个集合,要求统计该集合诞生以来,共添加过多少元素(不是统计集合当前数量,而是一共加过多少)那么我们使用继承,很容易实现,如下代码:package cn.com.design.model.test.composite.supplement.a;import java.util.Collection;import

2021-01-12 17:48:41 1704 1

原创 《设计模式》——接口隔离原则

1、什么是接口隔离原则?客户端不应该依赖它不需要的接口。一个类对另一个类的依赖应该建立在最小的接口上。使用多个专门的接口比使用单一的总接口要好。一个类对另外一个类的依赖性应当是建立在最小的接口上的。一个接口代表一个角色,不应当将不同的角色都交给一个接口。没有关系的接口合并在一起,形成一个臃肿的大接口,这是对角色和接口的污染。2、示例反例:现在有一个借口Animal,里边有eat,fly,swim三个方法,现在新建三个类,bird,dog,fish,这样,鱼就可以游泳,鸟可以飞,狗狗和鸟以及

2021-01-06 10:25:53 550 1

原创 《设计模式》——依赖倒置原则

1、什么是依赖倒置原则依赖倒置原则(Dependence Inversion Principle)是程序要依赖于抽象接口,不要依赖于具体实现。简单的说就是要求对抽象进行编程,不要对实现进行编程,这样就降低了客户与实现模块间的耦合。2、意图面向过程的开发,上层调用下层,上层依赖于下层,当下层剧烈变动时上层也要跟着变动,这就会导致模块的复用性降低而且大大提高了开发的成本。面向对象的开发很好的解决了这个问题,一般情况下抽象的变化概率很小,让用户程序依赖于抽象,实现的细节也依赖于抽象。即使实现细节不断变动,

2021-01-04 15:26:02 601 1

原创 《设计模式》——开闭原则

一、什么是开闭原则对修改关闭,对扩展开放。比如有一个书城,售卖书籍有原价,现在要新增一个打折价。那么,一定要保证已有功能不被修改破坏,而是把新功能扩展出来,不要影响原有功能,而是把新功能扩展出来,不要动源代码,可以自己写一个类,继承原来的类。也就是能实现原价功能,又能扩展新增的打折价格功能。二、为什么使用开闭原则第一:开闭原则非常有名,只要是面向对象编程,在开发时都会强调开闭原则第二:开闭原则是最基础的设计原则,其它的五个设计原则都是开闭原则的具体形态,也就是说其它的五个设计原则是指导设计的工具和方

2021-01-04 10:39:05 532

原创 《设计模式》——迪米特法则

一.什么是迪米特法则迪米特法则又叫做最少知道原则,就是说一个对象应当对其它对象有尽可能少的了解,不要和陌生人说话。强调只和朋友说话,不和陌生人说话。这里的朋友指的是:出现在成员变量,方法输入,输出参数中的类称为成员朋友类,而出现在方法体内部的类不属于朋友类。迪米特法则初衷在于降低类之间的耦合。由于每个类尽量减少对其它类的依赖,因此。很容易使得系统的功能模块独立,相互之间不存在(或很少有)依赖关系。详细可参考:迪米特法则问题由来:类与类之间的关系越密切,耦合度越大,当一个类发生改变时,对另一个类的影

2020-12-29 19:21:57 482

原创 SpringBoot 基础

1、SpringBoot简介Spring Boot 是由 Pivotal 团队提供的全新框架,其设计目的是用来简化Spring 应用项目的搭建以及开发过程。Spring由于各种XML、Annotation繁琐的配置,使开发变得复杂。SpringBoot的出现简化了开发Spring应用的开发步骤,开发一个应用不在需要繁琐的配置。1.1 官网访问地址:https://spring.io/projects/spring-bootSpringBoot 能够帮助我们快速的创建一个独立的、产品级别的Spr

2020-12-27 17:00:35 625

原创 docker学习(二)

4. 构建一个镜像构建hello-worlddocker镜像通过Dockerfile构建。创建名称为Dockerfile空白文件,其中录入以下内容:FROM alpine:3.9 cmd ["echo", "hello world"]此文件的意思是,基于alpine:3.9这个微型linux镜像构建,并在每次启动docker镜像的时候执行 "echo"命令输出一个“hello world”在Dockerfile所在文件夹使用以下命令构建:docker build -t glf_hel

2020-12-18 17:40:14 655 1

原创 docker学习(一)

1. Docker是什么VMware可以完整的虚拟整个计算机硬件,让我们在其中安装操作系统,并运行操作系统。JVM虚拟机可以运行Class代码,常见的我们直接运行一个Jar包。Docker与之类似,也是一种虚拟技术,但是不像VMware一样安装整个完整的操作系统那样笨重,也不像JVM那样只能运行class代码。Docker是应用级别的虚拟,可以将已有的软件打包运行在其中,更加轻便加灵活。Docker被称作应用容器引擎,特点是在应用级别的虚拟——容器化!因为docker是借助于linux下的一些

2020-12-13 20:20:10 519

原创 RabbitMq简介及使用

1.Message Queue(MQ)消息队列Message Queue是一种跨进程的通信机制,用于在系统之间进行传递消息。MQ作为消息中间件,可以进行异步处理请求,从而减少请求响应时间和解耦。2.消息队列的使用场景应用解耦:多应用间通过消息队列对同一消息进行处理,避免调用接口失败导致整个过程失败;系统间消息传递通过MQ进行解耦,“消息队列”是在消息的传输过程中保存消息的容器异步处理:应用间并发处理消息,相比串行处理,减少处理时间;比如用户为了使用某个应用,进行注册,系统需要发送注

2020-12-06 17:24:00 530

原创 Jwt简介

1、为什么使用JWT基于Session的认证基于Session的认证应该是最常用的一种认证机制了。用户登录认证成功后,将用户相关数据存储到Session中,单体应用架构中,默认Session会存储在应用服务器中,并且将Session ID返回到客户端,存储在浏览器的Cookie中。但是在分布式架构下,Session存放于某个具体的应用服务器中自然就无法满足使用了,简单的可以通过Session复制或者Session粘滞的方案来解决。Session复制依赖于应用服务器,需要应用服务器有Ses

2020-11-28 15:57:01 291

原创 mybaitsPlus使用简介教程

MyBatis-Plus简介Mybatis-Plus是一-款MyBatis的增强工具包 ,简化CRUD操作。启动加载XML配置时注入单表SQL操作,为简化开发工作、提高生产率而生。Mybatis- Plus启动注入非拦截实现、性能更优,让你专注业务快速敏捷开发。文档http://mp.baomidou.comhttp://mybatis,plushttps://gitee.com/baomidou/mybatis-plushtpst:/i/ee.com/baomidou/mybatis-plus

2020-11-22 19:12:57 806

原创 蜗牛学院二期培训第一周总结(基础篇)

常用配置项配置项默认值说明debug false开启调试server.port8080配置端口号server.servlet.context-path/上下文路径spring.mvc.date-format输入参数的日期格式spring.jackson.date-formatJSON响应的日期格式spring.jackson.time-zone响应JSON日期的时区spring.thymeleaf.cachetr

2020-11-15 20:48:38 209

原创 vue基础练习

见githunb项目:https://github.com/WtengHa/vueProject

2020-11-08 13:26:53 190

原创 《玩转Spring全家桶》第114-123节

第114节认识Spring Cloud Stream第115节通过Spring Cloud Stream访问RabbitMQ第116节通过Spring Cloud Stream访问Kafka第117节 本章Spring Cloud Strean小结

2020-10-29 17:54:10 79

原创 Mac 版idea常用操作

Mac 版idea常用操作lt+f7查找在哪里使用相当于eclipse的ctrl+shift+G command+alt+f7 这个是查找选中的字符在工程中出现的地方,可以不是方法变量类等,这个和上面的有区别的command+F7可以查询当前元素在当前文件中的引用,然后按F3可以选择 ,功能基本同上 选中文本,按command+shift+F7 ,高亮显示所有该文本,按Esc高亮消失。 选中文本,按Alt+F3 ,逐个往下查找相同文本,并高亮显示。shift+f3就是往上找 ctrl+enter

2020-10-24 09:07:48 673

原创 《玩转Spring全家桶》第107节-113节

第107-108节基于GIT的配置中心第109节基于zookeeper的配置中心

2020-10-22 17:48:19 108 1

原创 《玩转Spring全家桶》第100-106节

第100-101节使用Hystrix实现服务熔断第102节 如何观察服务熔断第103节使用Resilience4j实现服务熔断第104-105节使用Resilience4js实现服务限流

2020-10-15 15:26:20 87

原创 《玩转Spring全家桶》第93-99节

第93节 使用Feign服务第94节深入理解服务发现背后的DiscoveryClient第95节使用Zookeeper作为服务注册中心第96节使用Consul作为服务注册中心

2020-10-10 21:26:39 94

原创 《玩转Spring全家桶》第86-92节

第86节简单理解微服务微服务就是一些协同工作的小而自治的微服务。——Sam Newman微服务的优点:异构性:语言、存储等。。。弹性:一个组件不可用,不会导致级联故障扩展:单体服务不易扩展,多个较小的服务可以按需扩展微服务的优点:易于部署与组织结构对齐克组合性可替代性实施微服务的代价没有银弹!!!分布式系统的复杂性开发、测试等诸多研发过程中的复杂性部署、监控等诸多运维复杂性。。。。。。第87节如何理解云原生(cloud native)云原生技术有利于各组织在公有

2020-09-30 15:28:34 84

原创 《玩转Spring全家桶》78-85节

第78节 通过Spring Boot Admin了解程序的运行状态Spring Boot Admin:目的为Spring Boot应用程序提供一套管理界面主要功能集中展示应用程序Actuator相关的内容变更通知快速上手de.codecentric:spring-boot-admin-starter-server:2.1.3@EnableAdminServer客户端:de. codecentric: spring-boot-admin-starter-server:2.1.3配置服

2020-09-26 21:52:08 142

原创 《玩转Spring全家桶》第70-77节

第70节 如何在低版本Spring中快速实现类似自动配置的功能第71节 了解starter依赖以及其实现原理第72节 定义自己的starter-dependendy主要内容:autoconfigure模块,包括自动配置代码starter模块,包含指向自动配置模块的依赖以及其他工作依赖命名方式xxx-spring-boot-autoconfigurexxx-spring-boot-starter一些注意事项不要使用spring-boot作为依赖的前缀不要使用spring-b

2020-09-18 20:42:28 138

原创 《玩转Spring全家桶》第63-69节

第63节分布式环境中如何解决session的问题常见的会话解决方案:粘性会话 Sticky Session会话复制 Session Replication集中会话 Centralized SessionSpring提供了组件帮助实现集中会话Spring Session简化集群中的用户会话管理无需绑定容器特定解决方案支持的存储RedisMongoDBJDBCHazelcastSpring Session实现原理——定制HttpSession通过定制的HttpservletReq

2020-09-11 17:11:39 134

原创 《玩转Spring全家桶》第55-62节

第55节 简单定制RestTemplateRestTemplate支持的HTTP库通用接口:ClientHttpRequestFactory默认实现SimpleClientHttpRequestFactoryApache HttpComponentsHttpComponentsClientHttpRequestFactoryNettyNetty4ClientHttpRequestFactoryOkHttpOkHttp3ClientHttpRequestFactory第56节通过

2020-09-04 22:49:50 155

原创 一文秒懂SpringCloud和五大组件的关系

概述微服务的概念源于 2014 年 3 月 Martin Fowler 所写的一篇文章“Microservices”。文中内容提到:微服务架构是一种架构模式,它提倡将单一应用程序划分成一组小的服务,服务之间互相协调、互相配合,为用户提供最终价值。毫无疑问,Spring Cloud是目前微服务架构领域的翘楚,无数的书籍博客都在讲解这个技术。不过大多数讲解还停留在对Spring Cloud功能使用的层面,其底层的很多原理,很多人可能并不知晓。因此本文将通过大量的手绘图,给大家谈谈Spring Cloud微服

2020-08-31 11:14:00 1265 1

原创 《玩转Spring全家桶》第48-54节

第48节静态资源缓存Spring Boot中的静态资源配置核心逻辑:WebMvcConfigurer.addResourceHandlers()常用配置spring.mvc.static-path-pattern=/**spring.resource.static-locations=class:/META-INF/resources/,classpath:/resources,classpath:/static/,classpath:/public/第49节 SpringMVC的异常

2020-08-30 09:56:21 168

原创 《玩转Spring全家桶》第39-47节

第39节 认识Spring MVC ControllerDispatcherServlet核心组成:ControllerxxxResolverViewResolverHandlerExceptionResolverMultipartResolverHandlerMappingSpringMVC常用的注解@Controller@RESTController@RequestMapping@GetMapping /@PostMapping@PutMapping / @DeleteMap

2020-08-22 23:06:16 138

原创 《玩转Spring全家桶》总结第31-38节

第31-32节:Project Reactor介绍Project Reactor学习(1)–核心接口简介Reactor项目核心为reactor-core,一个基于Java8的响应式流标准实现,实现了reactive streams标准。reactive streams标准核心接口有四个:PublisherSubscriberSubscriptionProcessor<T,R>其中最重要的接口为Publisher,代表了一个响应式的流。Publisher核心实现为Flux

2020-08-14 20:10:35 156

原创 《玩转Spring全家桶》总结——22-30节

第22节:让Mybatis好用的工具之Mybatis PageHelper支持多种数据库支持多种分页方式需要引入依赖:<dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper</artifactId> <version>latest version</version></dependency

2020-08-09 15:26:09 325

原创 最终也没能跑通的分布式事务示例项目(tcc-transaction)

1.背景上周在网上学习了解了分布式事务的一些基本概念和理论,想着这周跑一个相关的案例来加深理解一下,正好公司最近也要搞相关的工作,一举两得。于是,准备看看之前网上大佬写的tcc-transaction,这是一个基于tcc思想实现的分布式事务框架。(分布式事务相关理论知识可以参考我的另一篇博客:分布式事务详解)了解了分布式事务的理论内容,要了解其实现原理,第一步就是跑通项目的简单示例,即tcc-transaction-tutorial-sample部分的代码。今天主要介绍在跑通tcc-transacti

2020-08-04 17:22:39 880 3

转载 《玩转SpringBoot全家桶》总结——第15-21节

第十五节:认识SpringData JPAJPA(Java Persistence API),为对象关系映射提供了一种基于POJO的持久化模型。a. 简化数据持久化代码的开发工作b. 为Java社区屏蔽不同持久化API的差异。第十六节:定义JPA的实体对象常用JPA注解实体:@Entity,@MappedSuperclass@Table(name)主键:@Id@GeneratedValue(strategy, generator)SequenceGenerator(nam

2020-07-31 20:47:21 155

原创 分布式事务详解(看完不懂我当场认做你哥)

分布式事务1 基础概念1.1 什么是事务什么是事务?举个生活中的例子:你去小卖铺买东西,“一手交钱,一手交货”就是一个事务的例子,交钱和交货必 须全部成功,事务才算成功,任一个活动失败,事务将撤销所有已成功的活动。 明白上述例子,再来看事务的定义:事务可以看做是一次大的活动,它由不同的小活动组成,这些活动要么全部成功,要么全部失败。1.2 本地事务在计算机系统中,更多的是通过关系型数据库来控制事务,这是利用数据库本身的事务特性来实现的,因此叫数据 库事务,由于应用主要靠关系数据库来控制事务,而数

2020-07-31 17:03:35 4640 1

原创 《玩转SpringBoot全家桶》总结——第8-14节

第八节:好用的连接池——Alibaba Druid通常在建立数据库连接的时候回耗费资源,而一个数据库能够同时建立连接的连接数是有限的,而在大型项目中,通常会有大量的数据库请求,如果Web应用为每一个请求都分配一个数据库连接,那么将导致性能的急剧下降。数据库连接池的意义在于,能够重复利用数据库连接(有点类似线程池的部分意义),提高对请求的响应时间和服务器的性能。连接池中提前预先建立了多个数据库连接对象,然后将连接对象保存到连接池中,当客户请求到来时,直接从池中取出一个连接对象为客户服务,当请求完成之后,

2020-07-26 12:07:25 192

原创 玩转Spring全家桶》1-7节总结

《玩转Spring全家桶》1-7节总结本周主要工作第一二节第三节第四节第五节:如何配置单数据源第六节:多数据源配置第七节:好用的连接池——HikariCP本周主要工作本周主要是初始Spring,了解SpringBoot家族的主要成员,同时了解Spring的技术趋势,并开始学习编写Spring程序。第一二节Spring的历史:诞生于2020年,成型于2003年。后快速发展并产生了各个主要成员。家族成员:常用的有Spring Framework,Spring Data,Spring Boot,Spri

2020-07-19 22:53:50 248

原创 剑指offer编程题——翻转单词顺序列(翻转句子)

牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。例如,“student. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a student.”。Cat对一一的翻转这些单词顺序可不在行,你能帮助他么?解题思路:这个问题,从例子上看,每...

2019-11-14 15:16:59 304

原创 剑指offer编程题——左旋转字符串

汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列S,请你把其循环左移K位后的序列输出。例如,字符序列S=”abcXYZdef”,要求输出循环左移3位后的结果,即“XYZdefabc”。是不是很简单?OK,搞定它!解题思路:对于一个字符串str,循环左移n位。那么首先判断,这个字符串真正左移的位数。当n的值大于字符串的长...

2019-11-14 14:40:52 253

原创 剑指offer编程题-输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。

输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。解题思路:首先想到的是,两个数相加之和是S,那么这两个数必定分布在sum/2的左右两边。此外,要求当有多对数字的和等于S,输出两个数的成绩最小的,那么就是输出最靠数组两端的数。证明:a< b,a+b=S,那么S=(a-m)+(b+m)=ab-(b-a)m-m*m...

2019-11-13 09:11:11 673

空空如也

空空如也

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

TA关注的人

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