自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(25)
  • 收藏
  • 关注

原创 Redis源码安装 Failed to configure LOCALE for invalid locale name 报错解决

源码安装之后 报错 Failed to configure LOCALE for invalid locale name。即是在 /etc/sysctl.conf 文件中添加 vm.overcommit_memory = 1 然后重启。或者执行命令 sysctl vm.overcommit_memory=1。然后在 /etc/profile 环境变量中添加配置。在配置之前先查看当前系统中存在哪些字符集。在告警中已经给出了解决方案。只需要在环境变量中添加。在启动时还存在以下告警。

2025-08-10 17:42:03 386

原创 dubbo源码学习4-dubbo的SPI机制详解

Dubbo SPI机制使用指南:通过FrameworkModel.defaultModel().getExtensionLoader()获取接口的所有实现类。实现类需在META-INF/dubbo/internal/、META-INF/dubbo/或META-INF/services/目录下创建以接口全限定名命名的文件,内容为"name=实现类全路径"。Dubbo通过LoadingStrategy定义SPI加载路径,支持@SPI指定默认实现、@Activate和@Adaptive注解配置

2025-07-25 00:18:13 533

原创 JUC并发编程-ReentrantLock源码分析

ReentrantLock是Java并发包中的可重入互斥锁实现,基于AQS框架构建,提供公平锁和非公平锁两种模式。非公平锁默认实现通过直接CAS尝试获取锁提高吞吐量,而公平锁则严格按队列顺序获取。锁的实现通过state变量记录重入次数,并通过同步队列管理等待线程。加锁过程包含CAS操作、队列排队及中断处理,解锁时释放资源并唤醒后续线程。相比synchronized,ReentrantLock提供了更灵活的锁控制机制。

2025-07-19 17:55:12 639

原创 dubbo源码学习3-dubbo反射调用服务源码分析

本文分析了Dubbo框架中服务调用反射机制的性能优化原理。研究发现,Dubbo默认采用Javassist动态字节码技术而非JDK原生反射,通过生成目标类的Wrapper包装类来直接调用方法,避免了JDK反射的性能损耗。具体实现上,Dubbo通过SPI机制选择JavassistProxyFactory创建代理,构建继承Wrapper的包装类,重写invokeMethod方法实现高效调用。性能对比显示,Javassist方案调用速度与普通类相当,仅需付出类生成的开销,而JDK反射调用比直接调用慢10-20倍

2025-07-12 17:42:40 617

原创 dubbo源码学习2-dubbo协议源码分析

摘要: Dubbo协议是一种基于TCP长连接的二进制RPC通信协议。其数据包由16字节消息头和变长消息体组成,消息头包含magic值(-38,-69)、flag(请求/响应/事件标志)、status、requestId和数据长度。解码时通过Netty的InternalDecoder处理,ExchangeCodec校验magic、解析flag位运算判断消息类型,并调用DecodeableRpcInvocation/Result解码消息体。Dubbo通过保存readerIndex解决半包问题,确保数据完整性,最

2025-07-06 13:01:38 759

原创 dubbo源码学习1-服务提供方接入执行源码分析

摘要:Dubbo服务端基于Netty框架开发,其请求处理流程依次通过NettyServerHandler接收数据包,经MultiMessageHandler、HeartbeatHandler和AllChannelHandler处理后提交线程池异步执行。后续步骤包括解码(DecodeHandler)、协议处理(HeaderExchangeHandler/DubboProtocol)和过滤器链调用(含15个不同功能的过滤器),最终由AbstractProxyInvoker完成反射调用。

2025-07-05 16:28:03 528

原创 SEATA源码学习2-@GlobalTransactional 注解原理

开启事务流程,transactionManager开启事务则是向 seata server 发送RPC请求,获取都到了全局事务Id XID,对于seata客户端来说,提交事务和回滚事务,都是由transactionManager根据XID发送RPC请求到seata-server来进行提交和回滚。对于seata的AT模式来说,一条SQL语句执行即是一条分支事务,SQL语句执行完准备提交的时候,会向seata-server注册分支事务,seata客户端对数据源进行了代理。seata执行全局事务基本流程。

2025-06-29 20:31:29 555

原创 Sentinel源码学习2-熔断降级原理

