自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 优选算法---哈希表

题目解析:找出nums中和等于target的两个数字,并返回这两个数字的下标算法讲解:解法一:暴力枚举解法二:利用哈希表优化暴力枚举哪里需要优化呢?优化的点就在于每次在固定的位置去寻找need时,都需要从前往后遍历一遍去寻找need,此时可以优化寻找need的这一过程优化的思路:利用哈希表,每次遍历到nums数组中的一个数字,都先从哈希表找一下need,如果有则直接返回,如果没有,就将这个数字存储到哈希表中,继续遍历下一个数字。

2025-12-24 15:57:06 840

原创 索引的分类和创建

当在一个表中定义一个主键primary key时,MySQL会自动创建索引,索引的值是主键列的值.InnoDB将这种索引视为聚集索引。

2025-12-18 21:27:13 592

原创 多源BFS算法专题

前面我们介绍过了单源BFS最短路径问题,单源BFS就是只有一个起点,根据BFS求出这个起点到达终点的最短路径.而多源最短路就是有多个起点,求出这些起点中到达终点的最短路径,如下图如何解决多源BFS问题呢?解法一:转换为多个单源BFS问题,也就是每个起点都进行一遍BFS,然后去最小值,但是这种做法会超时解法二:将多个源点转换为一个超级原点,此时就只需要进行一次BFS即可,如下图,此时发现如果将多个源点转换为一个超级源点,此时发现进行一次,此时发现只需进行一次BFS就可以求出最短路径。

2025-12-16 08:54:15 529

原创 BFS---最短路径问题

关于最短路径问题,我们主要介绍边权为1的最短路径。什么是最短路径呢?顾名思义,最短路径就是从起点开始找出到达终点的最短路径,以下图为例绿色那条路线就是A到I的最短路径,如何解决最短路径问题呢?只需要从起点开始做一遍BFS即可,即借助一个队列先保存起点,然后基于起点不断得向后拓展,直到遇到终点就停下来,如下图,可是如何知道最短路径的长度是多少呢?其实在BFS时,拓展的层数就是最短路径的长度,所以为了记录层数,每次拓展前需要记录队列中有几个数据。

2025-11-22 16:52:18 811 1

原创 数据结构----排序算法

不管是哪一个版本的快速排序,最关键的核心就是求mid那块,不管是什么版本的快速排序,partition方法的主要功能就是让mid前面的数字都小于arr[mid],让mid后面的数字大于arr[mid]。

2025-11-20 22:50:31 939 3

原创 事务的ACID特性及事务的隔离级别

首先,事务就是把一组sql语句打包成一个整体,这一组的sql语句要么全部成功,要么全部失败,且事务具有原子性,一致性,隔离性,持久性首先,原子性是支持事务的数据库的最基本的一个特性,原子性就是指一组sql语句要么全部执行,要么全部不执行,不会出现只执行一部分sql语句的情况,且如果事务执行的过程中出现了错误,事务就会回滚到事务一开始的状态其次,一致性就是事务执行前后,数据库从一个有效的,一致的状态,变到另一个有效的、一致的状态。

2025-11-12 21:04:09 863

原创 FloodFill---BFS

BFS就是宽度优先遍历,通过一个队列来实现BFS。

2025-11-06 19:04:36 385

原创 栈与队列---算法题

算法讲解:利用栈来解决这个问题遍历字符串s,如果遇到"("或者"{"或者"[",就完栈中插入该元素,当遇到")"或者"}"或者"]"时,我们就取出栈顶元素,看此时的栈顶元素是否与当前遍历到的右括号是否构成有效的括号组合此时最终就会有4中情况第一种情况:栈是空的并且字符串遍历完成,说明此时字符串是有效括号,返回true即可第二种情况:括号顺序不匹配遍历过程中,括号不匹配,此时直接返回false第三种情况:左括号多此时就是字符串已经遍历完了,而栈不为空,说明左括号多了,此时也返回false。

2025-11-04 22:03:32 994 1

原创 数据结构---优先级队列(堆)

