自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Java线程池

在执行一个任务时,往往通过直接方法来创建线程,这种方式有很多弊端,因此引入了线程池的概念。以下内容将简单介绍线程池的一些基本内容。

2023-12-16 11:33:16 118

原创 Java中的锁策略

一个线程针对一把锁,连续加锁两次,出现死锁就是不可重入锁,不发生死锁就是可重入锁。2 不可抢占:一个线程拿到锁后,只能自己释放,其他线程不能抢占。系统对于线程的调度是随机的,自带的synchronized锁是。3 轻量级锁基于自旋锁实现,而重量级锁基于挂起等待锁实现;一般情况下,乐观锁可能是轻量级锁,悲观锁可能是重量级锁。锁的实现者预测当前锁冲突的概率,可分为乐观锁和悲观锁。1 synchronized既是乐观锁,又是悲观锁;挂起等待锁:是重量级锁的一种典型实现。2 既是轻量级锁,又是重量级锁;

2023-12-16 11:13:10 103

原创 线程(Thread)的创建

线程Thread有多种创建方式,本文主要介绍怎样创建线程Thread。

2023-12-08 09:33:42 125

原创 进程与线程的区别

进程是一个具有一定独立功能的程序在一个数据集合上依次动态执行的过程。由于进程的创建和销毁与切换,需要消耗较多的资源,且一台计算机上的任务有多个,因此为了提高资源的利用率,引入了线程的概念。

2023-12-08 08:54:57 89

原创 JDBC操作

3 在构造SQL语句时,注意要插入的数据,此处使用了占位符,如果不使用占位符,那么此时所表示的操作范围太局限。本博客主要是介绍JDBC操作,即通过编译器操纵数据库中的数据。接下来以插入操作简单介绍该操作。1 在创建数据源时,Url可以直接复制,下列黑色部分需替换为当前要操作的数据库;首先在创建的项目中,添加下列jar包(点击可加载下载页面)。2 user为root,password为数据库的密码;然后编写JDBC代码。

2023-12-04 21:28:50 83

原创 数据库——索引的数据结构

数据库的数据结构

2023-12-04 20:49:52 261

原创 Spring事务隔离级别

Spring事务隔离级别共有五种:DEFAULT、READ_UNCOMMITTED、READ_COMMITTED、REPEATBLE_READ、SERIALIZABLE。下面对这五个级别进行简单的介绍。

2023-09-09 22:00:10 1498

原创 包装类与基本类型的区别

上述代码,编译器会报错,因为泛型信息只存在于代码编译阶段,在进入 JVM 之前,与泛型相关的信息会被擦除掉,最后只保留原始类型,而原始类型只能是 Object 类及其子类。把基本类型转换成包装类型的过程叫做装箱。反之,把包装类型转换成基本类型的过程叫做拆箱。进行 == 比较,包装类型会自动拆箱,直接和基本类型比较值。上述结果返回true。

2023-09-09 10:07:48 163

原创 Map与Set的区别

map与set是一种进行搜索的数据结构。

2023-09-08 21:58:34 215

原创 解决SpringBoot报错:Description:Web server failed to start. Port 8080 was already in use.

解决该错误的方法有以下两种:1 修改端口号重新修改端口号,此时重新运行程序,项目即可运行。注:当打开项目网页时,需注意访问路径,即端口号的修改。

2023-09-02 09:07:58 149

原创 图书管理系统

图书管理系统共分为六个页面——。在该系统中,班级管理页面、学生管理页面、图书管理页面、借阅管理页面、用户管理页面等五个页面实现的功能类似,即获取全部班级(学生、图书、借阅、用户)信息,添加、修改、删除班级(学生、图书、借阅、用户),获取班级(学生、图书、借阅、用户)的详细信息。因此,这里以为例,实现这些功能。

2023-09-01 11:38:19 155

原创 个人博客系统(四)——分页

在个人博客系统(三)中介绍了添加博客页面和修改博客页面,这两个页面比较类似,其区别在于一个是向文章表中添加数据,一个是查询博客,修改博客。接下来,本博客主要介绍的主页及我的列表页面,由于我的列表页面比较简单,所以本博客主要介绍的是主页,主页中一个最主要的是分页功能。

2023-07-20 12:10:50 77

原创 个人博客系统(三)

接下来,本博客主要介绍的是添加博客页面和修改博客页面。

2023-07-20 10:15:32 75

原创 个人博客系统(二)

该博客系统共有八个页面,即注册页面、登录页面、添加文章页面、修改文章页面、我的博客列表页面、主页、查看文章详情页面、个人中心页面。

2023-07-17 11:15:02 1296

