自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 一文速通HashMap常见八股

对传入的键进行哈希计算,这个哈希函数会根据键对象的 hashCode 方法返回一个整数哈希值。例如,对于自定义的对象作为键,需要正确重写 hashCode 方法来确保哈希值的均匀分布。得到哈希值后,通过位运算等方式计算出该键值对在数组中的存储位置。通常是将哈希值与数组长度 - 1 进行按位与操作,这样可以确保索引在数组范围内。若计算出的位置没有元素,则直接将键值对插入到该位置。如果该位置已经有元素(发生哈希冲突),则需要进一步处理。

2025-04-25 14:30:54 559 1

原创 SpringBoot集成LiteFlow实现轻量级工作流引擎

通过注解定义组件,并实现具体的业务逻辑@OverrideSystem.out.println("发送邮件");LiteFlow 是一个功能强大且灵活的规则引擎框架,适用于复杂的业务流程编排。通过组件化的方式,可以将复杂的业务逻辑拆分为独立的组件,通过规则进行编排,实现系统的高度灵活性和扩展性。同时,LiteFlow 提供了丰富的功能,如热加载、监控、日志等,方便开发者使用。

2025-04-25 12:21:00 796

原创 多线程事务?拿捏!

场景:有一批1万或者10万数据,插入数据库,怎么做。

2025-04-24 21:22:11 142

原创 分布式事务最全详解

总结2PC能提供原子性操作,但有以下的问题待解决性能方面:执行过程中,参与者都是事务阻塞的,其他请求没法获取资源,牺牲了可用性,不适合高并发高性能场景可靠性:如果协调者在二阶段的时候宕机,全部资源都处在锁定状态,新协调者上位也没法解决(新协调者没法跟旧参与者联系,类似上下文不一致)数据一致性:在超时时间之前,一部分参与者收到commit请求执行了,一部分由于网络问题没收到commit没有执行,会带来短期数据不一致的问题1.没拿到全部回滚的ack确认码怎么处理?

2025-04-24 19:53:39 1148

原创 参考MVCC原理实现全局地址库的读取优化

在高并发、大数据量的业务场景中,传统的快照机制虽然简单,但在数据一致性和内存管理方面存在明显不足。通过引入 MVCC 的版本链机制,我们不仅解决了数据一致性问题,还优化了内存使用,提升了系统的整体性能和稳定性。这一优化实践为类似场景提供了有价值的参考。图一 直接访问全局地址库带来的问题图二 地址库版本链法优化快照法。

2025-04-23 13:56:08 1107

原创 一文带你速通接口幂等

在数据库加个额外字段 version 作为版本控制的字段,假设当前版本为5,并且用户重复发送了5次更新请求,但第一次请求成功后,版本改为6,其他4条请求自然就失效了。比如get请求就一直是幂等的,而post请求就不是幂等就了,有时候post请求就要做幂等处理来保证每个用户只能操作一次。接口是否做幂等处理取决于业务的特殊需求,一般情况下不需要引入接口幂等性,接口幂等会带来额外开销和业务复杂度。通过分布式ID作为数据库中的主键,就能保证一张表只能存在一条唯一主键记录,对于“插入”时的幂等性比较适用。

2025-04-22 23:21:52 897

原创 从0到1搞懂Raft算法

概念:Raft 是管理复制日志的一致性算法。通过选举一个领导者来管理复制日志的变更,领导者负责接收客户端请求,将日志条目复制到其他服务器,并且在日志安全复制后通知副本提交日志。技术实现流程选举阶段:在 Raft 集群启动或者领导者故障时,会触发选举过程。每个节点都从 “追随者” 状态转换为 “候选人” 状态,会给自己投票并且向其他节点发送请求投票(RequestVote)消息。如果一个节点获得了大多数节点的投票,它就成为新的领导者。日志复制阶段。

2025-04-22 15:24:46 796

原创 《动态规划从入门到精通:LeetCode Hot100经典题目详解与Java实战》

选择能完整描述问题状态的最小变量集合例题:爬楼梯(LeetCode 70)// dp[n]表示到达第n阶的方案数。

2025-02-17 11:54:45 570

原创 Mysql一行数据如何存储(操作系统)

深入Mysql理解数据存储

2025-02-17 11:33:35 599

原创 《Java 8 Stream流与Lambda表达式:从入门到精通,轻松玩转集合操作!》

通过Steam流写出优雅代码~~

2025-02-14 13:54:44 253

