自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 【并发编程】一文带你彻底搞懂Java线程池

以方案一为例,自定义拒绝策略,将线程池中无法处理的任务入库,然后实现一个混合式阻塞队列,取任务时,优先从数据库中读取最早的任务,数据库中无任务时再去阻塞队列中取任务。默认不会,为减少线程创建的开销,核心线程通常需要长期保持活跃。但是,如果线程池是被用于周期性使用的场景,且频率不高,可以考虑设置核心线程超时机制。:启动一个线程,等待任务,如果已达到核心线程数,这个方法返回 false,否则返回 true;线程池在提交任务前,可以提前创建线程,实现线程池预热。:启动所有的核心线程,并返回启动成功的核心线程数。

2025-11-23 19:46:02 1047

原创 程序上线后如何进行错误排查?错误排查完整思路

编写问题分析报告,总结经验。

2025-11-22 09:41:49 542

原创 【计算机网络】从输入网址到页面显示的过程是怎样的?深入解析HTTP请求到响应详细流程

服务器接收到请求后会响应一个HTTP报文,浏览器收到 HTTP 响应报文后,解析响应体中的 HTML 代码,渲染网页的结构和样式,同时根据 HTML 中的其他资源的 URL(如图片、CSS、JS 等),再次发起 HTTP 请求,获取这些资源的内容,直到网页完全加载显示。如果HTTP请求消息较长,在建立TCP连接之后,TCP就需要把HTTP请求分割成多份,之后给每一份数据加上。TCP连接建立后,会生成TCP头部,并给每个分割的数据加上TCP头部,形成TCP数据段。,并通过连接发送给服务器,请求获取网页内容。

2025-11-22 08:00:00 987

原创 synchronized的工作机制是怎样的?深入解析synchronized底层原理

临界资源:一次只允许一个线程使用的资源临界区:访问临界资源的代码块竞态条件:多个线程在临界区执行,由于代码的执行序列不同导致结果无法预测如何避免竞态条件发生阻塞式的解决方案:synchronized,lock非阻塞式的解决方案:原子变量。

2025-11-21 23:00:32 1369 1

原创 【后端开发笔记】JVM底层原理-类加载

初始化阶段才真正开始执行类中定义的 Java 程序代码,在准备阶段,类变量已经赋过一次系统要求的初始值;在初始化阶段,通过程序制定的计划去初始化类变量和其它资源,执行在编译生成 class 文件时,编译器会产生两个方法加于 class 文件中,一个是类的初始化方法 clinit,另一个是实例的初始化方法 init类构造器 () 与实例构造器 () 不同,它不需要程序员进行显式调用,在一个类的生命周期中,类构造器最多被虚拟机调用一次,而实例构造器则会被虚拟机调用多次,只要程序员创建对象。

2025-11-21 22:55:02 1184

原创 【MySQL】SQL慢查询如何排查?从慢查询排查到最终优化完整流程

使用某个字段中字符串的前几个字符建立索引,这是为了减小索引字段的大小,可以增加一个索引页中存储的索引值,有效提高索引的查询速度。慢查询并不是凭借感觉判断的,而是有明确指标的,MySQL默认执行超过10s的SQL叫慢查询,但实际生产一般会调到1s以下,甚至是300ms,当某条SQL执行时间超过阈值,则会被记录到日志当中,这个日志就是慢查询日志。,那么每次插入新数据时,就有可能需要移动其他数据来满足新数据的插入,甚至需要从一个页面复制数据到另一个页面,也就是。执行时间为1s,大于慢查询时间0.5s。

2025-11-21 22:46:58 1166

原创 【计算机网络】HTTP/3如何实现可靠传输?

为了深刻理解 QUIC 的做法,我们最好先回顾一下 HTTP/1.1 和 HTTP/2 的处境,因为它们都基于 TCP。

2025-11-20 14:09:59 830

原创 【后端开发笔记】JVM底层原理-垃圾回收篇

卡表(Card Table)在老年代中,是一种对记忆集的具体实现,主要定义了记忆集的记录精度、与堆内存的映射关系等,卡表中的每一个元素都对应着一块特定大小的内存块,这个内存块称之为卡页(card page),当存在跨代引用时,会将卡页标记为 dirty,JVM 对于卡页的维护也是通过写屏障的方式。内部类持有外部类的情况,如果一个外部类的实例对象调用方法返回了一个内部类的实例对象,即使那个外部类实例对象不再被使用,但由于内部类持有外部类的实例对象,这个外部类对象也不会被回收,造成内存泄漏。

