自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 设计模式-享元模式

1.享元模式概述图:运用共享技术有效地支持大量细粒度的对象。主要解决:在有大量对象时,有可能会造成内存溢出,我们把其中共同的部分抽象出来,如果有相同的业务请求,直接返回在内存中已有的对象,避免重新创建。何时使用: 1、系统中有大量对象。 2、这些对象消耗大量内存。 3、这些对象的状态大部分可以外部化。 4、这些对象可以按照内蕴状态分为很多组,当把外蕴对象从对象中剔除出来时,每一组对象都可以用一个对象来代替。 5、系统不依赖于这些对象身份,这些对象是不可分辨的。如何解决:用唯一标识码判断,如果在内存中

2021-10-14 22:20:56 101

原创 设计模式-组合模式

1.组合模式概述意图:将对象组合成树形结构以表示"部分-整体"的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。主要解决:它在我们树型结构的问题中,模糊了简单元素和复杂元素的概念,客户程序可以像处理简单元素一样来处理复杂元素,从而使得客户程序与复杂元素的内部结构解耦。何时使用: 1、您想表示对象的部分-整体层次结构(树形结构)。 2、您希望用户忽略组合对象与单个对象的不同,用户将统一地使用组合结构中的所有对象。如何解决:树枝和叶子实现统一接口,树枝内部组合该接口。关键代码:树枝内部

2021-10-14 21:54:46 115

原创 设计模式-外观模式

1.外观模式概述意图:为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。主要解决:降低访问复杂系统的内部子系统时的复杂度,简化客户端之间的接口。何时使用: 1、客户端不需要知道系统内部的复杂联系,整个系统只需提供一个"接待员"即可。 2、定义系统的入口。使用场景: 1、为复杂的模块或子系统提供外界访问的模块。 2、子系统相对独立。 3、预防低水平人员带来的风险。外观模式中有以下的角色:外观角色:把多个子系统的接口整合,对外提供一个对外的统一

2021-10-13 15:55:45 105

原创 设计模式-桥接模式

1.桥接模式概述将抽象和实现分离,使它们可以独立的变化,实际上是使用组合关系来代替继承关系,将抽象和实现两个方向上的耦合降低。桥接模式的主要角色有:抽象化角色:定义抽象化,并且包含一个对实现化对象的引用。扩展抽象化:是抽象化角色的子类,实现了业务方法。实现化对象:定义接口,供子类使用具体实现化对象:给出实现化对象的方法实现试想这样一个场景,我们需要开发一个画图程序,要求能画各种形状,各种颜色的图形。按照传统的想法,应该定义一个Shape接口,在此基础上实现Rectengle,Circle,

2021-10-13 15:13:05 93

原创 设计模式-装饰者模式

1.装饰者模式概述指在不改变对象结构的情况下,动态的给对象增加一些额外的职责(即附加一些额外的功能)。意图:动态地给一个对象添加一些额外的职责。就增加功能来说,装饰器模式相比生成子类更为灵活。主要解决:一般的,我们为了扩展一个类经常使用继承方式实现,由于继承为类引入静态特征,并且随着扩展功能的增多,子类会很膨胀。装饰者模式中有以下的几个角色:抽象构件:定义一个接口接收附加责任的对象具体构建:实现了抽象构建,通过装饰角色为其添加职责抽象装饰:继承或实现抽象构建,并持有一个具体构件的实例,可以通

2021-10-13 13:42:39 81

原创 设计模式-适配器模式

1.适配器模式概述适配器模式,就是两个原本不兼容的接口结合在一起,使得它们可以一起工作。举例: 1、美国电器 110V,中国 220V,就要有一个适配器将 110V 转化为 220V。 2、JAVA JDK 1.1 提供了 Enumeration 接口,而在 1.2 中提供了 Iterator 接口,想要使用 1.2 的 JDK,则要将以前系统的 Enumeration 接口转化为 Iterator 接口,这时就需要适配器模式。 3、在 LINUX 上运行 WINDOWS 程序。 4、JAVA 中的 j

2021-10-12 21:47:20 77

原创 设计模式-代理模式

