- 博客(626)
- 收藏
- 关注
原创 框架源码学习收藏汇总
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
710
原创 sa-token学习(2)
3、客户端重定向到redirect指向的地址后,由于之前单点登录页面写的cookie与当前应用的页面在同1个主域名下,所以会携带此cookie,并且又由于后台共享redis,所以就能拿到用户信息了。1、用户访问:http://s1.stp.com:9001/,但是由于未登录,所以页面不会显示用户信息,并且页面会显示1个用于登录的a标签,此a标签指向。2、当在单点登录的页面输入sa/123456发起ajax登录请求,登录成功后,就会得到set-cookie的头,然后再刷新当前页面请求。4、其它应用点击登录。
2026-04-09 22:53:32
301
原创 spring batch动态示例及原理
摘要:本文展示了两个Spring Batch作业配置类。JobController提供了两个REST端点(msgJob4和msgJob5)来启动作业。WriteFlatFileMsgJobConfig4配置了一个写入作业,生成100条Person记录并写入文件。ReadFlatFileMsgJobConfig5(未完整展示)配置了一个读取作业。两个作业都使用JobLauncher异步执行,支持参数传递和容错处理,采用单线程执行和事务管理。
2026-03-20 22:54:52
283
原创 第14章 MySQL事务日志
对于更新主键的操作,会先把原来的数据deletemark标识打开,这时并没有真正的删除数据,真正的删除会交给清理线程去判断,然后在后面插入一条新的数据,新的数据也会产生undo log,并且undo log的序号会递增。可以发现每次对数据的变更都会产生一个undo log,当一条记录被变更多次时,那么就会产生多条undo log,undo log记录的是变更前的日志,并且每个undo log的序号是递增的,那么当要回滚的时候,按照序号。,那么在进行rollback的时候,通过主键直接把对应的数据删除即可。
2026-03-08 20:56:49
432
原创 第13章 事务基础知识
事务是数据库区别于文件系统的重要特性之一,当我们有了事务就会让数据库始终保持一致性,同时我们还能通 过事务的机制恢复到某个时间点,这样可以保证已提交到数据库的修改不会因为系统崩溃而丢失。
2026-03-07 15:55:21
389
原创 CompletableFuture学习
直接继承Thread或者实现Runnable接口都可以创建线程,但是这两种方法都有一个问题就是:没有返回值,也就是不能获取执行完的结果。因此java1.5就提供了Callable接口来实现这一场景,而Future和FutureTask就可以和Callable接口配合起来使用。不能返回一个返回值不能抛出 checked ExceptionCallable的call方法可以有返回值,可以声明抛出异常。
2026-02-10 21:54:35
630
原创 HttpPostRequestDecoder源码浅析
Netty可以逐步接收HTTP请求体,并逐步解析,而不需要等待整个请求体完全接收完毕。这对于大文件上传尤其重要,可以避免内存溢出。该方法用于接收新的HTTP内容块(HttpContent),并对其进行解码,以解析HTTP POST请求的主体部分。定义了多部分表单数据(multipart/form-data)解析过程中的状态。此外,它也处理一些边界情况,比如空值()以及数据末尾的回车换行。中解析普通表单数据(
2026-01-10 21:55:03
608
原创 ChunkedWriteHandler源码浅析
Netty大文件分块传输实现分析 本文主要分析了Netty中实现大文件分块传输的核心组件ChunkedInput接口及其实现类ChunkedFile和HttpChunkedInput。ChunkedInput定义了分块读取数据的标准接口,包括读取分块数据(readChunk)、判断是否结束(isEndOfInput)、关闭资源(close)等方法。ChunkedFile是具体实现,利用RandomAccessFile进行随机IO读写,支持设置起始/结束偏移量和分块大小。HttpChunkedInput则是对
2025-12-29 23:23:29
950
原创 HttpObjectDecoder&HttpObjectEncoder源码浅析&示例
HttpObjectDecoder是Netty中用于解析HTTP消息的解码器,主要包含请求行/响应行、请求头/响应头的解析逻辑。其核心组件包括:1)定义默认配置常量,如最大行长度、分块大小等;2)使用状态机(State枚举)控制解析流程;3)通过HeaderParser和LineParser实现行和头的具体解析。解析过程支持分块传输、长度校验等功能,采用字符序列缓存数据并处理各种边界情况,如控制字符跳过、分块消息处理等。该解码器可灵活配置参数,确保高效可靠地解析HTTP协议消息。
2025-12-25 22:51:33
471
原创 HttpAggregator源码浅析
HttpObjectAggregator源码分析:该组件继承自MessageToMessageDecoder,用于将分段的HTTP消息聚合为完整消息。核心流程包括:通过acceptInboundMessage判断消息类型(起始消息、内容消息或已聚合消息),对HttpMessage和HttpContent进行聚合处理。当收到起始消息时初始化聚合状态,后续内容消息会被追加到当前消息缓冲区,直到达到maxContentLength限制或收到结束标记。最终输出完整的FullHttpMessage对象。关键点包括类型
2025-12-19 22:40:33
692
原创 java泛型反射&mybatis的TypeParameterResolver
特性返回类型Class<?super T>Type泛型信息被擦除,只返回原始类型保留,返回完整的类型信息主要用途获取普通的父类信息在反射中获取父类的泛型参数核心处理直接使用通常需要判断和转换为简单来说,当你需要知道一个类继承的父类具体是什么泛型类型时,就应该使用。
2025-11-30 23:27:08
1035
原创 method.isBridge()桥接方法
是 Java 反射 API 中的一个方法,用于判断一个方法是否是桥接方法(Bridge Method)。桥接方法是Java编译器在泛型继承或实现接口时自动生成的方法,用于保证类型安全和多态性。在泛型中,由于类型擦除,编译器需要生成桥接方法来覆盖父类或接口的方法,以确保在运行时能够正确调用到子类或实现类的方法。桥接方法是 Java 编译器在特定情况下自动生成的方法,主要用于:我们有一个泛型接口:然后有一个类实现这个接口:由于类型擦除,接口中的compareTo方法在编译后变成了compareTo(Obje
2025-11-26 23:08:32
314
原创 mybatis类型转换器
TypeHandler是MyBatis中处理Java类型与JDBC类型转换的核心接口,包含setParameter()和多个getResult()方法。BaseTypeHandler作为抽象实现类,提供了基本的参数设置和结果获取逻辑,并定义了4个抽象方法供子类实现特定类型的转换。TypeHandlerRegistry负责管理所有类型处理器,内部通过多个Map维护类型映射关系,包括jdbcTypeHandlerMap、typeHandlerMap等,并在初始化时注册内置的BooleanTypeHandler等
2025-11-02 23:35:28
349
原创 mysql数据类型
选择合适的数据类型是很重要的。如要求存储精度较高时,应选择 DOUBLE类型。如果进行数值比较,最好使用 DECIMAL类型。如果字符串是固定长度的,使用char,日期类型,就不适合字符串存储。TEXT 存储纯文本文件。BLOB主要存储图片、音频信息等。
2025-10-31 22:41:14
409
原创 mysql upsert 用法(批量保存或更新)
ON DUPLICATE KEY UPDATE是MySQL中INSERT语句的扩展功能,用于处理主键或唯一键冲突时执行更新操作而非报错。基本语法是在INSERT后添加更新子句,当冲突发生时更新指定列而非插入。该功能支持单行或多行操作,可使用VALUES()函数引用原插入值,具有原子性特点。典型应用场景包括计数器更新、数据去重、同步和缓存表维护等。示例演示了基本用法、条件更新以及返回结果分析(插入返回1,更新返回2,无变化返回0)。注意事项包括仅主键/唯一键冲突触发、自增ID计数器仍增长等。该功能简化了&qu
2025-10-29 22:18:13
522
原创 mysql的 in 用法
在这个 SQL 例子里,我们实现了查出所有状态为 0 的用户(可能是被禁止)的所有文章。当 IN 前面加上 NOT 运算符时,表示与 IN 相反的意思,即不在这些列表项内选择。mysql中IN常用于WHERE表达式中,其作用是查询某个范围内的数据。既然能单个字段in单列结果,那么多个字段就能in多列结果了。(注意:null参与任何运算的布尔值都是假)查询生效时间到当日最晚的数据。
2025-10-26 21:21:41
472
原创 spring-batch深入了解
spring batch 是 spring 提供的一个数据处理框架,其功能包括记录/跟踪,事务管理,作业统计,作业重启,跳过和资源管理等。它还提供了更高级的技术服务和功能,通过优化和分区技术实现极高容量和高性能的批处理作业。首先会对其框架所涉及到概念进行讲解,接着对其框架大体原理进行解读。是有关将任务 Step 进行拆分处理的实例,具体交由其属性成员进行处理,该类相当于是一个门面对象。看到 PartitionStep 中包含了三个关键的属性成员,具体工作是交给其成员完成的;
2025-09-28 21:55:30
1008
原创 mysql字符串函数总结
中的字符串函数有计算字符串长度函数、字符串合并函数、字符串替换函数、字符串比较函数、查找指定字符串位置函数等。中由于替换长度99,超出了字符串原本长度,所以从第二个字符开始,截取后面所有的字符,并替换为指定字符。长度大于4,所以不仅不需要填充,反而需要截取至从左开始4位字符的字符串。长度大于4,所以不仅不需要填充,反而需要截取至从左开始4位字符的字符串。中出现的位置,字符串列表是一个有多个逗号分开的字符串组成的列表。假如这样,则子字符串的位置起始于字符串结尾的。,从右往左的第1位和第3位是1,所以选取。
2025-09-20 21:09:08
1037
原创 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
845
原创 mysql的exists条件子查询
核心优势总结EXISTS通过逐行探测和索引优化,天然适合关联查询的高效执行。在分布式数据库(如 PolarDB、TiDB)中,EXISTS的局部性特性可减少跨节点数据传输。适用边界与误区不适用场景:若子查询结果集极小(如 10 行以内),IN可能因优化器预处理更快。常见误区:盲目替换所有IN为EXISTS,忽略执行计划的实际差异。扩展思考如何结合物化视图或预计算,进一步优化EXISTS的实时性要求?在 OLAP 场景(如 ClickHouse),EXISTS是否仍是优选方案?注。
2025-09-19 22:57:06
1096
原创 Netty常用基础解码器(处理半包/粘包源码浅析)
本文详细介绍了Netty中的两种帧解码器:FixedLengthFrameDecoder和LineBasedFrameDecoder。FixedLengthFrameDecoder是固定长度的帧解码器,通过指定帧的固定字节长度来分割数据;LineBasedFrameDecoder是基于行分隔符的帧解码器,通过"\n"或"\r\n"来识别消息边界。文章从属性、构造方法到核心解码逻辑进行了深入解析,包括如何处理超过最大帧长度的情况、是否保留分隔符等细节,为理解Net
2025-09-04 17:57:23
733
原创 Netty 如何自动探测内存泄露的发生
要想触发 Netty 的内存泄露探测机制需要同时满足以下五个条件:应用必须开启内存泄露探测功能。必须要等到 ByteBuf 被 GC 之后,内存泄露才能探测的到,如果 GC 一直没有触发,那么即使是 ByteBuf 没有任何强引用或者软引用了,内存泄露的探测也将无从谈起。当 GC 发生之后,必须是要等到下一次分配内存的时候,才会触发内存泄露的探测。如果没有内存申请的行为发生,那么内存泄露的探测也不会发生。Netty 并不会探测每一个 ByteBuf 的泄露情况,而是根据一定的采样间隔,进行采样探测。
2025-08-02 23:39:52
906
原创 谈一谈 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
1036
原创 Jsqlparser学习
给原来的sql语句添加查询条件:age > 18 and dept_id in (1,2,3)先创建java对象(结构),使用deparser将java对象转为(得到)sql字符串。有固定结构的数据封装类,结构基本不会发生变化。它们都有1个接收访问者的方法。在具体的结构封装类接收访问者的方法中,可直接调用访问者针对当前结构类的方法。访问者针对每1个具体的结构封装类都有1个具体的访问方法。如果封装类结构不是固定的,那么不能使用这种模式。
2025-07-28 23:03:46
1047
原创 Netty如何高效接收网络数据?一文聊透ByteBuffer动态自适应扩缩容机制
本文介绍了Sub Reactor线程在处理OP_READ事件的整个过程。并深入剖析了AdaptiveRecvByteBufAllocator类动态调整ByteBuffer容量的原理。同时也介绍了Netty为什么会使用堆外内存来为ByteBuffer分配内存,并由此引出了Netty的内存池分配器PooledByteBufAllocator。
2025-07-21 23:37:35
856
原创 Reactor在Netty中的实现(创建篇)
原文链接:聊聊Netty那些事儿之Reactor在Netty中的实现(创建篇)在上篇文章**《聊聊Netty那些事儿之从内核角度看IO模型》**中我们花了大量的篇幅来从内核角度详细讲述了五种的演进过程以及的底层基石IO多路复用技术在内核中的实现原理。最后我们引出了netty中使用的主从Reactor IO线程模型。通过上篇文章的介绍,我们已经清楚了在IO调用的过程中内核帮我们搞了哪些事情,那么俗话说的好,netty在用户空间又帮我们搞了哪些事情?那么从本文开始,笔者将从源码角度来带大家看下上图中的在Net
2025-07-20 23:56:19
1167
原创 Netty是如何高效接收网络连接
本文的主角服务端NioServerSocketChannel的创建,初始化,绑定端口地址,向main reactor注册监听。
2025-07-20 23:33:10
890
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