自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 CAS原理的详细解析以及使用案例

CAS通过硬件支持的原子指令实现无锁并发,是构建高性能并发框架(如JUC包)的基石。开发者需权衡其优缺点,结合具体场景选择CAS或锁机制,并注意解决ABA问题及优化自旋策略。通过合理应用,CAS能显著提升多线程程序的执行效率。

2025-05-02 08:35:56 702

原创 零拷贝技术原理的详细解析与java实战方案

零拷贝通过减少数据在用户空间和内核空间的冗余拷贝,结合 DMA 和操作系统特性,显著提升了 I/O 性能。利用sendfile()或mmap()绕过用户空间。依赖 DMA 硬件加速数据传输。通过 Scatter/Gather DMA 彻底消除 CPU 拷贝。

2025-04-26 11:37:14 854

原创 Netty前置基础知识之BIO、NIO以及AIO理论详细解析和实战案例

Netty 是一个基于 Java 的 ​高性能异步事件驱动网络应用框架,主要用于快速开发可维护的协议服务器和客户端。它简化了网络编程的复杂性,特别适合构建需要处理海量并发连接、低延迟和高吞吐量的分布式系统。1)Netty 是由JBOSS提供的一个 Java开源框架,现为 Github上的独立项目。2)Netty 是一个异步的、基于事件驱动的网络应用框架,用以快速开发高性能、高可靠性的网络 IO程序。

2025-04-21 21:04:24 1050 1

原创 Redis高级篇之I/O多路复用的引入解析

这种设计在高并发、低延迟场景(如 Redis、Nginx)中表现尤为突出,成为现代高性能服务器的基石。通过这种设计,Redis 在单线程中轻松支持数万甚至数十万的并发连接,成为高性能内存数据库的标杆。以下是关键源码模块的分析,结合 Redis 6.0 源码(代码片段已简化)。,解决了传统阻塞 I/O 和多线程模型的根本性缺陷。当监听 Socket(如 6379 端口)有新的连接到达时,触发读事件,执行。Redis 的 I/O 多路复用实现是其高性能的核心设计之一,源码中通过。

2025-04-20 12:53:57 1100

原创 java虚拟机之ZGC垃圾收集器的详细剖析

ZGC(Z Garbage Collector)是 Oracle 为 Java 虚拟机(JVM)设计的一款低延迟垃圾收集器,它的提出主要为了解决传统垃圾收集器在大内存、高并发场景下的 停顿时间(STW, Stop-The-World)过长 和 扩展性不足 的问题。ZGC 通过创新的并发算法和内存管理技术,为现代 Java 应用提供了近乎无感知的垃圾收集体验,是大内存、低延迟场景的理想选择。,能够将垃圾收集的停顿时间(STW, Stop-The-World)控制在。Java 虚拟机(JVM)的。

2025-04-20 10:41:22 954

原创 关于系统架构思考,如何设计实现系统的高可用?

系统高可用为了保持业务连续性保障,以及停机成本量化,比如在以前的双十一当天如果出现宕机,那将会损失多少钱?当然也有成功的案例,比如异地多活架构支撑双十一56万笔/秒交易;混合云架构应对春运1400亿次日访问量等。为了实现系统的高可用性和接口响应速度的成倍提升,需要从架构设计、技术选型和运维策略等多维度综合优化。实际落地需结合业务特点进行定制化调整,建议通过A/B测试验证优化效果,逐步推进架构演进。阶段一:服务化改造(3个月)阶段二:性能攻坚(6个月)阶段三:智能运维(持续)表1 存储介质特性对比。

2025-04-16 23:58:20 1048

原创 StructuredTaskScope实现原理刨析。

类名行为特性基础实现,需自定义结果处理逻辑任一子任务失败则取消其他任务获取第一个成功结果后取消其他任务。

2025-03-27 21:41:44 1086

原创 Java19虚拟线程原理详细透析以及企业级使用案例。