本文介绍了服务熔断与降级的区别与应用。服务熔断是指对不稳定资源进行快速失败处理,避免系统资源耗尽,Sentinel提供慢调用比例、异常比例、异常数三种熔断策略。服务降级则是在服务失败时返回保底数据,Sentinel通过Spring AOP实现降级逻辑。文章还详细解析了Sentinel中Entry机制的工作原理,包括资源入口的创建、责任链处理流程,以及在Spring MVC、Feign和注解场景下的具体实现方式,展示了Sentinel对系统高可用的保障机制。

2025-06-23 23:02:16 356

原创 Sentinel源码学习1-sentinel基本原理源码分析

Sentinel核心原理分析:通过责任链机制实现流量控制。SlotChain由7个功能槽组成,包括流量统计(StatisticSlot)、限流(FlowSlot)、熔断(DegradeSlot)等,采用SPI机制构建链表结构。请求进入时依次经过各槽处理,每个槽对应Dashboard中的不同规则配置(如流控规则、熔断规则)。源码分析显示,DefaultSlotChainBuilder通过双检锁构建责任链,各槽按预设顺序执行特定功能。系统提供扩展点支持自定义Slot,但整体功能聚焦于限流熔断等核心场景。该分析揭

2025-06-22 23:28:57 628

原创 OpenFeign源码学习1-OpenFeign启动加载流程,执行流程

OpenFeign核心流程分析 启动流程:通过@EnableFeignClients注解触发,FeignClientsRegistrar扫描并注册FeignClient的BeanDefinition。IOC容器创建时生成JDK动态代理对象。 执行流程:调用时通过代理对象拦截,由MethodHandler处理请求。FeignBlockingLoadBalancerClient负责负载均衡和HTTP请求,默认使用HttpURLConnection实现网络通信。

2025-06-20 00:02:02 615

原创 Nacos源码学习5-Nacos配置中心配置加密原理

3、使用JDK 的SPI机制,注入该实现类,使Nacos可以发现,在resource文件夹下新建META-INF/services 文件夹,并创建文件com.alibaba.nacos.plugin.encryption.spi.EncryptionPluginService,注意该文件不需要后缀名,文件内容为刚刚创建的实现类的全类名,如果有多个,则换行就行。1、将配置文件加密之后上传到Nacos配置中心,并注意命名规范,cipher-${ALGORITHM}-xxxx.properties 的命名方式。

2025-06-14 18:50:27 1551 3

原创 nacos源码学习4-Nacos配置加载原理

本文深入分析了Spring Boot应用集成Nacos配置中心的实现原理。主要内容包括: 配置加载分为两个阶段: 第一阶段通过spring.config.import加载指定配置文件 第二阶段加载与应用名同名的配置文件 详细解析了第一阶段配置加载流程: NacosConfigDataLoader负责加载配置 通过ConfigDataEnvironmentPostProcessor处理环境准备事件 ConfigDataImporter解析并加载配置数据 介绍了Nacos特定实现

2025-06-11 23:24:33 649

原创 nacos源码学习3-nacos是如何注册到nacos服务端的

nacos自动注册的流程比较简单,主要就三步,1、监听的web容器启动事件,3、向服务端发送注册请求。

2025-05-22 22:06:09 316

原创 nacos源码学习2-配置自动刷新原理

通过 RefreshEvent 事件中的上下文信息,找到当前环境变量 environment 中,发现在环境变量中的key已经是变成了发布后的配置文件内容,因此我们可以推测,当配置刷新之后,nacos客户端先将配置刷新到环境变量中,然后通过配置绑定,将环境变量中的配置刷新到对应的配置类中。,这个方法的参数是一个字符内容 contentTmp ,通过查看变量发现,contentTmp的内容其实就是在nacos服务端发布的配置内容,监听的配置文件则是 nacos-service.properties。

2025-05-21 22:29:29 1038

原创 SEATA源码学习1-源码项目启动篇

java: 找不到符号符号: 变量 VersionInfo位置: 类 orgjava : 找不到符号符号 : 变量 VersionInfo 位置 : 类 org . apache . seata . core . protocol . Versionjava : 找不到符号符号 : 变量 VersionInfo 位置 : 类 org . apache . seata . core . protocol . Versionjava : 找不到符号。

2025-05-20 23:54:43 1293

原创 Mybatis源码学习-sql执行流程

在mapperRegistry 从已知的knownMappers 一个集合中获取 Mapper代理对象工厂,再由MapperProxyFactory 去创建一个实例,最终返回,BaseExecutor 中有一个 localCache ,应该就是Mybatis的一级缓存,CachingExecutor 中的是二级缓存,当缓存中不存在时,则从数据库中查询。在 mapperRegistry 中有一个 mapperRegistry的方法,我们在这里打一个断点,然后重新启动,观察是什么时候进入到这个方法的。