原创 小红书八股面经一份(JAVA开发)

mysql索引底层采用的是b+树的结构,一开始mysql的索引采用的是b树的结构,当数据量达到一定程度的时候,b树存在深度过大的问题,那么磁盘io次数就会飞速上升,导致查询效率慢。b+树就很好的解决了这个问题,比如存储2000万条数据的时候,b+树的实际存储深度也就3,4层,实际上就是通过减少树的深度来减少查询时的io次数,io实际上是一个重操作。但是3,4,7在上次存储kakuqo的时候已经标记成为1了,那么系统会判断ka存在,实际上ka是不存在的。eg:ka经过三个哈希函数映射到了3,4,7.

2025-02-12 19:48:47 1022

原创 深入浅出:8种常见排序算法的效率对比与应用场景(JAVA)

快速排序、桶排序、归并排序、堆排序

2025-02-12 16:28:15 740

原创 本地缓存与分布式缓存:如何高效解决数据一致性问题?

多级缓存中保证本地缓存数据一致性解决方案

2025-02-12 11:38:17 465

原创 算法基础之排序算法大总结1!!

数组排序算法总结(包含分析优化)

2025-02-11 20:14:06 428

原创 零拷贝原来这么简单!

一文带你搞懂零拷贝并在JAVA实战使用

2025-02-11 18:11:10 1402

原创 《深入浅出线程池:池化技术详解》

线程池的出现是针对线程管理效率低下问题的解决方案。通过线程池,开发者可以将线程作为资源池进行统一管理,避免了频繁创建和销毁线程的内存开销,同时提高了系统的执行效率。理解线程池的核心参数和运作逻辑,对于开发高效的并发系统至关重要。线程池的拒绝策略帮助我们管理并发任务时的压力和风险。每种策略适合不同的场景,可以根据实际需要选择合适的策略。关键在于理解不同策略的特点,并根据任务的重要性和对系统的影响来做出决策。如果任务必须保证执行,使用会比较合适;如果任务可以适当延迟或丢弃,可以选择或。

2025-02-09 22:01:38 816

原创 代码思想之快慢路径

这里当页面 == 1时,是会清空redis对应key的全部缓存的(有个beforeprocess方法实现)。也就是说,我可以先判断页面是1的情况,是的话就直接退出本次处理,那么本次请求就不会查询redis了,查redis实际上是损耗资源的操作,尽量能不查就不查,以下是修改后的代码逻辑。如果页面 == 1 或 打压次数为 -1(即没有进行过打压处理)。处理业务代码的过程中,对业务代码有了一些调整,后续发现这是一种代码思想。如果次数 == 0代表已经打压过并且不需要重新打压了,退出本次处理。

2024-12-28 20:02:39 295 1

原创 一文搞懂线程池应用以及动态线程池原理!

这个AtomicInteger类型,是对线程池的运行状态和线程池中有效线程的数量进行控制的一个字段, 它同时包含两部分的信息:线程池的运行状态 (runState) 和线程池内有效线程的数量 (workerCount),高3位保存runState,低29位保存workerCount。实际上,线程池的参数设计根据程序扩展和业务流量的变化是需要实时进行更新的,那么我们可以考虑使用动态线程池来解决这个问题,把线程池的配置参数放在分布式配置中心上,程序的参数从分布式配置中心读取,就能够实现实时更新功能。

2024-12-26 11:17:48 1003 2

原创 RabbitMQ消息丢失、消息重复、消息积压处理思路

处理方法:RabbitMQ提供了一个publisher confirm生产者确认机制,消息发到MQ后会发一个确认码返回生产者,表现消息是否处理成功。消费者消费完了后准备向队列发送ack确认码时,由于网络抖动或者消费者突然挂了,ack码无法按时发出,于是启动重试机制,导致了重复消费问题。生产者生产速度高于消费者消费速度,导致消息堆积,如果队列里的消息满了,之后的消息可能就变成死信消息,会被丢弃。解决方法:消息持久化,就是把消息持久化到磁盘里,MQ默认是用内存去存储消息的。三个都要持久化才能保证消息的持久化。

2024-12-09 21:42:02 529

原创 Dubbo基本使用与原理详解

一文入门Dubbo,深入了解Dubbo背后运作原理

2024-12-03 22:35:58 1056

原创 AOP结合RabbitMQ实现异常记录,按月分表解决数据库瓶颈