虚拟线程是Java 19引入的一个新特性,属于Project Loom的一部分。虚拟线程跟我之前写过的协程的原理是一样的,据说java虚拟线程比GO的多线程还有好用,所以做下此篇,以便以后使用以及了解它的原理。虚拟线程由JVM进行管理,而不是操作系统的内核。这样的话,虚拟线程的创建和切换成本会低很多,可以支持百万级别的并发线程。比如,每个虚拟线程可能被映射到少量的平台线程上,由JVM负责调度它们在这些平台线程上执行,这样就不会阻塞操作系统线程,可以更高效地利用资源。

2025-03-23 14:52:29 1208 1

原创 享元模式的原理的详细解析以及使用案例。

享元模式的核心是共享细粒度对象,以减少内存使用和对象创建的开销。这和对象池有相似之处,但享元更侧重于共享内在状态,而将可变部分作为外部状态传递。关键点包括内在状态和外在状态的区分,工厂类管理共享对象,以及如何实现对象的复用。享元模式可以作为另一种工具,特别是在处理大量相似对象时。比如,游戏中大量重复的棋子类型,或者文档中的字符对象,这些场景下享元模式非常适用。需要注意的是,享元模式适用于对象的大部分状态可以外部化的情况。如果对象的状态经常变化,可能不适合使用享元。

2025-03-22 16:41:08 689 2

原创 java开发接口中,响应速度率成倍数提高的方法与策略

本片结合之前学过的内容,对实际开发中进行哪些应用,以及如何应用,以提高后端开发中怎么成倍提高接口的响应速度。本文设计到数据库的优化以及代码级别的优化、架构设计的优化、缓存策略、以及数据库优化,JVM调优等综合在Java接口开发中,提升响应速度需要从代码优化、架构设计、资源利用等多方面入手。优化需遵循“测量-分析-改进”循环,优先解决瓶颈最大的环节。建议从代码和数据库入手,逐步引入缓存和异步化,最后考虑架构扩展。同时需权衡优化成本,避免过度设计。

2025-03-22 15:23:48 857

原创 最近嵌入式特别火,已经做了java后端开发的程序员是否要转行。

本片文章不涉及到技术,是否要从java后端转到嵌入式开发的问题,以及分析行业现状。首先嵌入式之所以火的原因之一可能是java门槛变得越来越难找工作了,而且面试要求也很高。就以本人为例之前面试了一家制造业大公司,面试时长大概有一个小时左右,最终依然没有通过,我也纳闷的很,可能是市场上不缺像我这样的人吧。一时之间也想过学习转到嵌入式,但是冷静想想以后会发现,嵌入式会不会像之前java一样,也要面临“物多不值钱”的情况。但是嵌入式发展以后也会面临简易化开发,入门门槛越来越低,到时候会不会像现在的java一样。

2025-03-16 20:18:32 911

原创 tcp/ip三次握手和四次挥手原理详细解析

TCP/IP三次握手和四次挥手是可靠连接的重要保证,整个过程控制信息发生那些变化,将在本文做详细的介绍。首先,三次握手是建立连接的关键步骤,而四次挥手则是关闭连接的过程。需要分别解释每个阶段客户端和服务器端的状态变化,以及他们发送的报文段中的各个标志位和序列号的变化。先从三次握手开始。第一次握手是客户端发送SYN报文,SYN标志位设为1,序列号是一个随机数,比如x。这时候客户端进入SYN_SENT状态。

2025-03-16 14:49:38 1281

原创 GET请求、POST请求的区别

本篇文章我们应该从用途、参数传递方式、安全性、缓存、幂等性等方面进行对比。不过,用户可能还关心实际应用中的使用场景,比如什么时候用GET,什么时候用POST。GET请求的参数是在URL中,而POST在请求体中,这是基本点。安全性方面,虽然POST不会在URL中显示参数,但如果不使用HTTPS,数据仍然可能被拦截,所以不能绝对说POST更安全,只能说相对好一点。缓存方面,GET可以被缓存,POST一般不会,但实际应用中可以通过设置头信息来改变这些行为,不过默认情况下确实如此。

2025-03-10 23:49:25 1214

