自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(110)
  • 资源 (1)
  • 收藏
  • 关注

原创 Java加载 Grovy 类实现类的自动切换

Grovy 动态加载代码。

2025-03-28 16:01:37 112

原创 浅聊 ConfigurationClassPostProcessor、浅用SpringBoot 自动配置

SpringBoot自动配置的意义 通过条件化配置机制,根据项目依赖与环境自动装配组件,消除手动配置样板代码。ConfigurationClassPostProcessor的作用 作为BeanFactoryPostProcessor的核心实现:配置类解析:处理@Configuration类,解析@ComponentScan、@Bean等注解。注册Bean定义:将@Import引入的配置类、@Component扫描的组件转化为BeanDefinition动自动配置:处理@EnableAutoConfig

2025-03-06 11:15:32 712

原创 Dubbo高级特性

Dubbo框架提供了对服务调用结果进行缓存的特性,用于加速热门数据的访问速度,Dubbo 提供声明式缓存,以减少用户加缓存的工作量。为了使 Dubbo 能够识别你的自定义缓存工厂,你需要在 `META-INF/dubbo` 目录下创建一个文件,文件名为 `org.apache.dubbo.cache.CacheFactory`,并在文件中指定你的实现类。最后,你需要在 Dubbo 的配置文件中指定使用自定义的缓存工厂。这个接口定义了缓存的基本操作,如 `put`、`get` 和 `remove`。

2025-01-07 13:36:35 750

原创 Dubbo扩展点加载机制

加载机制中已经存在的一些关键注解,如@SPI、©Adaptive> ©Activateo然后介绍整个加载机制中最核心的ExtensionLoader的工作流程及实现原理。最后介绍扩展中使用的类动态编译的实现原理。

2025-01-03 17:49:30 800

原创 位运算中的 AND &、OR | 、NOT ~ 、^ XOR 的使用

位运算基础知识与XOR 异或的使用场景

2024-12-05 15:48:46 759

原创 VM 安装Ubuntu20

为虚拟机命一个名,设置虚拟机文件保存的位置。最后一步,确定虚拟机的相关参数。设置计算机名与用户账号密码。

2024-05-08 15:03:21 419

原创 利用 Python 从 weixin 公众号下载保存有声小说

本人在喜播平台上关注学习到评书,觉得十分精彩。奈于平台上作评文件不完整,于是联系到作者寻求完整的资源。但公众号资源播放时候只能点进去,十分不方便。于是博主我苦练Python 大法,将音频文件下载到本地。这样就能连续的收听了。

2024-05-08 14:24:13 700 1

原创 Advisor 被重复代理问题排查

项目中存在多个且其持有的 Advisor Bean 重复。

2024-03-28 17:36:27 386

原创 Spring 自定义注解 为 BeanDefinition 添加 qualifier 信息 从而约束自动装配范围

Spring 自定义 qualifier 规则

2024-03-26 15:29:21 457

原创 rocketmq Listener 还可以这样配置(基于SPEL\限定符号\自动连线)

对于项目中多个消息消费者\消息监听者, 关于对消息选择及处理的优雅方法

2024-03-05 16:34:53 1137

原创 Java 每个ClassLoad 加载的文件(夹)都有哪些

Java 每个ClassLoad 加载的文件(夹)都有哪些 我们主要是查看 URLClassPath 下的URLs

2023-09-13 11:20:28 194

原创 Java平台标准版 8 文档

JDK 8 是 JRE 8 的超集,包含 JRE 8,以及编译器和调试器等工具,如 开发小程序和应用程序。JRE 8 提供了库, Java 虚拟机 (JVM) 和其他运行小程序的组件 以及用 Java 编程语言编写的应用程序。注意 JRE 包含 Java SE 不需要的组件 规范,包括标准和非标准 Java 组件。Java 平台标准版 8 文档 (oracle.com)

2023-07-31 13:48:43 961

原创 Netty 进阶

