自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

纸上得来终觉浅,绝知此事要躬行

Java领域优质创作者 新星计划·第三季【Java后端】第二名

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

原创 Sharding-JDBC 使用 Nacos 作为配置中心 【下 代码实战】

由上一篇博文我们已经知道了 Sharding-JDBC 是基于 Java SPI 机制去加载 并实例化 ShardingSphereDriverURLProvider 的实现类ShardingSphereDriverURLProvider接口有两个抽象方法 accept()方法用于判断当前的url是否满足条件,如果满足将调用 getContent ()方法获取数据源配置信息。

2024-06-12 21:53:04 448

原创 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 1033

原创 我的创作纪念日

三年的创作旅程中,我不仅收获了技术上的成长,更重要的是获得了社区的认可与支持。我的文章得到了许多粉丝的关注,每一次正向的反馈,无论是赞、评论还是阅读量,都是我前行的动力。我的职业规划是成为一名技术领域的专家,为行业发展贡献自己的力量,同时继续享受创作带来的乐趣和成就感。日复一日,我在日常学习中记录了无数次的挑战和突破,通过文章分享我的技术心得,与同道中人进行深入的技术交流。每天的工作和学习都为我的创作提供了丰富的素材和灵感,而我的创作也反过来丰富了我的技术视野和思维深度。

2024-06-26 11:27:47 166

原创 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 612

原创 Java初、中级程序员面试必备的知识脑图 超详细 超好用

支持绘制流程图、思维导图、架构图、网络图等210+图形图表。Redis导图一键保存。Mysql导图一键保存。设计模式导图一键保存。

2024-06-14 08:43:47 464

原创 【Java】单例模式的五种实现方式以及为什么推荐枚举类

构造私有 静态成员 提供方法获取测试一下由于 是静态的 不管你有没有调用方法去拿这个实例,他也会先加载到内存中同时,还能通过反射创建出多个对象。

2024-06-11 17:09:14 621

原创 【Netty 源码】NioEventLoop 源码分析 篇二

即使无客户端连接,NIO照样不断的从select本应该阻塞的中wake up出来,导致CPU100%问题。

2024-06-08 13:50:15 917

原创 【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 873

原创 【Seata源码学习 】篇五 注册分支事务

回到事务模版方法类TransactionalTemplate中beginTransaction 开启全局事务我们已经在上一篇看过了,最终会将TC返回到XID绑定到RootContext中,并且TC会将全局事务会话持久化,通常我们使用DB,那么将会往seata数据库的global_table中插入一条数据。接下来就要执行拦截器链路,最后一个拦截器执行完毕后如果无异常就要执行目标方法。调用目标方法通常会使用到第三方的RPC框架,例如 Fegin,RestTemplate等等。

2023-12-29 17:31:04 958

原创 Java全知识脑图 适合初、中级Java程序员 面试必备

支持绘制流程图、思维导图、架构图、网络图等210+图形图表。Redis导图一键保存。Mysql导图一键保存。设计模式导图一键保存。

2023-12-27 15:02:50 1017 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 507

原创 【Seata源码学习 】篇三 seata客户端全局事务开启、提交与回滚

