自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 七大设计原则之里氏替换原则

里氏替换原则,英文叫LiskovSubstitutionPrinciple,简称LSP(老色皮,哈哈)。里氏替换原则,其实是没有我们前面,说的SRP和OCP比较见名知意一些。根据他们两个的中文名称,我们都很容易联想到他的定义。比如,单一职责原则,就是一个类或者模块只负责一个职责。而开闭原则,根据名字,我们也不难得知其定义就是,对扩展开发,对修改关闭。然而,里氏替换原则,根据名称,我们却难以得知其到底有何含义。里氏替换,其实重点就在后面的替换两字。

2025-01-18 16:29:39 1497 6

原创 nginx的基本使用,看这一篇就够了!

nginx(发音为"engine-x")是一款高性能的HTTP和反向代理Web服务器,同时也支持IMAP/POP3/SMTP邮件服务。它由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点开发,并于2004年10月4日发布了首个公开版本0.1.0。Nginx采用类BSD许可证发布源代码,以其稳定性、丰富的功能集、简洁的配置和低系统资源消耗而著称。2011年6月1日,nginx 1.0.4版本发布。

2025-01-12 20:16:22 2480 4

原创 七大设计原则之开闭原则

相信很多人都听说过这个原则,即使没有直接了解过“开闭原则”,也一定听过“对扩展开放,对修改关闭”这句话。这句话简洁地概括了开闭原则的核心思想。也即是,添加一个新的功能,应该是通过在已有代码基础上扩展代码(新增模块、类、方法、属性等),而非修改已有代码(修改模块、类、方法、属性等)的方式来完成。

2025-01-01 22:29:09 1172 2

原创 七大设计原则之单一职责原则

单一职责原则的英文名叫Single Responsibility Principle。所以,单一职责原则也简称SRP原则。这个原则相对其它原则是更好理解的,其实单从名字也是可以看出来这个原则是干啥的。我们先来看下单一职责原则的英文定义,。翻译过来就是,一个类或者模块应该只负责一个职责。所以说这个原则不仅是针对类的,也是针对模块的。其实往更大了说也可以针对一个服务,在进行服务拆分的时候,我们也要保证每个服务的职责单一,这样才能达到解耦的作用,也就可以提高可维护性。

2024-12-31 22:13:08 1416 4

原创 Mysql定时数据库备份保姆级教程

MySQL 是一种全球广泛使用的关系型数据库管理系统,它存储的数据不仅非常宝贵,而且往往无法替代。因此,确保这些重要数据的安全至关重要,定期进行备份就显得尤为重要。为了进一步增强数据的安全性,我们建议采用跨服务器备份策略,即将数据备份到不同的物理或虚拟服务器上。这样做可以作为一个额外的安全保障,有效防止因单点故障而导致的数据丢失风险。简单来说,就是把重要文件同时保存在几个不同的地方,这样即使一个地方出了问题,其他地方还有备份,从而更好地保护我们的资料安全。

2024-12-09 17:23:16 1614 1

原创 pushgateway的快速使用教程(附Java版通用推送代码)

Pushgateway 是 Prometheus 生态系统中的一种独特数据采集方式,它采用了被动推送的模式来获取监控数据。作为一个独立的插件,Pushgateway 可以灵活地运行在任何节点上,而不必局限于被监控的客户端。用户可以通过自定义编写的脚本,将需要监控的数据发送至 Pushgateway。随后,Pushgateway 会将这些数据推送至 Prometheus Server,从而实现数据的集中管理和监控。

2024-10-21 20:35:52 1906

原创 定时框架Quartz的快速使用教程

Quartz由OpenSymphony开源组织开发,是一个全功能的作业调度框架,可以集成到J2EE和J2SE应用中,也可以独立使用。通过这些组件的协同工作,Quartz能够灵活地管理和执行定时任务。从上面的架构图可以得知,Quartz的核心组件主要如下:任务Job:是个接口,我们的任务类需要实现该接口,并且要重写execute()方法,我们的任务就是要在这个方法里面来写。通过这种方式,我们可以确保当调度器触发任务时,execute()方法会被调用并执行我们预先定义的任务逻辑。

2024-10-02 23:56:25 1109

原创 达梦数据库开启归档模式

