自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 【算法】马踏棋盘(骑士周游)问题回溯算法实现以及使用贪心算法优化

将马儿随机放在国际象棋的 8*8 棋盘的某个方格中,马儿按照“马走日”进行移动,要求每个方格只进入一次,走遍棋盘上全部 64 个方格。注意:马儿不同的走法会得到不同的结果,效率也会有影响。

2024-08-18 08:31:43 831

原创 【算法】弗洛伊德(Floyd)算法求最短路径

弗洛伊德算法用于计算图中各个顶点之间的最短路径迪杰斯特拉算法用于计算图中某一个顶点到其他顶点的最短路径弗洛伊德算法中每一个顶点都是出发访问点,所以需要将每一个顶点看作被访问顶点,求出从每一个顶点到其他顶点的最短路径;迪杰斯特拉算法通过选定的被访问顶点,求出从出发访问顶点到其他顶点的最短路径。

2024-08-17 21:09:44 664

原创 【java基础】IDEA 的断点调试(Debug)

每点一次就执行一步(F8)/*** 行断点*/int m = 10;int n = 20;System.out.println("交换前:m = " + m + ", n = " + n);swap(m, n);System.out.println("交换后:m = " + m + ", n = " + n);m = n;n = temp;运行结果我们发现 m 和 n 的值实际上并没有交换,为了探究其原因,我们可以使用行断点进行调试。

2024-08-16 23:59:27 1006

原创 【算法】迪杰斯特拉算法求最短路径

迪杰斯特拉算法是典型的最短路径算法,用于计算一个节点到其他节点的最短路径。它的主要特点是以起始点为中心向外层层扩展(广度优先搜索思想),直到扩展到终点为止。

2024-08-15 23:42:17 439

原创 【算法】克鲁斯卡尔算法求最小生成树

1.克鲁斯卡尔算法是用来求加权连通图的最小生成树的算法2.基本思路:为了连通 n 个顶点,按照权值从小到大的顺序选择 n-1 条边,并保证这 n-1 条边不构成回路3.具体做法:首先构造一个只含 n 个顶点的森林,然后按照权值从小到大从连通网中选择边加入到森林中,并使森林中不产生回路,直至森林变成一棵树为止。

2024-08-14 23:59:53 869

原创 MyBatis-Plus 插件之分页插件与乐观锁

Mapper/*** 根据年龄查询用户列表,分页显示* @param page 分页对象,xml中可以从里面进行取值,传递参数 Page 即自动分页,必须放在第一位* @param age 年龄* @return*/

2024-08-13 14:31:25 864

原创 MyBatis-Plus 进阶之条件构造器Wrapper和常用接口

Wrapper 是一个用于的抽象类。MyBatis-Plus 提供了一个强大的条件构造器机制,通过 Wrapper 类及其子类,开发者可以动态的构建复杂的 SQL 条件查询条件。作为一个抽象类,它的子类包括 AbstractWrapper、QueryWrapper、UpdateWrapper 等。Wrapper:条件构造抽象类,最顶端父类——AbstractWrapper:用于查询条件封装,生成 SQL 的 where 条件————QueryWrapper:查询条件封装。

2024-08-12 23:57:26 1243

原创 MyBatis-Plus 常用注解介绍及案例

将不同业务数据分散储存到不同的数据库服务器,能够支撑百万甚至千万用户规模的业务,但如果业务继续发展,同一业务的单表数据也会达到单台数据库服务器的处理瓶颈。此时,可以使用 MyBatis-Plus 提供的全局配置,为实体类所对应的表名设置默认的前缀,那么久不需要在每个实体类上通过 @TableName 标识实体类对应的表。在开发的过程中,我们经常遇到以上的问题,即实体类所对应的表都有固定的前缀,例如 t_ 或 tbl_公布的分布式主键生成算法,它能够保证不同表的主键的不重复性,以及相同表的。

2024-08-11 15:14:35 1290