因此我询问了大模型,他给出了几种方案,结合具体业务需求和性能等考虑,我选了AOP的环绕通知来实现这个功能,并用RabbitMQ实现异步存入数据库操作,因为在异常情况下,我的log实体有几个属性需要用到传入参数,如果使用异常通知是没法获取到传入参数的,只能得到异常实体,除非自己去自定义封装异常类,但是这个方案不如环绕通知好。而我传入的数据格式是yy-MM,因为我只要统计月的数据,所以用了concat和%这些来处理数据之间的比对,保证能正常复制和删除上个月数据。其实这个操作是有问题的,

2024-11-06 10:06:48 300

原创 仲恺软工复习文档

实际上高内聚低耦合是一起的,你的程序每个模块功能都是高内聚的,那么必然低耦合,每个模块中代码都是高度和该模块功能相关联的,这就是高内聚,如果你的模块很大程度上依赖于其他模块的正常运行,那么如果一个模块崩了,整个项目就直接垮掉,这是绝对不满足现代程序设计的要求的,因此当下框架采用MSCM架构来设计程序还是大智慧的,我们要修改功能模块就找Controller层对应接口,然后从对于接口到实现层对应方法,再从实现层到mapper层对应方法,很容易就能修改单个功能而不会影响到其他接口的正常运行。

2024-11-02 17:09:51 951

原创 一文搞懂在JAVA中实现RAG(检索增强生成)模式!

问答接口主要流程是:传入问题和对应要查的ES库->问题进行向量化->使用ES的cos余弦函数算法实现查找相关性文档->这里的文档要做限制(因为大模型支持传入的token是有限的,token就是传入的内容单位)->问题和召回内容都传入prompt中组合成传给大模型的信息。下图就是RAG模式的一个大致流程,我个人觉得预训练和RAG模式一起使用可能会导致一些问题,比如我预训练的数据中把LLM训练成一个厨师,然后我提问的时候,召回的信息都是法律信息,那么大模型肯定会乱掉,传回的信息肯定质量也出问题。

2024-10-31 15:08:18 1371 1

原创 面向后端开发HTTP常见面试题学习

有兴趣可以使用一下,对同一个接口发送请求,有时候就是304,直接读浏览器缓存,而不是在服务器调用接口,这里我就不写清楚了,实际上后端开发也不会去纠结那么深,项目遇到这方面问题再进行了解即可。两者最大的差别就是Post需要发送Body报文给后端来获取对应处理资源,body是不限制长度的,如果是Get请求的话,一般是用query参数拼接在url上面的,url一般是有限制长度的,如果url过长就会直接报错。HTTP是超文本传输协议,是一种双向的协议,客户端向服务器,服务器向客户端。这两个方法是安全幂等的吗?

2024-10-31 10:55:37 446

原创 计算机网络原理分析复习

TCP/IP 网络模型:同一台设备有多个进程,进程之间通信有多种方式,但是如果是不同设备之间进行通信,就需要网络这个媒介来通信了,但是设备是多种多样的,比如我手机端发给电脑端,电脑端又分为linux、windows系统等等,为了兼容性,协商出了一套通用的网络协议。简单总结就是,IP协议就是知道了两个地点之间的距离,然后具体怎么走到那个地方要看路由,也就是导航,我们生活里两个地方之间有不同的路线,我们可以选择走不同的路线,换成网络就是走不同的路由。网络层有区分设备的编号,使用IP地址来对设备进行编号。

2024-10-30 15:14:38 951

原创 超详细的SpringBoot集成RabbitMQ教程实现收发消息!!

RabbitMQ集成SpringBoot学习

2024-10-24 14:22:38 1133

原创 JAVA后端实习面经2篇自测题+答案

进程是动态运行的,一个进程是由多个线程组成的,多个线程可以共享进程的方法区和内存空间,但每个线程都有自己的程序计数器、虚拟机栈、本地方法栈。ThreadLocal的实现是基于Thread类中的ThrealLocalMap实现的,它的key是ThrealLocal的线程,value就是保存的数据值。ThreadLocal在使用的时候要显式调用remove()方法,因为GC回收的时候是不会去回收这个线程的,这会导致内存泄露的问题。Mysql中有很多索引,根据他们的类型又分为。索引个数:联合索引,单列索引。

2024-10-20 18:45:36 792

原创 ES在SpringBoot集成使用

