- 博客(613)
- 收藏
- 关注
原创 框架源码学习收藏汇总
Springsecurity过滤器和方法拦截器 https://www.processon.com/view/link/61fe51221efad479c07aa7b7WebSecurity&HttpSecurity&AuthenticationManager三大构建者 https://www.processon.com/view/link/61ffe49f6376890390cf9e28SecurityConfigurer配置类继承体系(创建HttpSecurity) https://
2022-02-27 09:35:06
681
原创 HttpAggregator源码浅析
HttpObjectAggregator源码分析:该组件继承自MessageToMessageDecoder,用于将分段的HTTP消息聚合为完整消息。核心流程包括:通过acceptInboundMessage判断消息类型(起始消息、内容消息或已聚合消息),对HttpMessage和HttpContent进行聚合处理。当收到起始消息时初始化聚合状态,后续内容消息会被追加到当前消息缓冲区,直到达到maxContentLength限制或收到结束标记。最终输出完整的FullHttpMessage对象。关键点包括类型
2025-12-19 22:40:33
596
原创 java泛型反射&mybatis的TypeParameterResolver
特性返回类型Class<?super T>Type泛型信息被擦除,只返回原始类型保留,返回完整的类型信息主要用途获取普通的父类信息在反射中获取父类的泛型参数核心处理直接使用通常需要判断和转换为简单来说,当你需要知道一个类继承的父类具体是什么泛型类型时,就应该使用。
2025-11-30 23:27:08
981
原创 method.isBridge()桥接方法
是 Java 反射 API 中的一个方法,用于判断一个方法是否是桥接方法(Bridge Method)。桥接方法是Java编译器在泛型继承或实现接口时自动生成的方法,用于保证类型安全和多态性。在泛型中,由于类型擦除,编译器需要生成桥接方法来覆盖父类或接口的方法,以确保在运行时能够正确调用到子类或实现类的方法。桥接方法是 Java 编译器在特定情况下自动生成的方法,主要用于:我们有一个泛型接口:然后有一个类实现这个接口:由于类型擦除,接口中的compareTo方法在编译后变成了compareTo(Obje
2025-11-26 23:08:32
257
原创 mybatis类型转换器
TypeHandler是MyBatis中处理Java类型与JDBC类型转换的核心接口,包含setParameter()和多个getResult()方法。BaseTypeHandler作为抽象实现类,提供了基本的参数设置和结果获取逻辑,并定义了4个抽象方法供子类实现特定类型的转换。TypeHandlerRegistry负责管理所有类型处理器,内部通过多个Map维护类型映射关系,包括jdbcTypeHandlerMap、typeHandlerMap等,并在初始化时注册内置的BooleanTypeHandler等
2025-11-02 23:35:28
319
原创 mysql数据类型
选择合适的数据类型是很重要的。如要求存储精度较高时,应选择 DOUBLE类型。如果进行数值比较,最好使用 DECIMAL类型。如果字符串是固定长度的,使用char,日期类型,就不适合字符串存储。TEXT 存储纯文本文件。BLOB主要存储图片、音频信息等。
2025-10-31 22:41:14
381
原创 mysql upsert 用法(批量保存或更新)
ON DUPLICATE KEY UPDATE是MySQL中INSERT语句的扩展功能,用于处理主键或唯一键冲突时执行更新操作而非报错。基本语法是在INSERT后添加更新子句,当冲突发生时更新指定列而非插入。该功能支持单行或多行操作,可使用VALUES()函数引用原插入值,具有原子性特点。典型应用场景包括计数器更新、数据去重、同步和缓存表维护等。示例演示了基本用法、条件更新以及返回结果分析(插入返回1,更新返回2,无变化返回0)。注意事项包括仅主键/唯一键冲突触发、自增ID计数器仍增长等。该功能简化了&qu
2025-10-29 22:18:13
413
原创 mysql的 in 用法
在这个 SQL 例子里,我们实现了查出所有状态为 0 的用户(可能是被禁止)的所有文章。当 IN 前面加上 NOT 运算符时,表示与 IN 相反的意思,即不在这些列表项内选择。mysql中IN常用于WHERE表达式中,其作用是查询某个范围内的数据。既然能单个字段in单列结果,那么多个字段就能in多列结果了。(注意:null参与任何运算的布尔值都是假)查询生效时间到当日最晚的数据。
2025-10-26 21:21:41
287
原创 spring-batch深入了解
spring batch 是 spring 提供的一个数据处理框架,其功能包括记录/跟踪,事务管理,作业统计,作业重启,跳过和资源管理等。它还提供了更高级的技术服务和功能,通过优化和分区技术实现极高容量和高性能的批处理作业。首先会对其框架所涉及到概念进行讲解,接着对其框架大体原理进行解读。是有关将任务 Step 进行拆分处理的实例,具体交由其属性成员进行处理,该类相当于是一个门面对象。看到 PartitionStep 中包含了三个关键的属性成员,具体工作是交给其成员完成的;
2025-09-28 21:55:30
922
原创 mysql字符串函数总结
中的字符串函数有计算字符串长度函数、字符串合并函数、字符串替换函数、字符串比较函数、查找指定字符串位置函数等。中由于替换长度99,超出了字符串原本长度,所以从第二个字符开始,截取后面所有的字符,并替换为指定字符。长度大于4,所以不仅不需要填充,反而需要截取至从左开始4位字符的字符串。长度大于4,所以不仅不需要填充,反而需要截取至从左开始4位字符的字符串。中出现的位置,字符串列表是一个有多个逗号分开的字符串组成的列表。假如这样,则子字符串的位置起始于字符串结尾的。,从右往左的第1位和第3位是1,所以选取。
2025-09-20 21:09:08
1007
原创 msyql日期&时间总结
有的时候我们也需要对日期之间进行运算,比如要获取今天往前7天对应的日期,或者今天往后13天对应的日期,可以去翻日历,也可以去数数,但是这些方法肯定都不是最直接的方法,所以需要日期之间的运算。注意:当EXTRACT(type FROM date)函数中的type取值为MINUTE_SECOND时,表示返回分钟和秒值,当date中的分钟为12,秒为12时,返回的结果为1212。其中,time2是一个表达式,也可以是一个数字,当time2为一个数字时,代表的是秒。其中,format常用的格式符如表11-3所示。
2025-09-20 16:51:23
800
原创 mysql的exists条件子查询
核心优势总结EXISTS通过逐行探测和索引优化,天然适合关联查询的高效执行。在分布式数据库(如 PolarDB、TiDB)中,EXISTS的局部性特性可减少跨节点数据传输。适用边界与误区不适用场景:若子查询结果集极小(如 10 行以内),IN可能因优化器预处理更快。常见误区:盲目替换所有IN为EXISTS,忽略执行计划的实际差异。扩展思考如何结合物化视图或预计算,进一步优化EXISTS的实时性要求?在 OLAP 场景(如 ClickHouse),EXISTS是否仍是优选方案?注。
2025-09-19 22:57:06
1015
原创 Netty常用基础解码器(处理半包/粘包源码浅析)
本文详细介绍了Netty中的两种帧解码器:FixedLengthFrameDecoder和LineBasedFrameDecoder。FixedLengthFrameDecoder是固定长度的帧解码器,通过指定帧的固定字节长度来分割数据;LineBasedFrameDecoder是基于行分隔符的帧解码器,通过"\n"或"\r\n"来识别消息边界。文章从属性、构造方法到核心解码逻辑进行了深入解析,包括如何处理超过最大帧长度的情况、是否保留分隔符等细节,为理解Net
2025-09-04 17:57:23
700
原创 Netty 如何自动探测内存泄露的发生
要想触发 Netty 的内存泄露探测机制需要同时满足以下五个条件:应用必须开启内存泄露探测功能。必须要等到 ByteBuf 被 GC 之后,内存泄露才能探测的到,如果 GC 一直没有触发,那么即使是 ByteBuf 没有任何强引用或者软引用了,内存泄露的探测也将无从谈起。当 GC 发生之后,必须是要等到下一次分配内存的时候,才会触发内存泄露的探测。如果没有内存申请的行为发生,那么内存泄露的探测也不会发生。Netty 并不会探测每一个 ByteBuf 的泄露情况,而是根据一定的采样间隔,进行采样探测。
2025-08-02 23:39:52
842
原创 谈一谈 Netty 的内存管理 —— 且看 Netty 如何实现 Java 版的 Jemalloc
原文链接:>>> 谈一谈 Netty 的内存管理 —— 且看 Netty 如何实现 Java 版的 Jemalloc在之前的 Netty 系列中,笔者是以 4.1.56.Final 版本为基础和大家讨论的,那么从本文开始,笔者将用最新版本 4.1.112.Final 对 Netty 的相关设计展开解析,之所以这么做的原因是 Netty 的内存池设计一直在不断地演进优化。在 4.1.52.Final 之前 Netty 内存池是基于 jemalloc3 的设计思想实现的,由于在该版本的实现中,内存规格的粒度设计
2025-08-02 23:31:53
988
原创 Jsqlparser学习
给原来的sql语句添加查询条件:age > 18 and dept_id in (1,2,3)先创建java对象(结构),使用deparser将java对象转为(得到)sql字符串。有固定结构的数据封装类,结构基本不会发生变化。它们都有1个接收访问者的方法。在具体的结构封装类接收访问者的方法中,可直接调用访问者针对当前结构类的方法。访问者针对每1个具体的结构封装类都有1个具体的访问方法。如果封装类结构不是固定的,那么不能使用这种模式。
2025-07-28 23:03:46
1002
原创 Netty如何高效接收网络数据?一文聊透ByteBuffer动态自适应扩缩容机制
本文介绍了Sub Reactor线程在处理OP_READ事件的整个过程。并深入剖析了AdaptiveRecvByteBufAllocator类动态调整ByteBuffer容量的原理。同时也介绍了Netty为什么会使用堆外内存来为ByteBuffer分配内存,并由此引出了Netty的内存池分配器PooledByteBufAllocator。
2025-07-21 23:37:35
812
原创 Reactor在Netty中的实现(创建篇)
原文链接:聊聊Netty那些事儿之Reactor在Netty中的实现(创建篇)在上篇文章**《聊聊Netty那些事儿之从内核角度看IO模型》**中我们花了大量的篇幅来从内核角度详细讲述了五种的演进过程以及的底层基石IO多路复用技术在内核中的实现原理。最后我们引出了netty中使用的主从Reactor IO线程模型。通过上篇文章的介绍,我们已经清楚了在IO调用的过程中内核帮我们搞了哪些事情,那么俗话说的好,netty在用户空间又帮我们搞了哪些事情?那么从本文开始,笔者将从源码角度来带大家看下上图中的在Net
2025-07-20 23:56:19
1126
原创 Netty是如何高效接收网络连接
本文的主角服务端NioServerSocketChannel的创建,初始化,绑定端口地址,向main reactor注册监听。
2025-07-20 23:33:10
858
原创 一文搞懂 Netty 发送数据全流程 | 你想知道的细节全在这里
原文链接:一文搞懂 Netty 发送数据全流程 | 你想知道的细节全在这里在《Netty如何高效接收网络数据》一文中,我们介绍了 Netty 的 SubReactor 处理网络数据读取的完整过程,当 Netty 为我们读取了网络请求数据,并且我们在自己的业务线程中完成了业务处理后,就需要将业务处理结果返回给客户端了,那么本文我们就来介绍下 SubReactor 如何处理网络数据发送的整个过程。我们都知道 Netty 是一款高性能的异步事件驱动的网络通讯框架,既然是网络通讯框架那么它主要做的事情就是:接收客
2025-07-20 22:57:55
1140
原创 详细图解Netty Reactor启动全流程 | 万字长文 | 多图预警
/JDK NIO原生Selectable Channel// Channel监听事件集合 这里是SelectionKey.OP_ACCEPT事件try {//设置Channel为非阻塞 配合IO多路复用模型.............省略................封装由创建出来的JDK NIO原生。封装Channel在创建时指定感兴趣的IO事件,对于来说感兴趣的IO事件为OP_ACCEPT事件。设置JDK NIO原生为非阻塞模式, 配合IO多路复用模型。
2025-07-20 22:51:39
1108
原创 一文聊透 Netty IO 事件的编排利器 pipeline | 详解所有 IO 事件的触发时机以及传播路径
一文聊透 Netty IO 事件的编排利器 pipeline | 详解所有 IO 事件的触发时机以及传播路径 - 原文链接,请看原文在前边的系列文章中,笔者为大家详细剖析了 Reactor 模型在 netty 中的创建,启动,运行,接收连接,接收数据,发送数据的完整流程,在详细剖析整个 Reactor 模型如何在 netty 中实现的过程里,我们或多或少的见到了 pipeline 的身影。Reactor启动后的结构.png比如在 Reactor 启动的过程中首先需要创建 NioServerSocketCha
2025-07-20 22:29:53
1127
原创 ByteBuf 体系的设计与实现
聊一聊 Netty 数据搬运工 ByteBuf 体系的设计与实现 - 原文链接 - 请看原文,ctrl + c & ctrl + vByteToMessageDecoder详解时光芿苒,岁月如梭,好久没有给大家更新 Netty 相关的文章了,在断更 Netty 的这段日子里,笔者一直在持续更新 Linux 内存管理相关的文章 ,目前为止,算是将 Linux 内存管理子系统相关的主干源码较为完整的给大家呈现了出来,同时也结识了很多喜欢内核的读者,经常在后台留言讨论一些代码的设计细节,在这个过程中,我们相互分享
2025-07-20 22:18:58
998
原创 ByteToMessageDecoder详解
ByteToMessageDecoder是netty中1个非常重要的解码器。因为tcp协议将数据以流的方式传输,但这样就需要自己在应用层手动解决字节数据边界的问题,即拆包和粘包的问题。将流式数据按照商定的协议规则区分的1个完整数据称为帧。
2025-07-16 23:55:09
815
原创 阻塞队列BlockingQueue
4、LinkedBlockingQueue实现原理分析。3、ArrayBlockingQueue实现原理分析。5、延迟队列DelayQueue在下单场景中的应用。1、阻塞队列的特性及其应用场景分析。6、如何选择适合的阻塞队列。2、如何设计一个阻塞队列。
2025-07-09 20:53:30
220
原创 Future异步与Promise
好了,本篇文章对FutureTask的源码分析就到此结束了,下面我们再总结下FutureTask我们实现Callable接口,在覆写的call方法中定义需要执行的业务逻辑;然后把我们实现的Callable接口实现对象传给FutureTask,然后FutureTask作为异步任务提交给线程执行;最重要的是FutureTask内部维护了一个状态state,任何操作(异步任务正常结束与否还是被取消)都是围绕着这个状态进行,并随时更新state任务的状态;
2025-06-26 22:01:38
824
原创 reactor模型学习&狂野netty
本文介绍了BIO(阻塞IO)和NIO(非阻塞IO)的网络编程实现。BIO通过ServerSocket和Socket实现客户端-服务器通信,采用一连接一线程模型,代码示例展示了服务器监听、客户端连接及数据传输过程。NIO部分则基于Channel和Selector实现非阻塞IO,但仅提供了服务器端的Channel创建流程框架,未展示完整交互实现。文章还提供了相关的学习资源链接,包括优快云博客和B站视频,涉及Netty框架、Reactor模型等高性能网络编程内容。BIO实现简单但性能受限,NIO提供了更高性能
2025-06-15 00:24:51
1201
原创 LG-Netty学习
Socket,套接字就是两台主机之间逻辑连接的端点。TCP/IP协议是传输层协议,主要解决数据如何在网络中传输,而HTTP是应用层协议,主要解决如何包装数据。Socket是通信的基石,是支持TCP/IP协议的网络通信的基本操作单元。它是网络通信过程中端点的抽象表示,包含进行网络通信必须的五种信息:连接使用的协议、本地主机的IP地址、本地进程的协议端口、远程主机的IP地址、远程进程的协议端口。维度阻塞(Blocking)非阻塞(Non-Blocking)线程行为挂起等待操作完成立即返回,可执行其他任务。
2025-05-24 09:00:08
558
原创 spring-retry学习
spring-retry - github【SpringBoot】spring-retry(重试机制)【Spring】Spring Retryresilience4j 官网resilience4j - githubresilience4j中文文档 - github
2025-05-21 20:44:37
454
1
原创 Json schema校验json字符串(networknt/json-schema-validator库)
json schema校验json字符串(networknt/json-schema-validator库)
2025-05-18 08:45:14
770
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