自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 SpringBoot 自定义注解

新建SpringBoot 项目选择Spring Initializr 点击Next写好名字,Java version选择8,点击Next选择Web,点击Next 写好名字,点击Finish,项目创建完成。添加aop依赖<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-aop</arti..

2021-10-10 23:07:15 291

原创 如何理解Mybatis

Mybatis内部封装了JDBC,不需要我们手动去创建连接,加载驱动,只需关注SQL语句本身。 Mybatis是⼀个半ORM(对象关系映射)框架,它内部封装了 JDBC,开发时只需要关注 SQL 语句本身,不需要花费精⼒去处理加载驱动、创建连接、创建 Statement 等繁杂的过程。程序员直接编写原⽣态 SQL,可以 严格控制 SQL 执⾏性能,灵活度⾼。 MyBatis 可以使⽤ XML 或注解来配置和映射原⽣信息,将 POJO 映射成数据库中的记录,避免了⼏乎所有的 JDBC 代码和⼿动设置参

2021-09-10 22:15:08 200

原创 SpringMVC工作流程

简单来说:客户端发送请求-> 前端控制器 DispatcherServlet 接受客户端请求 -> 找到处理器映射 HandlerMapping 解析请求对应的 Handler -> HandlerAdapter 会根据 Handler 来调⽤真正的处理器来处理请 求,并处理相应的业务逻辑 -> 处理器返回⼀个模型视图 ModelAndView -> 视图解析器进⾏解析 -> 返回⼀个视图 对象 -> 前端控制器 DispatcherServlet 渲染数据(M..

2021-09-10 22:02:14 207

原创 Java中的异常简介

在 Java 中,所有的异常都有一个共同的祖先 java.lang包中的 Throwable类。Throwable类有两个重要的子类 Exception(异常)和 Error(错误)。Exception能被程序本身处理(try-catch), Error是无法处理的(只能尽量避免)。Exception 和 Error二者都是 Java 异常处理的重要子类,各自都包含大量子类。Exception Exception :程序本身可以处理的异常,可以通过 catch...

2021-09-05 20:54:39 204

原创 HashMap详解

目录1. HashMap基础2. Hash表3. HashMap源码4. 1.7和1.8的区别5. 为什么jdk1.8将尾插法改为头插法?6.为什么jdk1.8将链表改为红黑树?7. hashMap的扩容机制8. HashMap是线程安全的吗?怎么解决?9. HashTable10. ConcurrentHashMap11.ConcurrentHashMap和HashTable有什么区别?能否取代HashMap?12.ConcurrentHashMap的...

2021-09-05 17:12:53 285

原创 Redis相关

目录Redisredis持久化缓存击穿缓存穿透缓存雪崩过期数据的删除策略redis内存淘汰机制Redis Redis 就是一个使用 C 语言开发的数据库,Redis 的数据是存在内存中的,读写速度很快,被广泛应用于缓存方向。 Redis 除了做缓存之外,Redis 也经常用来做分布式锁,甚至是消息队列。 分布式缓存主要解决的是单机缓存的容量受服务器限制并且无法保存通用的信息。因为,本地缓存只在当前服务里有效,比如如果你部署了两个相同的服务,他.

2021-09-04 22:13:57 193

原创 Jvm之垃圾回收算法

目录标记-清除算法标记-复制算法标记-整理算法从如何判定对象消亡的角度出发,垃圾收集算法可以划分为“引用计数式垃圾收集”(Reference Counting GC)和“追踪式垃圾收集”(Tracing GC)两大类,这两类也常被称作“直接垃圾收集”和“间接 垃圾收集”。以下介绍的算法都是追踪式垃圾收集。标记-清除算法标记-清除算法分为“标记”和“清除”两个阶段:首先标记出所有需要回收的对象,在标记完成后,统一回收掉所有被标记的对象,也可以反过来,标记存活的对象,统一回收所有未被标

2021-09-03 14:27:21 91

原创 Jvm之判断对象已死

引用计数法在对象中添加一个引用计数器,每当有一个地方引用它的时候,计数器的值就加一;当引用失效时,计数器的值就减一;任何时刻计数器为零的对象就是不可能再被使用的。原理简单,判定效率也很高,在大多数情况下是一个不错的算法。但是这个看似简单的算法有很多例外情况要考虑,必须要配合大量额外处理才能保证正确地工作,如单纯的引用计数就很难解决对象之间相互循环引用的问题,但实际可以解决,可以类似参考spring 循环依赖解决的方式 ,只是一个思路参考。可达性分析法通过 一系列称为“GC Root

2021-09-03 10:12:22 74

原创 Java中的序列化和反序列化

参考文章链接:https://www.cnblogs.com/xdp-gacl/p/3777987.html把对象转换为字节序列的过程称为对象的序列化。把字节序列恢复为对象的过程称为对象的反序列化。对象的序列化主要有两种用途:1. 把对象的字节序列永久地保存到硬盘上,通常存放在一个文件中;2. 在网络上传送对象的字节序列。  在很多应用中,需要对某些对象进行序列化,让它们离开内存空间,入住物理硬盘,以便长期保存。比如最常见的是Web服务器中的Session对象,当有 10万用户并发访问,就.

2021-08-31 23:20:11 127

原创 Cookie和Session的区别

Cookie 存储在客户端中,而Session存储在服务器上。 Cookie 数据保存在客户端(浏览器端),Session 数据保存在服务器端。 Cookie 一般用来保存用户信息 ,Session 的主要作用就是通过服务端记录用户的状态。 两个都可以用来存私密的东西,同样也都有有效期的说法,区别在于session是放在服务器上的,过期与否取决于服务期的设定,cookie是存在客户端的,过去与否可以在cookie生成的时候设置进去。 相对来说,Session 安全性更高。 如果要在 Co.

2021-08-31 20:19:54 111

原创 设计模式学习之旅--工厂模式

设计模式设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了重用代码、让代码更容易被他人理解、保证代码可靠性。工厂模式工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一。这种类型

2021-08-30 22:25:18 97

原创 八大排序算法--堆排序

参考文章链接:https://www.cnblogs.com/skywang12345/p/3602162.html原理:指利用堆这种数据结构所设计的一种排序算法。 初始化堆:将数列a[1...n]构造成大(小)顶堆。 交换数据:将a[1]和a[n]交换,使a[n]是a[1...n]中的最大(小)值;然后将a[1...n-1]重新调整为大(小)顶堆。 接着,将a[1]和a[n-1]交换,使a[n-1]是a[1...n-1]中的最大(小)值;然后将a[1...n-2]重新调整为大(小)顶堆。 .

2021-08-27 15:45:18 128 1

原创 八大排序算法--基数排序

原理:将整数按位数切割成不同的数字,然后按每个位数分别比较。 将所有待比较数值统一为同样的数位长度,数位较短的数前面补零。 然后从最低位开始,依次进行一次排序。这样从最低位排序一直到最高位排序完成以后, 数列就变成一个有序序列。代码如下:代码执行结果如图所示:复杂度:时间复杂度:O() 空间复杂度:O(n) 稳定性:稳定如果遇到相等的值不进行交换,那这种排序方式是稳定的排序方式。最后附上八大排序算法的时间、空间复杂度以及稳定性:...

2021-08-27 11:25:59 140

原创 八大排序算法--归并排序

原理:基本思想:分治(分治法将问题分(divide)成一些小的问题然后递归求解,而治(conquer)的阶段则将分的阶段得到的各答案"修补"在一起,即分而治之)采用分治的方法,自上而下,每次取一半,最终得到的两个相邻元素各自形成数组,数组长度=1,自然有序,然后进行合并,得到长度为2的有序数组,再和同样相邻的长度为2的数组合并,得到长度为4的有序数组。 ……. 最终达到有序。代码如下:import java.util.Arrays;public class MergeSort

2021-08-27 09:36:12 104

原创 八大排序算法--希尔排序

原理:从小到大排序 设定一个步长gap(整型),将待排序序列分组,每一次进行组内排序,通过缩小步长到1,最后执行一次简单插入排序,因此也称为缩小增量排序。 设定gap初始值为待排序序列长度的一半gap = length / 2,且后续gap = gap/2。 对以gap分组的序列进行插入排序。代码如下:import java.util.Arrays;public class ShellSort { public static void main(String[] args)

2021-08-26 20:44:22 96

原创 八大排序算法--插入排序

原理:

2021-08-26 11:32:34 81

原创 八大排序算法--快速排序

原理:从小到大排序 第一趟:选择一个基准元素(有的是第一个元素,有的会随机生成一个),定义两个游标(一般是int类型),一个在第一个元素,一个在最后一个元素。 然后遍历无序序列,右边游标先走,若是右边游标对应的元素不小于基准元素,就将右边游标减一,直到出现比基准元素小的数,交换两个游标对应的元素。交换之后,换成左边游标走,若是左边游标对应的元素不大于基准元素,就将左边游标加一,直到出现比基准元素大的数,交换两个游标对应的元素。交换之后,换成右边游标接着走 ...... 如此反复,直到左边游标等于右边

2021-08-25 21:27:26 96

原创 八大排序算法--选择排序

原理:从小到大排序 第一次遍历:记录最小值的下标,和第一个元素进行比较,如果小于第一个元素就与其交换,交换后的第一个元素就是最小的数。 第二次遍历:记录剩下元素中最小值的下标,和第二个元素进行比较,如果小于第二个元素就与其交换,交换后第二个元素是第二小的数。 ...... 重复上述步骤n-1次,最终得到一个有序序列。代码如下:import java.util.Arrays;public class SelectSort { public static void main.

2021-08-25 17:52:06 133

原创 八大排序算法--冒泡排序

冒泡排序,类似于水中冒泡,较大的数沉下去,较小的数慢慢冒起来,假设从小到大,即为较大的数慢慢往后排,较小的数慢慢往前排。原理:比较相邻的两个数,将较大的数放在前边,较小的数放在后边。 第一趟:第1个数和第2个数一对,比较大小,将较大的数放在前边,较小的数放在后边;随后第2个数和第3个数比较,将较大的数放在前边,较小的数放在后边...... 这样直到倒数第2个数和最后1个数比较,将最大的数移动到最后一位。 第二趟:将第二大的数移动至倒数第二位。 ...... 继续上述步骤,共需比较n-1趟。.

2021-08-25 16:45:36 124

原创 jvm之对象探秘(一)

对象的创建过程创建对象通常(例外:复制、反序列化)仅仅是一个new关键字而已,当Java虚拟机遇到一条字节码new指令时,首先将去检查这个指令的参数是否能在常量池中定位到一个类的符号引用,并且检查这个符号引用代表的类是否已被加载、解析和初始化过。如果没有,那必须先执行相应的类加载过程。 在类加载检查通过后,接下来虚拟机将为新生对象分配内存。为对象分配空间实际上就是把一块确定大小的内存块从Java堆中划分出来。 指针碰撞:如果设Java堆中的内存是绝对规整的,所有被使用过的内存都被放在一 边,空闲的内

2021-08-19 23:30:28 74

原创 jvm之运行时数据区

Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域。包括程序计数器、Java虚拟机栈、本地方法栈、Java堆、方法区、运行时常量池,还有一个直接内存。程序计数器线程私有的。 程序计数器是一块较小的内存空间,它可以看作是当前线程所执行的字节码的行号指示器。 字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码指令 如果线程正在执行的是一个Java方法,这个计数器记录的是正在执行的虚拟机字节码指令的地址;如果正在执行的是本地(Nati.

2021-08-19 17:33:32 75

原创 Java中的引用--强引用、软引用、弱引用、虚引用

强引用当一个对象被一个或一个以上的引用变量所引用时,它不可能被系统垃圾回收机制回收。Object o = new Object(); String s= new String("abc");软引用当系统内存空间足够时,它不会被系统回收;如果内存空间不足了,就会被回收,一般创建缓存会使用软引用。String str = new String("abc");SoftReference<String> softReference = new SoftReference&lt

2021-08-16 19:45:05 105

原创 final finally finalize的区别

常量关键字:final修饰基本类型变量,一旦被赋值不能再修改。修饰引用类型变量,变量初始化之后便不能再指向其他对象了,但可以修改该引用所指向的对象的内容。本质上是一回事,因为引用的值是一个地址,final要求值,即地址的值不发生变化。修饰方法,可以被重载,不能被重写。修饰类,不能被继承。若父类中final方法的访问权限为private,将导致子类中不能直接继承该方法,因此,此时可以在子类中定义相同方法名的函数,此时不会与重写final的矛盾,而是在子类中重新地定义了新方法。异常关键字

2021-08-16 18:01:04 88

原创 java基础之代理

1.代理是什么?代理(Proxy)是一种设计模式。提供了对目标对象另外的访问方式,即通过代理对象访问目标对象。有一个类我们无法更改,但我们希望在原有类上加上我们自己的逻辑(增强),这时就可以使用代理,使用代理的优点是:可以在目标对象实现的基础上,增强额外的功能操作,即扩展目标对象的功能。用户和目标对象通过代理对象交互,就像是商家和明星之间通过经纪人交流沟通。2. 静态代理使用静态代理时,需要定义接口或者父类,被代理对象(即目标对象)与代理对象一起实现相同的接口或者是继承相同的父类。

2021-08-13 22:47:17 98

原创 Java基础之反射

什么是反射?Java反射机制的核心是在程序运行时动态加载类并获取类的详细信息,从而操作类或对象的属性和方法。 本质是JVM得到class对象之后,再通过class对象进行反编译,从而获取对象的各种信息。Java属于先编译再运行的语言,程序中对象的类型在编译期就确定下来了, 而当程序在运行时可能需要动态加载某些类,这些类因为之前用不到, 所以没有被加载到JVM。通过反射,可以在运行时动态地创建对象并调用其属性, 不需要提前在编译期知道运行的对象是谁。反射就是能够分析类信息的能力的程序。这里的类

2021-08-13 21:49:07 87

原创 int默认值为0,Integer默认值为null

Java为每个原始类型提供了封装类,Integer是java为int提供的封装类。int的默认值为0,而Integer的默认值为null,即Integer可以区分出未赋值和值为0的区别,int则无法表达出未赋值的情况。执行结果说明,即便不给int类型和Integer类型赋初值,它们仍旧能输出,说明它们有各自的默认值。执行报错,没有初始化变量,也就是说int和Integer没有默认值。造成两种结果的原因是什么呢? 经过查阅资料发现,java静态变量初始化遵循以下规则:静态变量会.

2021-08-12 20:44:05 9127

原创 java中的值传递

public static void main(String[] args) { Student a = new Student(); Student b = new Student(); a.setName("zhangsan"); b.setName("lisi"); System.out.println(a); System.out.println(b); swap1(a,b);...

2021-08-12 00:19:30 120

原创 128陷阱

int是java中的基本数据类型之一,Integer是int类型的包装类。int是直接存储数据值,int的初值为0,integer的初值为null。装箱就是自动将基本数据类型转换为包装器类型;代码中执行 Integer a = 127; 就相当于执行Integer a = Integer.valueOf(100); 这就是自动装箱。拆箱就是自动将包装器转换为基本数据类型;代码中执行int a1 = 127; 就相当于执行 int a1 = a.intValue(); 这就是自动拆箱。其中...

2021-08-11 23:13:53 89

原创 Linux常用命令

ls 查看列举当前目录下有哪些子文件或子文件夹ls -a 查看所有的包括隐藏的子文件或子文件夹/ 根目录ll 查看详细信息cd 打开文件夹su 切换管理员身份mkdir 文件夹名 创建文件夹touch 文件名 创建文件vi aaa(文件名) 打开aaa文件 (进入编辑)a/Esc 打开文件后 按a表示进入编辑状态 按Esc表示退出:wq 保存并退出(之前一定要先退出编辑)cat 文件名 查看文件内容(一下全部展示出来)more 文件名 当文件内容多时会分批展.

2021-08-11 12:07:06 67

原创 git操作

gitclone-b'dev'git@... 切换分支克隆git add . git commit -m '上传代码的注释'git pull 提交之前先拉取代码 解决冲突git push ...

2021-08-11 11:56:13 63

原创 解决no typehandler found for property XXX的问题

1.在实体类中导入import javax.persistence.*;2.使用注解配置实体类和数据库表关联关系(1)实体类的头部要使用 @Table(name = "") 注解 (注:name必须与数据库表名一致)(2)实体类中的每个改变了大小写的字段都要加上 @Column(name = "") 注解 (注:name必须与数据库字段一致)(3)表的主键id最好使用 @Id 注解,如果是自增列最好加上 @GeneratedValue(strategy = GenerationType...

2021-08-11 11:30:10 24247 1

原创 超时报错: java.net.SocketTimeoutException: Read timed out;

(1)电脑慢,或者断网了;(2)重启项目;(3)niua框架:Redis的问题,重启一下Redis;如果还未解决,可以查阅其他方法。

2021-08-11 11:23:17 446

原创 运行Java程序时 Tomcat出错 显示端口被占用

解决方法:1.命令提示符(管理员) 输入netstat-ano|findstr8080 检查8080端口有哪些进程(如果是其他端口,把8080换成其他端口号即可)2.输入taskkill-pid11164 -f 关闭pid是11164 的进程(如果是其他pid,把11164换成其他pid即可)...

2021-08-11 11:20:13 189

原创 在腾讯云开通短信验证服务并完成群发消息测试

1.登录腾讯云,并完成实名认证,打开右侧的控制台2.打开云产品,在搜索框搜索短信 。3.找到国内短信下的签名管理,点击创建签名。4.签名类型选择的是公众号(在这之前需要先注册一个微信公众号),申请说明里填的是公众号的名称。这里需要注意两点:(1)签名内容的格式:公众号的名字+个人公众号,否则申请会不通过(2)证明上传中的截图,需要在网页登录公众号,找到设置中的账号详情,上传这页的截图,(如果页面太大,一页放不下,可以缩小屏幕再截图,缩小屏幕快捷键:按住Ctrl下滑鼠标滚轮.

2021-08-11 10:54:54 1434

原创 SpringBoot启动报错: Could not load TestContextBootstrapper [null]. Specify @BootstrapWith‘s ‘value‘...

SpringBoot启动报错,报错信息如下:通过查阅资料,猜测可能是Spring的版本和Spring-test的版本不一致的原因导致。把pom.xml文件中Spring-test的依赖的版本注释掉,就不报错了。

2021-08-11 10:12:49 1847

原创 SpringBoot启动报错:Parameter 0 of method hmset in com.qcby.rbac.util.RedisUtils required a bean of type

SpringBoot启动报错,报错信息如下:报错是由于A类中定义了含参数的构造函数,Spring自动构造和注入时未为该Bean传入参数,引起报错。查了很多资料,最后发现,我是因为注释的时候没有把@Autowired注释掉,有一个空的@Autowired引起报错,导致项目启动报错。...

2021-08-11 09:51:22 7405 6

原创 Axure RP9 添加鼠标点击事件

1.首先将详情页整体选中,然后右键单击选择组合,将详情页各个元件组合在一起。2. 然后给这个组合起个名字(名字随意,但不要重复)。3.选中查看详情的文本框,点击右侧的交互,点击“New Interaction” 为查看详情添加点击事件,选中鼠标单击时,选择显示/隐藏,选择刚刚的详情页(也可以在search那里搜索元件或组合的名字),然后点击确定。4.与上面操作大同小异,接下来实现点击叉号关闭详情页。首先选中叉号那个文本框,...

2021-07-29 10:30:40 5220

原创 SQL刷题知识点总结(二)

创建外键约束 统计字符串 group_concat() 分组连接字符串 case... when... then... else... end 分情况 日期函数

2021-07-29 09:32:23 88

原创 SQL刷题知识点总结(一)

offset inner join(内连接)、left join(左连接)、right join(右连接)、full join(全连接) https://www.cnblogs.com/yanglang/p/8780722.html inner join,在两张表进行连接查询时,只保留两张表中完全匹配的结果集。 left join,在两张表进行连接查询时,会返回左表所有的行,即使在右表中没有匹配的记录。 right join,在两张表进行连接查询时,会返回右表所有的行,即使在左表中没有

2021-07-28 14:46:04 93

原创 Vue之多图上传

最近做的项目涉及到了上传多张图片,基本功能都实现了,能添加多张图片,也能编辑删除图片,但是上传的时候,每次点加号,在文件中选中图片后,渲染的时候总是刷新一下。

2021-07-26 14:49:29 3852

空空如也

空空如也

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

TA关注的人

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