自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(69)
  • 问答 (3)
  • 收藏
  • 关注

原创 数据结构-图

🎈图由顶点集V和边集E组成,记为G(V,E),其中V表示图G中顶点的有限非空集,E表示图G中顶点之间的关系集合。✅若E是无向边的有限集合时,则图G为无向图✅若E是有向边(也称为弧)的有限集合时,则图G为有向图✅不存在重复的边;不存在顶点到自身的边✅图G中某两个结点之间的边数多于一条,又允许顶点通过同一条边和自己关联✅有向完全图:任意两个顶点之间存在方向相反的两条弧,n*(n-1)条弧边无向完全图:任意两个顶点之间都存在边,n*(n-1)/2条边✅。

2023-05-02 15:38:33 953 2

原创 数据结构-树与二叉树

🎈树是n(n>=0)个结点的有限集。当n=0时,称为空树。树的根节点没有前驱,除根节点外的所有结点有且只有一个前驱树中所有结点都可以有零个或多个后继✅二叉树的定义🎈每个结点至多有两颗子树,并且二叉树的结点有左右之分🎄二叉树的五种形态✅特殊二叉树🔴满二叉树:除叶子结点外,每个结点度数均为2🟠完全二叉树:与其对应满二叉树中编号1~n一 一对应度为1的结点只能有一个,且该结点只有左孩子没有右孩子🟡二叉排序树:左子树的关键字 < 根 < 右子树的关键字。

2023-04-15 15:08:56 561

原创 TiKV详细介绍

整个集群的管理者,数据默认有三个副本,其中一个Region就是Leader,所有客户端的读写流量都是走Leader的,它会定期性的向follower发出通知信息,同时会把写的数据通过日志的方式传递给follower。事务都是TiDB的悲观事务模式,也叫悲观锁:如果事务在修改的过程中,没有被commit,哪一行被修改这一行上面的锁能被其他会话感知到的,其他会话如果要修改这一行,那么会被阻塞。先把数据写入磁盘的日志中,然后写入内存中,如果发生宕机,会通过日志重建Mem Table。

2023-03-14 17:34:23 1208

原创 TiDB Server

在进行DDL的时候是不会阻塞读写的,在整个集群中会有多个TiDB Server,对于整个TiDB数据库来讲,同一时刻只能有一个TiDB Server进行DDL操作,同一时刻只有一个TiDB Server中的worker可以做操作。用户发送一个DDL语句,首先由start job接收,然后会把它作为一个job放在任务队列中,同一时间只有一个Server在执行,称之为。,owner中的workers负责从队列中取第一个执行,执行完放在历史队列,然后去取下一个。表的大小不能超过64M。,也就是租约,默认5s。

2023-03-09 18:37:41 544

原创 TiDB数据库架构概述

每条sql执行的时候都有一个开始时间,开始时间的查询也是从PD开始的,在数据库中,对于时间不是以时分秒计算的,会有一个标识,叫做TSO一个时间戳,随着时间增长不断增加,每一天sql执行都会获得一个时间戳,标识执行的时间,事务提交时也会获得一个结束的TSO。PD被称为整个集群的大脑,TiDB Server执行完sql语句会生成执行计划,也就是说明要执行什么操作,比如要读一张表,但是这张表到底是在哪个或者哪几个TiKV或者TiFlash上呢,这些叫做这个。存的数据和TiKV里面的一样,但是。

2023-03-09 15:54:05 445

原创 力扣刷题|216.组合总和 III、17.电话号码的字母组合