魔数,用来在第一时间判定是否是无效数据包版本号,可以支持协议的升级序列化算法,消息正文到底采用哪种序列化反序列化方式,可以由此扩展,例如:json、protobuf、hessian、jdk指令类型,是登录、注册、单聊、群聊... 跟业务相关请求序号,为了双工通信,提供异步能力正文长度消息正文编解码器根据上面的要素,设计一个登录请求消息和登录响应消息,并使用 Netty 完成收发@Slf4j@Override// 1. 4 字节的魔数// 2. 1 字节的版本,

2023-06-20 15:15:51 736

原创 Netty 入门

详细分析如下起点,对于 NIO 实现来讲,在 io.netty.channel.nio.AbstractNioByteChannel.NioByteUnsafe#read 方法中首次创建 ByteBuf 放入 pipeline(line 163 pipeline.fireChannelRead(byteBuf))入站 ByteBuf 处理原则对原始 ByteBuf 不做处理,调用 ctx.fireChannelRead(msg) 向后传递,这时无须 release将原始。

2023-06-15 20:49:54 444

原创 Java 密码学

Java 加密/解密简介 - 开发.java (dev.java)

2023-06-15 15:37:12 102

原创 NIO 基础

适合连接数特别多,但流量低的场景(low traffic)TLV 格式,即 Type 类型、Length 长度、Value 数据,类型和长度已知的情况下,就可以方便获取消息大小,分配合适的 buffer,缺点是 buffer 需要提前分配,如果内容过大,则影响 server 吞吐量。一种思路是首先分配一个较小的 buffer,例如 4k,如果发现数据不够,再分配 8k 的 buffer,将 4k buffer 内容拷贝至 8k buffer,优点是消息连续容易处理,缺点是数据拷贝耗费性能,参考实现。

2023-06-13 10:55:49 1160

原创 Java POI技术

引入依赖。

2023-06-06 22:32:10 560

原创 为项目添加 HibernateValidator

validator-hibernate 的入门使用

2023-06-06 21:15:48 1187

原创 Java网络编程(UDP、TCP)

什么网络编程?计算机跟计算机之间通过网络进行数据传输。常见软件架构有哪些?CS/BS通信的软件架构CS1BS的各有什么区别和优缺点CS:客户端服务端模式需要开发客户端BS:浏览器服务端模式不需要开发客户端。CS:适合定制专业化的办公类软件如:IDEA、网游BS:适合移动互联网应用,可以在任何地方随时访问的系统。网络编程三要素分别是什么?IP、端口号、协议网络编程三要素分别表示什么?IP:设备在网络中的地址,是唯一的标识端口号:应用程序在设备中唯一的标识。协议。

2023-05-16 16:17:07 1018

原创 RocketMQ-Producer

消息生产者的代码都在client模块中,相对于RocketMQ来讲,消息生产者就是客户端,也是消息的提供者。

2023-04-27 16:24:46 693

原创 Chapter13-基于 Netty 的通信实现

本章介绍了 RocketMQ 底层通信的实现机制,由于它是基于 Netty 来实现的,所以首先介绍了 Netty 的基础知识。 Netty 被用在很多开源软件的底层通信部分, RocketMQ 以 Netty 为基础,还实现了一种机制,把通信功能和消息处理功能分离,不同类型的通信内容被抽象成发送带有对应类型代码的 Command,同时根据类型代码查找对应的 Processor 和 Executor 来执行,结构非常清晰,为我们自己实现网络通信程序提供了参考。

2023-04-20 13:58:03 632

原创 Chapter12-主从同步机制

本章分析了 Master 和 Slave 角色的 Broker 之间同步信息功能的实现。 需要同步的信息分为两种类型,实现方式各不相同:一种是元数据信息,采用基于Netty 的 command 方式来同步消息;另 一种是 commitLog 信息,同步方式是直接基于 Java NIO 来实现。

2023-04-19 13:56:48 410

原创 Chapter11-最常用的消费类