1.代理模式概述用一个类来代理另一个类的功能,为访问某个类的对象提供一种代理以控制访问。并且在此基础上增强原来的功能。举例:windows系统上的快捷方式,当我们需要运行一个软件时,不需要找到其安装位置双击.exe文件,而直接访问桌面上的快捷方式即可。火车站买票,我们不需要自己去火车站购买,可以去代售点购买,不过代价是收取一定的服务费。在代理模式中有以下的几个角色:抽象主题角色:提供原始方法的接口真实主题角色:实现了的抽象主题角色的接口方法代理角色:同样实现了原始方法接口,并且聚合了真

2021-10-12 20:07:09 94

原创 设计模式-建造者模式

1.建造者模式概述建造者模式就是将一个复杂对象的构建和表示分开。建造者模式的组成部分:抽象建造者类(builder):定义组成复杂对象的部件的创建,是抽象类。具体建造者类(Concrete Builder):继承自builder,实现各个部件的创建,并且创建完成之后提供产品的实例。产品(product):要创建的复杂对象。指挥者类(Director):调用具体建造者类,以某种顺序完成各个部件的创建并返回。UML类图如图:根据上述UML图,转化的代码如下:抽象builder:publ

2021-10-11 21:38:35 46

原创 设计模式-原型模式

1.原型模式的简单介绍原型模式就是指,对于一个类的对象,获得他的一个副本。副本的属性和方法与该对象相同。在继续了解之前,还有一些预备知识需要明确。浅复制:对于一个类的对象的简单类型变量,它的副本与其不同。但是对于类类型的变量,副本与原生对象使用的是堆中的同一个。深复制:一个对象的所有类型的变量,都会额外的拷贝一份。2.原型模式实现实际上java已经为我们提供了克隆一个对象的方法,并且定义在了所有类的父类Object中,要想使用该方法,类首先需要实现CloneAble接口。publi

2021-10-11 19:08:03 49

原创 设计模式-工厂模式

1.什么是工厂模式?以及工厂模式的几个组成部分。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。主要有以下的几个组成部分:1.抽象产品2.具体产品(继承自抽象产品)3.抽象工厂(负责提供产生对象的接口方法)4.具体工厂(实现产生对象的方法,生产某种具体的对象产品)2.层层递进,探究工厂模式的优点与缺点现在引入这样一个场景:我们需要一个咖啡点餐系统,要求根据客户的需求提供

2021-10-11 14:26:45 81

原创 单例模式全解