归档模式是数据库备份与恢复中的一种重要模式,通过将数据库的日志文件定期存储到归档目录中,可以实现对历史数据的长期保存和恢复。当数据库发生故障或数据丢失时,可以使用归档日志进行数据的恢复,避免数据损失和业务中断。

2024-10-01 22:16:55 1871

原创 【算法题】整数反转,一文彻底搞清!

其次,我们需要注意整数反转之后的结果可能会超出整数的范围。因此,我们需要在进行反转操作时,判断反转后的结果是否超出了范围,如果超出了范围,则返回0。该方法就是每次取末尾数字,并且判断此时去掉末尾数字后的x是否为0,为0就循环结束,不为0就继续循环,用取余10的方式不断将x的末尾数字取出,然后在不断的加到待返回值上,实现反转的效果。但是,这两种方法,我们还是更推荐使用数学运算的方法,这种方法的效率要高于整数转换为字符串再进行反转的方式。给你一个32位的有符号整数x,返回将x中的数字部分反转后的结果。

2024-08-10 13:51:16 1094 2

原创 【算法题】盛最多水的容器(双指针算法)

双指针算法(Two Pointers Algorithm)是一种在数组或链表等数据结构上使用两个指针进行操作的算法技巧,主要用于解决一些特定类型的问题。它通过将两个指针从数据结构的两端或同一端开始向中间或其他指定位置移动,根据问题的具体要求来调整指针的位置和移动方式,以达到减少时间复杂度、简化代码逻辑的目的。双指针算法可以大致分为三类:快慢指针、左右指针和对撞指针。

2024-08-06 21:29:13 521

原创 【算法题】无重复字符的最长子串(滑动窗口)

滑动窗口算法是一种通过在特定数据结构上移动“窗口”来执行操作的算法。它主要用于优化时间复杂度,特别是在处理数组和字符串相关问题时表现出色。滑动窗口算法的核心在于使用两个指针(左指针和右指针)来标识当前处理的数据范围,并通过移动这两个指针来调整窗口大小,同时根据具体问题的要求更新中间结果。滑动窗口算法的基本思想是通过维护一个窗口,并通过移动该窗口的两个边界(left 和 right 指针)来处理问题。当右边界扩展到符合某种条件或者到达数据结构的末尾时,再通过移动左边界来缩小窗口,并在此过程中更新所需的结果。

2024-08-05 22:37:57 637

原创 【算法题】最长回文子串(动态规划、中心扩展)

这是因为,当考虑的回文子串长度小于等于3时,我们只需比较i和j位置的字符是否相等,便可直接判定它们是否是回文子串。因此,在这种特殊情况下,初始化动态规划数组实际上是不必要的,我们可以直接根据字符比较的结果来逐步构建整个数组。该算法其实就是枚举回文子串的中心位置,然后向两边扩散,看最终能扩散多远,然后记录这个位置,在和上一次记录的进行比较,取最长的一个。其实回文子串为1的时候,我们是不需要考虑的。因为当“aba”是回文子串的时候,那么“cabac”是不是回文子串,是取决于新加入的两个字符是否相等的。

2024-07-31 17:03:00 1164

原创 【算法题】正则表达式匹配(动态规划),一文彻底搞清!

m代表字符串s的长度,n代表字符串p的长度,则sp[i][j]就代表s中以i位置为结尾的子串和p中的j位置为结尾的子串是否匹配。解释:因为 '*' 代表可以匹配零个或多个前面的那一个元素, 在这里前面的元素就是 'a'。sp[i][j] = sp[i-1][j-1]&&(s[i],p[j]) //(s[i],p[j])表示对应位置可以匹配的上。给你一个字符串s和一个字符规律p,请你来实现一个支持 '.' 和 '*' 的正则表达式匹配。解释:".*" 表示可匹配零个或多个('*')任意字符('.')。

2024-07-29 22:28:05 1269

原创 【算法题】颜色分类,一文彻底搞会!

"荷兰国旗问题"是计算机科学领域中的一个经典问题,由著名计算机科学家Edsger Dijkstra首次提出。该问题模型源于荷兰国旗的三色排列:红色、白色和蓝色。具体描述如下:假设有一系列球,分别涂有红色、白色和蓝色,这些球随机分布在一条直线上。荷兰国旗问题的目标是通过一种有效的方法对这些球进行排序,使得所有红色球位于最左侧,白色球居中,而蓝色球则位于最右侧,从而模拟荷兰国旗的水平条纹排列。

