- 博客(155)
- 问答 (43)
- 收藏
- 关注

原创 Sharding-JDBC 使用 Nacos 作为配置中心 【下 代码实战】
由上一篇博文我们已经知道了 Sharding-JDBC 是基于 Java SPI 机制去加载 并实例化 ShardingSphereDriverURLProvider 的实现类ShardingSphereDriverURLProvider接口有两个抽象方法 accept()方法用于判断当前的url是否满足条件,如果满足将调用 getContent ()方法获取数据源配置信息。
2024-06-12 21:53:04
708

原创 Sharding-JDBC 使用 Nacos 作为配置中心 【上 源码分析】
this.dataSourceMap.computeIfAbsent(url, DriverDataSourceCache::createDataSource) 方法,这个方法在调用前,会先执行 this.createDataSource() 方法。通过do{}while 遍历 ShardingSphereDriverURLProvider 集合,调用 accept()方法,如果返回true,将跳出循环,接着调用 each.getContent(url) 获取数据源配置信息。首先会判断url是否 包含。
2024-06-12 21:05:58
1395
原创 【JVM】垃圾回收与安全点 学习记录
安全点是一种特殊的执行位置,在这些位置,JVM可以安全地停止线程来进行全局性的操作,比如垃圾回收。在这些点上,程序的状态是已知的并且稳定的,这意味着JVM可以暂停所有线程而不用担心破坏程序的一致性。
2024-09-01 22:55:53
422
原创 Java最全知识脑图 涵盖 juc mysql git mybatis 等 面试必备
导图下载地址 : https://mm.edrawsoft.cn/mobile-share/index.html?uuid=04f57997153745-src&share_type=1https://mm.edrawsoft.cn/mobile-share/index.html?uuid=04f57997153745-src&share_type=1https://mm.edrawsoft.cn/mobile-share/index.html?uuid=19d7c980017503-src&share_t
2024-06-14 08:48:06
700
原创 Java初、中级程序员面试必备的知识脑图 超详细 超好用
支持绘制流程图、思维导图、架构图、网络图等210+图形图表。Redis导图一键保存。Mysql导图一键保存。设计模式导图一键保存。
2024-06-14 08:43:47
548
原创 【Java】单例模式的五种实现方式以及为什么推荐枚举类
构造私有 静态成员 提供方法获取测试一下由于 是静态的 不管你有没有调用方法去拿这个实例,他也会先加载到内存中同时,还能通过反射创建出多个对象。
2024-06-11 17:09:14
721
原创 【Netty 源码】NioEventLoop 源码分析 篇二
即使无客户端连接,NIO照样不断的从select本应该阻塞的中wake up出来,导致CPU100%问题。
2024-06-08 13:50:15
1009
原创 【Netty 源码】服务端启动流程源码分析 篇一
使用Java NIO创建服务端时,通常我们需要先创建Channel,Selector两个对象,然后将Channel绑定端口并注册到Selector上,最后对事件轮询监听2.Netty 服务端创建流程Netty的服务端创建流程都在 ServerBootstrap.bind方法中完成2.1 initAndRegister() 初始化Channel并将Channel注册到Selector通过堆栈信息可以看到此方法由main线程进行调用channelFactory.newChannel()通过DEBUG追
2024-03-10 17:59:44
988
原创 【Seata源码学习 】篇五 注册分支事务
回到事务模版方法类TransactionalTemplate中beginTransaction 开启全局事务我们已经在上一篇看过了,最终会将TC返回到XID绑定到RootContext中,并且TC会将全局事务会话持久化,通常我们使用DB,那么将会往seata数据库的global_table中插入一条数据。接下来就要执行拦截器链路,最后一个拦截器执行完毕后如果无异常就要执行目标方法。调用目标方法通常会使用到第三方的RPC框架,例如 Fegin,RestTemplate等等。
2023-12-29 17:31:04
1154
原创 Java全知识脑图 适合初、中级Java程序员 面试必备
支持绘制流程图、思维导图、架构图、网络图等210+图形图表。Redis导图一键保存。Mysql导图一键保存。设计模式导图一键保存。
2023-12-27 15:02:50
1165
1
原创 【Seata源码学习 】篇四 TM事务管理器是如何开启全局事务
以发送GlobalBeginRequest消息为例TM在执行拦截器链路前将向TC发送GlobalBeginRequest 消息io.seata.tm.api.DefaultGlobalTransaction#begin(int, java.lang.String)注意 消息TYPE_CODE 为 MessageType.TYPE_GLOBAL_BEGIN 值为 1io.seata.tm.DefaultTransactionManager#syncCallio.seata.core.rpc.netty.
2023-12-27 14:55:17
679
原创 【Seata源码学习 】篇三 seata客户端全局事务开启、提交与回滚
我们已经知道 GlobalTransactionScanner 会给bean的类或方法上面标注有@GlobalTransactional 注解 和 @GlobalLock的 添加一个 advisor (DefaultPointcutAdvisor ,advisor = 绑定了PointCut 的 advise)而此处的 DefaultPointcutAdvisor 的 advice 为 GlobalTransactionalInterceptor,PointCut 为 Pointcut.TRUE(匹配
2023-12-27 14:54:34
884
原创 【Seata源码学习 】 篇二 TM与RM初始化过程
/调用父类构造器 用于处理消息的线程池//当前事务角色//创建 NettyClientBootstrap 实例//消息处理器//channel管理器//设置处理消息的线程池@Override//周期线程池 第一次在60秒后通过连接管理器重新建立链接,之后每10秒重新建立一次链接@Override//启动一个周期线程池,每3秒检查一次请求是否超时//启动netty客户端启动过程中一共设置了4个消息处理器IdleStateHandler 处理心跳。
2023-12-22 20:07:18
1050
原创 【Seata源码学习 】 扫描@GlobalTransaction注解 篇一
如果你项目中使用的是MybatisPlus,那么通常会被org.springframework.transaction.interceptor.BeanFactoryTransactionAttributeSourceAdvisor创建代理类。调用org.springframework.aop.framework.autoproxy.AbstractAutoProxyCreator#createProxy,将在每个bean实例化后执行 postProcessAfterInitialization 方法,
2023-12-22 20:06:14
1177
原创 Spring源码分析 @Autowired 是怎样完成注入的?究竟是byType还是byName亦两者皆有
如果想达到我们想要的效果 , 那么在核心线程数上限,存放线程任务时,报一个假消息,让线程池误认为工作队列已经满了这时就会创建非核心线程,执行线程任务, 如果非核心线程数也上限了,那么就会执行拒绝策略我们设想的是,非核心线程数上限了,这时把线程任务才真正的丢到工作队列中去 那么相应的,就应该自定义一个拒绝策略所以我们需要重写工作队列和拒绝策略,当然最好自己创建线程工厂package com.sgg.javaerror100.弹性线程池;
2023-12-22 20:05:04
1150
原创 【Java】如何改变线程池的工作模式
如果想达到我们想要的效果 , 那么在核心线程数上限,存放线程任务时,报一个假消息,让线程池误认为工作队列已经满了这时就会创建非核心线程,执行线程任务, 如果非核心线程数也上限了,那么就会执行拒绝策略我们设想的是,非核心线程数上限了,这时把线程任务才真正的丢到工作队列中去 那么相应的,就应该自定义一个拒绝策略所以我们需要重写工作队列和拒绝策略,当然最好自己创建线程工厂package com.sgg.javaerror100.弹性线程池;
2023-12-18 17:43:44
451
原创 分享 JVM 、JUC、Redis、MySQL 知识脑图 适合Java初中级开发
支持绘制流程图、思维导图、架构图、网络图等210+图形图表。Redis导图一键保存。Mysql导图一键保存。设计模式导图一键保存。
2023-12-18 15:12:30
746
原创 【Seata源码学习 】篇六 全局事务提交与回滚
TM在RPC远程调用RM后,如果没有出现异常,将向TC发送提交全局事务请求io.seata.tm.api.TransactionalTemplate#execute事务提交前后钩子方法执行在全局事务提交前后,seata给我们预留了两个钩子方法,可以根据实际生产中的业务需要进行扩展io.seata.tm.api.TransactionalTemplate#commitTransactionTM提交全局事务io.seata.tm.api.DefaultGlobalTransaction#commit全
2023-12-04 13:43:42
771
原创 Spring 自定义命名空间并解析 NameSpaceHandler
编写Schema文件自定义NameSpaceHandler 绑定命令空间自定义 BeanDefinitionParse 解析XML作为bd的配置元信息命名空间映射XML@Override@Override@Override。
2023-08-17 22:13:22
363
原创 Spring @Autowired 注解原理
> initializeBean() -> BeanPostProcessor.postProcessBeforeInitialization() 执行前置方法 -> invokeInitMethods() 反射调用初始化方法 -> BeanPostProcessor.postProcessAfterInitialization 执行后置方法。想搞清楚@Autowried注入原理,先得知道这些接口对应方法执行的先后顺序 跟踪ApplicationContext.refresh方法,调用链路如下。
2023-07-17 21:34:32
1885
原创 ASM Java字节码操作框架入门学习 输出Hello World
/ 完成类的定义// 将生成的字节码写入文件或加载到内存中@Override// 加载并实例化Hello类Class
2023-07-09 21:05:31
574
原创 ThreadPoolExecutor 线程池源码学习
当创建的是核心线程时,如果没有设置allowCoreThreadTimeOut的值true(默认值为false),则将调用queue.take方法,一直阻塞,直到队列中有任务。阅读源码部分我们看的是调用线程的execute方法,java.util.concurrent.ThreadPoolExecutor#runWorker 抛出异常后,completedAbruptly为true,java.util.concurrent.ThreadPoolExecutor#processWorkerExit。
2023-07-09 18:02:15
326
原创 CyclicBarrier 源码
参数 n 为等待的线程数参数 barrierAction 为当等待的线程达到 参数 parties 时执行的线程任务可以看到此处对 parties 的值进行了限制 如果少于0将抛出运行时异常 IllegalArgumentException。
2023-07-06 21:41:27
268
原创 CountDownLatch 源码
state是一个volatile类型的变量,保证了对它的读写操作的可见性,以及禁止了指令重排序,从而确保了线程之间对state的操作是正确的和可靠的。
2023-07-03 22:47:50
368
原创 Seata学习 @GlobalTransactional注解的作用
引入 seata与SpringBoot的整合包后,基于SpringBoot的自动配置,会往Spring容器中自动添加 SeataAutoConfiguration而 SeataAutoConfiguration 配置类又会往容器中添加bean GlobalTransactionScanner。
2023-06-15 21:35:08
3986
原创 Seata服务端的启动过程 学习记录
当通道中有消息时,将调用io.seata.core.rpc.netty.AbstractNettyRemotingServer.ServerHandler#channelRead方法。推荐各位学习seata的朋友看一看】resource下的META-INF文件夹中的service文件,根据要加载类的权限定类名找对应的文件,文件中存放着对应需要加载的类的权限定类型。属性将缓存4个实现类,对应seata的四种模式,XA,AT,TCC,SAGA,实现类同样也是通过SPI机制加载,并在完成加载后缓存到。
2023-06-11 15:00:56
1840
原创 《深入理解Java虚拟机》Java虚拟机的监控及诊断工具相关命令行
查看当前系统正在运行的java进程相关参数-l 打印模块名以及包名-v 打印虚拟机相关参数-m 打印传给主类的参数-mlv 以上内容都打印。
2023-05-23 20:55:35
546
原创 《深入理解Java虚拟机》 JAVA 字节码指令 基础
然后调用bispush,将6压到栈顶…iconst 表示加载一个常量,常量的值范围在 -1 ~5 之间,bipush 加载一个字节所能表示的int值,sipush加载两个字节所能表示的int值,ldc 则能加载任意值。Java 虚拟机将局部变量区当成一个数组,如果是实例方法,那么局部变量表这个数组的0号下标位置就是就是this指针,1号下标位置就是 参数,后面依次存放局部变量。因为调用的是实例方法,所以本地变量表序号0的位置上是 this指针,1号上是 方法参数 i,后面依次是方法从上往下的局部变量。
2023-05-18 21:10:35
901
1
原创 《深入理解Java虚拟机》Java语法糖 -自动装拆箱与泛型
如下的代码对应的字节码可以看偏移量10 和 偏移量25的指令 ,通过调用对应包装类的ValueOf方法完成装箱,调用intValue方法完成拆箱。
2023-05-16 21:37:06
167
原创 《深入理解Java虚拟机》JVM是怎么实现方法的动态调用的?方法句柄
方法句柄是一个强类型的,能够被直接执行的引用[2]。该引用可以指向常规的静态方法或者实例方法,也可以指向构造器或者字段。当指向字段时,方法句柄实则指向包含字段访问字节码的虚构方法,语义上等价于目标字段的 getter 或者 setter 方法,注意是语义上,并不是实际等于,可能实际上某个字段的get方法并不不是获取字段本身的值。方法句柄 由 方法的形参列表和返回值类型进行匹配,与方法名和类名无关。方法句柄的访问权限由LookUp的创建位置决定,与句柄的创建位置无关。在执行时不会被权限修饰符限制。
2023-05-14 15:44:25
629
原创 Fidder 抓iPhone 安卓手机包 教程 解决证书过期问题
链接:https://pan.baidu.com/s/12xgEU8YyE-CfWMbPIWqWMw?链接:https://pan.baidu.com/s/1V9DIGuWpB51ZjmsAsNquDw?之后在iPhone上用Safari访问 ipv4地址:8888 (默认4个8)电脑端下载CertMaker for iOS and Android。设置 –> 通用 –> 关于本机 –> 证书信息设置。下载后打开运行,重新打开Fidder。微信扫描关注公众号 回复 视频验资。
2023-05-12 15:31:35
1043
原创 《深入理解Java虚拟机》JVM是如何实现反射的?
改为动态实现的 15 临界值我们可用通过修改 Dsun.reflect.inflationThreshold 的值修改,如果你的项目中大量使用到了反射去调用方法,而不想产生大量动态生成类,可用设置 Dsun.reflect.inflationThreshold = int.max。由于 java 到 c++ 方法 再到 java 方法的这一过程非常耗时,因此 委派类除了可以委派给本地方法实现外,还能委派给动态方法实现。如果你不想使用本地实现去调用目标方法,你可以执行时添加如下的参数。
2023-05-12 14:41:17
195
原创 《Java虚拟机学习》 asmtools 字节码汇编器使用 与 JVM识别方法重载 的思考
对于不怎么占用资源的代码,可以采用解释执行的方式运行;而对于小部分的热点代码,采用即时编译将其转换成机器码执行,降低资源的占用。当我们保存java文件后,首先由编译器编译成class文件,然后通过Java虚拟机将class文件转换成字节码文件。HotSpot 虚拟机采用的是混合模式,首先解释执行字节码,将其中反复执行的热点代码,以方法为代码,进行即时编译。首先将java文件加载到java虚拟机中,然后由虚拟机将类元信息存储在 虚拟机的方法区中。即时编译 : 以方法为单位,将方法中的所有字节码编译成机器码。
2023-05-07 21:14:16
580
原创 《Java虚拟机学习》JVM虚拟机是如何执行方法
对于不怎么占用资源的代码,可以采用解释执行的方式运行;而对于小部分的热点代码,采用即时编译将其转换成机器码执行,降低资源的占用。当我们保存java文件后,首先由编译器编译成class文件,然后通过Java虚拟机将class文件转换成字节码文件。HotSpot 虚拟机采用的是混合模式,首先解释执行字节码,将其中反复执行的热点代码,以方法为代码,进行即时编译。首先将java文件加载到java虚拟机中,然后由虚拟机将类元信息存储在 虚拟机的方法区中。即时编译 : 以方法为单位,将方法中的所有字节码编译成机器码。
2023-05-07 20:24:25
583
原创 《Java虚拟机学习》 java代码的运行过程
对于不怎么占用资源的代码,可以采用解释执行的方式运行;而对于小部分的热点代码,采用即时编译将其转换成机器码执行,降低资源的占用。当我们保存java文件后,首先由编译器编译成class文件,然后通过Java虚拟机将class文件转换成字节码文件。HotSpot 虚拟机采用的是混合模式,首先解释执行字节码,将其中反复执行的热点代码,以方法为代码,进行即时编译。首先将java文件加载到java虚拟机中,然后由虚拟机将类元信息存储在 虚拟机的方法区中。即时编译 : 以方法为单位,将方法中的所有字节码编译成机器码。
2023-05-06 21:05:47
1046
原创 处理MySQL Waiting for table metadata lock 异常
当对某个表执行DDL 语句时,将会自动给此表加上 mdl 元数据write 锁,直到事务提交才会释放。此锁的作用是为了保护 表结构的完整性、元数据的一致性。模式一下生产环境 如下图所示 : session A 开启了一个事务 并且执行DQL。此时 session B 需要对该表的两个字段添加全文索引。查看相关的进程列表 发现一直在等待获取 mdl 元数据锁。可以看到session B 立马执行成功。查看表锁情况 可以看到读写锁互斥了。根据提示执行 kill 11。
2023-04-12 10:00:30
197
seata 事务执行失败 分支事务一直是2
2023-05-19
IDEA使用DEBUG导致延迟加载失效?
2022-08-14
go 原始容量大于1024 扩容机制问题求解
2022-06-27
这个IDEA的功能在哪里 找了半天没找到
2022-04-04
三元运算符关于类型提升的问题
2022-01-01
映客一面题 社招 19题
2021-11-22
静态代码块和类的加载问题求解
2021-10-27
java编码转换问题 不改变文件的编码格式还原内容
2021-10-12
桌面有个文本文件是GBK编码格式的,怎么用IO流读取字符串内容
2021-10-12
为什么compareto返回-1是降序,返回为正是升序,底层是红黑树吗?
2021-10-08
ArrayList带参创建对象为什么 initialCapacity 的值一直是 1
2021-09-29
接口的静态成员为什么不能用实现类的对象名调用
2021-09-29
关于在一个java文件中写两个类 private私有属性的问题
2021-09-24
++放前后的问题 计算过程的问题
2021-09-23
java重新执行main方法创建对象,为什么内存地址相等
2021-09-15
关闭字节缓冲流还需要关闭字节流吗
2021-08-13
zookeeper无法注册服务提示bean创建失败 120 120 三天了 求jiu
2021-08-04
添加dubbo的@service注解后tomcat无法启动
2021-08-03
dubbo 在类上加了@Service tomcat就无法启动了 去掉又能正常启动 ?
2021-08-03
web项目打jar以及运行都没问题,打war包就报错
2021-07-25
springmvc添加分页助手报错
2021-07-23
springMVC首页乱码
2021-07-20
进来kk报错maven报错 Compilation failure
2021-07-09
@Autowired 写在变量上取不到值,用在参数位置就能取到值 什么原因
2021-07-07
大lao进来看看 Failed to load ApplicationContext
2021-07-06
Mybatis报错 找不到映射文件
2021-07-04
TypeHandler转换失败 都配置了数据没有转换
2021-07-03
Mysql主键自动增长问题 删除了前面的主键 后面怎么让他在上一个主键的基础上+1
2021-07-02
Mysql主键自动增长问题 删除了前面的主键 后面怎么让他在上一个主键的基础上+1
2021-07-02
js小问题 群里看到的
2021-06-30
加载配置文件时, location= 与 location=classpath: 的区别
2021-06-30
c:forEach 的问题
2021-06-29
druid.properties找不到 大lao进来看看吧
2021-06-28
[face]emoji:010.png[/face]
2021-06-28
maven项目无法监听ServletContext创建
2021-06-27
maven pom.xml添加新的依赖就报 错误: 不支持发行版本 5
2021-06-27
TA创建的收藏夹 TA关注的收藏夹
TA关注的人