原创 TCP/IP原理详细解析

面向有连接型面向有连接型中,在发送数据之前,需要在收发主机之间连接一条通信线路。举个例子就是,人们平常打电话,输入完对方电话号码拨出之后,只有对端拿起电话才能真正通48话,通话结束后将电话机扣上就如同切断电源。因此在面向有连接的方式下,必须在通信传输前后,专门进行建立和断开连接的处理。如果与对端之间无法通信,就可以避免发送无谓的数据。面向无连接型面向无连接型则不要求建立和断开连接。发送端可于任何时候自由发送数据(面向无链接型采用分组交换(1.7.2)的情况要多一些。此时,可以直接将数据理解为分组数据

2025-03-10 23:32:18 2333 3

原创 通俗易懂的总结一下操作系统原理

操作系统的核心原理是管理计算机硬件资源,并为用户和应用程序提供高效、安全、易用的抽象接口。其核心机制可概括为以下几个章节概括。1. 核心功能:资源管理CPU管理:通过进程调度算法(如轮转调度、优先级调度)分配CPU时间片,实现多任务并行。内存管理:通过虚拟内存、分页/分段机制,隔离进程内存空间,解决物理内存不足问题。存储管理:管理磁盘空间(文件系统)、缓存机制(如磁盘I/O调度),优化数据读写效率。设备管理:通过设备驱动程序和中断机制,控制外设(如打印机、网卡)的访问与共享。

2025-03-09 11:43:31 733

原创 从源码上分析,CompletableFuture如何实现链式调用。

链式调用应该指的是多个CompletionStage方法的连续调用,比如thenApply、thenAccept等。本文将从源码的角度看这些方法的实现,比如它们是如何创建新的CompletableFuture,如何将回调函数封装成内部的Completion对象,以及这些Completion对象是如何被触发执行的。首先,们我应该考虑CompletableFuture中的每个链式方法,比如thenApply,会返回一个新的CompletableFuture实例。

2025-03-09 11:35:52 1039

原创 kafka消息中间件的rebalance机制

首先,要了解一下Kafka的基本概念,比如消费者组(Consumer Group)、分区(Partition)以及消费者如何订阅主题。Rebalance发生在消费者加入或退出消费者组的时候,比如新的消费者加入或者现有的消费者崩溃了。这时候,Kafka需要重新分配分区给各个消费者,确保每个分区只被一个消费者消费,这个过程就是Rebalance。其次,明确Rebalance的触发条件。

2025-03-08 22:24:51 1284

原创 RocketMQ提供了哪些过滤机制?

本篇文章比较简单,分别介绍RocketMQ支持几种过滤机制,其原理和使用。RocketMQ 提供了多种消息过滤机制,帮根据业务需求高效筛选消息,可以减少不必要的消息传输和处理。

2025-03-08 22:08:41 736

原创 主动推送数据到前端的SSE技术原理以及如何使用

首先,SSE全称是Server-Sent Events,是一种服务器向客户端单向推送数据的技术。它基于HTTP协议,使用长连接,允许服务器主动发送消息到浏览器。相比WebSocket,SSE更简单,但只支持单向通信,适合服务器向客户端推送实时数据的场景,比如实时通知、股票行情等。Spring MVC提供了对SSE的支持,主要是通过SseEmitter类。需要创建一个Controller,返回SseEmitter对象,然后通过这个对象发送数据。

2025-03-04 21:54:55 1273

原创 CompletableFuture原理详细解析以及使用案例。

CompletableFuture的核心机制。记得它是Java 8引入的,实现了CompletionStage和Future接口。原理部分需要涵盖它的异步执行、任务编排、依赖管理、回调链、线程池使用等。可能还要提到它内部使用的CAS和volatile来保证线程安全,以及如何避免回调地狱。使用案例部分要覆盖常见的场景,比如创建异步任务、链式处理、组合多个Future、异常处理、超时控制等。

2025-03-04 21:38:04 1125

原创 volatile的底层实现

volatile主要有两个作用:保证可见性和禁止指令重排序。可见性是指当一个线程修改了volatile变量的值,其他线程能立即看到这个修改。禁止重排序是为了避免编译器和处理器对指令的优化导致执行顺序改变,从而引发多线程环境下的问题。如果读者已经知道volatile的基本用法,现在想更深入了解其底层机制。可能是一位Java开发者,正在准备面试,或者在学习多线程编程时遇到了疑问。JVM如何实现volatile的功能,比如内存屏障、缓存一致性协议等,做详细解释。然后,我们要确定回答的结构。

2025-02-25 12:10:41 1269

原创 协程的基本实现原理详解以及在java中的使用

接下来是Java中的协程实现。JDK 17引入了虚拟线程(Fiber),属于用户态线程,由JVM管理。本文将深度讨论了第三方库如Quasar,Quasar通过字节码增强实现协程,使用Fiber类。并涉及到Kilim等库也是通过字节码生成实现的,以及Kotlin协程的代码示例,通过suspend函数和CoroutineScope管理。详细讲解了NtyCo库的实现,包括上下文切换和调度器。需要注意,Java原生支持从JDK 17开始,而之前主要依赖第三方库。要分点说明实现原理和使用方式。

2025-02-25 11:27:28 1194

原创 ThreadLocal原理详解以及使用。

本文将带你了解ThreadLocal的内部机制,比如如何实现线程隔离,以及在实际开发中的正确使用方式。他们可能遇到了内存泄漏的问题,或者不知道如何安全地使用ThreadLocal。需要详细解释ThreadLocal的原理,包括它的数据结构,如每个线程的ThreadLocalMap,以及键值对的存储方式。以及ThreadLocal在Spring中的使用案例。还要强调ThreadLocal的内存泄漏风险,特别是为什么使用弱引用,以及为什么仍然需要手动remove。

2025-02-25 11:01:59 1061

原创 Future和FutureTask实现类详解以及使用。

Future是Java并发编程中的一个接口,用来表示异步计算的结果。它允许我们提交一个任务,然后之后再去获取结果,或者在结果可用时处理它。我们需要考虑Future的主要方法。根据文档,Future接口有几个关键方法:isDone()检查计算是否完成,get()获取结果(会阻塞直到完成),cancel()尝试取消任务,isCancelled()判断是否被取消。这些方法的作用和用法需要详细说明。然后是Future的实现类。

2025-02-23 20:55:06 1337

原创 如何第三方工具实现对SpringBoot塔建的项目进行接口超时监控?

为了实现Spring Boot项目的接口超时监控并触发邮件告警,以下是一些常用的第三方工具和解决方案,可根据项目规模和需求灵活选择。

2025-02-23 08:47:57 816

原创 Elasticsearch除了用作查找以外,还能可以做什么?

比如日志分析、实时监控、安全分析、业务智能、推荐系统、物联网数据处理、数据可视化等。还要引用多个网页的资料来源,比如日志分析在网页2、3、4、6、7都有提到,所以引用的时候要标上多个编号。网页4的Top5应用场景包括日志分析、公共数据采集、全文搜索、事件数据、数据可视化。网页6列举了企业搜索、日志管理、应用监控、业务分析、安全监控、物联网应用。网页7提到处理日志数据、安全分析、机器学习集成。,使其突破传统搜索引擎的局限,广泛应用于日志分析、实时监控、安全防护、业务智能等领域。

2025-02-22 20:08:22 1443

原创 MySQL高级篇之锁

锁这个概念并不是MySQL数据库专有的,而是在多线程执行下,为了保证数据的正确性提出的。其中MySQL事务的隔离性是由锁来实现的。在数据库中,除传统的计算资源(如CPU、RAM、I/O等)的争用以外,数据也是一种供许多用户共享的资源。为保证数据的一致性,需要对并发操作进行控制,因此产生了锁。同时,锁机制也为实现MSQL的各个隔离级别提供了保证。锁冲突也是影响数据库并发访问性能的一个重要因素。所以锁对数据库而言显得尤其重要,也更加复杂。

2025-02-22 19:05:04 1124

原创 Spring使用三级缓存解决循环依赖的源码分析。

本文将通过源码去解析,Spring为什么使用三级缓存机制去解决循环依赖,能够读懂本文 的基础是Spring生命周期和对三级缓存有基本的 认知才能理解更加深刻。还不了解Spring生命周期的源码和三级缓存的基本原理的话,可查看本文之前写过的两篇文章。Spring管理Bean生命周期源码分析。Spring为什么要用三级缓存解决循环依赖?首先,我们需要回忆Spring处理循环依赖的三级缓存机制。

2025-02-22 14:32:05 1444

原创 RocketMQ消息消费采取推模式还是拉模式?

RocketMQ的设计哲学是以拉模式为基础,通过长轮询优化实现类似推模式的体验。这种折中方案既避免了服务端推送可能导致的消费者过载,又降低了纯拉模式的高延迟问题,兼顾了灵活性和实时性。

2025-02-22 13:28:13 1176

原创 Redis高级篇之布隆过滤器

首先,布隆过滤器应该是一个数据结构,用来高效地检查一个元素是否在集合里。不过,和普通的数据结构比如哈希表不同,布隆过滤器可能不会存储实际的数据,而是用某种方式记录下来是否存在。这样的话,它的空间效率应该很高,但可能会有一定的误判率。我记得布隆过滤器有几个关键点,比如使用多个哈希函数和位数组。具体来说,当添加一个元素到布隆过滤器时,会用多个不同的哈希函数对这个元素进行哈希,得到多个不同的位置,然后在位数组中将这几个位置设为1。查询的时候,同样用这些哈希函数算出位置,如果所有位置都是1,就认为元素可能存在;如果

2025-02-21 00:38:48 1279

原创 MySQL数据库连接池爆满如何排查?

比如,如果应用配置了100个连接,而MySQL的max_connections是150,但如果有多个应用实例,每个都配置100,那总数就会超过,导致问题。比如,除了代码层面的连接泄漏,还可能存在网络问题导致连接无法正常关闭,或者连接池本身的bug。可能还需要检查是否有连接池的验证配置,比如在连接取出时检查是否有效,避免使用已经失效的连接,导致不断创建新连接。连接池是应用程序用来管理和复用数据库连接的一种机制,当连接池中的连接都被占用且没有及时释放时,新的请求就无法获取连接,导致错误或者性能下降。

2025-02-21 00:24:39 1178

原创 SpringBoot自动配置过程中的注册配置类的源码

的设计思想,自动加载和注册所需的配置类。Spring Boot 的自动配置是其核心特性之一,通过。以下从源码角度详细分析自动配置过程中注册配置类的关键步骤。

2025-02-20 21:45:29 827

原创 RocketMQ事务消息是如何实现的?

首先,事务消息的大致流程应该是这样的:生产者发送一个半消息(Half Message)到Broker,Broker会将这个消息标记为“暂时不可见”,也就是对消费者不可见。之前写过相关的RocketMQ文章,其中涉及的到Rocket如何解决消息丢失问题,而文章中给出的是,在生产者进行优化是:同步发送+重试+事务消息。另外,事务消息的实现可能涉及两阶段提交(2PC)的思想,但RocketMQ并没有完全实现标准的2PC,而是通过异步检查和重试机制来简化流程,提高性能。确保消息发送与本地事务的最终一致性。

2025-02-20 21:09:15 1194

原创 MySQL执行计划Explain如何分析 SQL语句?

之前写过相关的执行计划分析语句,但是内容是五年前写的,马马虎虎的,观感极差。所以这篇是弥补五年前的马虎而做。首先,执行计划的用法是在查找语句前使用EXPLAIN 关键字,执行完以后会返回一个表格,其中表格的字段有id、select_type、table、partitions、type、possible_keys、key、key_len、ref、rows、filtered、Extra等。每个列都有不同的含义,需要逐一理解。id:表示查询中执行select子句或操作表的顺序。id相同,执行顺序由上至下;

2025-02-20 08:11:09 1393

原创 MySQL存储引擎InnoDB的多版本并发控制的详细解析

InnoDB 的多版本并发控制(MVCC, Multi-Version Concurrency Control)是支撑其高并发事务的核心机制,它通过保存数据的多个版本来实现非阻塞的读操作,同时保证事务的隔离性。以下章节是 MVCC 的详细解析。另外,对幻读现象及其在MVCC中的处理,需要解释清楚在可重复读隔离级别下,MVCC如何部分解决幻读,但为什么在某些情况下依然可能出现,以及如何通过间隙锁来避免。)是支撑其高并发事务的核心机制,它通过保存数据的多个版本来实现非阻塞的读操作,同时保证事务的隔离性。