2024-07-26 23:16:33 1126

原创 MySQL的逻辑架构,这一篇就够了!

MySQL是一个流行的开源关系型数据库管理系统,被广泛应用于各种Web应用程序和企业级应用系统中。为了更好地理解和使用MySQL,我们需要了解其逻辑架构。MySQL的逻辑架构整体可以分为:连接层、服务处、存储引擎层、数据存储层。它整体的逻辑架构大致如下:它更详情,更经典的逻辑架构图如下:这张逻辑架构图,可以说非常经典的一个了,相信不少同学看到这张架构图,会有种似曾相识的感觉。以下我们就结合这张经典的逻辑架构图来,针对每一层来具体的去展开去说。

2024-07-15 17:48:47 1908

原创 SpringBoot整合Dubbo的快速使用教程

Apache Dubbo是一款RPC服务开发框架,用于解决微服务架构下的服务治理与通信问题,官方提供了 Java、Golang等多语言SDK实现。使用Dubbo开发的微服务原生具备相互之间的远程地址发现与通信能力, 利用Dubbo提供的丰富服务治理特性,可以实现诸如服务发现、负载均衡、流量调度等服务治理诉求。Dubbo被设计为高度可扩展,用户可以方便的实现流量拦截、选址的各种定制逻辑。

2024-07-05 22:56:32 4340 2

原创 keepalived实现Mysql的双机热备自动故障切换,看这一篇就够了!

双热备份(也称为双机热备份)是指通过两台服务器的相互备份,在一台服务器出现故障时,另一台服务器能够自动接管业务,保证系统服务的持续性和高可用性。双热备份的核心也就是是通过两台服务器之间的实时同步和故障检测来实现高可用性。这种备份方式确保当主设备发生故障时,备用设备能迅速接管业务,从而避免服务中断。MySQL的双热备份通常是指通过主从复制机制实现两台服务器间的实时数据同步,从而确保数据的高可用性和一致性。双热备份在MySQL中主要依赖于其内置的主从复制(Replication)功能。

2024-06-21 00:21:26 2852

原创 【算法题】搜索二维矩阵,一文彻底弄会!

那么在使用二分查找的话,初始搜索的左边界就为0,右边界就为m*n-1,也就是15。我们在确定中间位置的时候又需要将一维数组的位置转成二维数组的位置,这样我们才能从二维数组中获取到对应位置的值来和目标值进行比较。那么知道这个关系后,我们就可以在不借助额外空间的情况下,完成对该二维数组的查找。也就是需要一个大小为m*n的一维数组来存储转换后的二维数组,其中,m为二维数组的行大小,n为二维数组的列大小。我们首先观察到,矩阵的每一行都是有序的,而且每一行的第一个元素大于前一行的最后一个元素。其实,我们仔细想一下。

2024-06-16 13:58:17 865

原创 【算法题】矩阵置零,一文彻底搞懂!

导致这个问题的原因就是第一行和第一列共用了matrix[0][0],当matrix[0][0]=0的时候,我们无法得知它是标记的行还是列,还是两者都进行了标记。就比如上图矩阵,当我们遍历到[0,2]位置的时候,也就是第一行有0的位置的时候。我们用第一行第一列标记的时候,那么此时我们的操作就是matrix[0][0]=matrix[0][2] = 0。通过创建两个数组,分别记录需要置零的行和列,然后再次遍历矩阵进行置零操作,我们可以实现对原矩阵的修改。其中m是矩阵的行数,n是矩阵的列数。请使用 原地 算法。

2024-06-15 15:14:33 1579

原创 【算法题】编辑距离(动态规划),一文彻底弄懂!

那么,问题来了,我们该如何初始化第一行和第一列的数据呢? 比如,word1为abc,word2为dcdb。我们初始化第一行的时候,那就是要求出a分别转换成d、dc、dcd、dcdb时的最少操作次数。显然这样初始化是非常麻烦的,甚至是不可完成的!那么我们再假设word1为zabc,word2为zdcdb。此时我们初始化第一行的时候,则就是求z分别转换成z、zd、zdc、zdcd、zdcdb时的最少操作次数。显然这个时候就很简单了对应最少操作次数其实就是j的值。 那么,灵感