原创 MyBatis-Plus 基本增删改查(CRUD)的理论基础以及代码实现

语句设置不同的条件,若没有条件,则可以为该形参赋值。在实现插入数据时,会默认基于雪花算法的策略生成。中都已得到了实现,我们可以直接使用,接口如。类型的形参,此为条件构造器,可针。中的方法,大多方法中都有。最终执行的结果,所获取的。通过map条件删除记录。

2024-08-10 23:15:24 237

原创 初步认识 MyBatis-Plus

MyBatis-Plus 与 MyBatis 类似,是一种流行的持久层框架,它是 Mybatis 的最佳搭档,只做增强不做改变,为简化开发、提高效率而生。

2024-08-09 22:50:01 1274

原创 Spring Boot 入门以及对微服务的理解

自动装配(Autowiring)是 Spring 框架中的一个特性,它允许 Spring 自动为依赖注入的字段、方法或构造函数匹配和注入合适的 bean。通过自动装配,开发者不需要手动配置依赖关系,Spring 会根据一定的规则自动寻找合适的依赖并注入到需要的地方。内嵌 Tomcat(Embedded Tomcat)是指将 Apache Tomcat 服务器嵌入到 Java 应用程序中,使得应用程序可以独立运行,而不需要依赖外部的应用服务器。

2024-08-08 23:59:07 547

原创 【算法】普里姆算法解决修路问题

一、普里姆算法求最小生成树,也就是在包含 n 个顶点的连通图中,找出只有 n-1 条边包含所有 n 个顶点的连通子图,也就是所谓的极小连通子图二、普里姆的算法如下设 G=(V,E) 是连通网,T=(U,D) 是最小生成树,V,U 是顶点集合,E,D是边的集合若从顶点 u 开始构造最小生成树,则从集合 V 中取出顶点 u 放入到集合 U 中,标记顶点 v 的 visited[u]=1。

2024-08-07 23:59:23 487

原创 【算法】贪心算法

1.贪心算法是指在对问题进行求解时,在每一步选择中都采取最好或者最优的选择2.贪心算法得到的结果不一定是最优的结果,但是都是相对近似最优解的结果。

2024-08-06 23:04:26 2894 1

原创 【算法】KMP算法

KMP 算法利用之前判断过的信息,通过一个 next 数组,保存子串中前后最长公共子序列的长度,每次回溯时,通过 next 数组找到前面匹配过的位置,省去了大量计算时间在学习KMP算法之前,我们先来聊一聊字符串的前缀与后缀我们对子串 str2 建立一张《部分匹配表》“部分匹配值”就是“前缀”和“后缀”的最长的共有元素的长度。以“ABCDABD”为例“A”的前缀和后缀都为空集,共有元素的长度为0“AB”的前缀为[A],后缀为[B],共有元素的长度为0。

2024-08-05 15:30:34 505

原创 【算法】动态规划解决背包问题

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

2024-08-04 23:03:31 550

原创 【算法】分治算法以及用分治算法解决汉诺塔问题

分治算法的思想是 “ 分而治之 ” ,就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题......知道最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。这个技巧是很多高效算法的基础。

2024-08-04 08:52:40 279

原创 【算法】图的广度优先搜索(BFS)

图的广度优先搜索类似于一个分层搜索的过程,需要使用一个队列以保持访问过的节点的顺序,以便按这个顺序来访问这些节点的邻接节点。③查找节点 u 的继 w 邻接节点后的下一个邻接节点 w,转到步骤 6。6.如果节点 u 的邻接节点 w 不存在,则转到步骤 3;①若节点 w 尚未被访问,则访问节点 w 并标记为已访问。3.当队列为非空时,继续执行,否则 v 的算法结束。5.查找节点 u 的第一个邻接节点 w。1.访问初始节点 v 并标记为以访问。4.出队列,取得队列头节点 u。2.节点 v 入队列。

2024-08-03 14:12:42 253