原创 SpringBoot项目实现验证码

在application.properties中配置验证码的存储路径,即。

2023-07-16 19:46:20 643

原创 个人博客系统(一)

本博客主要讲述的是博客系统设计的第一部分,包括数据库的设计,设计Java的实体类两部分。

2023-07-16 16:19:42 241

原创 使用jQuery的ajax提交图片信息

注:图片的id应该设置在input标签里面。

2023-07-14 10:43:35 1997

原创 SpringBoot项目出现Failed to configure a DataSource错误时解决方法

添加完毕后,即可成功运行。

2023-07-08 12:09:36 699

原创 Idea社区版创建SpringBoot

选择左上角的File->Settings->Plugins,在搜索框中输入Spring,出现的第一个Spring Boot Helper插件,点击Installed,下载插件。1点击创建项目,选择Spring Initalizr,然后选择自己的JDK版本,选择完后,点击Next。注:新创建的类要在Application同级或下级目录下,否则将产生错误。5 删除不需要的内容:图中所框选的内容可以进行删除,不删除也没有影响。(1)创建DemoController类。2 设置GAV及pom配置信息。

2023-07-08 12:01:31 2067

原创 LeetCode——从上到下打印二叉树 II

实现,首先将根结点入队,如果队列不为空,则取出队列的队头节点cur,并输出队头节点的值cur.value;然后,若队头节点的左孩子不为空,即cur.left!=null,则将其入队;若队头节点的右孩子不为空,即cur.right!=null,则将其入队;然后循环上述步骤,直至队列为空。从上到下按层打印二叉树,同一层的节点按从左到右的顺序打印,每一层打印到一行。给定二叉树:[3,9,20,null,null,15,7]

2023-06-30 14:23:50 358

原创 栈实现队列(LeetCode 232)及队列实现栈(LeetCode 225)

入栈操作时,首先将元素入队到 queue2然后将 queue1的全部元素依次出队并入队到 queue2,此时 queue2的前端的元素即为新入栈的元素,再将 queue 1和 queue2互换,则 queue1 的元素即为栈内的元素,queue1的前端和后端分别对应栈顶和栈底。每次 pop和peek 时,若输出栈为空,则将输入栈的全部数据依次弹出并压入输出栈,这样输出栈从栈顶往栈底的顺序就是队列从队首往队尾的顺序。借助两个栈,将一个栈当作输入栈,用于压入 push传入的数据;另一个栈当作输出栈,用于。

2023-06-29 15:38:45 183

原创 LeetCode108-将有序数组转换为二叉搜索树

因为要建立高度平衡的二叉树,且给定的数组是按升序进行排列的,所以二叉树的根结点为。然后创建根结点的左右子树,其建立的方法与根结点的确定方法相同,因此采用。解释:[1,null,3] 和 [3,1] 都是高度平衡二叉搜索树。输入:nums = [-10,-3,0,5,9]给你一个整数数组 nums ,其中元素已经按。排列,请你将其转换为一棵高度平衡 二叉搜索树。输出:[0,-3,9,-10,null,5]是一棵满足「每个节点的左右两个子树的。输入:nums = [1,3]

2023-06-25 11:39:05 239

原创 NC16 对称的二叉树(牛客网)

例如: 下面这棵二叉树是对称的。数据范围:节点数满足 0≤n≤1000,节点上的值满足 ∣val∣≤1000。给定一棵二叉树,判断其是否是自身的镜像(即:是否对称)要求:空间复杂度 O(n),时间复杂度 O(n)下面这棵二叉树不对称。

2023-06-24 14:58:22 76

原创 LeetCode27——移除元素

给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。请注意,输入数组是以「引用」方式传递的,这意味着在函数里修改输入数组对于调用者是可见的。// 根据你的函数返回的长度, 它会打印出数组中 该长度范围内 的所有元素。// nums 是以“引用”方式传递的。也就是说,不对实参作任何拷贝。// 在函数里修改输入数组对于调用者是可见的。为什么返回数值是整数,但输出的答案是数组呢?

2023-06-19 17:07:34 603

原创 LeetCode:颜色分类——荷兰国旗

将colors数组分为三个区间,[0,i)为零区间,j为循环变量,如果colors[j]==0,则将colors[i]与colors[j]互换,并将i++;如果colors[j]==2,则将colors[j]与colors[k]互换,并将k--,因为交换后colors[j]未处理,则将j--。因为给定的数组是一个整型数组,数组中 0 代表红色,1 代表白色,2 代表蓝色,因此直接利用Arrays包中的sort函数对colors数组进行排序,直接返回,即可得到结果。输入 [0,0,2,0]