1.PriorityQueue中放置的元素必须能够比较大小,不能插入无法比较大小的对象,否则会抛出ClassCastException异常2.PriorityQueue不能插入null对象3.PriorityQueue没有容量限制,可以插入任意多个元素,其内部自动扩容4.插入和删除的元素的时间复杂度为O(logN)5.PriorityQueue底层使用了堆数据结构6.PriorityQueue默认情况下是小根堆。

2025-10-23 19:56:19 1079 5

原创 基于微服务的在线判题系统重点总结

在获取题目列表这块,引入PageHelper插件实现了分页查询,主要是注意下面的理解最近好多涉及到的功能都涉及到了redis,为了提高效率,每次涉及到查询时的操作时,都要先从redis中获取数据,如果从redis中获取到了数据,此时就可以直接返回得到的数据但是如果没有从redis中获取到对应的数据或者从Redis中获取到的数据有误,此时就要去数据库查询对应的数据,此时并将从数据库得到的数据同步到redis中。

2025-10-17 19:14:36 1063 5

原创 算法---队列+宽搜

题目解析:返回N叉树层序遍历的结果,层序遍历就是从上到下,一层一层得遍历,每一层的遍历从左往右开始算法讲解:队列首先创建一个队列,此时开始层序遍历N叉树,一层一层得遍历,将每一层遍历的结果存储到队列中,在进行下一层的遍历时,要将上一层遍历的结果记录到结果集中,也就是要对存储到队列中的节点进行出队列的操作,每次将一个节点出队列之后,就要将出队列的节点的孩子节点存储到队列中。

2025-10-17 15:47:56 862 1

原创 优选算法---字符串

本文解析了四个字符串处理算法题:1.最长公共前缀(力扣14题)提供两种解法:两两比较法和统一比较法,时间复杂度均为O(N);2.最长回文子串(力扣5题)采用中心扩展算法,同时处理奇偶长度情况;3.二进制求和(力扣67题)通过模拟竖式运算实现,注意处理进位和字符串反转;4.字符串相乘(力扣43题)先无进位相乘再处理进位,最后处理前导零。每个题目都给出了详细的解题思路和代码实现。

2025-10-08 21:46:27 854 1

原创 ThreadLocal内存泄漏问题

ThreadLocal是Java提供的一种线程本地存储机制,用户在多线程环境下为每个线程提供独立的变量副本,且每个线程之间的变量副本是相互隔离的,不会相互影响。

2025-09-30 10:58:43 781 1

原创 JVM高频面试题---GC垃圾回收

我们知道JVM划分为4个区域,分别为程序计数器,元数据区,栈和堆,这些区域都会占据一部分空间,所以要针对这些空间进行释放对于程序计数器来说,等对应的线程执行完毕,对应的空间就会自然释放了对于元数据区来说,因为元数据区里一般存的是类对象相关的一些信息,这部分空间一般不会释放对于栈来说,等对应的方法执行结束,对应的空间也会自然释放。

2025-09-26 22:40:22 1119 1

原创 快速上手XXL-JOB

XXL-JOB是一个分布式任务调度平台,可以帮助我们实现定时任务的功能在OJ挑战项目中,因为未完赛的竞赛在时时刻刻都会变成历史竞赛,所以我就引入XXL-JOB帮我实现一个任务,就是在每天的凌晨一天刷新一下redis中的未完赛的竞赛列表信息和完赛的竞赛列表信息。

2025-09-26 21:48:46 747 1

原创 JVM高频面试题---类加载机制

本文介绍了JVM内存区域划分和类加载机制。JVM内存主要分为程序计数器、元数据区、栈和堆,分别存储指令地址、类信息、方法调用关系和对象实例。类加载过程包括查找.class文件、校验、转换数据、申请内存、初始化常量等步骤。类加载采用双亲委派模型,通过Bootstrap、Extension和Application三个类加载器按层次委派任务,依次从标准库、扩展库和项目目录中查找类文件,确保类加载的安全性和唯一性。

2025-09-24 17:17:49 617 1

原创 MySQL索引篇---B+树在索引中的工作原理