按i进入插入模式,就可以编辑了,编辑完按ESC退出编辑模式,输入:,进入底行模式,再输入wq强制保存并退出,这些命令不懂的话去学下liunx基础。可以进行索引的创建、文档的增删改查等操作。Kibana是ES的一个图形化操作工具,也可以使用es-head,这里我本人使用的是es-head,因此我讲的也是es-head安装。其中的高亮显示是在ES7.9.x版本才有的好像,我在ES7.7版本显示报错,有一个方法不支持了。这里直接输入ES地址是无法连接的,需要进行跨域配置,因为是前后端分离的。

2024-10-18 18:00:02 3114

原创 HashMap面试题理解(二)

JDK1.7是使用数组+链表实现的,数组分为大数组。根据存储元素计算槽位是不是空。是一个链表结构元素,一个。else (容器不空)

2024-10-16 20:16:23 213

原创 HashMap面试题理解(一)

关于HashMap面试题的深入理解,涉及源码

2024-10-15 15:07:38 809

原创 MySql定位慢查询以及优化慢查询

前些天公司的某个接口常常出现慢查询的情况,后面根据分析,就是由于数据量日积月累太多以及SQL语句有点问题导致,优化了SQL语句,把Union转为Union All 加上Distinct去除重复数据,将慢查询从4秒降到了3秒以下。一般推荐第一个方案,因为MySql自带的慢查询日志对MySql性能有一定的影响,而且Arthas可以监听到很多,比如JVM内存情况等,不只是适用于这里,有兴趣的自己看链接学习一下。不需要回表查询,也就是索引本身就是主键索引,直接根据主键找到对应的数据即可,走一次b+树。

2024-10-13 15:05:12 779

原创 JAVA微服务之网关(GateWay)学习

加入一个注解:@ConditionalOnclass(DispatchherService.class)MVC的核心类,有这个类就启动配置,没有就不启动,解决问题。从商城服务到购物车服务,商城服务的User信息是从网关得到的,因此可以从UserContext上下文取到,然后通过OpenFeign的中这个拦截器来进行请求头的添加,实现了用户信息的传递。解法:配置管理服务,例如Apllo,可以实现不停机修改配置功能,黑马用的是Nacos。弄完后报错了,网关加入了common模块,但网关不能处理。

2024-10-11 18:56:07 953

原创 在虚拟机利用docker安装apollo教程

关于docker-compose的安装可以去问问一些大模型,

2024-08-10 13:57:22 667

原创 error pulling image configuration: download failed after attempts=6: dial tcp 1

docker镜像拉取失败如何解决

2024-08-08 22:26:15 395

原创 虚拟机无法连通百度,ifup ens33显示激活失败解决方法

但是我的虚拟机完全没有显示ens33,然后我就怀疑我的网卡没有启动,于是输入ifup ens33,显示激活失败。本人在之前虚拟机都能够正常连接,今天在使用MobaXterm连接虚拟机时,一直显示连接超时,于是开启了上网风暴。首先我在虚拟机中输入了ifconfig,正常应该显示如下。在进行了这个尝试之后变成个激活了网络接口。如果还解决不了请参考这位博主的。

2024-07-31 21:46:46 555

原创 mybatisplus在springboot3的引用

今天在学习mybatisplus的时候,明明都是跟着步骤在走的,结果测试一直报错,显示无法找到bean,在mapper接口上已经添加了@Mapper,后面在启动类上添加了@MapperScan依然出错,猜测可能是jar包依赖这些问题。然后去黑马视频里发现,springboot3要使用别的jar包才能够正常运行。这也提醒了我以后要多多看官方文档,之前一直偷懒直接下载了资料就导进去,报应了。两个jar包依赖都在这了,需要的小伙伴自取。以下是官方文档的解释。

2024-05-22 19:38:36 485 1

原创 springboot中使用Thyleaf无法访问到页面,使用postman出现500

今天由于需要进行项目开发,时间比较赶,直接前后端不分离开发。使用Thyleaf进行渲染内容出现问题,在导入相关的两个依赖后,运行后无法访问,不知道是哪两个依赖的可以参考一下以下这个链接。后来通过查找资料发现,问题是没有设置Thyleaf模板解析配置器。创建一个配置类,在其中加上模板解析器即可成功访问到页面资源。至此实现了成功访问到经过Thyleaf渲染的页面。我在跟着操作完后出现了页面拒绝访问的问题。这个垃圾问题花了我3小时的时间。

2024-05-16 00:15:23 449 1

空空如也

空空如也

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

TA关注的人

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