Clay 的技术空间

用进废退 | 艺不压身

SpringBoot 3 版本

2022 年 11 月 24 日,SpringBoot 3.0 正式发布了。此版本包含了 12 个月以来 151 个人的 5700 多次 Commit 的工作结晶。这是自 4.5 年前发布 2.0 以来,Spring Boot 的第一次重大修订。它也是第一个支持 Spring Framework 6.0 和 GraalVM 的 Spring Boot GA 版本。

新变化

  • 支持响应式编程
  • 支持 Spring Framework 6.0
  • 支持 GraalVM native images
  • Spring 自身与第三方包版本升级
  • 最低支持 JDK 17,最高支持 JDK 19
  • 从 Java EE API (Javax) 迁移到 Jakarta EE API
  • 自动配置的包位置变化
    • 旧版本: META-INF/spring.factories
    • 新版本: META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
阅读全文 »

大纲

前言

性能指标

  • RT (Response Time):用户从客户端发起一个请求开始,到客户端接收到从服务器端返回的响应结束,整个过程所耗费的时间。
  • HPS (Hits Per Second):每秒点击的次数,单位是次 / 秒。
  • TPS (Transaction per Second):系统每秒处理交易 (事务) 的笔数,单位是笔 / 秒。
  • QPS (Query per Second):系统每秒处理查询的次数,单位是次 / 秒。
阅读全文 »

大纲

前言

本文主要介绍 Java 的五种代理实现方式,包括 JDK 动态代理、Cglib、ASM、Javassist、Byte Buddy,点击 下载完整的案例代码。

准备工作

先定义出一个接口和相应的实现类,方便后续使用代理类在方法中添加日志信息。

  • 接口
1
2
3
4
5
public interface IUserApi {

String queryUserInfo();

}
阅读全文 »

大纲

静态代理的介绍

静态代理是 Java 中的一种设计模式,用于为目标对象提供额外的功能或控制访问目标对象的操作。它的基本思想是通过创建一个代理类,代理类具有与目标对象相同的接口或方法,并在代理类的方法中调用目标对象的对应方法。代理类可以在调用目标对象方法的前后添加额外的逻辑,比如权限检查、日志记录、事务处理等。

阅读全文 »

估算算法

第一种估算算法

先来一个天真的估算算法:假设要求一个系统的 TPS(Transaction Per Second 或者 Task Per Second)至少为 20,然后假设每个 Transaction 由一个线程完成,继续假设平均每个线程处理一个 Transaction 的时间为 4s。那么问题可以转化为:如何设计线程池大小,使得可以在 1s 内处理完 20 个 Transaction?这里计算过程可以很简单,每个线程的处理能力为 0.25TPS,那么要达到 20TPS,显然需要 20/0.25=80 个线程。

很显然这个估算算法很天真,因为它没有考虑到 CPU 数目。一般服务器的 CPU 核数为 16 或者 32,如果有 80 个线程,那么肯定会带来太多不必要的线程上下文切换开销。

第二种估算算法

第二种估算算法比较简单,但不知是否可行(N 为 CPU 总核数):

  • 如果是 CPU 密集型应用,则线程池大小设置为 N+1
  • 如果是 IO 密集型应用,则线程池大小设置为 2N+1

如果一台服务器上只部署这一个应用并且只有一个线程池,那么这种估算或许合理,具体还需自行测试验证。

阅读全文 »

前言

本文主要介绍如何检测 Java 代码规范与格式化 Java 代码,包括 IDEA 插件与 Maven 插件的使用。

代码规范检测插件

IDEA 代码规范检测插件

IDEA 可以使用 CheckStyle-IDEA 插件来检测 Java 代码的规范,它可以保证每位提交者的代码规范都保持一致。值得一提的是,CheckStyle-IDEA 插件只能检测代码的规范,并不能格式化代码。

创建规则文件

在项目中创建 checkstyle.xml 规则文件,例如路径为 config/checkstyle/checkstyle.xml

提示

  • 1、CheckStyle 的版本与 checkstyle.xml 规则文件的内容必须互相匹配,否则会影响代码规范检测插件 CheckStyle-IDEA 的正常运行。
  • 2、Alibaba Nacos 项目的 CheckStyle 规则文件可以从 GitHub 获取,详细的使用说明请看 官方文档
  • 3、Google 的 CheckStyle 规则文件可以从 GitHub 获取。
  • 4、Spring 的 CheckStyle 规则文件可以从 GitHub 获取。
  • Alibaba Nacos 的 CheckStyle 规则文件如下,要求 CheckStyle 的版本至少为 8.30
阅读全文 »

大纲

前言

学习资源

阅读全文 »

大纲

前言

学习资源

阅读全文 »

大纲

前言

学习资源

阅读全文 »

大纲

前言

学习资源

阅读全文 »