自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 使用Spring Security实现权限管理

欢迎访问我的个人博客(点击进入)文章目录一.数据表结构二.实体类三.实现权限管理功能1.身份验证管理器1.1 userDetailsService配置用户信息1.1.1 LoginUser类编写1.2 密码编码2 配置拦截2.1 跳转处理Handler2.1.1 登录成功2.1.2 登录失败2.1.3 登出成功2.1.4 未授权页面3.Controller权限设置三.[点击进入GitHub查看...

2020-03-22 13:16:30 1113

原创 一文带你搞懂AVL树

欢迎访问我的个人博客文章目录一.先看一个案例二.基本介绍1.举例说明二.构建的方式1.计算左右两子树高度2.左旋转实现方式3.右旋转实现方式4.存在的问题三.代码实现一.先看一个案例这是二叉排序树会存在的一个问题,先看案例:给定一个数列为{1,2,3,4,5,6},将这个数列转换为二叉排序树根据二叉排序树的性质可以得到这样的二叉排序树,这样的树有这么几个问题:左子树全部为空,从形...

2020-03-20 16:37:49 604

原创 Java 递归实现树形权限菜单(JSON)

欢迎访问我的个人博客1.需要的依赖阿里的fastjson <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.60&...

2020-03-18 14:38:37 1239 2

原创 Spring事务传播机制

文章目录Spring事务传播机制1.什么是事务传播机制?2.事务传播生效条件3.事务传播类型Spring事务传播机制1.什么是事务传播机制?在实际开发中,会存在不同方法互相调用的情况,在这时就会出现一些问题serviceA()方法调用serviceB()方法,但是这两个方法都有事务,那么当serviceA()事务发生错误需要回滚后,serviceB()是否需要回滚。当serviceB()事务发生错误需要回滚后serivceA方法是否需要回滚。serviceA()方法调用serviceB()方法,

2020-09-14 16:21:17 560

原创 LeetCode-329 Longest Increasing Path in a Matrix | 矩阵中的最长递增路径

LeetCode-329 Longest Increasing Path in a Matrix | 矩阵中的最长递增路径题目描述给定一个整数矩阵,找出最长递增路径的长度。对于每个单元格,你可以往上,下,左,右四个方向移动。 你不能在对角线方向上移动或移动到边界外(即不允许环绕)。示例 1:输入: nums =[[9,9,4],[6,6,8],[2,1,1]]输出: 4解释: 最长递增路径为 [1, 2, 6, 9]。示例 2:输入: nums =[[3,4,5],[3,2

2020-07-28 11:02:14 329

原创 LeetCode-104 Maximum Depth of Binary Tree | 二叉树的最大深度

LeetCode-104 Maximum Depth of Binary Tree | 二叉树的最大深度题目描述给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说明: 叶子节点是指没有子节点的节点。示例:给定二叉树 [3,9,20,null,null,15,7],​ 3/ 9 20/ 15 7返回它的最大深度 3 。题目分析这是一个简单的二叉树问题,可以通过深度优先搜索递归完成递归中对每个当前结点进行判断,如果当前结点不为空,则继

2020-07-28 10:43:18 313

原创 LeetCode-410 Split Array Largest Sum|分割数组的最大值

LeetCode-410 Split Array Largest Sum|分割数组的最大值题目描述给定一个非负整数数组和一个整数 m,你需要将这个数组分成 m 个非空的连续子数组。设计一个算法使得这 m 个子数组各自和的最大值最小。注意:数组长度 n 满足以下条件:1 ≤ n ≤ 10001 ≤ m ≤ min(50, n)示例:输入:nums = [7,2,5,10,8]m = 2输出:18解释:一共有四种方法将nums分割为2个子数组。其中最好的方式是将其分为[7,2,5]

2020-07-27 17:06:13 319

原创 LeetCode-2 AddTwoNumbers | 两数相加

欢迎访问我的个人博客(点击进入)LeetCode-2 AddTwoNumbers | 两数相加1. 题目描述给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您可以假设除了数字 0 之外,这两个数都不会以 0 开头。示例:输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)输出:7 -> 0 -&gt

2020-07-27 11:01:11 185

原创 解决各种锁概念

欢迎访问我的个人博客(点击进入)各种锁名词解释1.可重入锁可重入锁也叫递归锁,指在同一线程中,在外层函数获得锁后,内层的递归函数仍然可以继续获得该锁。在Java环境下Sychronized和ReentrantLock都是可重入锁。2.公平锁与非公平锁从字面意义来说,公平锁就是公平的锁,非公平锁就是不公平的锁。公平锁:指在分配锁之前检查是否有线程在排队的情况,优先分配给等待时间较长的非公平锁:指在分配锁时不检查是否有现成在排队,直接尝试获得锁(自旋),在获取不到的时候再加入队列Java中.

2020-07-15 17:03:56 365 1

原创 一文彻底解决锁的问题

欢迎访问我的个人博客(点击进入)锁1.synchronizedsynchronized关键字用于Java对象、方法、代码块提供线程安全的操作。sychronized属于独占式的悲观锁,同时属于可重入锁。在使用sychronized修饰对象时,同一时刻只能有一个线程对该对象进行访问;在修饰代码块、方法时,同一时刻只能有一个线程执行该方法体或代码块。Java所有对象中有一个monitor对象,加锁就是在竞争monitor对象。对代码块加锁是通过在前后分别加上monitorenter和monitore.

2020-07-14 16:44:30 943

原创 搞定GC算法面试题

欢迎访问我的个人博客(点击进入)GC算法接上文讲到的分代收集理论,这篇博客会对几种GC算法进行简单介绍。1.标记-清除算法标记-清除算法是最早也是最基础的垃圾回收算法,顾名思义,算法分为“标记”和“清除”两个阶段:首先标记出所有需要回收的对象,在标记完成后,统一回收所有标记的对象。反过来,也可以标记存活的对象,回收未被标记的对象。何为标记标记就是前文中讲到的对象是否属于垃圾的判别过程。相应的标记算法已经介绍过了。之所以说标记-清除算法是最基础的算法,是因为后面介绍的算法都是大多都是基于此.

2020-07-13 20:21:09 382

原创 JVM-垃圾收集器

JVM-垃圾收集器参考书籍:《深入理解Java虚拟机》1.概述经过了半个世纪的发展,今天的垃圾收集与内存分配技术已经相当成熟了,那么我们为什么还要去了解垃圾手机和内存分配?当需要排查各种内存溢出,内存泄漏问题时,当垃圾收集成为系统达到更高并发量的瓶颈时,我们就必须对这些“自动化”的技术是是是必要的监控和调节。那么垃圾收集需要完成那几件事情呢?哪些内存需要回收?什么时候回收?如何回收?2.哪些内存需要回收?在堆中存放着几乎所有的对象实例,垃圾收集器在对堆内存进行回收之前需要判断的是这个对

2020-07-13 14:56:34 146

原创 JVM虚拟机-探究Java内存区域与对象创建过程

JVM虚拟机-探究Java内存区域与对象创建过程欢迎访问我的个人博客参考书籍:《深入理解JAVA虚拟机》这里写目录标题JVM虚拟机-探究Java内存区域与对象创建过程1.概述2.运行时数据区域2.1.程序计数器2.2.Java虚拟机栈2.3.本地方法栈2.4.Java堆2.5.方法区2.6.运行时常量池3.HotSpot虚拟机对象探秘3.1.对象的创建3.2.对象的内存布局3.3.对象的访问定位4.本文知识点思维导图(原图可私信)1.概述对于Java程序来说,在虚拟机自动内存管理机制的帮助下,不

2020-05-24 17:20:38 398 1

原创 使用EasyExcel读取Excel数据上传数据库

1.功能需求现有一张课程表(含二级分类),需要使用Excel表格上传数据至数据库。难点:分类数据的重复性校验表结构如下: ExcelDemo:第一行数据为分类层次后面数据为实际数据2.项目环境SpirngBoot + MybatisPlus3.功能实现具体功能实现步骤导入依赖编写Controller层编写Service层编写EasyExcel的Linstener3.1 EasyExcel介绍Java解析、生成Excel比较有名的框架有Apache poi、jxl。

2020-05-13 21:59:08 3321 4

原创 带你玩转单例模式(懒汉式,饿汉式,枚举)

单例模式1.单例模式简介单例模式,属于创建类型的一种常用的软件设计模式。通过单例模式的方法创建的类在当前进程中只有一个实例。为了保证这个类只有一个实例,所以我们需要进行构造函数私有化,并通过其他的方法去获取实例2.饿汉式饿汉式,根据名字我们能想到,一个饥饿的人什么都想吃,所以饿汉式单例模式是通过静态变量提前声明的方式得到这个变量。代码实现:/** * @Author: LySong...

2020-03-31 13:43:34 666 1

原创 23种设计模式-桥接模式

欢迎访问我的个人博客(点击进入)桥接模式1.实例要用程序模拟出操作手机的过程,手机有不同的品牌不同的形状。2.传统方式解决 这样处理有很多的弊端,使程序扩展性减弱,进行扩展时,会产生很多不必要的代码,从图中可以看出,各种品牌因为形状不同而出现了多次 => 可以使用桥接模式解决3.桥接模式基本介绍将实现和抽象放在两个不同的类层次中,是两个层次可以独立改变结构型设计模...

2020-03-30 14:51:09 189

原创 牛客网LeetCode算法题详解:max-points-on-a-line

欢迎访问我的个人博客(点击进入)max-points-on-a-line1.题干:对于给定的n个位于同一二维平面上的点,求最多能有多少个点位于同一直线上Given n points on a 2D plane, find the maximum number of points that lie on the same straight line.给出的数据结构:/** * Defi...

2020-03-29 18:31:02 203

原创 JUC并发编程-Lock锁(ReetrantLock)

欢迎访问我的个人博客(点击进入)Lock锁1.Lock锁简介在官方文档中对Lock锁有这样的解释: 从这段话中可以得出Lock锁拥有着比synchronized更高的灵活性来处理编程中的并发问题但是由于这种灵活性,所以我们需要在编写代码中来手动释放锁我们可以看到Lock锁有三个实现类: ReetrantLock 可重入锁ReadLock 读锁(后面的文章会写到)Write...

2020-03-29 13:06:59 202

原创 23种设计模式-原型模式

欢迎访问我的个人博客(点击进入)原型模式1.实际案例克隆出10只相同的羊,要求属性完全相同2.传统方式解决public class Client { public static void main(String[] args) { Sheep sheep = new Sheep("tom",1,"白色"); Sheep sheep1 = new ...

2020-03-29 12:38:42 167

原创 Git使用中出现了错误:fatal: bad config line 1 in file C:/user/dell/.gitconfig

欢迎访问我的个人博客(点击进入)在Idea进行git操作时,电脑出现问题蓝屏,重启后重新提交代码出现了这个问题fatal: bad config line 1 in file C:/Users/Administrator/.gitconfig这个错误提醒这个配置文件坏了应该是电脑死机蓝屏后导致这个配置文件损坏所以我跟进这个目录将文件删除这个文件存储了你的name,email等信息所...

2020-03-26 14:01:03 2076

原创 分享一下我最近学数据结构的思维导图(持续更新)

欢迎访问我的个人博客(点击进入)这就是我目前的学习进程 即将开始图的学习和各种算法 这个思维导图可以供大家学习做参考 因清晰度原因请放大观看持续更新ing…...

2020-03-18 18:40:11 282

原创 数据结构与算法-二叉排序树(创建,搜索,遍历与删除)

欢迎访问我的个人博客(点击进入)1.概念一棵空树,或者是具有下列性质的二叉树:(1)若左子树不空,则左子树上所有结点的值均小于它的根结点的值;(2)若右子树不空,则右子树上所有结点的值均大于它的根结点的值;(3)左、右子树也分别为二叉排序树;(4)没有键值相等的结点。2.添加的思路首先判断传入的结点是否为空如果传入结点的值小于当前结点的值2.1 如果当前结点的左子节点为空...

2020-03-18 13:56:03 519

原创 数据结构与算法-排序算法(堆排序)

欢迎访问我的个人博客(点击键入)一.堆排序简介堆排序(英语:Heapsort)是指利用堆这种数据结构所设计的一种排序算法。堆是一个近似完全二叉树的结构,并同时满足堆积的性质:即子结点的键值或索引总是小于(或者大于)它的父节点1.什么是堆?堆是具有以下性质的完全二叉树堆中某个节点的值总是不大于或不小于其父节点的值;堆总是一棵完全二叉树。2.堆排序中会用到的几个公式这些公式,实质...

2020-03-16 12:51:45 311

原创 阿里云CentOS7 Docker 拉取MySQL

欢迎访问我的个人博客(点进入)在安装Docker并配好镜像仓库之后,就可以开始拉取MySql镜像并尝试连接了拉取MySql镜像在确保已经打开docker服务的前提下拉取MySQL服务: 后加版本号,如果不加默认拉取最新版docker pull mysql:5.6.35完成后,检查是否拉取成功sudo docker images运行拉取的mysql镜像-p:设置映射端口,...

2020-03-15 22:50:53 567 1

原创 解决docker出现Error response from daemon:*******的问题

欢迎访问我的个人博客(点击进入)在安装docker后,搜索镜像时发生了这样的问题Error response from daemon: Get https://index.docker.io/v1/search?q=mysql&n=25: dial tcp: lookup index.docker.io: no such host解决方法改用中国的docker镜像仓库进入etc/...

2020-03-15 21:46:56 26932 3

原创 阿里云CentOS7 Docker安装

欢迎访问我的个人博客(点击进入)一.Docker简介Docker 是一个开放源代码软件项目,让应用程序部署在软件货柜下的工作可以自动化进行,借此在 Linux 操作系统上,提供一个额外的软件抽象层,以及操作系统层虚拟化的自动管理机制。 Docker 利用 Linux 核心中的资源分离机制,例如 cgroups,以及 Linux 核心名字空间,来创建独立的容器。 Dicker说简单点就是提供了...

2020-03-15 21:27:14 196

原创 数据结构与算法-二叉树(前序中序后序)Java实现

欢迎访问我的个人博客(点击进入)1.概念在计算机科学中,二叉树是每个结点最多有两个子树的树结构。通常子树被称作“左子树”(left subtree)和“右子树”(right subtree)。二叉树常被用于实现二叉查找树和二叉堆。2.二叉树的遍历方式遍历是对树的一种最基本的运算,所谓遍历二叉树,就是按一定的规则和顺序走遍二叉树的所有结点,使每一个结点都被访问一次,而且只被访问一次。由于...

2020-03-14 11:56:10 280

原创 数据结构与算法-哈希表(java实现)

1.概念欢迎访问我的个人博客(点击进入)散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。给定表M,存在函数f(key),对任意给定的关键字值key,代入函数后若能得到包含该关键字的记录在表中的地址,则称表M为...

2020-03-13 11:39:59 211

原创 数据结构与算法-排序算法(归并排序)

一.介绍欢迎访问我的个人博客归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。归并排序是一种稳定的排序方法。二.算法思路将进入递归的数组,按照传入的left,...

2020-03-12 12:31:28 180

原创 数据结构与算法-排序算法(快速排序)

一.简介快速排序(Quicksort)是对冒泡排序的一种改进。快速排序由C. A. R. Hoare在1960年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。二.算法思路通过一趟排序将要排序的数据分割为两部分,其中一...

2020-03-12 12:20:34 190

原创 数据结构与算法-排序算法(希尔排序)

1.介绍欢迎访问我的个人博客(点击进入)希尔排序(Shell’s Sort)是插入排序的一种又称“缩小增量排序”(Diminishing Increment Sort),是直接插入排序算法的一种更高效的改进版本。希尔排序是非稳定排序算法。该方法因D.L.Shell于1959年提出而得名。希尔排序也是插入排序的一种,是对插入排序的一种升级,解决了在插入排序过程中,元素交换次数过多的问题(当插...

2020-03-11 11:29:01 309

原创 数据结构与算法-排序算法(插入排序)

1.算法原理插入排序属于内部排序法,是对欲排序的元素以插入的方式寻找该元素的适当位置,以达到排序的目的思想:欢迎访问我的个人博客(点击进入)把n个待排序的元素看成一个有序表和无序表开始时有序表只包含一个元素,即a[0],无序表就是有序表后面的n-1个元素每次从无序表中取出一个元素,与有序表一次比较,将他插入到合适的位置插入排序类似于打扑克牌时整理牌的动作,将牌插入到合适的位置...

2020-03-11 11:13:26 216

原创 数据结构与算法-排序算法(简单选择排序)

1.算法原理简单选择排序同上文冒泡排序一样,是一种简单的排序算法欢迎访问我的个人博客(点击进入)在整个数组中找到一个最小的元素和第一个元素arr[0]交换再从数组的下标1开始的后面的元素中找到最小的元素和arr[1]交换再从数组的下标2开始的后面的元素中找到最小的元素和arr[2]交换以此类推,知道数组倒数第二个数字 ,即arr[length - 2],停止,代表排序完毕2.算...

2020-03-11 10:42:19 476

原创 数据结构与算法-排序算法(冒泡排序)

1.算法原理冒泡排序作为一种简单的排序算法,通常是学习过程中接触到的第一种排序算法 欢迎访问我的个人博客(点击进入)比较相邻的元素。如果第一个比第二个大,就交换他们两个对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数针对所有的元素重复以上的步骤,除了最后一个(arr.length - 1)持续每次对越来越少的元素重复上面的步骤,直到没...

2020-03-11 10:32:45 225

原创 SSM整合案例-书籍管理

1.功能接受及页面效果展示这是SSM整合的案例,可以对书籍进行增删改查的管理,优化了分页查询和模糊查询,配置拦截器对未登陆的用户进行拦截转到登录页面。前端的代码在我的个人博客中(点击进入)1.1欢迎页1.2 登录页1.3 书籍展示页1.4 新增书籍表单页1.5 修改书籍表单页2.dao层目录结构:BookMapperimport com.lysong.pojo.Bo...

2020-03-09 17:33:46 315 2

原创 数据结构-栈(三)逆波兰计算器(Java)

1.逆波兰表达式逆波兰表达式又叫做后缀表达式。逆波兰表示法是波兰逻辑学家J・卢卡西维兹(J・ Lukasewicz)于1929年首先提出的一种表达式的表示方法 [1] 。后来,人们就把用这种表示法写出的表达式称作“逆波兰表达式”。逆波兰表达式把运算量写在前面,把算符写在后面。逆波兰表达式是一种十分有用的表达式,它将复杂表达式转换为可以依靠简单的操作得到计算结果的表达式。例如(a+b)(c+d...

2020-03-08 17:08:23 240

原创 数据结构-栈(二)综合计算器(Java)

1.综合计算器实现思路分析本文的综合计算器包含的运算符有+,-,*,/完成一个综合计算器需要考虑到一个多项式中各个符号的优先级,如果不考虑运算符的优先级就会出现错误的答案,所以在获取多项式的各个项的时候需要对拿到的符号进行判断。数据结构的选择:栈,利用栈的特性,可以有顺序的倒序取出数据使用两个栈放不同类型的数据,stack1(数字栈),stack(符号栈)1.1 如何对不同优先级的...

2020-03-08 16:16:47 298

原创 数据结构-栈(一)数组模拟栈的实现

一.栈的概念栈(stack)又名堆栈,它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。(来源于百度百科)对上述的概念进行总结得到栈的几个特征栈是线...

2020-03-08 15:34:10 210

原创 单向环形链表解决约瑟夫环问题(Java实现)

一.概念单向环形链表是另一种形式的链式存贮结构。它的特点是表中最后一个结点的指针域指向头结点,整个链表形成一个环。二.约瑟夫环问题约瑟夫环是一个数学的应用问题:已知n个人(以编号1,2,3…n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。问题分析:首先确定使用的数据...

2020-03-06 13:29:56 397 1

原创 双向链表java实现

一.概念与上文的单链表不同,双向链表中有两个指针,next(指向下一个结点),pre(指向上一个结点),如图示 双向链表的好处:遍历时可从前往后也可以从后往前,弥补了单链表只能从前往后遍历的不足二.双向链表操作思路分析1.遍历双向链表的遍历思路与单向链表相同,可以看我上篇文章2.添加找到最后一个结点temp.next=newNodenewnode.pre=temp...

2020-03-06 12:50:26 167

空空如也

空空如也

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

TA关注的人

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