本章分析的是 Client 模块里的代码 ,我们在使用 RocketMQ 的时候 , 更多的是和这个模块里 的代码打交道。 本章重点分析了 DefaultMQPushConsumerlmpl类 , 然后分析了 Consumer 的并发处理过程 ,最后分析了客户端 Class 统一的底层通信类 MQClientlnstance 。

2023-04-19 10:50:28 494

原创 Chapter10-NameServer 源码解析

本章分析了 NameServer 模块的源码, NameServer 是一个功能重要但是代码量不大的模块,所以选择这个模块入手,比较容易理解。 我们在分析源码时,认真读懂一个模块后就可以对作者 的代码风格 、设计偏好等有基本的了解 。

2023-04-18 15:13:50 524

原创 Chapter7-吞吐量优先的使用场景

本章重点关注性能,关注在大消息量的情况下,如何提高 RocketMQ 的吞吐量 。 首先介绍了消息过滤,在服务端进行消息过滤可以减少无效消息传输造成的带宽浪费, Tag 是最常用的一种高效过滤方式,此外还可以用 SQL 表达式、FilterServer 来过滤消息 。另一个提高吞吐量 的方法是增加集群 的机器数量,提高并发性,要根据实际场景增加 Broker 、 Consumer 或 Producer 角色的机器数量 。

2023-04-18 13:26:15 259

原创 Chapter6-可靠性优先的使用场景

本章根据使用场景,讨论如何“可靠”地收发消息 。 即在要求消息顺序的场景下,如何既能并发执行,又能保证消息顺序;然后分析在可能的故障场景下,如何应对以保证不丢消息 、 不中断服务。 RocketMQ 在设计上,有重试机制来保证消息不丢,造成的结果是可能存在消息重复,这一点需要用户根据具体业务场景来处理。

2023-04-17 16:27:10 334

原创 Chapter5-消息队列的核心机制

本章介绍了 RocketMQ 消息队列实现的难点及核心,即“队列”本身的实现,基于磁盘做一个读写效率高 的队列并非易事,实现不好就会使磁盘操作成为 整个系统 的瓶颈,无法提升系统 的 吞吐量 。 RocketMQ 基于“顺序写”“随机读”的原则来设计,利用“零拷贝”技术,克服了磁盘操作的瓶颈。另一个难点是为了高可用性而设计的主从机制,数据被及时复制到多个机器,这样当一台机器出故障后,整体系统依然可用 。 这样可靠性和性能能直接有个权衡, RocketMQ 把选择权留给用户

2023-04-17 10:53:35 170

原创 《RockectMQ实战与原理解析》Chapter4-分布式消息队列的协调者

分布式消息队列的协调者的内容包括NameServer 的功能:集群状态的存储结构、状态维护逻、;各个角色间的交互流程:交互流程源码分析、为何不用 ZooKeeper ;底层通信机制:Remoting 模块、协议设计和编解码、Netty库。

2023-04-17 09:50:09 453

原创 Chapter3-用适合的方式发送和接收消息

本章介绍了ROcketMq 的不同类型的消费者:DefaultMQPushConsumer 的使用、处理流程、流量控制、的启动 、关闭流程;不同类型的生产者:DefaultMQProducer、发送延迟消息、自定义消息发送规则、对事务的支持;如何存储队列位置信息;自定义日志输出

2023-04-14 15:02:18 508

原创 CSV文件的读取与数据类型转换的案例

高级自动类型转换工具类BeanWrapperImpl的使用案例

2023-01-18 11:49:27 1289

原创 Java解析XML-JDK-JAXB官方指导文档

JAXB(Java Architecture for XML Binding)是J2SE和J2EE平台的一部分,让开发者能够快速完成Java类和XML的互相映射。JAXB 允许Java人员将Java类映射为XML表示方式。其实,JAXB是一个业界标准,是一项可以根据XML Schema产生Java类的技术,并且可以将Java对象树的内容写到XML文档中。

2022-12-11 13:39:03 636