MySQL索引通过B+树结构实现高效查询。数据存储在16KB的页中,包括含有数据的页主体和用于快速定位的页目录。索引页存储主键和子节点引用,三层B+树理论上可支持2190万条记录。查询时,从索引页开始,通过页目录快速定位到目标数据页,减少磁盘IO,提高查询效率。数据页内部分组存储,利用槽机制避免全页扫描,使单页查询复杂度优于O(N)。

2025-09-19 23:09:17 997 1

原创 MySQL索引篇---数据结构的选择

MySQL索引使用B+树数据结构来提高查询效率。相比哈希表、平衡二叉树和B树,B+树具有更适合数据库查询的特点:叶子节点形成双向链表便于范围查询,非叶子节点只存储索引减少树高,确保稳定的查询性能(O(logN)),并通过减少磁盘IO次数显著提升查询速度。这些特性使B+树成为MySQL索引的理想选择。

2025-09-19 15:46:40 457 1

原创 在测试接口时,遇到关于时间参数的传参时,遇到类型编译器无法转换的解决方案

报错的原因:因为前端传的时间参数是以String类型直接传给后端的,而后端中对应到的类中的关于时间的参数类型是LocalDateTime的,此时编译器是不能直接将String转化为LocalDateTime,需要我们自己动手去解决。我在写挑战项目时,一直遇到一个前端传时间参数给后端,后端编译器其无法将LocalDateTime类型转换为String类型的报错,我总结了两个解决方案。第一个解决方案:此时直接将后端中对应的时间参数的LocalDateTime类型改为时间类型即可。

2025-09-17 20:39:28 305 1

原创 优选算法---链表

题目解析:两个非负整数相加,且这两个非负整数的数字都是按照逆序存储在链表中,模拟两数相加的过程,且相加的结果也是逆序存储在链表中,返回一个存储结果的链表算法讲解:模拟两数相加即可这道题由于已经逆序存储要进行计算的两个数字了,这其实是方便我们操作的,因为进行加法操作时,也是从最低位先开始进行计算的,此时只要去模拟两数相加的过程即可因为两数相加会出现进位的情况,只需创建一个变量t去记录进位的情况,每次向链表中增加新节点时,添加t的个位数即可,在下一个数相加之前,将t的个位数删除。

2025-09-13 20:02:56 1007 1

原创 面试题---Redsi是单线程,为什么效率会这么高?速度那么快呢?

其次就是Redis的核心功能比较简单,比数据库的核心功能更简单,对于一些关系型数据库来说,对于数据的插入删除查询都有更复杂的功能支持,比如约束,事务,索引和关联查询等,这些功能都会让数据库执行额外的工作,而redsi的核心功能主要是对内存中的数据进行简单的增删查改,不像关系型数据那样提供复杂的功能支持,相比之下,Redis的核心功能更加简单,Redis主要提供String,List,Set,Hash和Zset等数据结构,并围绕这些数据结构进行高效的内存读写,而不涉及复杂的关系约束和事务机制。

2025-08-26 15:15:18 180 1

原创 递归---记忆化搜索

首先,啥是记忆化搜索呢?记忆化搜索就是通过一个备忘录去记录多个完全相同子问题的结果,第一次遇到这个子问题时,就将这个子问题的结果记录在一个备忘录中,当下次遇到这个问题时,就直接去备忘录中找结果即可,其中备忘录可以是数组或者是一个哈希表。

2025-08-09 21:04:09 927 1

原创 JavaSE---异常的经典面试题

在Java中throw和throws都是用来捕获异常的两个关键字。首先,它们在使用的位置上不同,throw出现在代码块,throw关键字允许程序员根据自己的代码逻辑去抛出异常对象或者一些自定义的异常对象,而throws关键字出现在函数头,throws后面跟的是异常类型,方法内部如果出现了多个异常,throws后面必须跟多个异常类型,之间用逗号隔开。

2025-08-07 22:05:08 476 1

原创 FloodFill算法——DFS

FloodFill算法就是用来寻找性质相同的连通快的算法,这篇博客都是用dfs来实现FloodFill算法。

2025-08-04 11:38:47 943 1

原创 经典面试题---抽象类和接口的区别