2025-05-18 16:26:14 1064

原创 nacos源码学习1-源码项目启动篇

在GitHub上搜索nacos之后点进去是默认develop分支,点击绿色code按钮,会弹出git连接,一般网络都会比较差,可以尝试使用手机流量,直接下载zip文件,然后解压,或者科学上网,但是一般git pull 代码都会比较慢,所以还是推荐先使用手机网络下载zip。源码下载后,打开项目,一般都比较难找到启动类,这里我给大家贴出来,是在 console 模块下的nacos启动类。在前端项目中的 README.md 的文件中,就已经包含了前端项目的启动步骤。如下图,已经启动完成了。

2025-04-04 20:37:19 808

原创 记录解决OSError: libsox.so: cannot open shared object file: No such file or directory 问题

libsox.so: cannot open shared object file: No such file or directory

2024-01-19 12:47:31 5008 1

原创 如何Uniapp中嵌入H5,并且在H5中跳转到APP的指定页面

有一个需求是,在app中嵌入一个H5页面,H5是一个网络页面,不在app项目里,APP可以打开H5页面,实现单点登录,并且在H5 页面中打开APP指定的页面。在uniapp中,有一个web-view组件,这就相当于一个浏览器组件,可以用来承载网页的容器,会自动铺满整个页面。src是H5的地址,可以是任何网址,与APP的地址什么的没有关系,也可以是www.baidu.com。这个方法是跳转到APP的指定页面,url就是APP页面的路径,在APP项目中目录结构如下。在这里我们提取出关键的代码。

2023-04-04 09:22:57 16568 8

原创 Git更新代码时报错,unable to access ‘https://gitlab..git/‘: SSL certificate problem: certificate has expired

更新代码的时候突然报错,对比了一下同事的项目更新代码都没问题SSL certificate problem: certificate has expired意思是证书过期了,解决方法是:打开 git bashgit config –global http.sslVerify false

2021-10-08 09:54:28 4352

原创 Vue + springboot AES 对称解密前后端数据传输

Vue + springboot AES 对称解密前后端数据传输后端导入maven<!--加密算法--> <dependency> <groupId>commons-codec</groupId> <artifactId>commons-codec</artifactId> <version>1.14</version&gt

2021-08-27 19:54:49 1302 1

原创 Zookeeper异常ConnectionLossException: KeeperErrorCode = ConnectionLoss for / 问题解决大全

zookeeper报ConnectionLossException: KeeperErrorCode = ConnectionLoss for 异常我的开发环境是Windows开发zookeeper客户端程序,zookeeper集群安装在本地虚拟机上centos 7经过自己踩坑和查找博客,发现报此异常有三种原因一是 : zookeeper服务没有启动,这是最low的错误二是 : centos防火墙未关闭,导致连接不上,关于关闭防火墙这里不详细描述三是 : 没有配置Windows的host文件,

2020-08-26 11:51:19 11602 3

原创 SpringMV使用MultipartFile上传文件出现空指针异常

学习SpringMV使用MultipartFile上传文件出现空指针异常三大原因原因1:未配置SpringMVC配置文件编写配置文件有两种方式第一种默认偷懒式这种方式一般情况来说是没有问题的,就是没有去配置属性<!-- MultipartResvler解析器 --><bean id="multipartResolver" class="org.springframew...

2020-02-09 11:29:12 2713 1

原创 使用UDP传输消息对象

使用UDP传输消息对象最近开发以及即时聊天项目,涉及到socket网络编程这一块,完全自己从零开始敲代码,从最底层开始,其中一个很关键的点就是服务器收到消息的转发功能,需要使用一个对象封装数据,以及接收者受到该对象后进行解析不说了,直接上代码用于封装数据的对象这个对象一定要实现Serializable接口,以及在接收方和发送方中的Student对象的包名一定要一致以下是我的项目结构...

2019-11-26 22:44:06 555

原创 Android Studio开发使用SQLite3数据库

这是我写的第一篇博客,之前好久就想写点东西了,用来记录一下自己的学习进度,目前也是刚刚学习到SQLite3数据库的使用我认为第一次使用要注意的是如何使用SQLite3的数据库操作工具,操作数据库有两种方式1是使用安卓SDK自带的adb工具2是使用windows的命令行操作模式安卓SDK自带的工具在AndroidStudioSDK\platform-tools目录下有一个adb.exe应用...

2019-11-26 22:10:54 1495

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

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