原创 Spring Boot 入门

Spring Boot 是利用了自动配置类来简化了 aop 相关配置AOP 自动配置类为可以通过禁用 aop 自动配置AOP 自动配置的本质是通过来开启了自动代理,如果在引导类上自己添加了那么以自己添加的为准的本质是向容器中添加了这个 bean 后处理器,它能够找到容器中所有切面,并为匹配切点的目标类创建代理,创建代理的工作一般是在 bean 的初始化阶段完成的。

2022-11-24 23:01:55 915

原创 MyBatis拦截器 Interceptor 实现多数据源切换

http://AbstractRoutingDataSource详解数据源配置与切换// 主库-读数据源master,// 主库-写数据源slave,// 多数据源readmore}/*** 数据源路由器*/// 也可以指定 ThreadLocal 的 initialValue 的具体实现}/***将targetDataSources映射中指定的给定查找键对象解析为用于与当前查找键匹配的实际查找键。

2022-10-20 18:33:03 3603

原创 SpringMVC

DispatcherServlet 是在第一次被访问时执行初始化, 也可以通过配置修改为 Tomcat 启动后就初始化 registrationBean.setLoadOnStartup()首先创建了 Servlet 容器,其次创建了 Servlet 的前端控制器,最后将 容器和控制器进行组合。每个具体的init的方法中都会去收集自定义的 Resolver 如果没有则会加载默认的配置。调用控制器方法、并处理方法参数与方法返回值。可查看 Tomcat 启动日志查看。

2022-10-14 10:16:31 711

原创 MyBatis 架构分析 TypeHandler(枚举转换、数据加密模糊查询)、Cache(分布式系统二级缓存)、Interceptor(插件开发)

mybatis默认定义了一批TypeHandler,正常情况下这些TypeHandler就可以满足我们的使用了.mybatis通过来管理TypeHandler。

2022-10-08 22:57:26 2358 2

原创 Spring Bean的生命周期、Java配置BeanFactoryPostProcessor失效与解决

到底什么是 BeanFactory它是 ApplicationContext 的父接口它才是 Spring 的核心容器, 主要的 ApplicationContext 实现都【组合】了它的功能,【组合】是指 ApplicationContext 的一个重要成员变量就是 BeanFactoryBeanFactory 能干点啥表面上只有 getBean实际上控制反转、基本的依赖注入、直至 Bean 的生命周期的各种功能,都由它的实现类提供。

2022-10-03 20:31:52 3459 5

原创 通用枚举转换的实现 BaseTypeHandler、@MappedTypes背后的执行逻辑-ibatis

通用typehandler的配置、@MappedTypes的使用注意

2022-09-28 16:18:06 3184

原创 AOP 实现的几种方法 arthas工具分析

ajc 编译器、 agent 类加载、arthas工具的使用、aop失效的场景

2022-09-25 22:53:51 678

原创 Spring 单例注入其它 scope 的四种解决方法 &@Scope 源码解读

Spring Bean定义时的 作用范围Scope的可选值&默认值、以及单例Bean 注入其他几种作用范围Bean时候保证 Scope 正确被使用的方法。其实是推迟 Bean 的获取

2022-09-24 23:33:12 659

原创 简单使用ThreadLocal、FunctionalInterface、CompletableFuture

数据迁移、涉及上万条数据,使用Job利用多线程处理。ThreadLocal的引入不必有多少条数据处理New 多少个Req对象 CompletableFuture 还使用以下策略实现接口CompletionStage,then***方法 可将一个任务产分成多份。代码中。将下载-》上传-》更新 拆分成了三部分。方便日志的记录 使用了CompletionStage handleAsync()方法对以上三步进行异常总结 为了记录成功、失败、异常的次数使用了atomic的LongAdder...

2022-06-24 16:57:53 562

Java并发知识网总结

Java并发知识网:包括夯实并发基础据、玩转JUC并发工具、深入浅出底层原理

2022-06-07

空空如也

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

TA关注的人

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