2024-06-14 23:05:44 1789 2

原创 SpringBoot整合RabbitMQ的快速使用教程

在分布式系统中,消息队列是一种重要的通信方式,它能够有效地将消息从一个应用程序传递到另一个应用程序。RabbitMQ是一款流行的开源消息队列系统,简单易用且功能强大。本文将介绍如何使用SpringBoot快速整合RabbitMQ,实现消息的发送和接收。。Fanout交换机会将接收到的所有消息广播到它知道的所有队列中。这种类型的交换机不考虑路由键,只是简单地将消息复制到所有绑定的队列中。适用于不需要选择性地发送消息给特定队列的情况,例如,广播系统通知或有多个服务需要消费同一份数据的场景。

2024-05-28 22:59:18 1818 3

原创 SpringBoot整合Kafka的快速使用教程

Kafka是一个高性能、分布式的消息发布-订阅系统,被广泛应用于大数据处理、实时日志分析等场景。Spring Boot作为目前最流行的Java开发框架之一,其简洁的配置和丰富的工具使得与Kafka的集成变得更加容易。本文将介绍如何使用Spring Boot整合Kafka,实现高效的数据处理和消息传递。

2024-05-27 23:25:50 2161 1

原创 Docker快速部署Seata的TC服务以及微服务引入Seata教程

Seata是阿里的一个开源的分布式事务解决方案,能够为分布式应用提供高性能和高可靠性的事务支持。使用Docker快速部署Seata的TC服务,可以简化部署过程并提高效率。本文将介绍如何使用Docker快速部署Seata的TC服务以及如何在微服务中引入Seata。

2024-05-17 22:39:40 1681 2

原创 AbstractRoutingDataSource实现多数据源切换以及事务中无法切换问题

为了实现数据源的动态切换,我们采用了AbstractRoutingDataSource结合AOP+反射来自定义注解。通过这种机制,我们可以在运行时根据自定义注解自动选择不同的数据源,从而实现灵活高效的数据访问策略。具体来说,我们首先创建了一个继承自AbstractRoutingDataSource的动态数据源类,该类能够管理多个数据源并根据线程上下文中的特定键值来选择使用哪一个数据源。接着,我们定义了一个自定义注解,用于标记需要切换数据源的方法或类。

2024-04-25 22:40:53 2603 11

原创 一文彻底分清缓存穿透、缓存击穿、缓存雪崩问题(含记忆技巧)

缓存穿透是指用户请求的数据在缓存中不存在即没有命中,同时在数据库中也不存在,导致用户每次请求该数据都要去数据库中查询一遍。如果有恶意攻击者不断请求系统中不存在的数据,会导致短时间大量请求落在数据库上,造成数据库压力过大,甚至导致数据库承受不住而宕机崩溃。那么,我们该怎么记忆缓存穿透呢?我们可以这么想,缓存穿透其实就是恶意攻击,就是有人想“穿”过你的防护网(缓存)来“偷”你的家(数据库),这也就是穿透。或者你这样想,有人想恶意攻击你的数据库,这是不是不好的行为,是不是小偷的行为!

2024-03-27 23:45:13 9602 23

原创 SpringBoot项目配置文件不生效问题解决

而pom类型通常用于组织和管理多个模块的项目,它本身不包含代码,只包含项目的配置信息和依赖关系。所以,它也就不会去寻找配置文件。一般我们使用pom都是在项目聚合的时候,父工程的pom文件里面使用。比如,我这个包含两个服务的RabbitMQ使用的demon。

2024-03-23 00:12:41 3298 8

原创 Docker快速部署RabbitMq教程,这一篇就够了!

要快速部署RabbitMQ,可以使用Docker容器来简化过程。下面是使用Docker快速部署RabbitMQ的教程。

2024-03-15 23:46:57 13930 13

原创 回溯算法,你“回”了吗