1.单例模式简单介绍单例模式,直截了当的说就是让类在整个程序运行周期里只有一个实例对象存在。好处是针对那些庞大而又没有必要多次新建对象的类,不让其随意创建新对象,造成额外的时间和空间浪费。2.单例模式的实现饿汉式单例模式饿汉式单例模式就是不管我们在程序中是否使用某个类的对象,都会创建好一个它的对象。这种情况可以应用于那些超大型的类,在程序运行过程中创建反而会拖垮程序的运行速度。class SingleTon{ private static SingleTon instance=new

2021-09-27 19:41:38 102

原创 Mysql锁理论

1.使用MYISAM引擎存储(只能加表锁)给表加读锁 lock table table_name read;给表加写锁 lock table table_name write;建表语句:下面进行读写锁的特性测试:1.首先是读锁:在对一个数据库中的表加了读锁时,自身还可以读取该表的记录。但是不能读取其它表的记录。自己不能更新表中的记录。那么在另一个新开的会话当中的情况呢?可以读取任意表的信息,更新操作将会被阻塞。2.再是写锁在自身的会话中,写锁可以读,写,不能查看其它的表。

2021-09-22 16:23:59 122

原创 mysql工具explain的介绍

1.explain是什么?它能帮助我们做什么呢?explain是mysql的解释工具,它反映了mysql底层是如何理解我们写的sql语句,并且如何执行。可以帮助我们获悉sql语句中表的加载顺序,数据读取操作的操作类型,表的哪些索引可能被使用,哪些索引被真正的使用,及表之间的引用关系(譬如连接查询时,到底以哪一张表为基准与其它表进行比对)等等。整理的表格如下:2.怎么样看懂explain给出的信息?博主的环境是mysql5.7,部署在centos7上。让我们先用explain做一下小的case观察一下

2021-09-18 20:30:17 397

原创 SpringBoot的错误处理

SpringBoot的默认错误处理和自定义的默认处理机制默认异常和错误的处理机制SpringBoot中有默认的资源文件夹,即template文件夹和static文件夹,在这两个里面添加error文件夹,并为其中的文件取上特定的名字就可以让当页面出现错误时,自动跳转到错误的页面.演示:...

2021-06-03 18:34:10 356

原创 SpringBoot2内使用@MatrixVariable注解时的注意事项

SpringBoot配合@MatrixVariable注解使用时的注意事项@MatrixVariable注解详解value属性表示将要接收的变量的名字,可以和name属性混用name属性也表示接收的变量名字,可以和value属性混用pathVar属性适用于特定的一些场景,即当我们的矩阵变量中有着相同的字段变量时,我们需要通过此属性区分它们。举个例子。/cars/boss;age=20/employee;age=18以上的路径中有两个变量名都是age,在客户端获取它们的值时,我们

2021-05-29 22:38:50 381

原创 LeetCode每日抑题之-形成两个异或相等数组的三元组数目

原题链接题目描述给你一个整数数组 arr 。现需要从数组中取三个下标 i、j 和 k ,其中 (0 <= i < j <= k < arr.length) 。a 和 b 定义如下:a = arr[i] ^ arr[i + 1] ^ … ^ arr[j - 1]b = arr[j] ^ arr[j + 1] ^ … ^ arr[k]注意:^ 表示 按位异或 操作。请返回能够令 a == b 成立的三元组 (i, j , k) 的数目。示例 1:输入:arr = [2

2021-05-18 10:13:07 84

原创 SpringBoot02

本博文的主要内容1.自动包规则原理和自动配置1.自动包规则原理和自动配置@SpringBootApplication是一个合成的注解,它由以下的三个注解合成:@ComponentScan注解是包扫描的注解,指定扫描哪些包下的哪些类@SpringBootConfiguration代表当前的类是核心的配置类那么我们的全部中心都放在EnableAutoConfiguration注解身上它本身也是一个合成的注解。@AutoConfigurationPackage实际就是把主程序(main程

2021-05-16 22:56:23 173

原创 SpringBoot01

本博文主要介绍的内容有底层注解@Configuration详解@Import注解Conditional@ImportResource注解导入Spring配置文件@ConfigurationProperties配置绑定1. 底层注解@Configuration详解配置类本身也是组件,被加入到了容器当中。@Configuration //告诉SpringBoot这是一个配置类==配置文件public class MyConfiguration { @Bean//给容器中添

2021-05-16 21:54:47 75

原创 JVM运行时内存布局02

本博文主要讲解的内容1.栈帧的主要组成2.局部变量表详解1.栈帧的而主要组成局部变量表操作数栈动态链接方法返回地址一些附加的信息2.局部变量表详解public class Runtime3 { private int count=0; public static void main(String[] args) { Runtime3 runtime3 = new Runtime3(); int num=10; ru

2021-05-16 18:38:41 70

原创 JVM运行时内存布局01

本编博文介绍的主要内容1.JVM内存布局概述总的来说JVM内存区分为堆区,方法区,程序计数器,本地方法栈,虚拟机栈。其中方法区和堆区是由整个程序共享的,即图中的红色部分。灰色部分对每一个线程来说是私有的。注意这里的程序计数器是软件意义上的,区别于计算机的PC。用来指向每一个线程下一条指令的地址。本地方法接口或者本地库指的是java当中用native修饰的方法,这一类方法通过调用C语言或者C++的函数辅助完成自己的功能。下面附上一张阿里对JMV内存布局的划分,总的来说,与上图大同小异:2.

2021-05-16 17:58:52 91

原创 类加载器的三个过程

本篇博客主要讲解的内容类的加载器和加载过程类的加载过程几种类加载器的使用体会双亲委派机制的工作原理及演示1.类的加载器和加载过程ClassLoader只负责对class文件的加载,二聚体的是否可以运行,则由Execution Engine决定。加载到的类的信息存于方法区的内存空间当中。除了类的本身的信息之外,方法区还会存放正常运行时常量池的信息。可能包括字符串的字面量和常量。2.类的加载过程加载a.通过一个类的全限定名获取此类的二进制字符流b.将这个字节流的静态存储结构转化为方法

2021-05-15 21:47:09 168

原创 写MyBatis时通过mapper标签的class属性配置映射时出现的问题

写MyBatis时通过mapper标签的class属性配置映射时出现的问题我们知道在Mybatis的总配置文件中配置接口的映射信息有三种方法:resources:引用类路径下的配置文件,路径间用/隔开url:可以引用磁盘上的任意资源或者网络资源都可- class:配置需要实现的接口的全路径。还要把映射文件放在同一个包下,并且名字也需要相同此博文讨论的就是第三种方法出现的问题。环境是idea.假设我们有一个EmployeeDao接口,我们把映射文件复制到同一个路径下。开启测试时会出现这种错

2021-04-24 11:35:11 649 1

原创 LeetCode每日抑题之——组合总数IV

原题链接题目描述给你一个由 不同 整数组成的数组 nums ,和一个目标整数 target 。请你从 nums 中找出并返回总和为 target 的元素组合的个数。题目数据保证答案符合 32 位整数范围。示例 1:输入:nums = [1,2,3], target = 4输出:7解释:所有可能的组合为:(1, 1, 1, 1)(1, 1, 2)(1, 2, 1)(1, 3)(2, 1, 1)(2, 2)(3, 1)请注意,顺序不同的序列被视作不同的组合。示例 2:输入:.

2021-04-24 10:26:24 165

原创 LeetCode每日抑题之——最大整除子集

原题链接题目描述给你一个由 无重复 正整数组成的集合 nums ,请你找出并返回其中最大的整除子集 answer ,子集中每一元素对 (answer[i], answer[j]) 都应当满足:answer[i] % answer[j] == 0 ,或answer[j] % answer[i] == 0如果存在多个有效解子集,返回其中任何一个均可。示例 1:输入:nums = [1,2,3]输出:[1,2]解释:[1,3] 也会被视为正确答案。示例 2:输入:nums = [1,2,4

2021-04-23 10:17:30 153 1

原创 LeetCode每日抑题——解码方法

原题链接原题链接一条包含字母 A-Z 的消息通过以下映射进行了 编码 :‘A’ -> 1‘B’ -> 2…‘Z’ -> 26要 解码 已编码的消息,所有数字必须基于上述映射的方法,反向映射回字母(可能有多种方法)。例如,“11106” 可以映射为:“AAJF” ,将消息分组为 (1 1 10 6)“KJF” ,将消息分组为 (11 10 6)注意,消息不能分组为 (1 11 06) ,因为 “06” 不能映射为 “F” ,这是由于 “6” 和 “06” 在映射中并不等

2021-04-21 09:07:47 81

原创 双指针解决27题——移除元素

题目描述给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。题目地址说明:为什么返回数值是整数,但输出的答案是数组呢?请注意,输入数组是以「引用」方式传递的,这意味着在函数里修改输入数组对于调用者是可见的。你可以想象内部操作如下:// nums 是以“引用”方式传递的。也就是说,不对实参作

2021-04-19 18:59:13 82

原创 Spring-基于配置的JDBC事务和事务的传播行为

1.什么是数据库事务,几种隔离等级下的数据库事务介绍2.什么是事务的传播行为?几种传播行为的特点测试1.数据库事务介绍,几种隔离等级下的事务特点一、什么是数据库事务事务是一系列作为一个逻辑单元来执行的操作集合。它是数据库维护数据一致性的单位,它将数据库从一致状态转变为新的一致状态,指作为单个逻辑工作单元执行的一系列操作,要么完全地执行,要么完全地不执行。举个例子,张三通过网上银行向李四转账1000块钱,但是期间由于网络原因,张三转账的操作成功了,但是李四的网络不好,倒置没有收到这笔钱,那么这个时候我

2021-04-08 22:26:53 253 5

原创 Spring:基于注解完成aop和相关的细节

1.Aop的底层原理之——动态代理详解2.基于注解配置各个切面3.切面执行顺序详解4.多切面环境下切面之间的优先级关系那么下面就进入正题吧!1.java的动态代理动态代理能够在不该便一个类方法源码的情况下,对这个方法进行增强要对一个类的方法进行增强,那么这个类一定要实现一个接口!!!至于原因,我么可以在下面的具体实现代码中体会。声明一个计算器的接口,里面定义了加和减两个方法的规范。`public interface OldCalcutor { public int add(in

2021-04-07 22:19:32 100 1

原创 MyBatis-快速体验

简介什么是MyBatis?MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。这是官方的说法,简单来说MyBatis就是基于java的操作数据库的框架。快速开始一个MyBatis工程在idea中新建一个空

2021-03-29 21:22:47 84 2

空空如也

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

TA关注的人

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