2025-11-18 16:04:06 1258

原创 【保姆级教学】快速排序代码及细节解析(多语言版本)

快速排序(Quick Sort)是一种高效的排序算法,由英国计算机科学家 Tony Hoare 在 1960 年提出。它采用了分治策略,平均时间复杂度为 O(n log n),在实际应用中表现优异,同时也是各大互联网企业考核面试者代码能力是否扎实的高频考点。

2025-11-17 13:37:44 256

原创 NAT协议工作原理

NAT 是将 IP 数据报报头中的 IP 地址转换为另一个 IP 地址的过程,主要用于内部网到外部网转换的过程中。具体来讲,在一个子网(局域网,LAN)内,各主机使用的是同一个LAN下的IP,但在广域网(WAN)中,需要一个统一的IP标识该LAN在整个互联网中的位置。,任何组织都可以使用私网地址在其内部进行组网,通过这种方式实现IP地址的复用,除此之外的公网地址则是全球唯一的。,并将修改后的IP和端口号形成映射关系,在返回包中,根据目标端口号的映射关系,就可以区分出是哪个主机的包了。

2025-11-17 09:34:43 180

原创 TCP如何保证可靠传输

确认消息在传输过程中延迟了。,发送方接收到这三个重复确认后,就会立即重传第三个报文段,接收方接收到重传的报文段之后,会发送第六个报文段的确认报文,表示这六个报文段都接收到了,进而实现快速重传,避免因为误认为出现拥塞而错误降低拥塞窗口值。如图,假设发送方发送的前两个报文段都被接收方按时接收到,但第三个报文段丢失,那么发送方继续发送的接下来的三个报文段被接收方接收到之后,会接收到接受方返回的三个。因为双方在通信的时候,发送方的速率与接收方的速率是不一定相等,如果发送方的发送速率太快,会导致接收方处理不过来。

2025-11-17 09:34:26 820

原创 深入解析ARP协议工作原理

主机 A 未能找到目标路由器的本子网接口的 MAC 地址,将采用 ARP 协议,问询到该 MAC 地址,由于目标接口与主机 A 在同一个子网内,该过程与同一局域网内的 MAC 寻址相同。目标主机接收到了问询主机构造的问询报文后,将先把问询主机的 IP-MAC 映射存进自己的 ARP 表中,这样才能获取到响应的目标 MAC 地址,顺利的发送响应分组。主机A将构造的查询分组广播到局域网中,局域网中的每个设备都会收到该分组,并检查分组中接收方的IP地址是否是自己的IP地址,如果是,则表示查询到主机B,否则丢弃。

2025-11-16 01:13:05 721

原创 Websocket、HTTP/2、HTTP/3原理解析

因为他们都是一个独立的流,TCP层看到的只是一个连接的字节流,而HTTP/2层则能将这些字节流根据流ID重新映射到不同的请求和响应,解决对头阻塞问题。的对头阻塞问题,但TCP层面中的对头阻塞问题仍然存在,HTTP/3则彻底解决了TCP层面的队头阻塞问题,并进一步优化连接建立和传输效率,HTTP/3最大的变化就是放弃TCP,转而基于UDP协议之上的QUIC协议。为应对HTTP/1.1的对头阻塞问题以及性能优化,HTTP/2针对其TCP连接增加了多路复用的功能,实现了在一个TCP连接上进行并行传输的功能。

2025-11-16 01:12:57 768

原创 深入解析HTTP长连接原理

讲解长连接前,需要先了解短链接的原理,以及存在的问题。

2025-11-15 15:40:57 655

原创 TCP如何实现流量控制

因为双方在通信的时候,发送方的速率与接收方的速率是不一定相等,如果发送方的发送速率太快,会导致接收方处理不过来。接收方会把处理不过来的数据存在,如果缓冲区满了发送方还在发送,接收方就会把溢出的数据丢失掉,出现问题,同时又浪费网络资源,因此需要控制发送方的发送速率,让接收方和发送方处于一种动态平衡最好。TCP利用实现流量控制,流量控制是,保证接收方来得及接收。接收方通过中的字段用来控制发送方窗口大小,从而影响发送方的发送效率,当窗口字段设置为0,则发送方不能发送数据。