2023-06-15 10:54:42 96

原创 树与二叉树的应用

设给定权集w={5,7,2,3,6,8,9},试构造关于w的一棵哈夫曼树,并求其加权路径长度WPL。在数据通信中,若对每个字符用相等长度的二进制位表示,称这种编码方式为固定长度编码。若允许对不同字符用不等长的二进制位表示,则这种编码方式称为可变长度编码。若没有一个编码是另一个编码的前缀,则称这样的编码为前缀编码。在含有n个带权叶结点的二叉树中,其中带权路径长度(WPL)从树的根到任意结点的路径长度与该结点的权值的乘积,称为。权值越小的结点到根结点的路径长度越大。该结点的带权路径长度。

2023-06-09 09:32:56 286

原创 树、森林与二叉树

以二叉链表作为树的存储结构,孩子兄弟表示法使每个结点包括三个部分:结点值、指向结点第一个孩子结点的指针,指向结点下一个兄弟结点的指针。若树非空,先依次遍历根节点的每颗子树,再访问根节点,遍历子树时仍遵循先子树后根的规则。其遍历序列与这棵树相应二叉树的中。若树非空,先访问根节点,再依次遍历根节点的每颗子树,遍历子树时仍遵循先根后子树的规则。存储每个结点,同时在每个结点中增设一个伪指针,指示器双亲结点在数组中的位置。链接起来形成一个线性结构,此时n个结点就有n个孩子结点。将每个结点的孩子结点都用。

2023-06-08 11:20:54 30

原创 二叉树的遍历

二叉树的遍历是指按某条搜索路径访问树中每个结点,使得每个结点均被访问一次,而且仅被访问一次。由二叉树的递归定义可知,遍历一颗二叉树要决定对根结点N、左子树L和右子树R的访问顺序,常见的遍历次序有先序(NLR)、中序(LNR)、后序(LRN)三种遍历算法。

2023-06-08 10:52:21 97

原创 树与二叉树的基本概念

(2)度为2的有序树的孩子的左右次序是相对于另一个孩子而言的,若某个结点只有一个孩子,则这个孩子就无须区分其左右次序,而二叉树无论其孩子树是否为2,均需确定其左右次序,即二叉树的结点次序表示相对于另一个结点而言的,而是确定的。满二叉树的叶结点都集中在二叉树的最下一层,(1)假设一颗度为3的树中,结点树为50,则其最小高度为。(1)非空二叉树上的叶结点树等于度为2的结点数加1,即。(1)度为2的树至少有3个结点,而二叉树可以为空。(4)具有n个结点的完全二叉树的高度为。(4)具有n个结点的m叉树的。

2023-06-07 11:55:24 47

原创 拓扑排序算法

在图论中,由一个有向无环图的顶点组成的序列,当且仅当满足下列条件时,称为该图的一个拓扑排序(1) 每个顶点出现且只出现一次;(2)若顶点A在序列中排在顶点B的前面,则在图中不存在从顶点B到顶点A的路径。注:每个AOV网都有一个或多个拓扑排序。

2023-06-07 10:47:08 126

原创 最短路径——Dijkstra算法

带权有向图G的最短路径问题一般可分为两类:一是单源最短路径,即求图中某一顶点到其他各顶点的最短路径,通过Dijkstra算法进行求解;二是求每对顶点间的路径,可通过Floyd算法进行求解。dist[]:记录从源点v0到其他各结点当前的最短路径长度,它的初态为:若从v0到vi有弧。path[]:path[i]表示从源点到顶点i之间的最短路径的前驱结点。在算法结束时,可根据其值追溯得到源点v0到顶点vi的最短路径。则依次得到的各最短路径的目标顶点是5 2 3 6 4。求从顶点1到其他各顶点的最短路径。

2023-06-06 20:56:40 119

原创 最小生成树算法——Prim算法、Kruskal算法

下一条权值最小的边为<V2,V3>或<V3,V4>,因为<V3,V4>与<V4,V6>,<V3,V6>构成环,则只能将<V2,V3>加入边集合中,即。,并将该顶点和相应的边加入T,每次操作后T中的顶点数和边数都增1,重复以上步骤,直至图中所有的顶点都并入T,得到的T就是最小生成树。,若该边依附的顶点落在图中不同的连通分量上,则将边加入图中,否则舍弃该边,选择下一条权值最小的边。下一条权值最小的边为<V3,V6>,将其加入边集合中,即。下一条权值最小的边为<V4,V6>,将其加入边集合中,即。

2023-05-28 17:59:43 1403

原创 深度优先遍历算法