首先,什么是抽象类呢?如果一个类中没有足够的具体信息去描述一个对象,这个类就可以被视为抽象类,抽象类是一种特殊的类,它可以包含普通成员变量和普通成员方法,甚至也可以有构造方法,而对于接口的定义,一般将接口视为多个类的共同规范,接口是一种引用数据类型,接口中没有普通成员方法,因为接口中的方法都默认被public abstract修饰,然后就是接口中也不能由构造方法,这是抽象类和接口的最大区别。

2025-07-31 20:10:00 136 1

原创 介绍一下static关键字

摘要:Java中的static关键字用于修饰类成员,使其成为静态成员。静态成员属于类而非对象,被所有实例共享。静态变量可通过对象或类名访问,后者更推荐;它在类加载时分配内存,存储在方法区。静态方法不能访问非静态成员和方法,且无法被重写。静态代码块用于初始化静态变量,在类加载时执行且仅一次,优先级高于实例代码块。静态成员体现了类级别的共享特性。

2025-07-28 21:40:37 250 1

原创 递归综合练习

题目解析:计算并返回nums所有子集中,每个子集的异或总和算法讲解:递归这道题依旧是先画出决策树,如下图此时决策树中的每一个节点就是我们要的子集,此时按照决策树去设计函数,分别设计一个全局变量ret去记录返回结果,用一个变量path记录每一层节点的子集的异或总和即可函数头的设计,此时还是要传一个变量pos,pos表示这一层递归是从哪一层开始的。

2025-07-28 11:35:58 775 1

原创 Redis的key过期策略

通过redis的学习,知道使用expire命令可以给key设置一个过期时间,但是在一个redis中可能存在很多很多的key,这些可以中可能有很大一部分都有过期时间,此时redis服务器是如何知道哪些key已经过期要被删除,哪些key还没过期呢?此时如果是直接遍历redis中所有的key,此时在key非常多的情况下,这种遍历的方式的效率是非常低的,那么redis中中key过期策略是如何实现的呢?

2025-07-23 21:07:29 339 1

原创 初识Redis---Redis的特性介绍

访问和获取Redis中存储的数据快是Redis的一个最大特性为什么访问和获取Redis中的数据速度快呢?1.因为Redis中的数据是存储在内存中的,这样就比将数据存储在硬盘中的速度快2.因为Redis的核心功能都是比较简单的逻辑,核心功能都是比较简单的操作内存中的数据结构3.因为Redis采用的是单线程模型,这就避免了多线程模型中多个线程之间的竞争开销4.从网络的角度来说,Redis采用了IO多路复用的方式,简单来说就是一个线程管理多个socket。

2025-07-19 11:44:43 511 1

原创 动态规划---子序列专题

子序列就是从一个数组中连续的抽取或者不连续的抽取元素,但是子序列中的相对位置不能改变,例如,nums={1,2,3,4},{1,2,3}或者{1,2,4}都是子序列,但是{2,1,3}就不是子序列了,因为在nums中,2本来是在1的后面的,而在{2,1,3}中,2跑到1的前面了,其相对位置发生了改变,所以{2,1,3}不是子序列。

2025-06-28 20:44:43 864 1

原创 贪心算法专题1

在正式讲解贪心算法之前,我会直接说明贪心策略(也就是最优解)是什么,不会去证明为什么这个贪心策略是正确的,把一道题的贪心策略当成一种经验即可。

2025-06-20 22:10:45 1018 1

原创 动态规划---子数组系列

题目描述:找出nums数组中的最大和连续数组,并返回其最大和算法讲解:动态规划1.状态表示:经验+题目要求经验:以某位置为结尾,什么什么什么在这道题中,因为要找出最大和的连续子数组,并返回这个最大和,所以在这道题中,可以将dp[i]表示为:以i位置为结尾的所有子数组中的最大和2.状态转移方程:做这种线性dp的问题,要画图来分析,由于要找出以i位置为结尾的所有子数组的最大和,首先就要找出nums数组所有以i为结尾的子数组,此时找出的子数组可以划分为两种情况,一种是长度为1。

2025-06-14 10:14:28 691 1

