自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 VM 安装Ubuntu20

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

2024-05-08 15:03:21 347

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

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

2024-05-08 14:24:13 522

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

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

2024-03-28 17:36:27 329

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

Spring 自定义 qualifier 规则

2024-03-26 15:29:21 399

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

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

2024-03-05 16:34:53 900

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

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

2023-09-13 11:20:28 168

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

原创 Netty 进阶

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

2023-06-20 15:15:51 651

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

原创 Java 密码学

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

2023-06-15 15:37:12 81

原创 NIO 基础

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

2023-06-13 10:55:49 1089

原创 Java POI技术

引入依赖。

2023-06-06 22:32:10 503

原创 为项目添加 HibernateValidator

validator-hibernate 的入门使用

2023-06-06 21:15:48 918

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

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

2023-05-16 16:17:07 929

原创 RocketMQ-Producer

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

2023-04-27 16:24:46 625

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

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

2023-04-20 13:58:03 582

原创 Chapter12-主从同步机制

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

2023-04-19 13:56:48 382

原创 Chapter11-最常用的消费类

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

2023-04-19 10:50:28 450

原创 Chapter10-NameServer 源码解析

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

2023-04-18 15:13:50 491

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

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

2023-04-18 13:26:15 217

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

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

2023-04-17 16:27:10 311

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

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

2023-04-17 10:53:35 144

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

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

2023-04-17 09:50:09 423

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

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

2023-04-14 15:02:18 458

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

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

2023-01-18 11:49:27 1191

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

原创 Spring Boot 入门

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

2022-11-24 23:01:55 855

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

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

2022-10-20 18:33:03 3238

原创 SpringMVC

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

2022-10-14 10:16:31 655

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

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

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

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

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

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

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

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

2022-09-28 16:18:06 2897

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

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

2022-09-25 22:53:51 626

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

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

2022-09-24 23:33:12 625

原创 简单使用ThreadLocal、FunctionalInterface、CompletableFuture

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

2022-06-24 16:57:53 503

原创 Java对文件操作包括CSV文件读写、文件压缩、文件下载

文件中使用了IOUtils工具类、对字节的便捷操作、使用了CompletableFuture方便使用线程池执行、使用了ZipOutputStream将文件打包、使用了commons.csv 下的 CSVFormat和CSVPrinter

2022-06-24 16:29:04 887

原创 Java并发编程第三模块讲_死锁、final不变性与String、QAS

第 1 个叫互斥条件,它的意思是每个资源每次只能被一个线程(或进程,下同)使用,为什么资源不能同时被多个线程或进程使用呢?这是因为如果每个人都可以拿到想要的资源,那就不需要等待,所以是不可能发生死锁的。第 2 个是请求与保持条件,它是指当一个线程因请求资源而阻塞时,则需对已获得的资源保持不放。如果在请求资源时阻塞了,并且会自动释放手中资源(例如锁)的话,那别人自然就能拿到我刚才释放的资源,也就不会形成死锁。第 3 个是不剥夺条件,它是指线程已获得的资源,在未使用完之前,不会被强行剥夺。比如我们在上一课时中介

2022-06-07 17:47:38 241

原创 Java并发编程第三讲_内存模型、指令重排、可见性(happens-before、volitile)

JVM 内存结构 -和 Java 虚拟机的运行时区域有关;我们都知道,Java 代码是要运行在虚拟机上的,而虚拟机在执行 Java 程序的过程中会把所管理的内存划分为若干个不同的数据区域,这些区域都有各自的用途。在《Java 虚拟机规范(Java SE 8)》中描述了 JVM 运行时内存区域结构可分为以下 6 个区。堆区(Heap):堆是存储类实例和数组的,通常是内存中最大的一块。实例很好理解,比如 new Object() 就会生成一个实例;而数组也是保存在堆上面的,因为在 Ja......

2022-05-30 22:19:05 153

原创 Java并发编程第二讲_ThreadLocal、Future、CountDwonlatch等线程配合工具

ThreadLocal 适合用在哪些实际生产的场景场景1,ThreadLocal 用作保存每个线程独享的对象,为每个线程都创建一个副本,这样每个线程都可以修改自己所拥有的副本, 而不会影响其他线程的副本,确保了线程安全。场景2,ThreadLocal 用作每个线程内需要独立保存信息,以便供其他方法更方便地获取该信息的场景。每个线程获取到的信息可能都是不一样的,前面执行的方法保存了信息后,后续方法可以通过 ThreadLocal 直接获取到,避免了传参,类似于全局变量的......

2022-05-29 11:35:51 464

原创 Java并发编程第二讲-ConcurrentHashMap、CopyOnWriteArrayList、阻塞队列、原子类Atomic

为什么Map的桶中超过8个才转为红黑树?每次遍历一个链表,平均查找的时间复杂度是O(),n是链表的长度链表还不是很长,O(n)和O(log(n)的区别不大如果链表越来越长,那么这种区别便会有所体现为了提升查找性能,需要把链表转化为红黑树的形式表容量变成64因为树节点大约是普通节点的两倍大,我们只有当容器包含足够的节点时才使用它们(见TREEIFY_THRESHOLD)。当它们变得太小时(由于移除或调整大小)它们被转换回普通bins。在TreeNodes需要占用的空间大约是普通.

2022-05-25 19:01:52 324

Java并发知识网总结

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

2022-06-07

空空如也

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

TA关注的人

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