然后访问与a邻接且未被访问的顶点b,置b访问标记;然后访问与b邻接且未被访问的顶点d,置d访问标记。此时d已没有未被访问过的邻接点,故返回上一个访问过的顶点b,访问与其邻接且未被访问的顶点e,置e访问标记……首先访问图中某一起始顶点v,然后由v出发,访问与v邻接且未被访问的任意一个顶点w1,再访问与w1邻接且未被访问的任意一个顶点w2。重复上述过程,当不能在继续向下访问时,依次退回到最近被访问的顶点,若它还有邻接顶点未被访问过,则从该点开始继续上述搜索过程,直至图中所有顶点均被访问过为止。

2023-05-27 18:11:00 621

原创 广度优先遍历算法

wi的所有未被访问过的邻接顶点。在从这些访问过的顶点出发,访问它们所有未被访问过的邻接顶点,直至图中所有顶点都被访问过为止。若此时图中尚有顶点未被访问,则另选图中一个未曾被访问的顶点作为始点,重复上述过程,直至图中所有顶点都被访问到为止。取出队头元素c,因为f,g,a与c邻接,但a已被访问,则f,g入队:。取出队头元素d,因为b与其邻接,但b已被访问,所以不做任何操作。取出队头元素f,因为c与其邻接,但c已被访问,所以不做任何操作。取出队头元素g,因为c与其邻接,但c已被访问,所以不做任何操作。

2023-05-27 17:21:37 1956

原创 图(例题)

解析:对于无向图而言,如果无向图G是一个连通图,在对其进行遍历时,一次可以遍历所有顶点,得到的极小连通子图是一棵生成树,树中包含了图的所有顶点,但不一定包含所有的边;如果无向图G是一个非连通图,在对其进行遍历时,得到的是森林,这个森林是由图的连通分量的生成树组成的,森林中也不一定包含图中所有的边,因此,G'不一定是G的连通分量。若图中任何一对顶点都是强连通的,则称此图为强连通图。解析:因为要保证任何情况下都是联通的,所以假设这是一个完全无向图,则该图的边数为15条,再加一条边,仍是连通图,即16条。

2023-05-25 17:43:27 362

原创 散列(Hash)表

(2)设哈希表长为13,哈希函数时H(key)=key%13,表中已有关键字18,39,75,93共四个,现要将关键字70的结点加到表中,用伪随机探测再散列法解决冲突,使用的伪随机序列为5,8,3,9,7,1,6,4,2,11,13,21,则放入的位置是。(3)哈希查找中k个关键字具有同一哈希值,若用线性探测法将这k个关键字对应的记录存入哈希表中,至少要进行 次探测。一个把查找表中的关键字映射成该关键字对应的地址的函数,记为Hash(key)=Add。,m-1时,称为线性探测法。

2023-05-24 17:52:57 68

原创 KMP算法(实例)

根据以上步骤,可以得到字符串'ababaaababaa'的PM为001234223456,然后整体向右移动一位,第一个位置用-1进行填充,得到next的数组-100123112345。求next的数组的关键是对串的字串的前后缀进行比较,求出其最长相等前后缀的长度。最长相等前后缀为{ababa},最长相等前后缀为{ababaa}最长相等前后缀为{abab},最长相等前后缀为{aba},最长相等前后缀为{aba},最长相等前后缀为{ab},最长相等前后缀为{a}最长相等前后缀为{a}最长相等前后缀为{a}

2023-05-23 17:33:02 112

原创 串的模式匹配——暴力匹配算法

字串的定位操作通常称为串的模式匹配,求的是字串在主串中的位置。

2023-05-22 18:05:15 54

原创 串的定义及基本操作

(1)串是由零个或多个字符组成的有限序列。(2)串中任意多个连续的字符组成的子序列称为该串的字串。(3)由一个或多个空格组成的串称为空格串,其长度为串中空格字符的个数。注:空格串不是空串。(4)当两个串的长度相等且每个对应位置的字符都相等时,称这两个串是相等的。

2023-05-22 17:14:36 194

原创 数组的存储结构

设数组A[n][n],A[0][0]的存储地址为LOC(A[0][0]),则A[i][j]的存储地址为。设数组A[n][n],A[0][0]的存储地址为LOC(A[0][0]),则A[i][j]的存储地址为。设数组A[1,2,3,……,n],A[0]的存储地址为LOC(A[0]),则A[i]的存储地址为。构成的有限序列,每个数据元素称为一个数组元素。Size为数组元素所占的存储单元。Size为数组元素所占的存储单元。Size为数组元素所占的存储单元。

2023-05-21 17:28:22 187

空空如也

空空如也

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

TA关注的人

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