图中可以看出遍历的深度,就是输入"23"的长度,而叶子节点就是我们要收集的结果,输出[“ad”, “ae”, “af”, “bd”, “be”, “bf”, “cd”, “ce”, “cf”]。例如 k = 2,n = 4的话,就是在集合[1,2,3,4,5,6,7,8,9]中求 k(个数) = 2, n(和) = 4的组合。,无非就是多了一个限制,本题是要找到和为n的k个数的组合,而整个集合已经是固定的了[1,…本题就是在[1,2,3,4,5,6,7,8,9]这个集合中找到和为n的k个数的组合。

2023-02-20 19:08:28 513

原创 回溯算法理论基础及组合问题

回溯法也可以叫做回溯搜索法,它是一种搜索的方式。回溯是递归的副产品,只要有递归就会有回溯。所以以下讲解中,回溯函数也就是递归函数,指的都是一个函数。

2023-02-20 16:23:16 304

原创 力扣刷题|669. 修剪二叉搜索树、108.将有序数组转换为二叉搜索树、538.把二叉搜索树转换为累加树

因为是要遍历整棵树,做修改,其实不需要返回值也可以,我们也可以完成修剪(其实就是从二叉树中移除节点)的操作。因为数组大家都知道怎么遍历啊,从后向前,挨个累加就完事了,这换成了二叉搜索树,看起来就别扭了一些是不是。如果root(当前节点)的元素小于low的数值,那么应该递归右子树,并返回右子树符合条件的头结点。如果root(当前节点)的元素大于high的,那么应该递归左子树,并返回左子树符合条件的头结点。同时需要定义一个全局变量sum,用来保存cur节点的前一个节点的数值,定义为int型就可以了。

2023-02-07 11:53:22 393

原创 力扣刷题|235. 二叉搜索树的最近公共祖先、701.二叉搜索树中的插入操作、450.删除二叉搜索树中的节点

如图,我们从根节点搜索,第一次遇到 cur节点是数值在[p, q]区间中,即 节点5,此时可以说明 p 和 q 一定分别存在于 节点 5的左子树,和右子树中。将删除节点(元素7)的左孩子放到删除节点(元素7)的右子树的最左面节点(元素8)的左孩子上,就是把5为根节点的子树移到了8的左孩子的位置。动画中的二叉搜索树中,删除元素7, 那么删除节点(元素7)的左孩子就是5,删除节点(元素7)的右子树的最左面节点是元素8。终止条件就是找到遍历的节点为null的时候,就是要插入节点的位置了,并把插入的节点返回。

2023-02-06 19:02:56 403

原创 Vue2详解

M∶即 Model,模型,包括数据和一些基本操作V∶即View,视图,页面渲染结果VM∶即 View-Model,模型与视图间的双向操作(无需开发人员干涉)在 MVVM之前,开发人员从后端获取需要的数据模型,然后要通过 DOM 操作 Model渲染到View 中。而后当用户操作视图,我们还需要通过 DOM获取 View 中的数据,然后同步到Model 中。而 MVVM中的VM 要做的事情就是把DOM 操作完全封装起来,开发人员不用再关心Model 和View 之间是如何互相影响的只要我们 Model

2023-02-05 15:24:26 971

原创 力扣刷题| 530.二叉搜索树的最小绝对差、501.二叉搜索树中的众数、236. 二叉树的最近公共祖先

首先最容易想到的一个情况:如果找到一个节点,发现左子树出现结点p,右子树出现节点q,或者 左子树出现结点q,右子树出现节点p,那么该节点就是节点p和q的最近公共祖先。那么我们来说一说,如果 root == q,或者 root == p,说明找到 q p ,则将其返回,这个返回值,后面在中节点的处理过程中会用到,那么中节点的处理逻辑,下面讲解。判断逻辑是 如果递归遍历遇到q,就将q返回,遇到p 就将p返回,那么如果 左右子树的返回值都不为空,说明此时的中节点,一定是q 和p 的最近祖先。

2023-02-05 10:18:56 437

原创 力扣刷题|654.最大二叉树、617.合并二叉树、700.二叉搜索树中的搜索、98.验证二叉搜索树

对于二叉搜索树可就不一样了,因为二叉搜索树的特殊性,也就是节点的有序性,可以不使用辅助栈或者队列就可以写出迭代法。对于一般二叉树,递归过程中还有回溯的过程,例如走一个左方向的分支走到头了,那么要调头,在走右分支。构造树一般采用的是前序遍历,因为先构造中间节点,然后递归构造左子树和右子树。有了这个特性,验证二叉搜索树,就相当于变成了判断一个序列是不是递增的了。其实和遍历一个树逻辑是一样的,只不过传入两个树的节点,同时操作。这就决定了,二叉搜索树,递归遍历和迭代遍历和普通二叉树都不一样。

2023-02-03 11:31:32 363

原创 力扣刷题|513.找树左下角的值、112. 路径总和、113.路径总和 ii、106.从中序与后序遍历序列构造二叉树、105.从前序与中序遍历序列构造二叉树

首先回忆一下如何根据两个顺序构造一个唯一的二叉树,相信理论知识大家应该都清楚,就是以 后序数组的最后一个元素为切割点,先切中序数组,根据中序数组,反过来再切后序数组。那么如何找最左边的呢?可以使用前序遍历(当然中序,后序都可以,因为本题没有 中间节点的处理逻辑,只要左优先就行),保证优先左边搜索,然后记录深度最大的叶子节点,此时就是树的最后一行最左边的值。不要去累加然后判断是否等于目标和,那么代码比较麻烦,可以用递减,让计数器count初始为目标和,然后每次减去遍历路径节点上的数值。

2023-02-02 14:29:20 277

原创 ES6详解

ES6新特性

2023-02-01 20:21:43 294

原创 力扣刷题|110.平衡二叉树、257. 二叉树的所有路径、404.左叶子之和

注意,只有当前遍历的节点是父节点,才能判断其子节点是不是左叶子。当遇到左叶子节点的时候,记录数值,然后通过递归求取左子树左叶子之和,和 右子树左叶子之和,相加便是整个树的左叶子之和。然后是递归和回溯的过程,上面说过没有判断cur是否为空,那么在这里递归的时候,如果为空就不进行下一层递归了。此时还没完,递归完,要做回溯啊,因为path 不能一直加入节点,它还要删节点,然后才能加入新的节点。判断一个树的左叶子节点之和,那么一定要传入树的根节点,递归函数的返回值为数值之和,所以为int。

2023-01-31 18:26:09 213

原创 JVM详解--内存结构

Java 虚拟机(JVM)是运行 Java 二进制字节码的虚拟机。JVM 有针对不同系统的特定实现(Windows,Linux,macOS),目的是使用相同的字节码,它们都会给出相同的结果。字节码和不同系统的 JVM 实现是 Java 语言“一次编译,随处可以运行”的关键所在。JVM 并不是只有一种!只要满足 JVM 规范,每个公司、组织或者个人都可以开发自己的专属 JVM。也就是说我们平时接触到的 HotSpot VM 仅仅是是 JVM 规范的一种实现而已。一次编写,到处运行。

2023-01-30 15:46:47 321

原创 力扣刷题|104.二叉树的最大深度、559.n 叉树的最大深度、111.二叉树的最小深度、222.完全二叉树的节点个数

确定单层递归的逻辑:先求它的左子树的深度,再求右子树的深度,最后取左右深度最大的数值 再+1 (加1是因为算上当前中间节点)就是目前节点为根节点的树的深度。确定单层递归的逻辑:先求它的左子树的节点数量,再求右子树的节点数量,最后取总和再加一 (加1是因为算上当前中间节点)就是目前节点为根节点的节点数量。确定递归函数的参数和返回值:参数就是传入树的根节点,返回就返回以该节点为根节点二叉树的节点数量,所以返回值为int类型。在完全二叉树中,如果递归向左遍历的深度等于递归向右遍历的深度,那说明就是满二叉树。

2023-01-30 11:23:09 324

原创 力扣刷题|226.翻转二叉树、101. 对称二叉树

对于二叉树是否对称,要比较的是根节点的左子树与右子树是不是相互翻转的,理解这一点就知道了其实我们要比较的是两个树(这两个树是根节点的左右子树),所以在递归遍历的过程中,也是要同时遍历两棵树。这道题目我们也可以使用迭代法,但要注意,这里的迭代法可不是前中后序的迭代写法,因为本题的本质是判断两个树是否是相互翻转的,其实已经不是所谓二叉树遍历的前中后序的关系了。如上代码中,我们可以看出使用的遍历方式,左子树左右中,右子树右左中,所以我把这个遍历顺序也称之为“后序遍历”(尽管不是严格的后序遍历)

2023-01-29 11:50:07 311

原创 二叉树的层序遍历

需要借用一个辅助数据结构即队列来实现,队列先进先出,符合一层一层遍历的逻辑,而用栈先进后出适合模拟深度优先遍历也就是递归的逻辑。而这种层序遍历方式就是图论中的广度优先遍历,只不过我们应用在二叉树上。层序遍历一个二叉树。就是从左到右一层一层的去遍历二叉树。本题只是换了一种树,但思路代码都是一样的。

2023-01-28 12:37:13 797

原创 二叉树的遍历

分析一下为什么刚刚写的前序遍历的代码,不能和中序遍历通用呢,因为前序遍历的顺序是中左右,先访问的元素是中间节点,要处理的元素也是中间节点,所以刚刚才能写出相对简洁的代码,因为。先序遍历是中左右,后续遍历是左右中,那么我们只需要调整一下先序遍历的代码顺序,就变成中右左的遍历顺序,然后在反转result数组,输出的结果顺序就是左右中了。前序遍历是中左右,每次先处理的是中间节点,那么先将根节点放入栈中,然后将右孩子加入栈,再加入左孩子。每次写递归,都按照这三要素来写,可以保证写出正确的递归算法!

2023-01-27 12:16:56 368

原创 栈与队列总结

栈是一种基于先进后出(FILO)的数据结构,是一种只能在一端进行插入和删除操作的特殊线性表。它按照先进后出的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据(最后一个数据被第一个读出来)。我们称数据进入到栈的动作为压栈,数据从栈中出去的动作为弹栈。队列是一种基于先进先出(FIFO)的数据结构,是一种只能在一端进行插入,在另一端进行删除操作的特殊线性表,它按照先进先出的原则存储数据,先进入的数据,在读取数据时先读被读出来。

2023-01-26 22:19:28 569

原创 栈的应用-四则运算表达式求值

若是符号,则判断其与栈顶符号的优先级,是右括号或优先级低于栈顶符号则栈顶元素依次出栈并输出,并将当前符号进栈,一直到最终输出后缀表达式为止。规则:从左到右遍历表达式的每个数字和符号,遇到是数字就进栈,遇到是符号就将处于栈顶两个数字出栈,进行运算,运算结果进栈,一直到最终获得结果。,后面是 ),此时,我们需要去匹配此前的 (,所以依次出栈并输出,直到 (出栈为止。紧接着是符号 * ,因为此时的栈顶元素为 +,优先级低于 * ,因此不输出, *进栈。第一个是数字9,输出09,后面是符号 +,进栈。

2023-01-26 22:13:56 401

原创 SpringBoot程序的打包和运行

SpringBoot程序为了让自己打包生成的程序可以独立运行,不仅将项目中自己开发的内容进行了打包,还把当前工程运行需要使用的jar包全部打包进来了。再来看之前的报错信息,由于打包时没有使用那段配置,结果打包后形成了一个普通的jar包,在MANIFEST.MF文件中也就没有了Main-Class对应的属性了,所以运行时提示找不到主清单属性,这就是报错的原因。打开容量大的程序包中的BOOT-INF目录下的classes目录,我们发现其中的内容居然和容量小的程序包中的内容完全一样。

2023-01-26 18:12:51 1390

原创 Linux安装mysql--CentOS系统

默认的root用户只能当前节点localhost访问,是无法远程访问的,我们还需要创建一个root账户,用户远程访问。然后将下载的安装包上传至Linux系统中,直接rz回车就会跳出选择文件的窗口,选择需要上传的安装包即可等待上传完成。首先启动虚拟机,我是用FinalShell连接的。至此mysql在linux的安装已经完成了。接下来用DataGrip远程连接数据库。首先关闭linux的防火墙。

2023-01-26 16:21:05 638

原创 力扣刷题| 239. 滑动窗口最大值、347.前 K 个高频元素

可能还会想用一个大顶堆(优先级队列)来存放这个窗口里的k个数字,这样就可以知道最大的最大值是多少了, 但是问题是这个窗口是移动的,而大顶堆每次只能弹出最大值,我们无法移除其他数值,这样就造成大顶堆维护的不是滑动窗口里面的数值了。对于窗口里的元素{2, 3, 5, 1 ,4},单调队列里只维护{5, 4} 就够了,保持单调队列里单调递减,此时队列出口元素就是窗口里最大元素。此时我们需要一个队列,这个队列呢,放进去窗口里的元素,然后随着窗口的移动,队列也一进一出,每次移动之后,队列告诉我们里面的最大值是什么。

2023-01-26 13:46:13 565

原创 Linux使用操作

环境变量PATH这个项目里面记录了系统执行命令的搜索路径这些搜索路径我们也可以自行添加到PATH中去。

2023-01-25 21:53:07 665

原创 Linux系统用户和权限

权限可以用3位数字来代表,第一位数字表示用户权限,第二位表示用户组权限,第三位表示其它用户权限。在我们得知root密码的时候,可以通过su命令切换到root得到最大权限。root用户拥有最大的系统操作权限,而普通用户在许多地方的权限是受限的。我们可以使用sudo命令,为普通的命令授权,临时以root身份执行。比如,针对某文件,可以控制用户的权限,也可以控制用户组的权限。我们可以使用chmod命令,修改文件、文件夹的权限信息。,只有文件、文件夹的所属用户或root用户可以修改。

2023-01-25 17:38:27 926

原创 Linux基础命令

vi\vim是visual interface的简称, 是Linux中最经典的文本编辑器同图形化界面中的 文本编辑器一样,vi是命令行下对文本文件进行编辑的绝佳选择vim 是 vi 的加强版本,兼容 vi 的所有指令,不仅能编辑文本,而且还具有 shell 程序编辑的功能,可以不同颜色的字体来辨别语法的正确性,极大方便了程序的设计和编辑性。

2023-01-25 15:48:19 405

原创 虚拟机的介绍及安装

通过虚拟化技术,在电脑内,虚拟出计算机硬件,并给虚拟的硬件安装操作系统,即可得到一台虚拟的电脑,称之为虚拟机。

2023-01-25 12:34:28 480

原创 力扣刷题| 20. 有效的括号、1047. 删除字符串中的所有相邻重复项、150. 逆波兰表达式求值

我们在删除相邻重复项的时候,其实就是要知道当前遍历的这个元素,我们在前一位是不是遍历过一样数值的元素,那么如何记录前面遍历过的元素呢?所以就是用栈来存放,那么栈的目的,就是存放遍历过的元素,当遍历当前的这个元素的时候,去栈里看一下我们是不是遍历过相同数值的相邻元素。从栈中弹出剩余元素,此时是字符串ac,因为从栈里弹出的元素是倒序的,所以再对字符串进行反转一下,就得到了最终的结果。但我们没有必要从二叉树的角度去解决这个问题,只要知道逆波兰表达式是用后序遍历的方式把二叉树序列化了,就可以了。

2023-01-25 10:39:30 444

原创 SpringBoot整合MyBatis

当前使用的SpringBoot版本是2.5.4,对应的坐标设置中Mysql驱动使用的是8x版本。​ 这里设置的UTC是全球标准时间,你也可以理解为是英国时间,中国处在东八区,需要在这个基础上加上8小时,这样才能和中国地区的时间对应的,也可以修改配置不写UTC,写Asia/Shanghai也可以解决这个问题。​ 如果不想每次都设置这个东西,也可以去修改mysql中的配置文件mysql.ini,在mysqld项中添加default-time-zone=+8:00也可以解决这个问题。

2023-01-24 21:49:21 711

原创 MyBatisPlus-DML编程控制

很简单删除掉,但是一个个删除的话还是比较慢和费事的,所以一般会给用户一个批量操作,也就是前面有一个复选框,用户一次可以勾选多个也可以进行全选,然后删一次就可以将购物车清空,这个就需要用到。(1)添加与数据库表的列对应的一个属性名,名称可以任意,如果和数据表列名对不上,可以使用@TableField进行关系映射,如果一致,则会自动对应。如果只删除员工不删除合同表数据,那么合同的员工编号对应的员工信息不存在,那么就会出现垃圾数据,就会出现无主合同,根本不知道有张业绩这个人的存在。

2023-01-22 17:02:52 482

原创 MabatisPlus-DQL编程控制

当模型类中多了一个数据库表不存在的字段,就会导致生成的sql语句中在select的时候查询了数据库不存在的字段,程序运行就会报错,错误信息为:Unknown column ‘多出来的字段名称’ in ‘field list’具体的解决方案用到的还是注解,它有一个属性叫exist,设置该字段是否在数据库表中存在,如果设置为false则不存在,生成sql语句查询的时候,就不会再查询该字段了。

2023-01-22 14:49:29 325

原创 MyBatisPlus-标准数据层开发

数据层标准的CRUD(增删改查)的实现与分页功能

2023-01-22 13:45:58 232

原创 SpringBoot整合MyBatisPlus

从MP的依赖关系可以看出,通过依赖传递已经将MyBatis与MyBatis整合Spring的jar包导入,我们不需要额外在添加MyBatis的相关jar包。serverTimezone是用来设置时区,UTC是标准时区,和咱们的时间差8小时,所以可以将其修改为。druid数据源可以加也可以不加,SpringBoot有内置的数据源,可以配置成使用Druid数据源。

2023-01-22 12:53:35 279

原创 SSM整合(超详细)

SSM整合以及功能模块开发完成后,接下来,我们在上述案例的基础上分析下有哪些问题需要我们去解决下。首先第一个问题是:在Controller层增删改返回给前端的是boolean类型数据在Controller层查询单个返回给前端的是对象在Controller层查询所有返回给前端的是集合对象目前我们就已经有三种数据类型返回给前端,如果随着业务的增长,我们需要返回的数据类型会越来越多。

2023-01-21 16:00:27 771

原创 SpringMVC-拦截器

在这个方法中可以通过返回值来决定是否要进行放行,我们可以把业务逻辑放在该方法中,如果满足业务则返回true放行,不满足则返回false拦截。方法,如果返回true,则代表放行,会执行原始Controller类中要请求的方法,如果返回false,则代表拦截,后面的就不会再执行了。,所以没有匹配上,因此没有拦截,拦截器就不会执行。原始方法运行后运行,如果原始方法被拦截,则不执行。拦截器最后执行的方法,无论原始方法是否执行。pom.xml添加SSM整合所需jar包。会发现拦截器没有被执行,原因是拦截器的。

2023-01-21 14:17:33 221

原创 力扣刷题|232.用栈实现队列、225. 用队列实现栈

在push数据的时候,只要数据放进输入栈就好,但在pop的时候,操作就复杂一些,输出栈如果为空,就把进栈数据全部导入进来(注意是全部导入),再从出栈弹出数据,如果输出栈不为空,则直接从出栈弹出数据就可以了。队列模拟栈,其实一个队列就够了,一个队列在模拟栈弹出元素的时候只要将队列头部的元素(除了最后一个元素外) 重新添加到队列尾部,此时再去弹出元素就是栈的顺序了。使用栈来模式队列的行为,如果仅仅用一个栈,是一定不行的,所以需要两个栈一个输入栈,一个输出栈。如果进栈和出栈都为空的话,说明模拟的队列为空了。

2023-01-21 10:16:55 85

原创 SpringMVC-Rest风格

REST(Representational State Transfer),表现形式状态转换,它是一种软件架构风格传统风格资源描述形式id=1查询id为1的用户信息保存用户信息REST风格描述形式传统方式一般是一个请求url对应一种操作,这样做不仅麻烦,也不安全,因为会程序的人读取了你的请求url地址,就大概知道该url实现的是一个什么样的操作。查看REST风格的描述,你会发现请求地址变的简单了,并且光看请求URL并不是很能猜出来该URL的具体功能。

2023-01-20 20:48:25 85

原创 SpringMVC---请求与响应

SpringMVC处理请求和相应的参数以及请求体、响应体等问题

2023-01-19 22:11:05 87

空空如也

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

TA关注的人

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