原创 【算法】图的深度优先搜索(DFS)

1.深度优先搜索,从初始访问节点出发,初始访问节点可能有多个邻接节点,深度优先搜索的策略就是首先访问第一个邻接节点,然后再以这个被访问的邻接节点为初始节点,访问它的第一个邻接节点。4.若 w 未被访问,对 w 进行深度优先遍历递归(即把 w 当作另一个 v,然后进行步骤 1 2 3)3.若 w 存在,则继续执行 4,如果 w 不存在,则回到第 1 步,将。5.查找节点 v 的 w 邻接节点的下一个邻接节点,转到步骤 3。,而不是对一个节点的所有邻接节点进行横向访问。2.查找节点 v 的第一个邻接节点 w。

2024-08-03 13:14:43 254

原创 【数据结构】图

邻接矩阵是表示图形中顶点之间相邻关系的矩阵,对于 n 个顶点的图而言,矩阵是 row 和 col 表示的是 1 到 n 个点。1.邻接矩阵需要为每个顶点都分配 n 个边的空间,其实有很多个边都是不存在的,这样会造成一定的空间损失。两个节点之间的连接称为边,节点也可以称为顶点。2.邻接表的实现只关心存在的边,不关心不存在的边。1.标号为 0 的节点的相关联的节点为 1 2 3 4。3.标号为 2 的节点的相关联的节点为 0 4 5。2.标号为 1 的节点的相关联的节点为 0 4。要求:用代码实现如下结构。

2024-08-02 13:04:13 145

原创 【数据结构】哈希表(散列表)

哈希表(也叫散列表),是根据关键码值( Key value )而直接进行访问的数据结构,也就是说,它通过把关键码值映射到表中的一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。

2024-08-02 11:01:54 191

原创 【算法】斐波那契查找(黄金分割查找)

斐波那契查找的原理与二分查找、插值查找相似,仅仅是改变了中间节点(mid)的位置,mid 不再是中间或插值得到的,而是。即可,由以下代码得到,顺序表长度增加后,新增的位置(从 n+1 到 F[k]-1 位置),都赋为 n 位置的值即可。由此说明,只要顺序表的长度为 F[k]-1,则可以将该表分成长度为。n 不一定刚好等于 F[k]-1 ,所以需要。2.类似的,每一子段也可以用相同的方式分割。这里的 k 值只要能使得。的两段,从而中间位置为。(F代表斐波那契数列)

2024-08-01 13:07:31 318

原创 【算法】插值查找(对二分查找的优化)

2.将二分查找中的求 mid 索引的公式,low 表示左边索引 left ,high 表示右边索引 right ,key 就是待查找的数值。在二分查找中,对于相对较大的数或较小的数来说,查询效率是很低的,我们希望程序可以自适应待查询的数,使用插值算法。1.插值查找算法类似于二分查找,不同的是插值查找每次从。

2024-08-01 13:06:53 182

原创 【算法】递归实现二分查找(优化)以及非递归实现二分查找

1.首先确定该数组中间的下标 mid = (left + right) / 2;2.递归完整个数组,依然没有找到,即 left > right 就阶结束递归。2.然后让需要查找的数 findVal 和 arr[mid] 比较。

2024-07-31 13:47:33 288

原创 【算法】递归的应用实例——八皇后问题(回溯算法)

任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。

2024-07-31 12:58:05 281

原创 【数据结构】中缀表达式转后缀表达式

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

2024-07-30 14:44:08 857

原创 【数据结构】逆波兰计算器的分析和实现

从左至右扫描表达式,遇到数字时,将数字压入堆栈,遇到运算符时,弹出栈顶的两个数,用运算符对他们做相应的计算(栈顶元素和次顶元素),并将结果入栈;2.遇到 + 运算符,因此弹出 4 和 30 (4 为栈顶元素,30 为次顶元素),计算出 30 + 4 = 34,再将 34 入栈。4.接下来是 * 运算符,因此弹出 5 和 34,计算出 5 * 34 = 170,将 170 入栈。6.最后是 - 运算符,计算出 170 - 6 = 164,由此得出最终结果。1.从左至右扫描,将 30 和 4 压入堆栈。

