自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

小秋的博客

既然已经上了生活的贼船,就得做个快乐的小海盗

  • 博客(45)
  • 收藏
  • 关注

原创 《重构-改善既有代码的设计》读书笔记

重构:对软件内部结构的一种调整,目的是在不改变软件可观察行为的前提下,提高其可理解性,降低其修改成本。

2023-07-30 23:30:36 151

原创 浅谈设计模式(一)

四大件——计算机网络、计算机操作系统、数据结构和算法、设计模式。而这篇文章,针对常见的几种设计模式,展开讨论,若是讨论的过浅,或者是有不对的地方,还望各位大佬多多指正。一、设计模式的五大基本原则1、开放封闭原则我们的类,对于扩展应该是开放的,对于修改是封闭的。也就是说,我们支持类继承、组合等扩展方式,让类具有更多的特性,但是不能直接对类进行修改。2、单一职责原则单一职责,指的是一个类的变化,往往只有一个变化点,能够使类的状态发送变化,且这个变化点的方向,也就是这个类的职责所在。3、里式替换原.

2021-10-31 10:36:21 184

原创 Java程序抵御xss攻击

Java程序抵御xss攻击原理:将前端请求的所有数据,进行转义后再存入数据库1.导入hutool-all包<!-- 数据转义,防止xss攻击--> <dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-all</artifactId> <version>5

2021-07-04 20:24:06 487 3

原创 swagger+jwt令牌配置