2025-02-20 00:24:28 1198

原创 RocketMQ消息是如何储存的?

之前有写过关于kafka的存储结构的文章。RocketMQ大部分是借鉴了Kafka的设计原理,但是副本集群机制和存储结构有些差异。看完本篇文章可以看看这篇。消息中间件之kafkaRocketMQ 的消息存储机制是其高吞吐、高可用和高可靠性的关键。以下将介绍 RocketMQ 消息存储的核心机制RocketMQ 通过 CommitLog 顺序写入、ConsumeQueue 索引、IndexFile 查询等机制实现高效的消息存储和检索,并通过同步/异步刷盘、主从复制等技术保证高可用性和可靠性。

2025-02-19 21:41:44 569

原创 MySQL六大日志的功能介绍。

首先,MySQL的日志应该包括二进制日志(Binary Log)、错误日志(Error Log)、查询日志(General Query Log)、慢查询日志(Slow Query Log)、重做日志(Redo Log)和回滚日志(Undo Log)。另外,事务的ACID特性中,持久性(Durability)是通过重做日志来保证的,原子性(Atomicity)是通过回滚日志实现的。此外,在并发事务中,当其他事务需要读取数据的历史版本时,Undo Log提供旧版本的数据,从而实现一致性读。

2025-02-19 16:42:55 629