回溯算法,又称为试探法,是一种通过穷举所有可能情况来找到问题的解的方法。回溯算法通常采用深度优先搜索的策略,从一个选择开始,不断地向某一方向前进,直到无法继续。此时,需要回退到上一步选择的其他分支继续尝试,直到找到问题的解或无法继续搜索。回溯算法的思想源于数学中的排列组合问题,通过尝试所有的可能性来找到问题的解。与穷举搜索相比,回溯算法具有剪枝操作,可以通过一些判断条件来减少搜索的路径,提高算法的效率。回溯算法虽然能够解决很多问题,但是,他并不是一个高效的算法。

2024-02-29 01:47:41 1250 7

原创 深入理解单调栈算法,这一篇就够了

单调栈是一种特殊的栈,它的特点是栈中的元素始终保持单调有序。通常有两种单调栈,分别是单调递增栈和单调递减栈。单调递增栈顾名思义,栈内元素从栈底到栈顶递增有序,即栈顶元素最小,栈底元素最大。而单调递减栈则相反,栈内元素从栈底到栈顶递减有序,即栈顶元素最大,栈底元素最小。这种利用单调栈求解问题的思路通常可以简化算法,提高算法的效率。在解决问题时,我们需要仔细观察问题的性质,判断是否适用单调栈。如果问题符合单调栈的特点,我们就可以借助单调栈来解决问题,以达到优化算法效率的目的。简单的说,

2024-02-27 22:51:21 5553 7

原创 基于springboot接口的编写