记录一下swagger的配置(包括jwt令牌)@Configuration@EnableSwagger2public class SwaggerConfig { @Bean public Docket createRestApi() { Docket docket = new Docket(DocumentationType.SWAGGER_2); ApiInfoBuilder builder = new ApiInfoBuilder();

2021-07-03 23:53:48 1510

转载 Java集成redis,自定义序列化

Java集成redis,自定义序列化自己做个笔记,用的时候直接拿过来用1.、application.properties#redis# Redis 服务器地址spring.redis.host=localhost# Redis 服务器连接端⼝spring.redis.port=6379# 连接池最大连接数(使用负值表示没有限制) 默认 8spring.redis.lettuce.pool.max-active=100# 连接池最大阻塞等待时间(使用负值表示没有限制) 默认 -1sp

2021-06-19 15:30:31 230

原创 Java后端部分面试题(一)

Java后端面试题前言:昨天进行了cvte的一面,应该是凉了,好多的问题搭上来,记录一下没答出来的问题和答得不好的问题1、对称加密和非对称加密的区别:对称加密中加密和解密使用的秘钥是同一个;非对称加密中采用两个密钥,一般使用公钥进行加密,私钥进行解密。对称加密解密的速度比较快,非对称加密和解密花费的时间长、速度相对较慢。对称加密的安全性相对较低,非对称加密的安全性较高。2、前端怎么传输公钥不会…有没有大佬回答一下3、HTTPS的原理HTTPS协议 = HTTP协议 + SSL/TL

2021-05-27 11:35:00 217

原创 ACID、事务隔离、脏读、可重复读、幻读

ACID、事务隔离、脏读、可重复读、幻读ACID的概念:原子性(atomicity):一个事务中的操作,要么全部完成,要么全部不完成,若过程中发生错误,则恢复到事务开始之前的那个状态。一致性(consistency):事务的执行不能破坏数据库数据的完整性和一致性,一个事务在执行之前和执行之后,数据库都必须处于一致性状态。不一致的例子:事务执行了一半,只有一部分的数据写入了数据库,然后发生故障,导致数据不一致。隔离性(isolation):允许多个事务同时操作,但防止事务交叉执行导致数据的不一致。包

2021-05-06 16:16:37 114

原创 多线程优先级失效原因分析

问题描述:多个线程同时运行,给重要的线程设置优先级高,不重要的设置优先级低,但是实际运行过程中,重要的线程不一定每次都先运行。 代码:public class ThreadDemo3 implements Runnable { public StringBuffer log = new StringBuffer(); @Override public void run() { for (int i = 1; i <= 100; i++) {

2021-04-28 18:06:01 944 1

原创 BIO与NIO,AIO 总结

BIO与NIO,AIO 总结1、前备知识:1.1、同步与异步同步:同步就是系统发起一个调用后,被调用者未处理完请求之前,调用不返回。异步: 异步就是系统发起一个调用后,立刻得到被调用者的回应表示已接收到请求,但是被调用者并没有返回结果,此时我们可以处理其他的请求,被调用者通常依靠事件,回调等机制来通知调用者,返回结果。同步和异步的最大的区别:如果是异步,调用者不需要等待处理结果,被调用者会通过回调等机制来通知调用者其返回结果。1.2、阻塞和非阻塞阻塞: 阻塞就是发起一个请求,调用者一直等

2021-04-22 13:38:00 109

原创 递归解题核心思想

递归解题核心思想1、递归要考虑的三个问题:递归应该在什么时候结束?我应该返回什么信息给上层?在这一次的递归中,要完成什么任务?递归每一层的功能都是一样的,所以只要解决了这三个问题,递归的问题就解决了2、举例说明:2.1、二叉树的最大深度1、什么时候结束递归?​ 当遍历到树的左右节点都为空的时候,递归就结束了!2、返回给上层的是什么?​ 因为是对树深度的遍历,所以返回给上层的,自然是这颗子树的深度3、本次递归中,要完成什么任务?​ 每一次的递归,都是在获取树的深度,可能

2021-04-21 23:51:35 475

原创 MySQL高级学习(二)

MySQL高级学习(二)1、Explain是什么使用EXPLAIN关键字可以模拟优化器执行SQL语句,从而知道MySQL是如何处理你的SQL语句的。从而查询语句或是结构的性能瓶颈2、Explain能干嘛​ 表的读取顺序​ 数据读取操作的操作类型​ 哪些索引可以使用​ 哪些索引被实际使用​ 表之间的引用​ 每张表有多少行被优化器查询3、Explain怎么使用Explain+SQL语句EXPLAIN select * from tbl_emp4、Explain各个字段的涵义

2021-04-20 20:56:35 64

原创 理解“==”和“equals”、hashcode方法

理解“==”和“equals”、hashcode方法1、“=="和equals方法在object类中,equals方法其实就是==方法但是,在大部分的类中,都重写了equals方法和hashcode方法(后面会说),所以equals方法才会比较值是否相等,但是自定义的类,例如你自己定义的person,student类,自然是没重写equals和hashcode的。2、为什么重写了equals方法,就要重写hashcode方法第一:因为hashcode的协定,hashcode有如下协定:两个对象

2021-04-20 19:02:25 127 1

原创 MySQL高级学习(一)

MySQL高级学习(一)1、myisam和innoDB比较2、SQL慢可能的原因3、SQL的执行顺序4、七种join语句5、注意点FUll OUT JOIN MySQL无法使用,要使用union关键词链接第五个语句为:SELECT * from tbl_emp e left JOIN tbl_dept t on t.id = e.idUNIONselect * from tbl_emp e right join tbl_dept t on t.id = e.id 第七个语句为

2021-04-19 15:14:17 198

原创 mybatis-generator的使用

mybatis-generator的使用1、pom.xml <plugin> <groupId>org.mybatis.generator</groupId> <artifactId>mybatis-generator-maven-plugin</artifactId> <version>1.4.0</version>

2021-04-13 16:47:08 85

原创 shiro的一套配置案例

shiro的一套配置文章目录shiro的一套配置1、快速开始(QuickStart)1.1、通过shiro.ini配置角色和权限1.2、pom.xml1.3、Log4j.properties1.4、快速开始注释QuickStart.java2、springboot-shiro2.1、application.yml(配置数据库,整合mybatis)2.2、shiroConfig.java(shiro的配置文件)2.3、UserRealm(自定义Realm)2.4 IndexController(一个为了测试

2021-04-10 10:54:13 228

原创 KMP算法,自写代码,让你看得懂版本

2、KMP算法2.1、解决的问题KMP是一个解决模式串在文本串是否出现过,如果出现过,找出最早出现的位置的经典算法,用来解决暴力匹配算法的不足2.2、算法思路2.2.1、部分匹配表的生成什么是前缀与后缀:前缀:ABCD的前缀为[A, AB, ABC]后缀:ABCD的后缀为[BCD, CD, D]部分匹配值”就是”前缀”和”后缀”的最长的共有元素的长度。以”ABCDABD”为例,”A”的前缀和后缀都为空集,共有元素的长度为 0;”AB”的前缀为[A],后缀为[B],共有元素的长度

2021-04-07 20:08:54 129 3

原创 动态规划算法

1、动态规划算法1.1、算法介绍动态规划(Dynamic Programming)算法的核心思想是:将大问题划分为小问题进行解决,从而一步步获取最优解的处理算法动态规划算法与分治算法类似,其基本思想也是将待求解问题分解成若干个子问题,先求解子问题,然后从这些子问题的解得到原问题的解与分治法不同的是,适合于用动态规划求解的问题,经分解得到子问题往往不是互相独立的。( 即下一个子阶段的求解是建立在上一个子阶段的解的基础上,进行进一步的求解 )动态规划可以通过填表的方式来逐步推进,得到最优解1.2

2021-04-07 20:06:42 121

原创 图的创建、遍历

图的创建、遍历1、图的基本介绍当我们需要表示多对多的关系时,我们就需要图图是一种数据结构,其中结点可以具有零个或多个相邻元素。两个结点之间的连接称为边。结点也可以称为顶点[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wFqmIgFh-1617541970180)(http://tc.glulu7.cn/2021-04-04-083621.png)]2、图的表示方法2.1、邻接矩阵邻接矩阵是表示图形中顶点之间相邻关系的矩阵,对于n个顶点的图而言,矩阵是的row和

2021-04-04 21:14:45 1261

原创 堆排序:补

堆排序1、基本介绍堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种选择排序,它的最坏,最好,平均时间复杂度均为 O(nlogn),它也是不稳定排序堆是具有以下性质的完全二叉树:每个结点的值都大于或等于其左右孩子结点的值,称为大顶堆注意 : 没有要求结点的左孩子的值和右孩子的值的大小关系每个结点的值都小于或等于其左右孩子结点的值,称为小顶堆一般升序排序采用大顶堆,降序排列使用小顶堆2、排序思路堆是一种树结构,但是排序中会将堆进行顺序存储(变为数组结构)将无序序

2021-04-03 21:37:53 70

原创 平衡二叉树(AVL树)

平衡二叉树(AVL树)1、为什么要平衡二叉树如果由数组{1, 2, 3, 4, 5}来构建一颗二叉排序树,得到的二叉树不仅没有体现其特点,反而还退化成了链表,且因为要判断左子树,查询效率比链表还低2、平衡二叉树的介绍平衡二叉树也叫平衡二叉搜索树(Self-balancing binary search tree)又被称为AVL树,可以保证查询效率较高具有以下特点:它是一棵空树或它的左右两个子树的高度差的绝对值不超过 1,并且左右两个子树都是一棵平衡二叉树平衡二叉树的常用实现方法有红黑树

2021-03-31 17:11:07 177

原创 二叉排序树

二叉排序树1、二叉排序树的介绍二叉排序树:BST: (Binary Sort(Search) Tree), 对于二叉排序树的任何一个非叶子节点,要求左子节点的值比当前节点的值小,右子节点的值比当前节点的值大特别说明:如果有相同的值,可以将该节点放在左子节点或右子节点2、二叉排序树添加节点思路:根据插入节点的值来寻找其应该插入的位置新插入的节点都是叶子节点3、添加节点代码实现 public void add(Node node){ //节点为空时,结束递归

2021-03-30 22:01:58 156

原创 霍夫曼树与霍夫曼编码

霍夫曼树与霍夫曼编码1、霍夫曼树的基本介绍给定 n个权值作为 n个叶子结点,构造一棵二叉树,若该树的带权路径长度(wpl)达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树(Huffman Tree)哈夫曼树是带权路径长度最短的树,权值较大的结点离根较近2、霍夫曼树中的重要概念路径:在一棵树中,从一个结点往下可以达到的孩子或孙子结点之间的通路,称为路径。路径长度:若规定根结点的层数为1,则从根结点到第L层结点的路径长度为 L-1 (例:第三层到根节点的长度为2)结点的权:若将树中结

2021-03-30 11:11:53 675

原创 二叉树----顺序二叉树、线索二叉树

二叉树----顺序二叉树、线索二叉树1、顺序二叉树1.1、 顺序二叉树的特点特点顺序二叉树通常只考虑完全二叉树第 n个元素的左子节点为 2 × n + 1第 n个元素的右子节点为 2 × n + 2第 n个元素的父节点为(n-1) ÷2其中n 表示二叉树中的第几个元素(从0开始编号)2.2、 顺序二叉树代码实现注意点:和遍历二叉树类似、不同的地方,是递归的条件变成了2n + 1等,还要注意判断,防止在2n+1的时候,数组越界,所以要加上判断语句class ArrB

2021-03-25 21:21:05 362

原创 二叉树----遍历、查找、删除

二叉树----遍历、查找、删除1、为什么需要树?数组的查找效率高,但是插入效率低。链表的插入效率高,查找效率低。2、二叉树二叉树的基本概念:每个节点最多只能由两个子节点的一种树叫做二叉树满二叉树:如果该二叉树的所有叶子节点都在最后一层,并且结点总数= 2n -1 , n为层数,则我们称为满二叉树。完全二叉树:如果该二叉树的所有叶子节点都在最后一层或者倒数第二层,而且最后一层的叶子节点在左边连续,倒数第二层的叶子节点在右边连续,我们称为完全二叉树3、二叉树的遍历前序遍历先

2021-03-25 20:21:38 355

原创 查找算法----二分查找、插值查找、斐波那契查找

查找算法----二分查找、插值查找、斐波那契查找1、二分查找二分查找的思路分析先确定该数组的中间的下标mid = (left+right)/2然后让需要查找的数findVal和arr[mid]比较2.1 findVal > arr[mid],说明你要查找的数在md的右边,因此需要递归的向右查找2.2 findVal < arr【mid】,说明你要查找的数在mid的左边,因此需要递归的向左查找2.3 findval arr(mid】说明找到,就返回什么时候我们需要结束递

2021-03-24 17:09:03 176

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

排序算法----基数排序1.基本思想基数排序的基本思想:将所有待比较数值统一为同样的数位长度,数位较短的数前面补零。然后,从最低位开始,依次进行一次排序。 这样从最低位排序一直到最高位排序完成以后, 数列就变成一个有序序列。2.基数排序的代码实现package com.yishuai.sort;import java.util.Arrays;/** * @author yishuai * @description 基数排序算法 * @date 2021/3/23 10:02 下午

2021-03-23 23:14:55 124

原创 排序算法----归并算法遇坑史

1、项目场景:记录一次归并排序遇坑史一天天的,啥事也没敢,尽遇坑去了2、问题描述:希尔排序在最开始给方法传递左右索引的时候,左边传递的是0,右边传递的是length-1左右索引在比较的时候,没加索引和边界值重合的情况定义数组的时候,考虑索引和长度,数组的长度 = 最大索引 + 1遍历数组的时候,长度不要-1,长度不要-1,长度不要-1!3、原因分析:将数组分割成两份的时候,中间值是在左边的数组中的,所以右边开始的索引,应该是mid(中间值的索引)+1因为在最开始传值的

2021-03-23 16:57:54 184

原创 快速排序遇坑史

1、项目场景:记录一次快速排序遇坑史,周围的室友、朋友不会数据结构和算法...无奈,今天大部分时间都在快速排序上面了2、问题描述:1.快速排序传值的左边索引和右边索引一直是变化的,没理解怎么变化的2.使用了递归,递归没有加return 3、原因分析:1. 每次递归的左边索引和右边索引都是变化的,每次排序后,中轴值的索引,是左边元素的最右边索引,是右边元素最左边的索引,但是左边元素的左边索引,还是上次排序的左边索引,右边元素的右边索引,还是上次排序的右边索引。也就是说,下一次还要

2021-03-23 00:00:32 185

原创 排序算法----插入和希尔排序

排序算法----插入和希尔排序1、插入排序插入排序的基本思想:把 n 个待排序的元素看成为一个有序表和一个无序表,开始时有 序表中只包含一个元素,无序表中包含有 n-1 个元素,排序过程中每次从无序表中取出第一个元素,把它的排 序码依次与有序表元素的排序码进行比较,将它插入到有序表中的适当位置,使之成为新的有序表。1.1、插入排序代码实现public static int[] insertSort(int[] initial) { /** * 冒泡排序核心代码

2021-03-21 23:00:49 90

原创 排序算法----冒泡和选择排序

排序算法----冒泡和选择排序1、冒泡排序冒泡排序的基本思想是:通过对待排序序列从前向后(从下标较小的元素开始),依次比较 相邻元素的值,若发现逆序则交换,使值较大的元素逐渐从前移向后部,就象水底下的气泡一样逐渐向上冒。1.1冒泡排序代码实现 //冒泡排序算法 public static int[] maoPaoSort(int[] initial){ //temp定义为临时变量 int temp; for (int j = 0; j &

2021-03-20 22:36:03 237

原创 常见的时间复杂度

常见的时间复杂度常数阶 O(1)对数阶 O(log2n)线性阶 O(n)线性对数阶 O(nlog2n)平方阶 O(n^2)立方阶 O(n^3)k 次方阶 O(n^k)指数阶 O(2^n)1、时间复杂度排序:​ 常见的算法时间复杂度由小到大依次为:Ο(1)<Ο(log2n)<Ο(n)<Ο(nlog2n)<Ο(n2)<Ο(n3)< Ο(nk) < Ο(2n) ,随着问题规模 n 的不断增大,上述时间复杂度不断增大,算法的执行效率越低2、介绍(1)常

2021-03-18 22:46:29 11911

原创 递归-八皇后问题

递归-八皇后问题1. 问题介绍:八皇后问题,是一个古老而著名的问题,是回溯算法的典型案例。该问题是国际西洋棋棋手马克斯·贝瑟尔于1848年提出:在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击。即:任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法(92)2. 算法思路分析第一个皇后先放第一行第一列第二个皇后放在第二行第一列、然后判断是否OK,如果不OK,继续放在第二列、第三列、依次把所有列都放完,找到一个合适继续第三个皇后,还是第一列、第二列…直到第8个皇后也能放在一

2021-03-18 16:24:30 191

原创 逆波兰计算器

逆波兰计算器1. 中缀表达式转后缀表达式初始化两个栈:运算符栈s1和储存中间结果的栈s2;从左至右扫描中缀表达式;遇到操作数时,将其压s2;遇到运算符时,比较其与s1栈顶运算符的优先级:​ 1.如果s1为空,或栈顶运算符为左括号“(”,则直接将此运算符入栈;​ 2.否则,若优先级比栈顶运算符的高,也将运算符压入s1;​ 3.否则,将s1栈顶的运算符弹出并压入到s2中,再次转到(4.1)与s1中新的栈顶运算符相比较;遇到括号时:(1) 如果是左括号“(”,则直接压

2021-03-16 16:41:52 58

原创 数据结构和算法之单链表练习

数据结构和算法之单链表练习三道大厂面试题:【新浪面试题】查找单链表中的倒数第k个结点【腾讯面试题】单链表的反转【百度面试题】从尾到头打印单链表1、先上神器:lombok,在pom里面加入依赖,并在idea中下载lombok插件,然后就可以直接使用啦~ <dependency> <groupId>org.projectlombok</groupId> <artifactId>lomb

2021-02-23 23:02:52 114

原创 redis事务和主从复制、redis查询网站

redis事务和主从复制、redis查询网站redis事务redis主从复制redis查询网站鸣谢:本文基于尚硅谷redis文档修改制作,感谢阳哥大神的文档

2021-02-22 23:43:53 82

原创 redis持久化

redis持久化1、SNAPSHOTTING快照(RDB)2、APPEND ONLY MODE追加模式(AOF)3、总结建议鸣谢:本文基于尚硅谷redis文档修改制作,感谢阳哥大神的文档

2021-02-21 16:59:34 61

原创 redis配置文件及其中文翻译

redis配置文件及其中文翻译1、general配置:2、security配置3、limits限制配置4、常见配置redis.conf中文介绍redis.conf 配置项说明如下:Redis默认不是以守护进程的方式运行,可以通过该配置项修改,使用yes启用守护进程daemonize no当Redis以守护进程方式运行时,Redis默认会把pid写入/var/run/redis.pid文件,可以通过pidfile指定pidfile /var/run/redis.pid指

2021-02-21 10:54:48 366

原创 redis学习之常用指令

redis学习之常用指令redis常用命令指令最全redis指令:http://redisdoc.comkey常用指令:string常用指令list常用指令set常用指令hash常用指令zset有序集合常用指令redis常用命令查询redis是否启动:ps -ef | grep redis如果需要启动,先到目录:usr/local/bin redis-serverconfig文件路径(例如:/myredis/redis.config)redis-cli -p 端口号(默认6379) exit退出

2021-02-20 22:31:11 70

原创 springboot+vue发送axios引起的跨域问题

项目场景:提示:axios发送get和post请求都提示:Access to script at ‘XXXX’ from origin ‘null’ has been blocked by CORS policy: Cross origin requests are only supported for protocol schemes: http, data, chrome, chrome-extension, https.原因分析:本地file文件请求,导致跨域,只有firefox浏览器可以

2021-02-10 12:34:28 153 1

原创 springboot之aop切面获取请求

通过aop的切面,在方法执行之前切入,获取请求的地址、ip、类名、方法、参数等...

2021-02-04 18:01:11 5341 1

空空如也

空空如也

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

TA关注的人

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