我们已经知道 GlobalTransactionScanner 会给bean的类或方法上面标注有@GlobalTransactional 注解 和 @GlobalLock的 添加一个 advisor (DefaultPointcutAdvisor ,advisor = 绑定了PointCut 的 advise)而此处的 DefaultPointcutAdvisor 的 advice 为 GlobalTransactionalInterceptor,PointCut 为 Pointcut.TRUE(匹配

2023-12-27 14:54:34 635

原创 【Seata源码学习 】 篇二 TM与RM初始化过程

/调用父类构造器 用于处理消息的线程池//当前事务角色//创建 NettyClientBootstrap 实例//消息处理器//channel管理器//设置处理消息的线程池@Override//周期线程池 第一次在60秒后通过连接管理器重新建立链接,之后每10秒重新建立一次链接@Override//启动一个周期线程池,每3秒检查一次请求是否超时//启动netty客户端启动过程中一共设置了4个消息处理器IdleStateHandler 处理心跳。

2023-12-22 20:07:18 858

原创 【Seata源码学习 】 扫描@GlobalTransaction注解 篇一

如果你项目中使用的是MybatisPlus,那么通常会被org.springframework.transaction.interceptor.BeanFactoryTransactionAttributeSourceAdvisor创建代理类。调用org.springframework.aop.framework.autoproxy.AbstractAutoProxyCreator#createProxy,将在每个bean实例化后执行 postProcessAfterInitialization 方法,

2023-12-22 20:06:14 947

原创 Spring源码分析 @Autowired 是怎样完成注入的?究竟是byType还是byName亦两者皆有

如果想达到我们想要的效果 , 那么在核心线程数上限,存放线程任务时,报一个假消息,让线程池误认为工作队列已经满了这时就会创建非核心线程,执行线程任务, 如果非核心线程数也上限了,那么就会执行拒绝策略我们设想的是,非核心线程数上限了,这时把线程任务才真正的丢到工作队列中去 那么相应的,就应该自定义一个拒绝策略所以我们需要重写工作队列和拒绝策略,当然最好自己创建线程工厂package com.sgg.javaerror100.弹性线程池;

2023-12-22 20:05:04 1082

原创 【Java】如何改变线程池的工作模式

如果想达到我们想要的效果 , 那么在核心线程数上限,存放线程任务时,报一个假消息,让线程池误认为工作队列已经满了这时就会创建非核心线程,执行线程任务, 如果非核心线程数也上限了,那么就会执行拒绝策略我们设想的是,非核心线程数上限了,这时把线程任务才真正的丢到工作队列中去 那么相应的,就应该自定义一个拒绝策略所以我们需要重写工作队列和拒绝策略,当然最好自己创建线程工厂package com.sgg.javaerror100.弹性线程池;

2023-12-18 17:43:44 378

原创 分享 JVM 、JUC、Redis、MySQL 知识脑图 适合Java初中级开发

支持绘制流程图、思维导图、架构图、网络图等210+图形图表。Redis导图一键保存。Mysql导图一键保存。设计模式导图一键保存。

2023-12-18 15:12:30 667

原创 【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 537

原创 Spring PropertyEditor 使用案例

【代码】Spring 自定义类型转换器。

2023-08-29 16:43:27 219

原创 Spring 自定义命名空间并解析 NameSpaceHandler

编写Schema文件自定义NameSpaceHandler 绑定命令空间自定义 BeanDefinitionParse 解析XML作为bd的配置元信息命名空间映射XML@Override@Override@Override。

2023-08-17 22:13:22 296

原创 Spring @Autowired 注解原理

> initializeBean() -> BeanPostProcessor.postProcessBeforeInitialization() 执行前置方法 -> invokeInitMethods() 反射调用初始化方法 -> BeanPostProcessor.postProcessAfterInitialization 执行后置方法。想搞清楚@Autowried注入原理,先得知道这些接口对应方法执行的先后顺序 跟踪ApplicationContext.refresh方法,调用链路如下。

2023-07-17 21:34:32 1613

原创 ASM Java字节码操作框架入门学习 输出Hello World

/ 完成类的定义// 将生成的字节码写入文件或加载到内存中@Override// 加载并实例化Hello类Class

2023-07-09 21:05:31 508

原创 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 284

原创 CyclicBarrier 源码

参数 n 为等待的线程数参数 barrierAction 为当等待的线程达到 参数 parties 时执行的线程任务可以看到此处对 parties 的值进行了限制 如果少于0将抛出运行时异常 IllegalArgumentException。

2023-07-06 21:41:27 241

原创 CountDownLatch 源码

state是一个volatile类型的变量,保证了对它的读写操作的可见性,以及禁止了指令重排序,从而确保了线程之间对state的操作是正确的和可靠的。

2023-07-03 22:47:50 247

原创 Seata学习 @GlobalTransactional注解的作用

引入 seata与SpringBoot的整合包后,基于SpringBoot的自动配置,会往Spring容器中自动添加 SeataAutoConfiguration而 SeataAutoConfiguration 配置类又会往容器中添加bean GlobalTransactionScanner。

2023-06-15 21:35:08 3729

原创 Seata客户端的启动过程 学习记录

将在SpringBoot启动时往容器中添加4个类。

2023-06-13 20:25:35 856

原创 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 1697

原创 《深入理解Java虚拟机》Java虚拟机的监控及诊断工具相关命令行

查看当前系统正在运行的java进程相关参数-l 打印模块名以及包名-v 打印虚拟机相关参数-m 打印传给主类的参数-mlv 以上内容都打印。

2023-05-23 20:55:35 503

原创 《深入理解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 842 1

原创 《深入理解Java虚拟机》Java语法糖 -自动装拆箱与泛型

如下的代码对应的字节码可以看偏移量10 和 偏移量25的指令 ,通过调用对应包装类的ValueOf方法完成装箱,调用intValue方法完成拆箱。

2023-05-16 21:37:06 130

原创 《深入理解Java虚拟机》JVM是怎么实现方法的动态调用的?方法句柄

方法句柄是一个强类型的,能够被直接执行的引用[2]。该引用可以指向常规的静态方法或者实例方法,也可以指向构造器或者字段。当指向字段时,方法句柄实则指向包含字段访问字节码的虚构方法,语义上等价于目标字段的 getter 或者 setter 方法,注意是语义上,并不是实际等于,可能实际上某个字段的get方法并不不是获取字段本身的值。方法句柄 由 方法的形参列表和返回值类型进行匹配,与方法名和类名无关。方法句柄的访问权限由LookUp的创建位置决定,与句柄的创建位置无关。在执行时不会被权限修饰符限制。

2023-05-14 15:44:25 593

原创 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 903

原创 《深入理解Java虚拟机》JVM是如何实现反射的?

改为动态实现的 15 临界值我们可用通过修改 Dsun.reflect.inflationThreshold 的值修改,如果你的项目中大量使用到了反射去调用方法,而不想产生大量动态生成类,可用设置 Dsun.reflect.inflationThreshold = int.max。由于 java 到 c++ 方法 再到 java 方法的这一过程非常耗时,因此 委派类除了可以委派给本地方法实现外,还能委派给动态方法实现。如果你不想使用本地实现去调用目标方法,你可以执行时添加如下的参数。

2023-05-12 14:41:17 145

原创 《Java虚拟机学习》 asmtools 字节码汇编器使用 与 JVM识别方法重载 的思考

对于不怎么占用资源的代码,可以采用解释执行的方式运行;而对于小部分的热点代码,采用即时编译将其转换成机器码执行,降低资源的占用。当我们保存java文件后,首先由编译器编译成class文件,然后通过Java虚拟机将class文件转换成字节码文件。HotSpot 虚拟机采用的是混合模式,首先解释执行字节码,将其中反复执行的热点代码,以方法为代码,进行即时编译。首先将java文件加载到java虚拟机中,然后由虚拟机将类元信息存储在 虚拟机的方法区中。即时编译 : 以方法为单位,将方法中的所有字节码编译成机器码。

2023-05-07 21:14:16 518

原创 《Java虚拟机学习》JVM虚拟机是如何执行方法

对于不怎么占用资源的代码,可以采用解释执行的方式运行;而对于小部分的热点代码,采用即时编译将其转换成机器码执行,降低资源的占用。当我们保存java文件后,首先由编译器编译成class文件,然后通过Java虚拟机将class文件转换成字节码文件。HotSpot 虚拟机采用的是混合模式,首先解释执行字节码,将其中反复执行的热点代码,以方法为代码,进行即时编译。首先将java文件加载到java虚拟机中,然后由虚拟机将类元信息存储在 虚拟机的方法区中。即时编译 : 以方法为单位,将方法中的所有字节码编译成机器码。

2023-05-07 20:24:25 527

原创 《Java虚拟机学习》 java代码的运行过程

对于不怎么占用资源的代码,可以采用解释执行的方式运行;而对于小部分的热点代码,采用即时编译将其转换成机器码执行,降低资源的占用。当我们保存java文件后,首先由编译器编译成class文件,然后通过Java虚拟机将class文件转换成字节码文件。HotSpot 虚拟机采用的是混合模式,首先解释执行字节码,将其中反复执行的热点代码,以方法为代码,进行即时编译。首先将java文件加载到java虚拟机中,然后由虚拟机将类元信息存储在 虚拟机的方法区中。即时编译 : 以方法为单位,将方法中的所有字节码编译成机器码。

2023-05-06 21:05:47 983

原创 Java秒杀数字藏品并推送微信消息

记录下自己的token。

2023-05-06 09:47:30 216 1

原创 《并发编程学习》 写一个简单消费生产者模式的的线程池

【代码】《并发编程学习》 写一个简单消费生产者模式的的线程池。

2023-04-12 16:08:52 63

原创 处理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 143

1Z0-808 甲骨文JAVA认证考试 2023真题

1Z0-808 甲骨文JAVA认证考试 2023真题 超级靠谱 考试必备

2023-04-06

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

maven工程在父工程中用tomcat7插件报错 UserController is not a Servlet

2021-11-16

Unable to open debugger port (127.0.0.1:63477): "Address already in use: NET_Bind"

2021-11-09

静态代码块和类的加载问题求解

2021-10-27

求解Address already in use: JVM_Bind TCP客户端服务端案例报错 静态代码块多次执行

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

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关注的人

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