- 博客(134)
- 收藏
- 关注
原创 Github连接失败:Failed to connect to 127.0.0.1 port 7890 after 2068 ms: Couldn‘t connect to server
当我打开项目,准备开心从Git拉取代码的时候,然后就报错啦~
2025-01-20 17:09:44 432
原创 RabbitMQ实现延迟消息发送——实战篇
在项目中,我们经常需要使用消息队列来实现延迟任务,本篇文章就向各位介绍使用RabbitMQ如何实现延迟消息发送,由于是实战篇,所以不会讲太多理论的知识,还不太理解的可以先看看MQ的延迟消息的一个实现原理再来看这篇文章跟着练手哦~
2025-01-17 17:09:45 1417
原创 Mysql连接报错——Authentication plugin ‘caching sha2 password‘ cannot be loaded
在MySQL 8.0及以上版本中,默认的用户密码认证插件是'caching_sha2_password',而在MySQL 5.7及以下版本中,默认的是'mysql_native_password'。如果客户端不支持'caching_sha2_password',就会出现这个错误。因为8.0之后mysql更改了密码的加密规则,而目前已有的客户端连接软件还不支持Mysql8新增加的加密方式caching_sha2_password,所以我们需要修改用户的加密方式,将其改为老的加密验证方式。
2025-01-17 09:14:46 333
原创 力扣——102. 二叉树的层序遍历
对于二叉树的层序遍历来讲,一般比较常用的方法就是使用BFS(广度优先搜索)进行遍历,相对于DFS来讲,因为DFS本身维护了一个栈,所以相对实现就比较简单一些,而对于BFS来说需要自己实现一个队列去进行维护,一般情况下使用DFS的场景也比较多一些。需要注意的点就是在计算queue的长度的时候,不能在循环上直接i
2024-12-24 19:55:01 292
原创 力扣.——560. 和为 K 的子数组
简单的前缀和就可以解决了,当然我看别人还用到了哈希表来处理,我这里就不展示了,感兴趣的可以再研究研究~子数组是数组中元素的连续非空序列。本题使用前缀和可以解答~
2024-12-13 21:07:46 308
原创 RabbitMQ实现消息发送接收——实战篇(路由模式)
本篇博文将带领大家一起学习rabbitMQ如何进行消息发送接收,我也是在写项目的时候边学边写,有不足的地方希望在评论区留下你的建议,我们一起讨论学习呀~
2024-12-13 19:53:33 1286
原创 力扣——322. 零钱兑换
这题用动态规划可能还是有点儿难度,一刚开始我还在想转移方程怎么用在coins数组上,后来借鉴了一下别人的思路,用在amount上可能更容易写一点,好吧,我承认我是垃圾~看了一下数据量,发现用回溯来做确实不太行,好,果断该策略,改用动态规划~看了代码还是存在疑问的宝子可以评论区留言哦,私我也行,我们共同成长~如果没有任何一种硬币组合能组成总金额,返回。,表示不同面额的硬币;你可以认为每种硬币的数量是无限的。计算并返回可以凑成总金额所需的。结果不出意外,出意外额~
2024-12-12 20:01:42 371 2
原创 Cause: java.sql.SQLDataException: Cannot convert string ‘xxxx‘ to java.sql.Timestamp value
最近在做项目的时候,发现我的数据库某个表中缺了某个字段,我添加完成并修改了对应实体类,最后启动项目给我报了字段类型无法转换的问题。
2024-12-10 17:03:04 338
原创 设计模式解析:简单工厂模式与工厂方法模式
⭐⭐本篇文章将向各位介绍工厂模式相关内容,包括简单工厂模式、工厂方法,置于抽象工厂模式我们留到后面的博客中进行讲解,因为博主认为工厂模式难倒不是很难,就是有点儿绕,先学好前两个好好理解了之后我们再学最后一个。工厂模式其实就是来帮助我们创建类的实例的,尤其是一些实现逻辑比较复杂或者对象生命周期需要集中管理的对象,使用工厂模式进行创建,调用者不必关心里面的实现逻辑,只需要直接调用即可,也免去了使用new去实例化一个对象。本篇我们以实现一个简单的计算机为例,去讲解工厂模式的运用。
2024-12-04 17:28:42 784
原创 代理模式——动态代理、静态代理
⭐⭐代理模式是一种设计模式,能够保证在不改变源代码的情况下,给代码添加额外的功能。在java中,代理又分为两中:静态代理和动态代理。在说动态代理之前,我们先说一说静态代理,已经了解过的朋友可以直接跳过这一部分了~
2024-12-01 17:46:43 781
原创 Redis保持持久化——RDB、AOF
⭐⭐当你读到这篇博客的时候,你可能就已经产生这样的疑惑,既然redis是依托于内存的,那如果我的系统在某天发生故障或者因为某些原因导致我的内存数据丢失了,我的redis该怎么进行处理呢?解决这个问题的关键就是在于将内存数据同步到磁盘当中,在磁盘保存了这些数据后,我便可以确保我的数据不丢失。所以这里才会有redis的持久化这个说法,实现方式有RDB(redis数据库快照)、AOF(追加文件)。
2024-11-26 15:44:56 1010
原创 操作系统——I/O多路复用
I/O多路复用指的就是通过一个线程或者进程同时去处理多个I/O操作(像文件、网络连接等),这样就解决我每一个I/O操作都需要开一个线程来处理,而且通过这样的方式如果我当前线程还在处理任务,此时不需要等待当前线程执行完成,也可以去执行其他任务,等当前线程执行完成后再来处理,这样就不会发生阻塞,从而提高了系统的吞吐率和使用率。
2024-11-25 18:09:40 914
原创 缓存穿透——布隆过滤器
*** @description: 实现自定义布隆过滤器*/// 布隆过滤器的位数组// 布隆过滤器的哈希函数个数// 设置哈希函数数组// 初始化哈希函数数组i++)// 实现布隆过滤器的添加方法i++) {if (!// 如果某个位置之前没有设置过,标记为添加失败// 设置位为 true// 如果某个位置之前没有设置过,返回 false// 实现布隆过滤器的查询方法i++) {if (!// 如果某个位置为 false,说明一定不包含该值。
2024-11-23 20:05:15 711
原创 (二)Mysql篇---Mysql索引
索引虽然能加速查询,但在以下几种情况下会失效:1. 使用 `OR` 连接多个条件。2. 使用 `LIKE` 查询时,尤其是以 `%` 开头。3. 查询涉及 `NULL` 值。4. 对索引列使用函数或表达式。5. 范围查询与等值查询混合。6. 使用 `DISTINCT` 或 `GROUP BY` 时。7. `JOIN` 操作时缺少合适的索引。8. 排序操作 (`ORDER BY`) 时缺少索引。9. 使用 `NOT IN` 或 `` 等操作时。😚😚💬。
2024-11-19 20:14:54 1034
原创 redis和数据库的数据一致性
但是这里会存在问题,你可以想一想,如果我的线程1在删除数据库数据的时候,因为网络延迟或者某些原因,还没有执行完成,这个时候缓存数据过期,线程2只能从数据库中获取数据,但是获取到的数据依旧是旧数据,然后线程1将数据库修改成功后再去删除缓存,然后线程2再把数据同步到缓存中,那这个时候缓存中的数据依旧是旧数据,从而导致数据一致性被破坏。这个时候线程1才将数据修改到数据库中,但是对于之后的线程读取的数据依旧是redis中的老数据,只有等到redis的缓存过期之后,才会从数据库读到新的数据。这个想法是没毛病滴~
2024-11-09 17:31:37 1177
原创 AtomicInteger保证线程安全
你会发现在最后main方法中打印出来的a依然是原来的值,这是因为java内存模型中基本数据类型是直接放在栈当中的,栈是线程内所有的,所以按照栈的特性,先进后出最后再方法里面输出的是4,当然方法结束后栈自然就被销毁了,由于栈是线程内的,所以自然不会同步到main方法当中的a;那我们再来看看对象,对象的实例是放在堆当中的,而堆里面存放的是线程间共享的数据,相当于对象在创建的时候会在线程里面创建一个对象引用,然后指向堆中的那个对象,如果我的线程里面的这个对象数据被修改过后,那么就会通知到堆中的对象并进行修改。
2024-11-02 17:47:44 943 1
原创 力扣——113. 路径总和
看完代码,如果你觉得恍然大悟,那恭喜你,算是对回溯和深搜学的比较好的,但是如果看完代码觉得还是很懵的建议再去看看回溯,理解其中的含义再做几道题就明白了;深搜这里其实主要就是为了遍历整棵树,这个没啥可说的,不理解的评论区评论或者私信哦~路径总和等于给定目标和的路径。是指没有子节点的节点。
2024-11-01 16:37:51 343
原创 创建线程池时为什么不建议使用Executors进行创建
这种情况下,一旦线程提交数超过我设定的数值,就会报一个异常`java.util.concurrent.RejectedExecutionException,这是因为当前队列已经是一个有边界的阻塞队列,一旦请求数量超过我设定的数值,就会抛出一个异常。Integer.MAX_VALUE,对于一个无边界队列来说,是可以不断的向队列中加入任务的,所以这个时候就会出现内存溢出的问题。这两个方法就安全了,这两种方式创建的最大线程数可能是。,而创建这么多线程,必然就有可能导致OOM。是有边界阻塞队列,对于。
2024-11-01 12:52:00 396
原创 volatile关键字
相信各位朋友应该在项目中都有用到或者在别人项目中看到过volatile这个关键字,但是这个关键字具体是什么意思,有什么含义,本篇博客就带你来了解~这里我先提前预告一下这个关键字的功能:可见性、禁止指令重排、不能保证操作的原子性在java内存模型当中,当一个线程去读取一个变量的时候,首先会先从当中读取并存入到当中,这样如果该线程对变量进行了修改,其它线程来读取的时候,读取的变量就不是最新值但是如果我使用了volatile这个关键字就不一样了,现成会直接读取主内存当中的变量并将修改后的变量值。
2024-10-29 16:05:23 942
原创 string、stringbuffer、stringbuilder的区别
内容不可变主要是因为string底层是通过字符串常量池来实现的,定义两个变量并设置相同的值,这两个值的地址是一样的,就相当于用的是同一个值的地址,这样做主要也是为了保证string类型设置的值是安全的,因为我们通常设置的用户的信息都是通过字符串来存储的,如果我修改了s的值,那么s2的值也会被修改,这肯定不是我们想看到的~简单来说一下这三个的区别吧,因为我也是在学习中~
2024-10-18 17:54:31 246
原创 力扣----最长连续序列
最长数字连续序列是 [1, 2, 3, 4]。代码大概进行了解释,不理解的地方可以评论区留言~这题可以用哈希表来快速排查连续字串。
2024-10-17 18:45:32 238
原创 (一)Mysql篇---Mysql整体架构
首先,上一张图先让各位看看大致结构::这里主要是处理客户端和数据库连接的,直接使用的Tomcat的连接池,可以调整最大连接数;:这里主要包括了sql接口、解析器、优化器、缓存缓冲四个区域;:就比如我们常见的InnoDB、MyISAM这些数据库引擎都存放在这一层;:涵盖了所有日志,包括数据、索引文件,存在在磁盘上;当然,还包括了一个客户端,客户端主要负责编写sql,服务端则负责sql的执行和存储。好啦,那接下来就具体来看看每一层都是怎么用的吧~
2024-10-17 18:07:01 1930
原创 脏读、不可重复读、幻读的解决方法
上一篇博客提到了脏读、不可重复读、幻读的含义,也知道了是因为什么情况导致出现的这些问题,这篇博客就带大家一起来了解一下他们的解决办法~:脏读出现的原因主要是因为一个事务读取了另外一个事务未提交的数据,就可能出现脏读,解决办法可以通过“读已提交”这种形式进行解决。
2024-10-06 19:35:38 1233
原创 MySql数据引擎InnoDB引起的锁问题
脏读:一个事务还在对数据进行修改,但是还未更新到数据库,这个时候另外一个事务也来读取这些数据,由于第一个事务跟新的数据还没有提交到数据库,所以第二个事务读取的数据实际上就是脏数据。上一个事务的更新,而且事务之间是互相隔离的,彼此都不知道他们之间的存在,所以这种情况下就很有可能出现数据丢失的问题。,此时事务A再次通过相同的查询条件查询数据,发现两次查询的数据不一样,就给了一种出现幻觉的感觉。后的数据,导致事务A在事务B之前读取的数据和事务B后读取的数据不一样。不可重复读着重强调了事务A读取了事务B。
2024-10-06 18:00:26 427
原创 MySQL底层为什么选择用B+树作为索引
跳表底层实质就是可以进行二分查找的有序链表。而且在链表基础加上索引层。即能支持插入、删除等动态操作,也支持按区间高效查询。而且不管是查找、插入、删除对应的时间复杂度都是O(logn)。要理解跳表,先来看链表,假设链表存储是有序的数据,我们要想查询某一个数据,在最差的情况下要从头全遍历整个链表,时间复杂度是O(n)。从上图所示,我们如果要查询一个26的节点,跳表就可以先从索引层遍历,当遍历到在索引层的21节点,会发现下一个索引层的节点是36节点时,很明显要找的26的节点就在这区间。
2024-09-13 16:18:31 1308 1
原创 一条sql语句执行的全过程
但是缓存也有好坏,好处是可以快速查出相关数据,坏处是如果有新的数据,缓存需要每次做同步处理,这样的话如果是插入场景较多的情况对系统性能影响较大。:开始执行的时候,先要判断一下你对这个表有没有执行查询的权限,如果没有,则会返回没有权限的错误,如果有权限,就打开表根据上一步生成的执行计划继续执行,并将所有满足条件的行组成记录集作为结果集返回给客户端。:优化器是在表里面有多个索引的时候,决定使用哪个索引,或者在一个多表关联的语句中,决定各个表的连接书序。:负责与服务端构建连接,并进行权限认证。
2024-09-13 14:36:56 395
原创 力扣--二叉树典型题目合集(递归思想)
这道题就更简单了,直接两行代码就完事儿了,但是你能想到并写出来其实还是有点儿不太容易,因为递归的思想没有理解透彻,那做这么多的题可能就有点儿难受了,因为你会发现最后刷完题下来最多只是你做过的会了,稍微上点儿难度就开始卡了~这道题,直接递归就可以获得最后的结果,先递归获取左子树最大深度,再递归获取右子树最大深度,最后+1表示根节点,然后取左右子树的最大值,就是整棵树的最大深度!本篇文章将向各位介绍三道典型的二叉树题目,每一道题我在做的时候都是想不到,一看题解就看懂了,然后骂自己是个SB~
2024-09-12 17:59:32 489 1
原创 力扣---80. 删除有序数组中的重复项 II
方式传递的,这意味着在函数里修改输入数组对于调用者是可见的。这题虽然是中等题,但是想通了其实还是挺简单的,直接看代码~好了,代码贴上了,注释也写上了,相信聪明的你一定能看懂的~删除重复出现的元素,使得出现次数超过两次的元素。// 根据你的函数返回的长度, 它会打印出数组中。// 在函数里修改输入数组对于调用者是可见的。为什么返回数值是整数,但输出的答案是数组呢?不需要考虑数组中超出新长度后面的元素。不需要考虑数组中超出新长度后面的元素。不要使用额外的数组空间,你必须在。,返回删除后数组的新长度。
2024-09-12 17:15:57 285
原创 IO模型---BIO、NIO、IO多路复用、AIO详解
NIO提供了非阻塞I/O操作,使用缓冲区、通道和选择器来实现高效的并发I/O处理。IO多路复用也提供了非阻塞I/O操作,但通常需要为每个通道分配一个线程,它通过监听事件来处理I/O操作。听完这些概念后,可能你就有点儿糊涂了,没关系,我们现在再来梳理总结一下~BIO(同步阻塞):线程发来IO请求后,一直阻塞线程直到缓冲区数据准备好返回后才会释放(就像蛋糕店一个服务员必须做完你的蛋糕才能去做下一个蛋糕)
2024-09-12 15:15:10 1392
原创 DNS解析域名详解
如果没有,那DNS就会去网络中的某台DNS服务器查询,DNS服务器中存储了域名对应的ip的数据库表,当DNS服务器收到DNS查询请求后,会从数据库中查询数据,然后将查询到的对应的ip地址返回。对于我们而言,面对长串的ip地址,我们更喜欢记忆较短的域名,但是对于路由器来说,更喜欢定长的、有层次结构的ip,所以为了满足不同的喜好,就有了DNS解析服务。你有没有想过,当一个url传过来网络对它进行了哪些操作~DNS又是怎样对域名进行解析的~或者我们为什么要用到域名,为什么不直接使用ip地址~
2024-09-12 11:05:08 543
原创 Map类型如何判空
笔者刚开始是对这个result直接使用的Objects.isNull()直接进行的判空,但是这样做的效果就是如果result的值本来就是空的,本应该执行if里面的语句,但是这个时候就直接跳过if执行了else里面的语句,所以我们需要使用isEmpty()方法来直接进行判空。使用 isEmpty() 方法来检查result 是否为空,而不是 isNull,因为它是 Map 类型。这样修改后,当 reusult 为空时,它会在方法内部被初始化,从而避免了跳过后面的逻辑。如果result为空,则初始化它。
2024-08-27 15:11:38 382 3
原创 Mac中maven配置安装路径
Mac中maven配置安装路径没有下载maven的可以先下载:(这里建议maven版本不要下高了)如果你的bash_profile中没有配置JAVA_HOME路径,可以按照下面的命令配置一下。
2024-07-23 22:33:40 948
原创 为什么在重写equals方法后还要再重写hashcode方法(面试题)
这是因为set在新增数据进行比较数据是否相同的时候,首先会先去调用hashcode比较这两个对象的hashcode值是否相同,在我们还没有重写hashcode方法之前,两个对象的hashcode的值是不同的,所以这个时候就直接返回;后来,我们重写了hashcode方法,让两个对象返回相同的hashcode值,这个时候再用重写的equals去比较两个对象的值是否相同,如果都相同就会只存放一个值进入set中。)我们在代码中发现重写了equals方法后还需要重写hashcode方法,为什么呢?
2024-06-30 20:04:15 275
原创 ==和equals的区别(面试题)
这是因为set在新增数据的时候,首先会先去调用hashcode比较这两个对象的hashcode值是否相同,在我们还没有重写hashcode方法之前,两个对象的hashcode的值是不同的,所以这个时候就直接返回;对于equals来说,基本数据类型没有equals方法,对于引用类型equals比较的是引用对象是否相同(我觉得比较的应该是地址)对于引用类型,==比较的是地址是否相同,equals如果被重写的话比较的是值是否相同,如果没有被重写,则会使用Object里面的equals进行比较他们的地址是否相同。
2024-06-30 20:01:01 752
原创 SpringBoot使用滑动窗口限流防止用户重复提交(自定义注解实现)
在你的项目中,有没有遇到用户重复提交的场景,即当用户因为网络延迟等情况把已经提交过一次的东西再次进行了提价,本篇文章将向各位介绍使用滑动窗口限流的方式来防止用户重复提交,并通过我们的自定义注解来进行封装功能。获取用户ID的逻辑需要根据你的项目实际情况进行编写,我这里是把id存在redis里面的,但是也是存在问题的,读者可以尝试使用RabbitMQ进行实现。maxRequests表示在timeWindow时间内的最大请求数。接下来我们需要实现一个AOP切面,来实现我们的自定义注解。然后,自定义一个注解。
2024-06-24 18:08:21 536
原创 ArrayList知识点(面试)
上一篇我们说了hashmap的相关知识点,这一篇我们再说一些ArrayList的相关知识,因为ArrayList也是我们项目中比较常用的。
2024-06-22 20:07:58 1037
原创 SpringBoot项目解决跨域问题
什么是跨域?这里先简单介绍一下-------->跨域指的是当两个路径他们的协议、域名、端口有一个不同就会产生跨域问题,而前端所说的同源策略指的就是协议、域名、端口都相同的情况。那如何进行解决呢?这里有几种方法可供你选择。
2024-06-12 10:21:12 530
TA创建的收藏夹 TA关注的收藏夹
TA关注的人