- 博客(45)
- 收藏
- 关注
原创 RabbitMQ学习笔记一
1、MQ的概念1.1、什么是MQMQ(message queue)本质是个队列,FIFO 先入先出,只不过队列中存放的内容是message 而已,还是一种跨进程的通信机制,用于上下游传递消息。在互联网架构中,MQ 是一种非常常见的上下游“逻辑解耦+物理解耦”的消息通信服务。使用了 MQ 之后,消息发送上游只需要依赖 MQ,不用依赖其他服务。1.2、为什么使用MQ流量消峰。举个例子,如果订单系统最多能处理一万次订单,这个处理能力应付正常时段的下单时绰绰有余,正常时段我们下单一秒后就能返回结果。但
2021-08-31 18:23:02 171
原创 设计模式学习笔记十九(备忘录设计模式)
1、 概述6.10.1 概述备忘录模式提供了一种状态恢复的实现机制,使得用户可以方便地回到一个特定的历史步骤,当新的状态无效或者存在问题时,可以使用暂时存储起来的备忘录将状态复原,很多软件都提供了撤销(Undo)操作,如 Word、记事本、Photoshop、IDEA等软件在编辑时按 Ctrl+Z 组合键时能撤销当前操作,使文档恢复到之前的状态;还有在 浏览器 中的后退键、数据库事务管理中的回滚操作、玩游戏时的中间结果存档功能、数据库与操作系统的备份操作、棋类游戏中的悔棋功能等都属于这类。定义:又叫
2021-08-24 22:38:40 187
原创 设计模式学习笔记十八(访问者设计模式)
1、概述定义:封装一些作用于某种数据结构中的各元素的操作,它可以在不改变这个数据结构的前提下定义作用于这些元素的新的操作。2、结构访问者模式包含以下主要角色:抽象访问者(Visitor)角色:定义了对每一个元素(Element)访问的行为,它的参数就是可以访问的元素,它的方法个数理论上来讲与元素类个数(Element的实现类个数)是一样的,从这点不难看出,访问者模式要求元素类的个数不能改变。具体访问者(ConcreteVisitor)角色:给出对每一个元素类访问时所产生的具体行为。抽象元素(
2021-08-24 00:23:13 157
原创 设计模式学习笔记十七(迭代器设计模式)
1、概述定义:提供一个对象来顺序访问聚合对象中的一系列数据,而不暴露聚合对象的内部表示。2、结构迭代器模式主要包含以下角色:抽象聚合(Aggregate)角色:定义存储、添加、删除聚合元素以及创建迭代器对象的接口。具体聚合(ConcreteAggregate)角色:实现抽象聚合类,返回一个具体迭代器的实例。抽象迭代器(Iterator)角色:定义访问和遍历聚合元素的接口,通常包含 hasNext()、next() 等方法。具体迭代器(Concretelterator)角色:实
2021-08-22 22:52:06 147
原创 设计模式学习笔记二十(中介者设计模式)
1、概述一般来说,同事类之间的关系是比较复杂的,多个同事类之间互相关联时,他们之间的关系会呈现为复杂的网状结构,这是一种过度耦合的架构,即不利于类的复用,也不稳定。例如在下左图中,有六个同事类对象,假如对象1发生变化,那么将会有4个对象受到影响。如果对象2发生变化,那么将会有5个对象受到影响。也就是说,同事类之间直接关联的设计是不好的。如果引入中介者模式,那么同事类之间的关系将变为星型结构,从下右图中可以看到,任何一个类的变动,只会影响的类本身,以及中介者,这样就减小了系统的耦合。一个好的设计,必定不会
2021-08-21 20:33:37 70
原创 设计模式学习笔记十五(观察者设计模式)
1、概述定义:又被称为发布-订阅(Publish/Subscribe)模式,它定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态变化时,会通知所有的观察者对象,使他们能够自动更新自己。2、结构在观察者模式中有如下角色:Subject:抽象主题(抽象被观察者),抽象主题角色把所有观察者对象保存在一个集合里,每个主题都可以有任意数量的观察者,抽象主题提供一个接口,可以增加和删除观察者对象。ConcreteSubject:具体主题(具体被观察者),该角色将有关状态
2021-08-17 22:30:52 113
原创 设计模式学习笔记十四(责任链设计模式)
1、概述在现实生活中,常常会出现这样的事例:一个请求有多个对象可以处理,但每个对象的处理条件或权限不同。例如,公司员工请假,可批假的领导有部门负责人、副总经理、总经理等,但每个领导能批准的天数不同,员工必须根据自己要请假的天数去找不同的领导签名,也就是说员工必须记住每个领导的姓名、电话和地址等信息,这增加了难度。这样的例子还有很多,如找领导出差报销、生活中的“击鼓传花”游戏等。定义:又名职责链模式,为了避免请求发送者与多个请求处理者耦合在一起,将所有请求的处理者通过前一对象记住其下一个对象的引用而连成
2021-08-11 22:03:56 80
原创 设计模式学习笔记十三(命令设计模式)
1、概述日常生活中,我们出去吃饭都会遇到下面的场景。定义:将一个请求封装为一个对象,使发出请求的责任和执行请求的责任分割开。这样两者之间通过命令对象进行沟通,这样方便将命令对象进行存储、传递、调用、增加与管理。2、结构命令模式包含以下主要角色:抽象命令类(Command)角色: 定义命令的接口,声明执行的方法。具体命令(Concrete Command)角色:具体的命令,实现命令接口;通常会持有接收者,并调用接收者的功能来完成命令要执行的操作。实现者/接收者(Receiver)角色:
2021-08-10 13:55:04 101
原创 设计模式学习笔记十二(模板方法设计模式)
1、概述在面向对象程序设计过程中,程序员常常会遇到这种情况:设计一个系统时知道了算法所需的关键步骤,而且确定了这些步骤的执行顺序,但某些步骤的具体实现还未知,或者说某些步骤的实现与具体的环境相关。例如,去银行办理业务一般要经过以下4个流程:取号、排队、办理具体业务、对银行工作人员进行评分等,其中取号、排队和对银行工作人员进行评分的业务对每个客户是一样的,可以在父类中实现,但是办理具体业务却因人而异,它可能是存款、取款或者转账等,可以延迟到子类中实现。定义:定义一个操作中的算法骨架,而将算法的一些步
2021-08-08 15:22:30 89
原创 设计模式学习笔记十一(外观设计模式)
1、概述有些人可能炒过股票,但其实大部分人都不太懂,这种没有足够了解证券知识的情况下做股票是很容易亏钱的,刚开始炒股肯定都会想,如果有个懂行的帮帮手就好,其实基金就是个好帮手,支付宝里就有许多的基金,它将投资者分散的资金集中起来,交由专业的经理人进行管理,投资于股票、债券、外汇等领域,而基金投资的收益归持有者所有,管理机构收取一定比例的托管管理费用。定义:又名门面模式,是一种通过为多个复杂的子系统提供一个一致的接口,而使这些子系统更加容易被访问的模式。该模式对外有一个统一接口,外部应用程序不用关心内部
2021-08-07 18:10:47 83
原创 设计模式学习笔记十六(代理设计模式)
1、概述由于某些原因需要给某对象提供一个代理以控制对该对象的访问。这时,访问对象不适合或者不能直接引用目标对象,代理对象作为访问对象和目标对象之间的中介。Java中的代理按照代理类生成时机不同又分为静态代理和动态代理。静态代理代理类在编译期就生成,而动态代理代理类则是在Java运行时动态生成。动态代理又有JDK代理和CGLib代理两种。2、结构代理(Proxy)模式分为三种角色:抽象主题(Subject)类: 通过接口或抽象类声明真实主题和代理对象实现的业务方法。真实主题(Real Subje
2021-08-06 14:39:12 118
原创 利用element-ui实现文件上传遇到的坑
利用element-ui实现文件时,在接口参数为null,然后报空指针异常。 public Result importDict(MultipartFile multipartFile ){ dictService.importData(file); return Result.ok(); }找了很久,发现参数名必须是file public Result importDict(MultipartFile file){ dictServ
2021-08-05 22:34:16 252
原创 设计模式学习笔记十(享元设计模式)
1、概述定义: 运用共享技术来有效地支持大量细粒度对象的复用。它通过共享已经存在的对象来大幅度减少需要创建的对象数量、避免大量相似对象的开销,从而提高系统资源的利用率。2、结构享元(Flyweight )模式中存在以下两种状态:内部状态,即不会随着环境的改变而改变的可共享部分。外部状态,指随环境改变而改变的不可以共享的部分。享元模式的实现要领就是区分应用中的这两种状态,并将外部状态外部化。享元模式的主要有以下角色:抽象享元角色(Flyweight):通常是一个接口或抽象类,在抽象享元
2021-08-05 13:33:20 114
原创 设计模式学习笔记九(组合设计模式)
1、概述组合模式属于结构性设计模式。上图我们可以看做是一个文件系统,对于这样的结构我们称之为树形结构。在树形结构中可以通过调用某个方法来遍历整个树,当我们找到某个叶子节点后,就可以对叶子节点进行相关的操作。可以将这颗树理解成一个大的容器,容器里面包含很多的成员对象,这些成员对象即可是容器对象也可以是叶子对象。但是由于容器对象和叶子对象在功能上面的区别,使得我们在使用的过程中必须要区分容器对象和叶子对象,但是这样就会给客户带来不必要的麻烦,作为客户而已,它始终希望能够一致的对待容器对象和叶子对象。2、
2021-08-05 00:46:08 116
原创 设计模式学习笔记八(装饰者设计模式)
一、咖啡馆订单系统项目咖啡种类/单品咖啡:Espresso(意大利浓咖啡)、ShortBlack、LongBlack(美式咖啡)、Decaf(无因咖啡)调料:Milk、Soy(豆浆)、Chocolate要求在扩展新的咖啡种类时,具有良好的扩展性、改动方便、维护方便使用 OO 的来计算不同种类咖啡的费用: 客户可以点单品咖啡,也可以单品咖啡+调料组合。1、解决方案一:问题分析:Drink 是一个抽象类,表示饮料des 就是对咖啡的描述, 比如咖啡的名字cost() 方法就是计算费用
2021-08-03 16:14:10 210
原创 设计模式学习笔记七(桥接模式)
简介定义:将抽象部分与它的实现部分分离,使它们都可以独立地变化。意图:将抽象与实现解耦。 桥接模式主要应对的是由于实际的需要,某个类具有两个或者两个以上的维度变化(违反了SRP单一原则),如果只是用继承将无法实现这种需要,或者使得设计变得相当臃肿。案例:分析:扩展性问题(类爆炸),如果我们再增加不同样式的电脑式(手表电脑),就需要增加各个品牌电脑的类,同样如果我们增加一个电脑品牌(华为),也要在各个电脑样式类下增加。违反了单一职责原则,当我们增加电脑样式时,要同时增加所有品牌的电脑
2021-08-02 13:34:43 159
原创 设计模式学习笔记六(适配器设计模式)
基本介绍适配器模式(Adapter Pattern)将某个类的接口转换成客户端期望的另一个接口表示,主的目的是兼容性,让原本因接口不匹配不能一起工作的两个类可以协同工作。其别名为包装器(Wrapper)。适配器模式属于结构型模式。主要分为三类:类适配器模式、对象适配器模式、接口适配器模式。工作原理:适配器模式:将一个类的接口转换成另一种接口.让原本接口不兼容的类可以兼容。从用户的角度看不到被适配者,是解耦的。用户调用适配器转化出来的目标接口方法,适配器再调用被适配者的相关接口方法。用户
2021-07-31 00:49:16 146
原创 设计模式学习笔记五(建造者模式)
盖房项目需求:需要建房子:这一过程为打桩、砌墙、封顶。房子有各种各样的,比如普通房,高楼,别墅,各种房子的过程虽然一样,但是要求不要相同的。请编写程序,完成需求。传统方式解决盖房需求类图:House抽象类:public abstract class House { //打地基 public abstract void buildBasic(); //砌墙 public abstract void buildWalls(); //封顶 pub
2021-07-27 23:46:56 228
原创 接口和抽象类的区别
1、基本语法区别Java中接口和抽象类的定义语法分别为interface与abstract关键字。抽象类:在Java中被abstract关键字修饰的类称为抽象类,被abstract关键字修饰的方法称为抽象方法,抽象方法只有方法的声明,没有方法体。抽象类的特点:抽象类不能被实例化只能被继承;包含抽象方法的一定是抽象类,但是抽象类不一定含有抽象方法;抽象类中的抽象方法的修饰符只能为public或者protected,默认为public;一个子类继承一个抽象类,则子类必须实现父类抽象方法,否则子类
2021-07-27 16:04:53 140
原创 设计模式学习笔记四(原型模式)
概述原型模式(Prototype 模式)是指:用原型实例指定创建对象的种类,并且通过拷贝这些原型,创建新的对象原型模式是一种创建型设计模式,允许一个对象再创建另外一个可定制的对象,无需知道如何创建的细节工作原理是:通过将一个原型对象传给那个要发动创建的对象,这个要发动创建的对象通过请求原型对象拷贝它们自己来实施创建,即 对象.clone()。原型模式的核心思想是,通过拷贝指定的“原型实例(对象)”,创建跟该对象一样的新对象。简单理解就是“克隆指定对象”。类图:Prototype : 原型
2021-07-26 18:25:51 99
原创 设计模式学习笔记三(工厂模式)
工厂模式需求:看一个披萨的项目:要便于披萨种类的扩展,要便于维护。披萨的种类很多(比如 GreekPizz、CheesePizz 等)。披萨的制作有 prepare,bake, cut, box。完成披萨店订购功能。1、使用传统的方式来完成思路分析(类图):代码实现:1、Pizza抽象类public abstract class Pizza { protected String name; /** * 准备原材料 */ public
2021-07-26 00:19:20 138
原创 设计模式学习笔记二(单例模式)
简介所谓类的单例设计模式,就是采取一定的方法保证在整个的软件系统中,对某个类只能存在一个对象实例, 并且该类只提供一个取得其对象实例的方法(静态方法)。单例模式属于创建型模式。单例模式有七种方式:饿汉式(静态常量)饿汉式(静态代码块)懒汉式(线程不安全)懒汉式(线程安全,同步方法)懒汉式(线程安全,同步代码块)静态内部类枚举一、饿汉式1、饿汉式(静态常量)实现步骤:构造器私有化 (防止 new )类的内部创建对象向外暴露一个静态的公共方法。getInstancepu
2021-07-23 00:18:15 69
原创 设计模式学习笔记一(设计模式七大原则)
一、设计模式的目的代码重用性 (即:相同功能的代码,不用多次编写)。可读性 (即:编程规范性, 便于其他程序员的阅读和理解)。可扩展性 (即:当需要增加新的功能时,非常的方便,称为可维护)。可靠性 (即:当我们增加新的功能后,对原来的功能没有影响)。使程序呈现高内聚,低耦合的特性。二、 设计模式七大原则设计模式原则,其实就是程序员在编程时,应当遵守的原则,也是各种设计模式的基础(即:设计模式为什么这样设计的依据)单一职责原则接口隔离原则依赖倒转(倒置)原则里氏替换原则开闭原则
2021-07-21 21:16:08 85
原创 springboot学习笔记(简介与入门)
SpringBoot简介Spring作为一个轻量级的容器,在JavaEE开发中得到了广泛的应用,但是Spring的配置繁琐臃肿,在和各种第三方框架进行整合时代码量都非常大,为了使开发者能够快速上手Spring,利用Spring框架快速搭建JavaEE项目,SpringBoot应运而生。SpringBoot带来了全新的自动化配置解决方案,使用SpringBoot可以快速创建基于Spring生产级的独立应用。SpringBoot中对一些常用的第三方库提供了默认的自动化配置方案,使得开发者只需要很少的Sprin
2021-07-07 21:54:01 107
原创 spring学习笔记(spring注解驱动开发之AOP)
AOPaop:指在程序运行期间动态的将某段代码切入到指定方法位置进行运行的编程方式。【动态代理】案例:有个除法方法,定义一个日志类动态记录方法的执行情况。实现步骤:1、导入aop模块 <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aspects</artifactId>
2021-07-07 19:00:00 69
原创 spring学习笔记(spring注解驱动开发之属性赋值和自动装配)
属性赋值一、@Value1、基本数值2、可以写SpEL : #{}3、可以写${},取出配置文件中的值(在运行环境变量中的值)实体类:@Data@AllArgsConstructor@NoArgsConstructorpublic class Person { //使用@Value注解给属性赋值: //1、基本数值 //2、可以写SpEL : #{} //3、可以写${},取出配置文件中的值(在运行环境变量中的值) priva
2021-07-07 09:49:08 183
原创 springMVC学习笔记三(拦截器、异常处理和文件上传)
springMVC中的拦截器一、拦截器的作用Spring MVC 的处理器拦截器类似于 Servlet 开发中的过滤器 Filter,用于对处理器进行预处理和后处理。用户可以自己定义一些拦截器来实现特定的功能。谈到拦截器,还要向大家提一个词——拦截器链(Interceptor Chain)。拦截器链就是将拦截器按一定的顺序联结成一条链。在访问被拦截的方法或字段时,拦截器链中的拦截器就会按其之前定义的顺序被调用。说到这里,可能大家脑海中有了一个疑问,这不是我们之前学的过滤器吗?是的它和过滤器是有几分
2021-07-06 22:35:49 162
原创 SSM整合
1、导入依赖<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/
2021-07-06 12:26:40 59
原创 springMVC学习笔记二(请求参数绑定、常用注解和转发与重定向)
请求参数绑定一、绑定机制我们都知道,表单中请求参数都是基于 key=value 的。SpringMVC 绑定请求参数的过程是通过把表单提交请求参数,作为控制器中方法参数进行绑定的。例如:<a href="/param1?username=张三"> 参数绑定</a>请求参数为username=张三 @GetMapping("/param1") public String test1(String username){ return "succes
2021-07-05 19:03:20 257
原创 springMVC学习笔记一(初认识springMVC)
springMVC的概述一、springMVC是什么pringMVC 是一种基于 Java 的实现 MVC 设计模型的请求驱动类型的轻量级 Web 框架,属于 Spring FrameWork 的后续产品,已经融合在 Spring Web Flow 里面。Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块。使用 Spring 可插入的 MVC 架构,从而在使用 Spring 进行 WEB 开发时,可以选择使用 Spring的 Spring MVC 框架或集成其他 MVC 开发框架,如
2021-07-05 15:38:37 124
原创 maven工程中resources文件夹下的资源文件加载不出来
在学习springMVC的时候springmvc-servlet.xml文件一直加载不到classes那里。解决:在pom.xml文件中配置资源过滤规则: <build> <resources> <resource> <directory>${basedir}/src/main/java</directory> <include
2021-07-05 10:53:31 879
原创 spring学习笔记(spring注解驱动开发之bean的生命周期)
bean的生命周期通常意义上讲的bean的生命周期,指的是bean从创建到初始化,经过一系列的流程,最终销毁的过程。只不过,在Spring中,bean的生命周期是由Spring容器来管理的。在Spring中,我们可以自己来指定bean的初始化和销毁的方法。我们指定了bean的初始化和销毁方法之后,当容器在bean进行到当前生命周期的阶段时,会自动调用我们自定义的初始化和销毁方法。容器管理bean的生命周期的方法:@bean 指定初始化和销毁方法通过让bean实现InitializingBean接口
2021-07-04 16:47:26 98
原创 spring学习笔记(spring注解驱动开发之容器注册组件)
组件注册一、@Configuration和@Bean注解:@Configuration:标注该类是一个Spring的配置类@Bean:将方法的返回值注入spring容器中。代码演示:1、创建一个person类,该类只有名称和年龄两个简单的属性。@Data@AllArgsConstructor@NoArgsConstructorpublic class Person { private String userName; private int age;}2、因为是纯
2021-07-02 23:34:45 123
原创 spring学习笔记(整合mybatis)
spring整合mybatis一、环境搭建导入依赖<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 htt
2021-07-01 22:29:36 79
原创 spring学习笔记(代理模式和AOP)
代理模式代理模式的定义:代理模式给某一个对象提供一个代理对象,并由代理对象控制对原对象的引用。代理模式中的角色:抽象主题角色(Subject):声明了目标对象和代理对象的共同接口,这样一来在任何可以使用目标对象的地方都可以使用代理对象。具体主题角色(RealSubject):也称为委托角色或者被代理角色。定义了代理对象所代表的目标对象。代理主题角色(Proxy):也叫委托类、代理类。代理对象内部含有目标对象的引用,从而可以在任何时候操作目标对象;代理对象提供一个与目标对象相同的接口,以便可以在
2021-07-01 20:06:19 104
原创 spring学习笔记(spring概述和IOC)
spring51、spring的概述1.1、spring是什么Spring 是于 2003 年兴起的一个轻量级的 Java 开发框架,它是为了解决企业应用开发的复杂性而创建的。Spring 的核心是控制反转(IoC)和面向切面编程(AOP)。Spring 是可以在 Java SE/EE 中使用的轻量级开源框架spring官网地址:https://spring.io/spring官网下载地址:https://repo.spring.io/release/org/springframework/s
2021-07-01 00:20:19 190
原创 mybatis学习笔记四(延迟加载和缓存)
mybatis中的延迟加载1、延迟加载的概念延迟加载:就是在需要用到数据时才进行加载,不需要用到数据时就不加载数据。延迟加载也称懒加载。好处:先从单表查询,需要时再从关联表去关联查询,大大提高数据库性能,因为查询单表要比关联查询多张表速度要快。2、举例:问题: 在一对多中,当我们有一个用户,用户有一百个账户。在查询用户时,要不要把关联的账户查询出来?在查询账户时,要不要把关联的用户查询出来?在查询用户信息时,用户下的账户信息应该是,说明时候使用,什么时候查询。在查询账户信息时,账户
2021-06-28 20:27:45 347
原创 mybatis学习笔记四(多表查询)
表之间的关系分析一对一( 多对一)一对多多对多一对一示例:用户和账户一个账户只能属于一个用户实现步骤:建立两张表,用户表和账户表建立两个实体类,用户实体类和账户实体类建立两个配置文件用户的配置文件账户的配置文件实现配置- 当我们查询用户时,可以同时得到用户下包含的账户信息- 当我们查询账户时,可以同时得到账户所属用户信息建表语句:CREATE TABLE `user` ( `id` int(11) NOT NULL auto_increment,
2021-06-28 17:14:47 135
原创 mybatis学习笔记三(mybatis参数深入)
1、parameterType 配置参数在mybatis的crud中 SQL 语句传参,使用标签的 parameterType 属性来设定。该属性的取值可以是基本类型,引用类型(例如:String 类型),还可以是实体类类型(POJO 类)。同时也可以使用实体类的包装类,下面介绍如何使用实体类的包装类作为参数传递。查询条件实体类@Datapublic class QueryVo { private User user;}dao接口类 //根据查询封装类查询用户 Lis
2021-06-25 15:51:33 104
原创 mybatis学习笔记二(crud)
1、mybatis的简单实现流程分析2、环境搭建依赖jar包 <!--导入mybatis依赖--> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.3</version>
2021-06-24 14:41:35 92
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人