原创 java多线程编程,线程池的参数如何合理配置。

Java多线程编程中线程池参数如何合理配置以保持高效性能。首先,我需要回忆线程池的关键参数,包括核心线程数、最大线程数、队列类型及容量、线程存活时间、拒绝策略等。用户可能想知道如何根据不同的应用场景调整这些参数,以达到最优性能。关于线程池参数的配置,需要考虑到不同的任务类型,比如IO密集型或CPU密集型,因为这对线程数的配置有很大影响。对于核心线程数,如果是CPU密集型任务,通常设置为CPU核心数+1,而IO密集型可能需要更多的线程,因为线程大部分时间在等待IO。

2025-02-19 10:29:52 1667

原创 责任链模式原理详解和源码实例以及Spring AOP拦截器链的执行源码如何使用责任链模式?

自定义拦截器示例@OverrideSystem.out.println("方法调用前: " + invocation.getMethod().getName());// 继续链System.out.println("方法调用后: " + invocation.getMethod().getName());责任链模式核心:解耦请求发送者与处理者,允许多个对象按链式处理请求。Spring AOP 实现:通过管理拦截器链,每个按责任链模式依次执行。优势:灵活扩展、职责分离、动态流程控制。应用场景。

2025-02-19 10:11:15 1288 2

原创 观察者模式原理详解以及Spring源码如何使用观察者模式?

观察者模式核心:解耦主题与观察者,通过事件通知机制实现松耦合通信。Spring 实现:基于和构建事件驱动模型。应用场景业务流程解耦(如订单创建后发送通知、记录日志)。系统生命周期管理(如容器启动后加载缓存)。异步任务触发(如消息队列事件处理)。源码设计亮点事件类型匹配:通过动态解析事件类型,支持泛型事件。灵活广播策略支持同步/异步事件分发。注解驱动简化和@Async简化监听器定义与异步配置。

2025-02-19 00:16:37 1346

carIdenfy.py

carIdenfy.py

2022-12-13

空空如也

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

TA关注的人

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