自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 在 JDK 1.8 的 ConcurrentHashMap 中,为什么存在两种插入方式?

中,之所以对“容器为空”和“计算位置为空”采取不同的处理方式,主要是因为。,需要遍历该链表或红黑树进行替换或追加。,这就是它不同情况下采用不同方式的原因。,并不会在构造时就初始化所有桶(:当第一次插入元素时,会先判断。位置已经有元素了,可能会遇到。操作来保证线程安全的初始化。在 JDK 1.8 的。

2025-03-11 21:53:12 393

原创 Session、Cookie、Token的区别

Session 是一种。

2025-03-11 21:50:25 641

原创 策略模式实践

/ 支付策略接口。

2025-03-02 19:58:06 307

原创 CAS的ABA问题

【代码】CAS的ABA问题。

2025-03-02 11:12:08 106

原创 解决springboot无法加载application.yaml文件

指定从resource目录下加载application.yaml文件。

2025-02-26 20:37:03 137

原创 Spring解决循环依赖问题

三级缓存机制是 Spring 用来解决单例模式下循环依赖问题的一种重要方式。通过一级缓存、二级缓存和三级缓存的协同工作,Spring 能够在存在循环依赖时,保证 Bean 的正常创建和依赖注入,避免了无限递归和错误。这个机制不仅保证了应用程序的稳定性,也提高了框架的灵活性和可扩展性。

2025-02-22 11:49:17 672

原创 力扣138随机链表复制

指针也都应指向复制链表中的新节点,并使原链表和复制链表中的这些指针能够表示相同的链表状态。节点组成,其中每个新节点的值都设为其对应的原节点的值。个节点组成的链表来表示输入/输出中的链表。的链表,每个节点包含一个额外增加的随机指针。,该指针可以指向链表中的任何节点或空节点。指针,指向链表中的任意一个节点,或者。那么在复制链表中对应的两个节点。的链表,每个节点除了有。例如,如果原链表中有。返回复制链表的头节点。,这个新链表和原链表。

2025-02-21 11:09:46 363

原创 力扣21 合并两个有序链表

新链表是通过拼接给定的两个链表的所有节点组成的。将两个升序链表合并为一个新的。

2025-02-12 09:57:50 178

原创 力扣环形链表 l ll

【代码】力扣环形链表 l ll。

2025-02-11 09:28:44 97

原创 力扣234 回文链表

解法: 先利用快慢指针,找到链表中点,然后根据中点翻转后续链表,反转后在跟第一个链表比对。,请你判断该链表是否为。回文链表如果是,返回。给你一个单链表的头节点。

2025-02-10 10:49:08 213

原创 力扣206 反转链表

请你反转链表,并返回反转后的链表。

2025-02-09 20:11:42 278

原创 力扣160 相交链表

请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回。给你两个单链表的头节点。

2025-02-08 10:12:13 104

原创 力扣240 搜索二维矩阵 ll

解法:从右上角看本质是一个二叉搜索树,左边比自己小,下面比自己大,因此从右上角开始搜索,如果当前值比的target大,那就列左移,否则行下移。编写一个高效的算法来搜索。

2025-02-07 10:16:26 378

原创 原生redis实现分布式锁

用实现分布式锁,可以参考的原理,但需要自己处理锁的自动续期、故障恢复等细节。核心思路是使用 Redis 的SET NX EX或SET PX NX命令来实现互斥锁,并利用保障原子性。

2025-02-06 13:03:28 839

原创 力扣48旋转图像

旋转图像,这意味着你需要直接修改输入的二维矩阵。解法:技巧题,先按照对角线翻转,再按照中间位置翻转。请你将图像顺时针旋转 90 度。使用另一个矩阵来旋转图像。

2025-02-06 10:21:54 225

原创 maven本地打包依赖无法引用

问题在于pom.xml文件,正常打包的maven文件应该可以显示出来,但是由于未删除spring-boot-maven-plugin。的打包和启动,它会将所有依赖合并到一个 JAR 文件中,并生成。手动输入对应的包显示找不到,但是在Maven可以找到。再重新执行mvn install即可成功引入。描述:写了一个RPC的starter包。,它不需要也不应该是。原来的pom.xml。移除后pom.xml。

2025-02-05 14:08:49 815

原创 利用CAS实现无锁访问共享变量

使用Synchronized就不会出现并放问题。一般情况不加锁在多线程下访问共享变量会出问题。利用CAS无锁解决并发问题。余额成为负数显然有问题。

2025-02-05 12:53:34 428

原创 力扣54螺旋矩阵

解法:根据上下左右四个位置,每次遍历上下左右任意行列之后,缩小范围。,返回矩阵中的所有元素。

2025-02-05 10:17:05 226

原创 MYSQL锁

这些锁机制彼此协调,共同维护 MySQL 的并发控制与数据一致性。的缩写,用于对数据库中的数据进行增、删、改、查的操作。的一类 SQL 语句。

2025-02-04 18:21:09 162

原创 力扣73矩阵置零

然后再处理除了第一行第一列的其他元素,进行遍历,如果有为0的元素,将第一行第一列对应的位置分别设置为0。然后再遍历第一行第一列将元素为0对应的行列(非第一行第一列)设置为0。要求原地,所以在原数组上处理,设置两个标志位,判断第一行和第一列是否有为0的元素。最后单独处理第一行第一列,根据标志位判断是否应该全置0。,则将其所在行和列的所有元素都设为。的矩阵,如果一个元素为。

2025-02-04 15:46:11 379

原创 力扣41缺失的第一个正数

第一个for循环结束后,在由第二个for循环判断位置上的元素跟下标+1是否对应的上,对应不上则说明该位置元素就是解,即return i+1,如果都对应的上,那就返回数组长度+1。例如[3,4,-1,1],3放在nums[2]的位置上,跟 -1进行交换,然后进入while循环判断 -1 的位置。解法:将大于等于1并且小于nums.length的数字nums[i]存放在。,请你找出其中没有出现的最小的正整数。范围 [1,2] 中的数字都在数组中。nums[nums[i] - 1]上,最小的正数 1 没有出现。

2025-02-03 10:10:27 363

原创 力扣56合并区间

区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间。区间 [1,4] 和 [4,5] 可被视为重叠区间。表示若干个区间的集合,其中单个区间为。请你合并所有重叠的区间,并返回。

2025-01-31 15:45:41 180

原创 力扣53最大子数组和

因为后一个值依靠前一个值,所以显然是动态规划,然后写动态规划的状态转移方程,维护dp数组,当dp[i-1]>0,说明当前有效可累加,那么dp[i] = dp[i-1]+nums[i],当dp[i-1]<0,说明当前再加也是无效,dp[i] = nums[i]。因为要求最大连续子数组,所以右指针持续移动,记录当前窗口值并跟以前的最大值比较,如果当前窗口小于0,则直接丢弃,后续再加也是无效,所以直接重置windowsSum = 0;,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。

2025-01-25 10:27:18 262

原创 力扣76最小覆盖子串

需要两个HashMap,一个记录字符串t中字符出现的频率,一个用于统计当前滑动窗口中在字符串t中字符的出现数量,另外两个一个have用于统计当前滑动窗口中满足条件的字符数,一个tcount统计总共字符数量。最小覆盖子串 "BANC" 包含来自字符串 t 的 'A'、'B' 和 'C'。t 中两个字符 'a' 均应包含在 s 的子串中,因此没有符合条件的子字符串,返回空字符串。所有字符的子串,则返回空字符串。整个字符串 s 是最小覆盖子串。所有字符的最小子串。

2025-01-24 21:30:05 178

原创 力扣560和为K的数组

哈希是通过计算两个前缀和的差值是否为K,当为K的时候,count++先计算出前缀和,再左右指针根据前缀和方便计算。子数组是数组中元素的连续非空序列。解法三:前缀和+哈希。

2025-01-16 21:45:47 320

原创 四种限流算法

临界问题的解决:如果0.8-1有五个请求,1-1.2又来了5个请求,窗口移动从0-1.0,到0.2-1.2,从0=1.0这个时候开始,请求已经满了,后面在移动移动至0.2-1.2,此时1-1.2会限流。不存在粗暴解决,向桶中加水的过程,已任意速率流入水,以固定速率流出水,当水超过桶的容量时,会丢弃,请求发送时,先是向令牌桶申请令牌,如果成功,就会处理,如果拿不到,就直接拒绝。在固定的时间段内,每来一个请求,计数器就加1,如果超过了阈值,就拒绝。每一个格子都有自己的计数器,来了请求计数器就++,

2025-01-12 15:39:41 171

原创 Netty解决粘包半包问题

如果协议复杂或者不符合上述通用解码器的场景,可以手动编写解码器。通过分析接收到的数据流,根据协议规则解析完整的消息。自定义逻辑中明确解析每条消息的边界。使用 Netty 提供的缓冲区特性,确保接收完整数据后再解析。@Slf4j>> {@Override//判断protocolMessage为空//得到请求头//拼装请求//魔数 1字节//版本号 1字节//序列化器 1字节//类型 1字节//状态 1字节//请求id 8字节//消息体长度 4字节。

2024-12-22 22:57:46 966

原创 一条sql执行流程

4.再进入到预处理器处理,到优化器优化sql,进入执行器执行sql语句,从存储引擎读取记录,返回结果和写入缓存。2.然后去判断这条sql语句在缓存中是否存在,如果存在直接返回结果,不存在则进入到解析器。3.在解析器中,对sql进行语法分析,没错的话会生成语法树,1.先是客户端与mysql建立连接。

2024-12-05 14:16:38 318

原创 sql查询语句执行顺序

这会限制返回的记录数量或指定要跳过的行数。它通常是最后执行的部分。先执行from查询的数据源,如果查询中有连接条件(如。条件的行会被返回或传递到后续的操作。子句会被执行,用于过滤数据。用于对结果进行排序。子句,数据库会在此时进行分组操作。子句用于对分组后的数据进行过滤。子句执行完毕之后去除重复的记录。子句用于选择要显示的列。

2024-12-05 14:13:45 219

原创 mysql为什么用B+树,不用B树和hash

B树每个节点都存储数据和指针,所有节点组成树,叶子结点指针为null,因为每个节点存放数据,而每一页的大小是固定的,这样就会导致存储的键值减少,指针也减少。而B树的非叶子节点既存储索引信息也存储部分数据。B+树叶子结点才存储数据,叶子结点包含了所有键值,非叶子节点索引数据,不存储数据,因此能索引更多数据。B+树的查找性能更稳定, 每次查找都需要查找到叶子节点;在B+树中,数据都存储在叶子节点上,而非叶子节点只存储索引信息;而B树的查找可能会在非叶子节点找到数 据,性能相对不稳定。那么B+树和B树的区别。

2024-12-05 14:11:55 355

原创 JVM垃圾回收算法

在GC开始时,原来都是在from ,将GCRoot对象搬运到to,然后引用链上的也搬运到to空间,此时清理from空间,然后from和to名称互换。当对象晋升(Promotion)到老年代时,如果老年代没有足够的空间存放这些对象,会触发 Full GC。运用的是复制算法,将from的存活对象转移至to,再清空from,最后from和to交换名称。对标记清除算法的扩展,在标记阶段一致,在整理阶段将存活的对象移动至堆的一端,避免了内存碎片。在GCRoot链上的对象被标记为存活对象,没被标记的就是非存活对象。

2024-12-02 17:45:06 337

原创 JDK、CGLIB动态代理

它不要求目标类实现接口,而是通过继承目标类,重写目标类的方法来实现代理。CGLIB 动态代理通过继承目标类并重写其方法来创建代理对象。该方法中包含了拦截逻辑,你可以在这里实现方法的增强(比如日志、事务等)。代理类中的方法会被重写,调用这些方法时,CGLIB 会将调用转发到。JDK 动态代理要求目标类必须实现接口,代理类会自动实现这些接口。方法生成一个代理类,这个代理类会实现目标接口(一个或多个)。代理类的方法调用会转发到。来调用实际的目标对象方法。方法调用目标类的原始方法。需要代理类对象实现了接口。

2024-11-30 11:59:56 313

原创 java线程池

System.out.println("这是线程 " +Thread.currentThread().getName() + ",正在执行任务" + finalCount);:线程池核心线程数。(比如最大线程数为10,核心线程数为8,就算这8个线程空闲,也不会被销毁,但是如果第9个线程空闲,那么第9个线程会被销毁。// 创建线程池,最大线程数为10,核心线程数为8,线程空闲存活时间为100ms。:当一个任务被提交到线程池时,如果线程池的线程数已经达到最大线程数,且任务队列也已经满了,那么。

2024-11-29 14:28:17 513

原创 数据结构课设迷宫问题

求得的通路以三元组(i,j,d)的形式输出,其中:(i,j)指示迷宫中的一个坐标,d表示走到下一坐标的方向。如:对于下列数据的迷宫,输出的一条通路为z(1,1,1),(1,2,2),(2,2,2),(3,2,3),(3,1,2),··。可以二维数组存储迷宫数据,通常设定入口点的下标为(1,1),出口点的下标为(n,n)。设计一个程序,对任意设定的迷宫,求出一条从入口到出口的通路,或得出没有通路的结论。【测试数据】迷宫的测试数据如下:左上角(1,1)为入口,右下角(8,9)为出口。

2023-12-27 17:44:37 705 4

原创 链队列的入队出队

【代码】链队列的入队出队。

2023-11-18 10:47:25 154

原创 链栈的入栈出栈

【代码】链栈的入栈出栈。

2023-11-17 16:59:18 205

原创 顺序栈的入栈出栈

【代码】顺序栈的入栈出栈。

2023-11-17 11:25:05 132

原创 双向循环链表-头插法-尾插法

【代码】双向循环链表-头插法-尾插法。

2023-11-16 21:09:40 293

原创 数据库实验二

-select *from student where (sdept = 'IM' or sdept = 'IS') and sname like '张%'-- sage>(select AVG(sage) from student where sgender = '女') and sgender = '男'--insert into student values ('98008','刘备','男','35','MA')--WHERE course.cname IN ('Java', '计算机文化学')

2023-11-14 19:32:54 1082

原创 version1

/ 将最后一个节点的next指针设置为NULL。

2023-11-05 20:17:32 163

数据库实验二,数据库实验二

数据库实验二

2023-11-14

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

TA关注的人

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