2025-11-15 12:34:10 569

原创 进程间通信方式有哪些

进程间的通信方式主要有:管道消息队列共享内存信号Socket。

2025-11-14 15:11:52 374

原创 Redis宕机恢复流程

会定期对所有主从节点进行PING/PONG通信,当一个节点在一定时间内没有与另一个节点通信,就会被标记为故障,当大多数。:若原主节点宕机时间太久,需要的数据已不在复制积压缓冲区,新主节点会为自己当前的数据创建一个。,并更新集群配置信息,向整个集群广播自己成为新的主节点,整个过程会有短暂的中断。后,从节点开始竞选新的主节点,成为新的主节点后,会接管原主节点负责的所有。中还有原主节点断开期间的所有数据,新主节点就会将这段数据发送给原主节点。,从节点负责复制主节点数据,用于。,并在主节点故障时取代主节点。

2025-11-14 15:09:05 183

原创 Redis执行Lua脚本失败时数据保留情况分析

在Lua脚本中调用未定义的函数是另一种常见的运行时错误。这通常发生在开发者拼错了函数名,或者试图调用一个在当前Lua环境中不存在的库函数。Redis为Lua脚本提供了一个受限的执行环境,其中只包含Lua标准库的一部分(如stringtablemath等),并且禁用了可能带来安全风险的函数(如文件I/O、网络访问等)。如果脚本试图调用一个被禁用的函数,或者一个完全拼错的函数名,Lua解释器在执行到该调用时就会报错。例如,如果开发者想调用函数,但不小心写成了,当脚本执行到这行代码时,就会因为是nil而抛出错误。

2025-11-09 13:45:06 1009

原创 JVM垃圾回收时是如何判断垃圾对象的?

作用:释放没用的对象,清除内存里的记录碎片,碎片整理将所占用的堆内存移到堆的一端,以便 JVM 将整理出的内存分配给新的对象垃圾收集主要是针对和进行,程序计数器、虚拟机栈和本地方法栈这三个区域属于线程私有的,,线程结束之后就会消失,因此不需要对这三个区域进行垃圾回收在堆里存放着几乎所有的 Java 对象实例,在,首先需要区分出内存中哪些是存活对象,哪些是已经死亡的对象。和。

2025-11-08 10:19:35 715

原创 Redis的持久化是怎么实现的?

Redis的持久化主要是通过和实现的。

2025-11-08 10:10:35 558

原创 TCP和UDP的区别?HTTP和HTTPS的区别?GET和POST的区别?

每次请求都需要建立新的 TCP 连接, 请求结束后连接会关闭。客户端直接发送 HTTP 请求给服务器, 如果服务器可用, 就返回 HTTP 响应, 过程简单快速。: 服务端在接收到客户端的请求后,如果同意连接,服务端会向客户端发送一个SYN+ACK报文段,表示同意建立连接。: 客户端接收到服务端的响应,最后发送一个ACK响应,表示连接建立完成。发送 FIN 包,表示数据发送完毕,请求关闭连接。也发送 FIN 包,表示自己的数据也发送完毕。证书包含服务器的公钥。:发送和接收的数据都是以原始文本的形式传输。

2025-11-07 09:20:44 781

原创 从输入URL到网页显示的过程是怎么样的?

服务器接收到请求后会响应一个HTTP报文,浏览器收到 HTTP 响应报文后,解析响应体中的 HTML 代码,渲染网页的结构和样式,同时根据 HTML 中的其他资源的 URL(如图片、CSS、JS 等),再次发起 HTTP 请求,获取这些资源的内容,直到网页完全加载显示。:浏览器验证证书的合法性(是否过期,是否由可信机构颁发,域名是否匹配)。服务器收到 HTTP 请求报文后,处理请求,并返回 HTTP 响应报文给浏览器。:服务器收到后,回复一个 SYN-ACK 包,表示同意建立连接。

2025-11-06 18:40:54 241

原创 RocketMQ如何实现高效读写?

顺序读写+异步构建+内存映射+零拷贝+灵活的刷盘策略。

2025-11-06 18:37:03 349

原创 更新数据时,删除缓存失败了怎么办?