目录1、模糊分页查询2、批量删除3、新增4、编辑此接口非彼接口。此接口是MVC的设计模式中的Controller层,一般我们会叫Controller层里的方法为接口。他们是负责接收前端或者其它服务的传来的请求,并对请求进行相应的处理,最终再将处理结果返回给前端或者其它服务。 1)Controller层在进行模糊查询操作的时候,往往有时候需要查询的参数很多,这时候也可以考虑使用实体类接收前端传参,更改如下:接收前端传参实体类代码如下: 2)service层定义service层接口(此接口

2024-02-24 20:07:21 1402

原创 snmp协议开通教程

SNMP(Simple Network Management Protocol)是一种用于网络管理的标准协议,它属于TCP/IP协议簇的应用层协议。SNMP的主要目的是简化和标准化网络设备的监控和管理过程。它被设计用来管理网络中的节点,包括服务器、工作站、路由器、交换机以及其他网络设备。信息查询:获取网络设备的状态信息,如流量数据、设备状态等。信息修改:对网络设备的配置进行更改或调整。故障排查:检测网络中的问题并采取措施解决。性能管理:监控网络的性能指标,确保网络运行效率。发现网络问题。

2024-02-23 23:53:26 3162 6

原创 Promethues的Agent模式代理转发的实施教程

为什么需要一个中间代理呢?这样加一层不是脱裤子放屁,多此一举吗?正常情况来说是多此一举。但是,在有些场景就是不得不加这一层。比如现在有A、B、C三台服务器。A和B服务器网络是互通的,B和C是网络互通的,A和C网络不互通。但是,此时promethues服务端是装在C服务器的,代理端agent是安装在A服务器的。这个时候因为A和C网络是不通的,所以安装在C服务器的代理端agent就无法将采集的指标数据推送到C服务器上的Prometheus服务端。这个时候,也就是需要使用promethues的agent模式。

2024-02-23 23:52:40 2369 5

原创 mybatis中一对多分页查询结果异常问题解决

这样虽然映射的时候可以一对多的映射,但是,调用查询sql方法getInWarehouse的时候,返回的结果如果入库单关联了两个设备,就会返回两条记录。更详细的说,就是原本是个入库单列表分页查询接口,现在需要在这个接口上面返回入库单关联的入库设备的信息。突然,想起来了,写代码的这个同事,上次就因为没有把目标分页的sql查询作为PageHelper.startPage()方法后第一个查询语句,导致分页出错。前端调试的时候分页查询的时候,传的pageSize是15,但是当前页展示的却只有11条记录。

2024-02-20 18:38:41 3202 11

原创 使用nginx代理转发JAVA服务对skywalking的请求

但是,在项目实施的过程中,往往都是各种千奇百怪的场景。-Dskywalking.collector.backend_service=10.121.17.8:11800 #这个地址更改为nginx所在服务器的地址,端口和nginx.conf里面配置的监听端口保持一致。当在skywalking管理界面能够出现你需要监测的服务实例的时候,就说明nginx代理转发对skywalking的请求成功了。指定配置启动nginx: nginx -c /usr/local/nginx/conf/nginx.conf。

2023-12-12 17:29:56 1340 2

原创 HashMap源码史上最细解读(二)

本文,我们来解读hashmap的构造函数。提到hashmap构造函数,博主不仅想起曾经面试时被问到hashmap里面有几个构造函数时,竟然都没回答上来,哈哈,汗颜。不知道,大家在没有往下看的时候,是否也有不知道hashmap有几个构造函数的。哈哈,不知道的在评论区扣个1哈,让我瞅瞅有多少和我当初一样的。不过这问题都不大,只要你认真看完这篇博客,不仅会让你知道HashMap里面会有几个构造函数,而且每个构造函数具体都做了什么,也会让你有一个深刻的理解!

2023-11-30 22:38:54 1340 6

原创 HashMap源码史上最细解读(一)

不影响反序列化的时候对象的恢复:某些成员变量,例如:entrySet、modCount,只是为了辅助HashMap的内部实现或运行时使用,并不影响HashMap的状态恢复。这些成员变量与HashMap的结构、数据的存储和访问等没有直接关系。可通过其他方式恢复:有些成员变量的值,例如:size,可以通过其他方式重新计算或初始化。在反序列化过程中,可以根据恢复HashMap的键值对的数,来重新计算出成员变量size的值。

2023-11-30 00:43:40 1405 2

原创 Java接口接收前端传参的字段类型为基本数据类型造成的异常解决

因为业务需求的需要,就新增了一个查询字段id,也就是根据id来筛选出列表中需要的数据。由于接口层代码,并没有什么逻辑处理,都是直接调用的业务层代码,所以就直接再业务层的第一行代码打了个断点,再次用postman测试。通过源码,可以得知:当我们在使用Long的自动拆箱的时候,返回的就是包装类Long的属性value。至此,我们知道原因所在之后,便可以把所有使用id字段的参数都改成使用包装类Long,便可。突然灵光闪现,我的业务层方法,这里接收的参数id还是使用的基本数据类型long。

2023-11-24 23:54:56 1209

原创 Java服务突然无法启动的灵异事件处理

这个意思就是我在注入String类,但是从spring的bena容器里面却找不到。开什么国际玩笑,String类是jdk自带的类,我怎么会注入String?今天是个好日子,又是crud的一天,简简单单几个接口,写完就可以划水啦。然而,不出意外的话,就要出意外了。接口写完了,服务起不起来了。哎哟,我去,又要给我搞事情。事到如今,看来不能病急乱投医了,只能冷静、冷静,再冷静。往这个方法上面一看,我去,我什么时候在这个方法上面加了个@Autowired这个注解。结果还是一样的错误,一样的无法启动!

2023-11-24 23:53:50 713

原创 高频面试知识点ThreadLocal,看完必彻底搞懂(一)

相信参加过很多次面试的圣斗士都知道,关于ThreadLocal基本上是面试必问,而且对于大多数人来说,也都是害怕被问到这个问题的。当然,也包括博主我。虽然,每次拿起八股文,都会看看ThreadLocal。但是,看完也就那样,知道个名字,知道他是线程独有的变量,不被其他线程共享使用。然而,最终也就是停留在知道这个层面,人云亦云的去说。至于到底ThreadLocal是什么,为什么需要ThreadLocal,为什么有同步锁了,还需要ThreadLocal?

2023-11-05 22:56:58 1230 8

原创 高频面试知识点ThreadLocal,看完必彻底搞懂(二)

从上图中,我们可以看出来,当指向ThreadLocal的强引用不存在的时候,垃圾回收器便会在下一次GC的时候,将其回收。//e不为空,要么就是是同一个key,直接覆盖value即可,要么就是哈希冲突了,这种情况不做处理,直接在往下寻址就可,还有一种情况就是不是同一个key,而是这个位置是一个key被回收,而value未被回收的Entry,此时用新的替换掉旧的即可。从上面的源码分析中,我们知道,真正的清理逻辑是在cleanSomeSlots()方法里面的,那么我们就看看,它里面做了什么处理。

2023-11-05 22:55:50 477

空空如也

空空如也

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

TA关注的人

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