原创 动态规划---股票问题

1.在推状态转移方程的途中,箭头的起始点表示前一天的状态,箭头的终点是当天的状态2.当动态规划中涉及到多状态,且状态之间可以相互转换,要画图去分析。

2025-06-05 15:37:56 1181 1

原创 每日一道面试题---ArrayList的自动扩容机制(口述版本)

如果ArrayList不是一个刚刚创建的数组,当我们向ArrayList中插入数据时,先去判断要不要进行进行扩容操作,如果此时ArrayList已满,就会触发扩容操作,此时就会调用grow方法去实现扩容,在扩容时,是按照默认容量的1.5被去扩容,在真正去扩容之前会先检测新容量合不合法,防止。首先,ArrayList是基于动态数组实现的,它的容量是可以动态增长的,ArrayList的默认容量是10,当我们向ArrayList中插入一个数据时,第一步,会先进行一个条件的校验操作,先去判断ArrayList。

2025-06-02 20:56:26 266

原创 动态规划---简单多状态

都不能偷了,所以此时,只要计算。

2025-06-02 15:54:03 773 1

原创 《Spring Cloud Gateway 快速入门:从路由到自定义 Filter 的完整教程》​

Spring Cloud Gateway提供了过滤器的扩展功能,开发者可以根据实际业务来自定义过滤器,同样自定义过滤器也支持GatewayFilter和GlobalFilter两种自定义GatewayFilter需要去实现对应的接口GatewayFilterFactory,SpringBoot默认帮我们实现的抽象类是,可以直接使用,由于我们还要声明该过滤器的优先级,所以还要去实现Ordered接口,分别去重写里面的方法。

2025-05-31 13:12:16 1229 1

原创 每日一道面试题---@Autowired和@Resource有什么区别?(口述版本)

Resource注解是JDK中提供的注解,它和@Autowired最大的区别是@Resource可以根据type和name这两个属性来实现bean的依赖注入,如果使用name,Spring会根据bean的名字实现依赖注入,如果使用type,Spring会根据bean的类型实现依赖注入,如果type和name两个属性都没有写,此时就会先根据。,这时就会优先使用并注入被@Primary注解修饰的bean,@Qualifier注解类似于条件筛选的模式,它可以根据bean的名称属性去注入对应的bean。

2025-05-27 21:42:30 84

原创 《OpenFeign 最佳实践:三大优雅调用远程服务的方式》​

OpenFeign是一个声明式的Web Service客户端,它让微服务间的调用更为简单,类似与controller调用service接口,只需要创建一个接口,然后让服务调用方添加注解即可使用OpenFeignOpenFeign的前身可以简单理解为Netflix Feign是OpenFeign的祖先,或者说OpenFeign是Netflix Feign的升级版,OpenFeign是Feign的一个更强大更灵活的实现。

2025-05-27 20:19:13 1331 1

原创 动态规划---路径问题

本文总结了5种动态规划路径问题的解法:1. 不同路径(无障碍):使用二维dp表记录到达每个位置的路径数,初始化首行首列为1,状态转移方程为dp[i][j] = dp[i-1][j] + dp[i][j-1]。2. 不同路径II(含障碍物):类似第一题,但需判断障碍物位置,若为障碍则dp[i][j]=0。3. 珠宝最大价值:记录路径最大价值,状态转移方程为dp[i][j] = max(dp[i-1][j], dp[i][j-1]) + grid[i][j]。4. 下降路径最小和:考虑三个方向来源的最小值,需特

2025-05-25 20:46:07 1256 1

原创 ​《Nacos终极指南:集群配置+负载均衡+健康检查+配置中心全解析,让微服务稳如老狗!》​

当微服务启动时,会从Nacos中读取读个配置文件,我们可以通过启动服务时的日志来观察要想读取product-service.properties和product-service-test.properties里面的配置信息,需要在bootstrap配置文件中添加下面的配置这三个配置文件的读取的优先级为:实验证明有这3个配置文件时,从Nacos中获取配置时在Nacos中。

2025-05-24 14:14:24 1655 1

空空如也

空空如也

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

TA关注的人

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