无论是先更新数据库,再更新缓存;还是先更新缓存,再更新数据库,都无法解决。先更新数据库,再删除缓存先删除缓存,再更新数据库,所以。难点:更新数据库和删除缓存是两个操作,如果更新数据库后,删除缓存的操作失败或丢失了,缓存中的数据依旧是旧的,要。消息队列重试机制订阅 MySQL binlog,再操作缓存。

2025-11-05 09:12:46 254

原创 分库分表如何进行数据扩容?

在迁移过程中,旧集群数据一直在被修改,迁移工具还需要记录一个Binlog位置点,全量迁移完成后,继续同步这个点之后的增量数据,知道追平。从旧的数据库集群逐个读取数据,对于每条数据,计算新的分片位置,并将数据插入到新的集群中。选择一个非核心业务或少量用户,将其流量切换到新集群,检查业务是否正常,数据是否准确。:支持新的分片,数据能按照新的分片规则写入新的基因库。关闭旧集群的双写逻辑,只写入新集群,新集群成为主集群。灰度验证无误之后,将全部流量切换到新集群,此时,编写数据校验工具,对比新旧集群的数据一致性。

2025-11-05 09:06:19 169

原创 Caffeine针对ConcurrentHashMap做了哪些改进?Window TinyLFU算法详解

Main Cache 则是一个 SLRU (Segmented LRU) ,占整个缓存内存空间大小的 99% ,是缓存的主要区域。算法使用 Count-Min Sketch 算法存储访问频率,极大地节省了空间,底层结构是一个二维数组,通过多个Hash函数计算得到缓存项在数组中的位置,当要添加数据时,在对应位置上的记录+1,,降级成为缓存项,进入到TinyLFU过滤器中,与Window Cache移出的缓存项作比较,根据TinyLFU算法确定该缓存项是。所有在同一秒内过期的条目都被放在同一个槽对应的链表中。

2025-11-04 10:50:44 1016

原创 为什么选择Caffeine作为本地缓存?Caffeine与Guava的差异有哪些?

清理过期条目时,无需遍历所有数据,只需处理当前时间格和即将到期的时间格即可,效率极高,且避免了全局锁。:当一个条目被访问时,用多个哈希函数计算其在二维数组中的位置,并对这些位置的计数器进行增量操作。当主缓存需要淘汰数据时,会比较窗口缓存中“最可能被晋升”的条目和主缓存中“频率最低”的条目。:大量的线程会阻塞在锁的获取上,导致性能急剧下降,性能开销与并发线程数呈线性关系。:用极小的、固定的空间,换取高精度估算所有条目的访问频率,内存效率高。),它就会被移动到访问队列的头部(或尾部,取决于实现),当需要。

2025-11-04 10:47:36 347

原创 广工anyview数据结构第八章2024

内容为2024年个人代码,仅供参考

2025-10-27 18:22:57 261

原创 广工anyview数据结构第七章2024

内容为2024年个人代码,仅供参考

2025-10-27 18:22:28 221

原创 广工anyview数据结构第六章2024

内容为2024年个人代码,仅供参考

2025-10-27 18:22:22 861

原创 广工anyview数据结构第五章2024

内容为2024年个人代码,仅供参考

2025-10-27 18:22:10 327

原创 广工anyview数据结构第四章2024

内容为2024年个人代码,仅供参考

2025-10-26 16:01:19 315

原创 广工anyview数据结构第三章2024

内容为2024年个人代码,仅供参考

2025-10-26 15:59:12 178

原创 广工anyview数据结构第二章2024

内容为2024年个人代码,仅供参考

2025-10-26 15:56:25 809

原创 广工anyview数据结构第一章2024

内容为2024年个人代码,仅供参考

2025-10-26 15:53:26 298

原创 RocketMQ如何保证消息的顺序性?

本文介绍了在RocketMQ中如何保证消息的顺序性。核心要点是:首先,通过自定义路由算法将需要顺序处理的消息(如同一订单)发送到同一个消息组中;其次,生产者必须串行地向该队列发送消息;最后,消费者需使用顺序监听器进行串行消费,并确保消费逻辑的健壮性与幂等性,以处理失败重试的情况。只有同时满足这三个条件,才能在整个链路上保证消息严格有序。

2025-10-26 15:43:07 302

空空如也

空空如也

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

TA关注的人

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