2024-07-29 13:02:14 320

原创 【数据结构】栈的前缀、中缀、后缀表达式(逆波兰表达式)

从左至右扫描表达式,遇到数字时,将数字压入堆栈,遇到运算符时,弹出栈顶的两个数,用运算符对他们做相应的计算(栈顶元素和次顶元素),并将结果入栈;从右至左扫描表达式,遇到数字时,将数字压入堆栈,遇到运算符时,弹出栈顶的两个数,用运算符对它们做相应的计算(栈顶元素和次顶元素),并将结果入栈;2.遇到 + 运算符,因此弹出 3 和 4 (3 为栈顶元素,4 为栈底元素),计算出 3 + 4 = 7,再将 7 入栈。3.接下来是 * 运算符,因此弹出 7 和 5,计算出 7 * 5 = 35,将 35 入栈。

2024-07-29 00:08:05 362

原创 【数据结构】使用栈实现综合计算器

首先初始化两个栈,计算思路1.通过一个index值(索引)来遍历表达式2.如果发现扫描到一个数字,就直接入数栈3.如果发现扫描到一个符号,就分如下情况①如果当前符号栈为空,就直接入符号栈②如果符号栈有操作符,就进行比较,,就需要从数栈中 pop 出两个数进行运算,运算结果入数栈,然后将当前操作符入符号栈;,就直接入符号栈4.当表达式扫描完毕,就顺序的从数栈和符号栈中pop出相应的数和符号,并运算5.最后数栈中只有一个数字,就是表达式的结果。

2024-07-28 15:19:57 171

原创 【数据结构】用数组实现栈以及用链表实现栈

1.栈(Stack)是一个先入后出(FILO)的有序列表2.栈是限制线性表中元素的插入和删除只能在线性表的同一端进行的一种特殊线性表。允许插入和删除的一端为变化的一端,称为栈顶(Top),另一端为固定的一端,称为栈底(Bottom)3.根据栈的定义可知,最先放入栈中的元素在栈底,最后放入的元素在栈顶,而删除元素刚好相反,最后放入的元素最先删除,最先放入的元素最后删除4.图解方式说明出栈(pop)和入栈(push)的概念入栈出栈。

2024-07-28 09:54:39 366

原创 【算法】单向环形链表解决Josephu(约瑟夫)问题

用一个不带头节点的循环链表来处理 Josephu 问题:先构成一个有 n 个节点的单循环链表,然后从 k 节点起从 1 开始计数,记到 m 时对应的节点从链表中删除,然后从下一个节点从 1 开始计数,直到最后一个节点从链表中删除算法结束。从 k 号开始,每一次从当前的小孩逆时针数 m 个,然后让最后这个小孩出列。不断循环上述过程,直到所有小孩出列,由此产生出一个队列编号。2.后面当我们每创建一个新节点,就将该节点加入到已有的环形链表中即可。1.先创建第一个节点,让 first 指向该节点,并形成环形。

2024-07-27 13:07:01 224

原创 【数据结构】双向链表

2.单向链表不能自我删除,需要靠辅助节点,所以单链表删除节点时,总是找到temp,temp是待删除节点的前一个节点,而双向链表可以自我删除。1.单向链表查找的方向只能是一个方向,而双向链表可以向前或向后查找。1.遍历方式和单链表一样,只是可以向前也可以向后。(1)因为是双向链表,所以可以实现自我删除。(2)直接找到要删除的节点,比如temp。2.添加(默认添加到双向链表的最后)(1)先找到双向链表的最后这个节点。3.修改的思路与单向链表一样。

2024-07-27 00:21:30 283

原创 【算法】单链表面试题

