- 博客(26)
- 收藏
- 关注
原创 Spring Aop 源码分析实现原理(JDK动态代理)
Spring aop 源码分析实现原理(jdk动态代理)史上最长的Spring Aop源码讲解
2020-09-26 14:55:51 464
原创 Netty系列之为什么Netty是网络编程的首选
Netty凭借其简洁的API设计、强大的功能和卓越的性能,成为了许多网络编程框架的首选,广泛应用于诸如Dubbo、RocketMQ等高性能分布式系统中。
2024-08-12 10:14:08 363
原创 用好Interceptor,你也能写一个MybatisPlus
利用好Interceptor,你就能在Mybatis执行SQL时做你想做的事情,但是呢,想写一个新的Mybtis-Plus还是不行的。因为Interceptor只能在执行SQL时进行拦截并处理,但是执行SQL前的一些准备工作就不太行了,比如实体类的解析、SQL的解析等等。但是也足够了,能够在我们工作当中处理大多数需求了。
2024-08-07 11:33:44 917
原创 深入源码,探究#、$号替换符的区别
在Mybatis的日常使用过程中以及在一些技术论坛上我们都能常常听到,不要使用`$`符号来进行SQL的编写,要使用`#`符号,否则会有**SQL注入的风险**。那么,为什么在使用`$`符号时会有注入的风险呢,以及`#`号为什么不会有风险呢?这一期我们来从源码分析一下。
2024-07-08 09:57:47 868 1
原创 一次线上OOM问题的分析与解决
在周五晚上,突然收到公司系统告警信息,提示一个内部使用的在线文件浏览服务不可用了。收到这个消息之后,就先马上滚动重启了Pod,然后服务也可用了。
2024-06-28 10:25:37 647
原创 Mybatis的Cursor如何避免OOM异常
类型如何获取数据返回值是否关闭Statement、ResultSetCursor用户自行根据Cursor迭代器获取Cursor游标类型不关闭,需要一直持有普通搜索Mybatis内部操控JDBC指针,获取所有查询数据后返回。具体实体类型获取完数据后关闭。
2024-06-25 10:39:21 871
原创 Mybatis缓存的生命周期、使用的特殊情况
以下场景均在Spring Boot程序中,并非手动创建SqlSession使用。在回答这个问题之前,我们先来回顾一下,Mybatis的一级二级缓存是啥。
2024-06-07 11:23:45 375
原创 一个开源的工具类轮子是怎么造出来的
在22年9月的某一天,在公司开需求评审时,接到了一个给PDF、图片添加水印的需求。做为一个刚工作的CURD程序员,在遇到这些问题时,第一反应是去github上找找有没有类似的开源
2024-05-23 10:21:19 869 1
原创 Redisson中分布式锁的实现原理
锁归根结底就是对同一资源的竞争抢夺,不管是在单体的应用亦或者集群的服务中,上锁都是对同一资源进行修改的操作。至于分布式锁,那就是多个服务器或资源,同时抢占某一单体应用的同个资源了。在本篇文章中,抢占的资源就是Redis中的某个Key了。
2024-05-14 10:17:09 458 1
原创 新版攻略-如何发布Java代码到中央仓库中
前两天打算发布自己的框架到maven仓库上,才发现从2024 年3月12日起之前OSSRH的发布方式已经不再支持新的仓库进行发布了,之后的代码发布只能使用新版的发布流程了。新版的发布步骤与旧版OSSRH类似,不过多了几个步骤而已。
2024-05-06 10:27:31 1206
原创 一个本地文件就能保证RocketMQ5中的定时消息不被丢失?
在RocketMQ5中实现了可控的定时消息,在保证定时消息的准时发送之余,RocketMQ还对定时消息的保存以及系统异常宕机下的特殊情况进行处理,保证消息的可靠性。
2024-04-01 10:09:26 660
原创 一文带你读懂RocketMQ5中定时消息实现原理
RocketMQ5中的定时消息使用起来虽然简单,但是在消息循环处理的过程中,涉及到了多个处理器对其进行处理。而且上面每一个Service都是一个单独的线程来进行处理,其中以及更是开了三个线程来同时处理。社区在讨论什么?下期预告:定时消息宕机时保存以及定时刷盘机制。
2024-03-25 10:23:04 1479 1
原创 深度探索RocketMQ5:定时消息新特性解析【上】
使用场景:在分布式定时调度触发、任务超时处理等场景,需要实现精准、可靠的定时事件触发。使用 Apache RocketMQ 的定时消息可以简化定时调度任务的开发逻辑,实现高性能、可扩展、高可靠的定时触发能力。(来源-官网介绍在RocketMQ5之前,并没有定时消息这个功能,只有延时消息这个类似定时消息但又不太像定时消息的功能。其中设定的延时时间只能从提供的18个定时级别中选择。RocketMQ在这个5.0这个大版本中全面拥抱云原生,在此场景下,也是支持了任意延迟时间的延迟消息功能。定时消息概述。
2024-03-25 10:19:11 812 2
原创 Cleaner:Java的一种新资源释放方式
在JDK9中新增了Cleaner类,该类的作用是用于替代finalize方法,更有效地释放资源并避免内存泄漏。
2024-03-05 18:13:04 892
原创 【Java引用规范】虚引用以及引用队列
Java提供了四种引用类型:强引用、软引用、弱引用和虚引用。虚引用,作为这四种引用类型中最特殊的一种,主要用于跟踪对象被垃圾回收的状态。
2024-03-02 16:56:05 912
原创 Xxl-Job定时任务调度失败的排查与解决
一次线上定时任务调度失败原因的排查,一步步地从调度中心到执行器,再到K8S中的Istio进行问题的排查。
2024-02-26 14:58:17 3283 1
原创 【ThreadLocal】实现原理
在上期,介绍了ThreadLocal的概述以及基本用法后,我们本期则研究一下ThreadLocal是怎么实现以及内部工作原理。
2024-02-06 11:26:47 861 1
原创 【Java引用规范】强软引用
引用是Java中对对象进行操作的主要方式,通过引用,可以在程序中创建、访问和操作对象。你对于Java的引用了解多少呢?
2024-01-14 17:38:09 1015 1
原创 【ThreadLocal】概述与基本用法
在多线程程序中处理共享对象的并发问题的两种解决方案:时间换空间和空间换时间。引入了ThreadLocal类作为空间换时间的实现方式,以及其基本用法和API介绍。通过示例展示了如何在代码中使用ThreadLocal,确保每个线程都能独立访问自己的局部变量。
2024-01-09 18:24:19 355
原创 ReentrantLock锁底层实现
ReentrantLock锁synchronized 倒序唤醒 EntryList JVM 底层C++实现ReentrantLock 顺序唤醒 Java实现都是双向链表上锁private volatile int state; //锁状态,加锁成功则为1,重入+1 解锁则为0非公平锁 直接尝试能不能设置状态,可以就直接占用,否则就等待锁 final void lock() { if (compareAndSetState(0, 1))
2021-08-08 12:10:14 221
原创 JVM基础知识
JVMjvm组成jvm内存结构Java堆 存放对象以及数组 线程共享程序计数器(pc) 来选取下一条需要执行的字节码指令本地方法栈 本地方法栈是为虚拟机调用 Native 方法服务的Java虚拟机栈 基本数据类型、对象的引用、局部变量,操作数栈,返回结果 线程私有方法区 存储已被虚拟机加载的类信息、常量、静态变量、即时编译后的代码等数据浅拷贝、深拷贝、浅复制、深复制浅拷贝
2021-08-04 22:41:31 82
原创 Arrays.sort底层排序算法
一直以来,我都认为Java内部排序的算法是快速排序。直到有一天,我在面经上看到了有一道这样子的问题。我才发觉,事情远没有我想的那么简单。
2021-07-30 16:52:57 904
原创 1.7-1.8 HashMap和ConcurrentHashMap底层源码解析
1.7和1.8的HashMap源码解析1.7和1.8的ConcurrentHashMap源码解析
2021-04-27 16:17:58 163
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人