![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
第三方Java类库或工具
文章平均质量分 91
更简单、更连贯、更系统地分析一些第三方Java类库
双面神像
分层,抽象,高内聚,低耦合
展开
-
kafka详解(二)--kafka为什么快
Kafka 有多快呢?我们可以使用 OpenMessaging Benchmark Framework 测试框架方便地对 RocketMQ、Pulsar、Kafka、RabbitMQ 等消息系统进行对比测试,因为暂时没有测试条件(后续补上),我直接用这篇文章的测试结果(Benchmarking Kafka vs. Pulsar vs. RabbitMQ: Which is Fastest?),可以看到,在某种条件下,Kafka 写入速度比 RabbitMQ 快 15 倍,比 Pulsar 快 2 倍,在最高原创 2022-10-13 16:23:30 · 1054 阅读 · 1 评论 -
简单聊聊mysql的脏读、不可重复读、幻读
最近,在一次 mysql 死锁的生产事故中,我发现,关于 mysql 的锁、事务等等,我所知道的东西太碎了,所以,我试着用几个例子将它们串起来。具体做法就是通过不断地问问题、回答问题,再加上“适当”的比喻,来逐步构建脑子里的“知识树”。需要提醒一下,这篇博客并不适合小白,因为你需要先了解排它锁、共享锁、事务,最重要的是你需要知道事务中的锁是什么时候加上、什么时候打开的。而这篇博客更多的是希望把这些碎片化的知识给连接起来。项目环境mysql 版本:5.7.28-winx64OS:win 10数据库脚原创 2021-12-24 13:45:40 · 3417 阅读 · 0 评论 -
kafka详解(一)--kafka是什么及怎么用
我准备开一个新的系列,希望可以帮助大家更简单、更连贯、更系统地了解 kafka。这是系列的第一篇,主要讲kafka是什么?如何使用kafka。原创 2022-08-31 09:07:17 · 1421 阅读 · 0 评论 -
配置中心的设计-nacos vs apollo
前面我们分析了携程的 apollo(见 详解apollo的设计与使用),现在再来看看阿里的 nacos。和 apollo 一样,nacos 也是一款配置中心,同样可以实现配置的集中管理、分环境管理、即时生效等等。不过,nacos 还具备了服务发现的功能。这篇博客将重点分析 nacos 和 apollo 在设计上的差异。...原创 2022-06-05 18:12:38 · 1160 阅读 · 0 评论 -
如何使用原生的Hystrix
前面已经讲完了 Feign 和 Ribbon,今天我们来研究 Netflix 团队开发的另一个类库--Hystrix。从抽象层面看,**Hystrix 是一个保护器**。它可以保护我们的应用不会因为某个依赖的故障而 down 掉。目前,官方已不再迭代 Hystrix,一方面是认为 Hystrix 已经足够稳定了,另一方面是转向了更具弹性的保护器(而不是根据预先配置来启用保护),例如 resilience4j。当然,停止迭代并不是说 Hystrix 已经没有价值,它的很多思原创 2021-11-18 13:47:43 · 295 阅读 · 0 评论 -
如何使用原生的Ribbon
之前分析了如何使用原生的Feign,今天我们来研究 Netflix 团队开发的另外一个类库--Ribbon。Ribbon 和 Feign 有很多相似的地方,首先,它们本质上都是 HTTP client,其次,它们都具备重试、集成断路器等功能。最大的区别在于,Ribbon 内置了一个负载均衡器,而 Feign 没有。本文将介绍如何使用原生的 Ribbon,注意是原生的,而不是被 Spring 层层封装的 Ribbon。原创 2021-10-30 11:08:01 · 298 阅读 · 0 评论 -
如何使用原生的Feign
Feign 是由 Netflix 团队开发的一款基于 Java 实现的 HTTP client,借鉴了 Retrofi、 JAXRS-2.0、WebSocket 等类库。通过 Feign,我们可以像调用方法一样非常简单地访问 HTTP API。这篇博客将介绍如何使用原生的 Feign,注意,是原生的,不是经过 Spring 层层封装的 Feign。原创 2021-07-09 09:51:34 · 670 阅读 · 2 评论 -
详解apollo的设计与使用
apollo 是一款由携程团队开发的配置中心,可以实现配置的集中管理、分环境管理、即时生效等等。在这篇博客中,我们可以了解到:1. 为什么使用配置中心2. 如何设计一个配置中心3. apollo 是如何设计的4. 如何使用 apollo原创 2021-06-22 14:58:05 · 393 阅读 · 0 评论 -
Java源码详解系列(十二)--Eureka的使用和源码
eureka 是由 Netflix 团队开发的针对中间层服务的负载均衡器,在微服务项目中被广泛使用。相比 SLB、ALB 等负载均衡器,eureka 的服务注册是无状态的,扩展起来非常方便。在这个系列中,我将深入研究 eureka,包括它的使用、源码等,总计分成五篇博客讲完,后面发现有趣的东西也会继续补充。原创 2021-02-10 11:00:37 · 179 阅读 · 0 评论 -
Eureka详解系列(五)--Eureka Server部分的源码和配置
按照原定的计划,我将分三个部分来分析 Eureka 的源码:1. Eureka 的配置体系;2. Eureka Client 的交互行为;3. Eureka Server 的交互行为。今天,我们来研究第三部分的源码。分析的思路和第二部分的一样,先明确 Eureka Server 需要具备哪些功能,再从源码层面分析如何实现这些功能,最后补充 Eureka Server 的配置解读。原创 2021-02-10 10:37:12 · 230 阅读 · 0 评论 -
Eureka详解系列(四)--Eureka Client部分的源码和配置
<img src="https://images.cnblogs.com/cnblogs_com/ZhangZiSheng001/1920994/o_210122134252eureka-logo-2624.png" class="desc_img">按照原定的计划,我将分三个部分来分析 Eureka 的源码:1. Eureka 的配置体系;2. Eureka Client 的交互行为;3. Eureka Server 的交互行为。今天,我们来研究第二部分的源码。原创 2021-02-06 12:42:19 · 331 阅读 · 0 评论 -
Eureka详解系列(三)--探索Eureka强大的配置体系
通过前面的两篇博客,我们知道了:什么是 Eureka?为什么使用 Eureka?如何适用 Eureka?今天,我们开始来研究 Eureka 的源码,先从配置部分的源码开始看,其他部分后面再补充。补充一点,我更多地会从设计层面分析源码,而不会顺序地剖析每个过程的代码。一方面是因为篇幅有限,另一方面是因为我认为这样做更有意义一些。原创 2021-02-04 17:40:22 · 198 阅读 · 0 评论 -
Eureka详解系列(二)--如何使用Eureka(原生API,无Spring)
通过上一篇博客,我们知道了 Eureka 是什么以及为什么要使用它,今天,我们开始研究如何使用 Eureka。在此之前,先说明一点。网上几乎所有关于 Eureka 的文章都是基于 Spring 的,但**本文的例子不会有任何 Spring 的代码,我尽量使用 Eureka 原生的 API**,后面的源码分析也是如此。因为 Spring 把 Eureka 藏得越好,我们研究起来就会越困难,毕竟我写这个系列不是只为了学会怎么使用 Eureka,我们还要分析它的源码。当然,实际项目中就没必要这么搞了。原创 2021-01-28 09:09:05 · 401 阅读 · 0 评论 -
jackson、fastjson、kryo、protostuff等序列化工具性能对比
实际项目中,我们经常需要使用序列化工具来存储和传输对象。目前用得比较多的序列化工具有:jackson、fastjson、kryo、protostuff、fst 等,本文将简单对比这几款工具序列化和反序列化的性能。原创 2020-11-09 14:32:19 · 3248 阅读 · 0 评论 -
Spring源码系列(四)--spring-aop是如何设计的
顾名思义,spring-aop 是用来做 AOP 开发的,搭配 spring-bean 一起使用的话,AOP 将更加解耦、方便。在实际项目中,spring-aop 被广泛用来实现日志、权限、事务、异常等的统一管理。上一篇博客简单讲了 spring-aop 的基础组件、架构和使用方法,本文将开始研究 spring-aop 的源码,主要分成以下部分:1. spring-aop 的几个重要的组件,如 Joinpoint、Advice、Pointcut、Advisor 等;2. spring-aop 是如何设原创 2020-09-28 15:56:49 · 153 阅读 · 0 评论 -
Spring源码系列(三)--spring-aop的基础组件、架构和使用
顾名思义,spring-aop 是用来做 AOP 开发的,搭配 spring-bean 一起使用的话,AOP 将更加解耦、方便。在实际项目中,spring-aop 被广泛用来实现日志、权限、事务、异常等的统一管理。我将通过两篇博客来详细介绍 spring-aop 的使用、源码等。这是第一篇博客,主要介绍 spring-aop 的组件、架构、使用等。原创 2020-09-15 09:10:48 · 399 阅读 · 1 评论 -
Spring源码系列(二)--bean组件的源码分析
在上一篇博客中,我们讨论了 spring-bean 是什么?用来解决什么问题?如何使用 spring-bean?等等问题,算是从使用者的角度对 spring-bean 有了一定了解。这篇博客我们将开始分析 spring-bean 的源码,大致的思路如下:1. spring-bean 是如何设计的2. 开始看源码--从哪里开始3. bean 冲突的处理4. 先看看是否需要创建5. 开始创建 bean6. bean 的实例化7. bean 的属性装配8. bean 的初始化(省略)原创 2020-06-26 20:20:14 · 192 阅读 · 0 评论 -
Spring源码系列(一)--详细介绍bean组件
spring-bean 是 spring 家族中最核心的一个组件,从抽象层面来说,我们可以把它当成:1. **通用的对象工厂**。这个有点像我们常用的`**Factory`,通过它,我们可以获取到所需的对象。2. **全局的上下文**。我把某个对象丢进这个上下文,然后可以在应用的任何位置获取到这个对象。针对 spring-bean 组件,我计划分成 2 到 3 篇博客来分析。本文主要讲的是:1. spring-bean 是什么?用来解决什么问题?2. 几个重要的概念,例如什么是 bean?3.原创 2020-06-14 18:22:20 · 285 阅读 · 0 评论 -
Mybatis详解系列(五)--Mybatis Generator和全注解风格的MyBatis3DynamicSql
本文内容大致如下,由于篇幅较长,可选择阅读:1. 如何使用 MBG 生成代码;2. 详解 MBG 的配置,将配置使用自定义注释生成器、实体类中添加 toString/equals/hashCode方法等。3. MyBatis3DynamicSql 风格(无 XML) API 的使用。通过本文的学习,你将能够通过简单改造 MBG 来生成自己想要的代码,另外,我们也将认识强大的 MyBatis3DynamicSql 风格(它提供的条件类使用 Lambda 解耦,全注解,支持单表查询、多表查询、分页、排序原创 2020-05-03 12:57:33 · 4794 阅读 · 0 评论 -
Mybatis源码详解系列(四)--你不知道的Mybatis用法和细节
这是 Mybatis系列博客的第四篇,我本来打算详细讲解 mybatis 的配置、映射器、动态 sql 等,但[Mybatis官方中文文档](https://mybatis.org/mybatis-3/zh/index.html)对这部分内容的介绍已经足够详细了,有需要的可以直接参考。所以,我将扩展一些其他特性或使用细节,掌握它们可以更优雅、高效地使用 mybatis。原创 2020-04-25 21:52:29 · 310 阅读 · 0 评论 -
Mybatis源码详解系列(三)--从Mapper接口开始看Mybatis的执行逻辑
本文继续分析Mybatis的源码,第1点内容上一篇博客已经讲过,本文将针对 2 和 3 点继续分析:1. 加载配置、初始化SqlSessionFactory;2. 获取SqlSession和Mapper;3. 执行Mapper方法。原创 2020-04-23 15:56:38 · 245 阅读 · 0 评论 -
Mybatis源码详解系列(二)--Mybatis如何加载配置及初始化
前面已经说完 mybatis 的使用,现在开始分析源码,和使用例子一样,我用的 mybatis 是 3.5.4 版本的。考虑连贯性,我会按下面的顺序来展开分析,计划两篇博客写完,本文只涉及第一点内容:1. 加载配置、初始化SqlSessionFactory;2. 获取SqlSession和Mapper;3. 执行Mapper方法。原创 2020-04-15 11:25:55 · 219 阅读 · 0 评论 -
Mybatis源码详解系列(一)--持久层框架解决了什么及如何使用Mybatis
mybatis 是一个持久层框架,它让我们可以方便、解耦地操作数据库。 相比 hibernate,mybatis 在国内更受欢迎,而且 mybatis 更面向数据库,可以灵活地对 sql 语句进行优化。针对 mybatis 的分析,我会拆分成使用、配置、源码、生成器等部分,都放在 Mybatis 这个系列里,内容将持续更新。这篇博客是系列里的第一篇文章,将从下面两个问题展开 :1. 为什么要用持久层框架?2. 如何使用 mybatis?原创 2020-03-31 13:07:33 · 1303 阅读 · 0 评论 -
Eureka详解系列(一)--先谈谈负载均衡器
这个系列开始研究 Eureka,在此之前,先来谈谈负载均衡器。本质上,Eureka 就是一个负载均衡器,可能有的人会说,它是一个服务注册中心,用来注册服务的,这种说法不能说错,只是有点片面。在这篇博客里,我将尽可能循序渐进、图文并茂地回答下面的几个问题。至于 Eureka 的使用、配置、源码分析、集群配置等等,这些后续博客再补充。原创 2021-01-22 14:26:26 · 1085 阅读 · 1 评论 -
关于maven的一份小笔记
本文主要讲解以下内容:1. 什么是 maven?maven有什么用?2. 安装和使用 maven3. maven 的构建生命周期4. 配置 maven5. 常见问题(持续更新)原创 2020-07-22 13:51:30 · 207 阅读 · 0 评论 -
JMH--一款由OpenJDK开发的基准测试工具
JMH 是 OpenJDK 团队开发的一款基准测试工具,一般用于代码的性能调优,精度甚至可以达到纳秒级别,适用于 java 以及其他基于 JVM 的语言。和 Apache JMeter 不同,**JMH 测试的对象可以是任一方法,颗粒度更小**,而不仅限于rest api。本文将使用入门例子介绍如何使用 JMH,并结合官方示例代码介绍 JMH 的详细配置方法。原创 2020-08-29 11:07:03 · 548 阅读 · 0 评论 -
cglib、orika、spring等bean copy工具性能测试和原理分析
在实际项目中,考虑到不同的数据使用者,我们经常要处理 VO、DTO、Entity、DO 等对象的转换,如果手动编写 setter/getter 方法一个个赋值,将非常繁琐且难维护。通常情况下,这类转换都是同名属性的转换(类型可以不同),我们更多地会使用 bean copy 工具,例如 Apache Commons BeanUtils、Cglib BeanCopier 等。在使用 bean copy 工具时,我们更多地会考虑性能,有时也需要考虑深浅复制的问题。本文将对比几款常用的 bean copy 工具的原创 2020-12-09 13:45:57 · 1607 阅读 · 0 评论 -
Java源码详解系列(十一)--Spring的使用和源码
Spring 是一个一站式的 Java 框架,致力于提高我们项目开发的效率。通过 Spring,我们可以避免编写大量额外代码,更专注于我们的核心逻辑。目前,Spring 已经成为最受欢迎的 Java 框架。Spring 的全家桶包含非常多的项目,而且还在不断增加,但我们可以发现,最核心的就是 spring-bean 和 spring-aop,其他大部分都是基于这两个项目而来。本系列将重点分析这两个项目,其他项目的内容后续也会增加。原创 2020-10-12 15:57:16 · 123 阅读 · 0 评论 -
Java源码详解系列(十)--全面分析mybatis的使用、源码和代码生成器(总计5篇博客)
针对 Mybatis 的分析,我拆分成使用、源码分析、生成器等部分,已更新5篇博客,都放在 [Mybatis]这个系列里,内容将持续更新。1. Mybatis详解系列(一)--持久层框架解决了什么及如何使用Mybatis2. Mybatis源码详解系列(二)--Mybatis如何加载配置及初始化3. Mybatis源码详解系列(三)--从Mapper接口开始看Mybatis的执行逻辑4. Mybatis源码详解系列(四)--你不知道的Mybatis用法和细节5. Mybatis详解系列(五)--M原创 2020-07-05 09:34:45 · 143 阅读 · 0 评论 -
详解POI的使用方法(DOM和SAX的方式)及存在的不足
本文包含以下内容,由于篇幅较长,可以根据需要选择阅读:1. POI的介绍2. 如何使用POI及POI的不足3. 如何使用easyexcel原创 2020-03-20 15:42:58 · 3718 阅读 · 2 评论 -
源码详解系列(八)--全面讲解HikariCP的使用和源码
本文将包含以下内容(因为篇幅较长,可根据需要选择阅读):1. 如何使用 HikariCP(入门、JMX 等)2. 配置参数详解3. 源码分析原创 2020-02-19 10:07:32 · 1528 阅读 · 1 评论 -
源码详解系列(七) ------ 全面讲解logback的使用和源码
本文将介绍以下内容,由于篇幅较长,可根据需要选择阅读:1.如何使用 logback:将日志输出到控制台、文件和数据库,以及使用 JMX 配置 logback;2.logback 配置文件详解;3.logback 的源码分析。原创 2020-01-31 18:16:46 · 598 阅读 · 0 评论 -
源码详解系列(六) ------ 全面讲解druid的使用和源码 已停更
本文将包含以下内容(因为篇幅较长,可根据需要选择阅读):1. `druid`的使用方法(入门案例、`JDNI`使用、监控统计、防御SQL注入)2. `druid`的配置参数详解3. `druid`主要源码分析原创 2020-01-10 14:23:56 · 1017 阅读 · 1 评论 -
源码详解系列(五) ------ C3P0的使用和分析(包括JNDI)已停更
本文将包含以下内容(因为篇幅较长,可根据需要选择阅读):1. `c3p0`的使用方法(入门案例、`JDNI`使用)2. `c3p0`的配置参数详解3. `c3p0`主要源码分析原创 2019-12-22 18:06:20 · 762 阅读 · 0 评论 -
源码详解系列(四) ------ DBCP2的使用和分析(包括JNDI和JTA支持) 已停更
本文将包含以下内容(因为篇幅较长,可根据需要选择阅读):DBCP的使用方法(入门案例说明);DBCP的配置参数详解;DBCP主要源码分析;DBCP其他特性的使用方法,如JNDI和JTA支持。原创 2019-12-07 23:06:15 · 953 阅读 · 0 评论 -
源码详解系列(三) --dom4j的使用和分析
简单来说,dom4j 就是用来读写 xml 的。相比 JDK 的 JAXP,dom4j 的 API 更容易使用,所以,目前 dom4j 在国内还是比较受欢迎。本文主要讲的是如何使用 dom4j 以及分析 dom4j 的源码,除此之外,我希望回答更多的问题,例如,什么是 DOM?什么是 SAX?dom4j 真的有那么快吗?要不要使用 dom4j?原创 2019-11-22 23:08:24 · 1192 阅读 · 0 评论 -
源码详解系列(二) -- jdbc-mysql的使用和分析
JDBC 规定了 java 应用应该如何连接和操作数据库,它是规范,而非实现,具体的实现由不同的数据库厂商提供。对我们来说,JDBC 有效地将我们的代码和具体的数据库实现解耦合,这是非常有好处的,例如,当我的数据库从 mysql 切换到 oracle 时,几乎不需要调整代码。本文将详细介绍如何使用 JDBC,这里使用 MySQL Connector/J 8.0 作为具体实现。当然,本文只是作为学习用途,实际项目中,建议还是使用 mybatis、hibernate 等持久层框架。原创 2019-11-22 22:52:10 · 304 阅读 · 0 评论 -
源码详解系列(一) --cglib动态代理的使用和分析
简单来说,cglib 就是用来生成代理类的。与 JDK 自带的动态代理相比,有以下几点不同: 1. JDK 动态代理要求被代理类实现某个接口,而 cglib 无该要求。 2. 在目标方法的执行速度上,由于采用了`FastClass`机制,cglib 更快(以空间换时间,后面会讲到)。原创 2019-11-22 22:31:43 · 461 阅读 · 0 评论