2.从头到尾遍历原来的链表,每遍历一个节点,就将其取出,并放在新的链表 reverseHead 的最前端。方式2:可以利用栈这个数据结构,将各个节点压入到栈中,然后利用栈的先进后出的特点,实现逆序打印的效果。方式1:先将单链表进行反转操作,然后再遍历即可,这样做的问题是会破坏原来的单链表的结构。1.先定义一个头节点 reverseHead = new HeroHead();3.原来的链表的 head.next = reverseHead.next。举例演示栈的使用Stack。

2024-07-26 12:45:24 155

原创 【数据结构】单链表的增删改查

链表是有序的列表,但是它在内存中是如下存储的:①链表以节点的方式进行存储,是链式存储的②每个节点包含 data 域、next 域:指向下一节点③链表的各个节点不一定是连续存放的④链表分为有头节点的链表和没有头节点的链表head节点1.不存放具体数据2.作用就是表示单链表头。

2024-07-25 17:45:03 801

原创 【数据结构】队列

①队列是一个有序列表,可以用。

2024-07-25 00:19:55 262

原创 【数据结构】稀疏数组

当一个数组中大部分元素为0,或者为同一个值时,可以使用稀疏数组来保存该数组。稀疏数组的处理方法是:①记录数组一共有几行几列有多少个不同的非零值(该内容放在稀疏数组的第一行)②把具有不同值的元素的行列及值记录在一个小规模的数组中,从而缩小程序的规模稀疏数组总是一个 ”行不确定但是列是三列“ 的数组。

2024-07-24 10:39:11 424

原创 Maven进阶

如在web开发时,只有在编译和测试时才用到servlet-api,将其设置为此范围,在运行时servlet-api由web容器提供,无须依赖。并且在打war包时,此范围的依赖不会打在WEB-INF/lib下。对于更大的项目,我们可能需要创建自己的库并在不同的部分使用它的项目。SNAPSHOT -- 快照版本,ALPHA -- 内侧版本,BETA -- 公测版本,RELEASE -- 稳定版本,GA -- 正式发布。默认使用此依赖范围,其下的maven依赖,对于编译,测试,运行classpath都有效。

2024-07-24 10:38:44 1383

原创 Maven的概念

Maven是跨平台的项目管理工具,主要服务于基于Java平台的项目构建、依赖管理以及项目信息管理。高度自动化,标准化,跨平台,可重用的组件依赖是项目构建或运行时所需要的一些文件,大部分项目需要第三方类库或项目文件。自动下载,统一依赖管理依赖管理是对第三方依赖包的管理,可以连接互联网下载项目所需第三方jar包。依赖管理是对自己开发的模块的管理,可以像引用第三方依赖包一样引用自己项目的依赖包。项目构建是一个从编写源代码到编译、测试、运行、打包、部署的过程。

2024-07-24 10:37:59 501

原创 初识Maven

在src/test/java/com/hello/maven目录下新建测试文件HelloFriendTest.java。在src/test/java/com/hello/maven目录下新建测试文件HelloTest.java。在src/main/java/com/hello/maven目录下新建文件HelloFriend.java。在src/main/java/com/hello/maven目录下新建文件Hello.java。src/main/java —— 存放项目的.java文件。

2024-07-23 17:56:55 428 2

原创 【java】http协议

bin目录是tomcat的启动目录conf是配置目录lib目录内部有tomcat所依赖的jar包logs目录内部是日志文件webapps目录的作用是把项目导入并运行项目举例:http:协议localhost:服务器的ip地址8080:端口号myweb/index.html:资源路径http协议又名超文本传输协议,是浏览器和服务器达成的规定。超文本(即.html结尾的文档)全程是超级文本文档,可以呈现文字、图片及视频。http协议规定了请求(浏览器-->服务器)和响应。

2024-05-16 09:28:11 344

原创 【java】异常与错误

Throwable包括Error和Expected。

2024-05-14 23:15:03 668

空空如也

空空如也

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

TA关注的人

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