自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 @Async注解失效的9种场景

today面试被问@Async注解失效问题。没碰到过,想的是否是内部的线程池的问题(猜的)。@Slf4j@Service@Async个人感觉这个问题还是比较有意思的,面试被问答不上来就没意思了。

2024-07-22 12:12:38 423 3

原创 BigDecimal 详解

BigDecimal可以实现对浮点数的运算,不会造成精度丢失。通常情况下,大部分需要浮点数精确运算结果的业务场景(比如涉及到钱的场景)都是通过BigDecimal来做的。浮点数之间的等值判断,基本数据类型不能用 == 来比较,包装数据类型不能用 equals 来判断。具体原因我们在上面已经详细介绍了,这里就不多提了。想要解决浮点数运算精度丢失这个问题,可以直接使用BigDecimal来定义浮点数的值,然后再进行浮点数的运算操作即可。// 0。

2024-07-21 21:27:00 357

原创 DelayQueue延迟队列

DelayQueue是 JUC 包(为我们提供的延迟队列,用于实现延时任务比如订单下单 15 分钟未支付直接取消。它是的一种,底层是一个基于实现的一个无界队列,是线程安全的。DelayQueue中存放的元素必须实现Delayed接口,并且需要重写getDelay()方法(计算是否到期)。默认情况下,DelayQueue会按照到期时间升序编排任务。只有当元素过期时(getDelay()方法返回值小于等于 0),才能从队列中取出。

2024-07-20 11:05:16 607

原创 MySQL中的数据类型

仅做本人快速查询字段属性使用

2024-07-18 15:52:43 529

原创 JDK8新特性

​ Java 是第一大编程语言和开发平台。它有助于企业降低成本、缩短开发周期、推动创新以及改善应用服务。如今全球有数百万开发人员运行着超过 51 亿个 Java 虚拟机,Java 仍是企业和开发人员的首选开发平台下面是主要的新特性:​ Sun公司在1991年成立了一个称为绿色计划( Green Project )的项目,由James Gosling(高斯林)博土领导,绿色计划的目的是开发一种能够在各种消费性电子产品(机顶盒、冰箱、收音机等)上运行的程序架构。这个项目的产品就是Java语言的

2024-07-12 13:51:57 940 26

原创 xxxxxxx.jar中没有主清单属性

写了一个小的springboot demo,构建时由于没加构建的maven插件,导致使用java -jar命令运行时报错。

2024-07-07 11:46:37 222

原创 Shenandoah GC概述

Shenandoah 是由Red Hat开发的一款低延迟的垃圾收集器,Shenandoah 并发执行大部分 GC 工作,包括并发的整理,堆大小对STW的时间基本没有影响。1、下载。Shenandoah只包含在OpenJDK中,默认不包含在内需要单独构建,可以直接下载构建好的。选择方式如下:{aarch64, arm32-hflt, mipsel, mips64el, ppc64le, s390x, x86_32, x86_64}:架构,使用arch命令选择对应的的架构。

2024-07-04 15:30:07 611

原创 GraalVM

GraalVM是Oracle官方推出的一款高性能JDK,使用它享受比OpenJDK或者OracleJDK更好的性能。官方标语:Build faster, smaller, leaner applications。更低的CPU、内存使用率:官方标语:Build faster, smaller, leaner applications。更低的CPU、内存使用率更快的启动速度,无需预热即可获得最好的性能更好的安全性、更小的可执行文件。

2024-07-03 17:13:58 1090

原创 StringUTF_16错误认识字节长度

它是一种用于指示文本文件或数据流中字节顺序(即字节序)的方法。它在某些编码(如UTF-16和UTF-32)中用于标识字节顺序是大端序(Big Endian)还是小端序(Little Endian)。编码的字节数组时,Java通常会在字节数组的开头添加BOM,以指示字节顺序。这样,接收该字节数组的程序或设备可以根据BOM正确解码字节数据。相比于原来确实是多出两个字节,证实了结论。在UTF-16编码中,BOM的值是。将字符串修改为两个中文字符。但是现在还有一个疑问,这个。到底是个什么东西呢?

2024-06-30 21:42:40 365

原创 如何快速使用JNI

这是生成共享库时常用的选项,使得生成的代码在加载到内存中的任何位置时都可以正确运行。,允许Java代码与其他语言(通常是C或C++)编写的本地应用程序或库进行交互。简而言之就是,Java可以通过JNI调用C 或 C++ 语言写的代码。在这里,包含了特定于Windows系统的Java头文件。: 指定生成一个共享库(动态链接库),而不是可执行文件。5、根据生成的头文件里的函数声明实现对应的函数。为后缀名),通常是使用静态代码块来进行导入。: 源文件名,包含了具体的JNI方法实现。: 指定输出文件的名称为。

2024-06-29 20:42:22 861

原创 ForkJoin框架与工作窃取算法详解

是 Java 并发包中的并行计算框架,旨在有效执行递归任务和大规模并行计算。其核心思想是通过任务拆分(fork)和任务合并(join)来实现高并行度,它体现的是一种分治思想,适用于能够进行任务拆分的 cpu 密集型运算。并利用工作窃取算法来平衡负载。所谓的任务拆分,是将一个大任务拆分为算法上相同的小任务,直至不能拆分可以直接求解。跟递归相关的一些计算,如归并排序、斐波那契数列、都可以用分治思想进行求解。

2024-06-27 20:30:33 620

原创 ReentrantLock原理

ReentrantLock是基于其内部类FairSync(公平锁)和NonFairSync(非公平锁)实现的,并且它的实现依赖于Java同步器框架AbstractQueuedSynchronizer(AQS),AQS使用一个整形的volatile变量state来维护同步状态,这个volatile变量是实现ReentrantLock的关键。ReentrantLock 的公平锁和非公平锁都委托了去请求获取。if (!tryAcquire 是一个抽象方法,是公平与非公平的实现原理所在。

2024-06-20 11:24:35 805

原创 JAVA-CopyOnWrite并发集合

概括为"写时复制",通俗的讲是写数据的时候弄出一个新的数组,然后讲旧的数据拷贝过去,更新后再将引用指向新数组。这样在添加删除元素时就不会影响旧数组的读取了,确保高并发时读的效率,但是存在延时。下面以和为例对系列的集合进一步讲解。系列集合通过写时复制机制实现线程安全,适用于读操作频繁且写操作较少的场景。虽然写操作的开销较大,但在读操作占多数的应用中,集合可以提供高效且线程安全的性能。在中,移除元素的操作与添加元素类似,通过复制数组并在新数组上进行操作来实现线程安全。

2024-06-15 10:09:09 1017 1

原创 事务底层与高可用原理

在聚簇索引中,记录是按照主键值的大小连成了一个单向链表的,如果我们更新了某条记录的主键值,意味着这条记录在聚簇索引中的位置将会发生改变,比如你将记录的主键值从1更新为10000,如果还有非常多的记录的主键值分布在1 ~ 10000之间的话,那么这两条记录在聚簇索引中就有可能离得非常远,甚至中间隔了好多个页面。更新记录时,对于被更新的每个列来说,如果更新后的列和更新前的列占用的存储空间都一样大,那么就可以进行就地更新,也就是直接在原记录的基础上修改对应列的值。往这张表中插入多条记录。

2024-06-08 15:15:26 968

原创 InnoDB引擎底层解析

InnoDB的内存结构和磁盘存储结构图总结如下:其中的Insert/Change Buffer主要是用于对二级索引的写入优化,Undo空间则是undo日志一般放在系统表空间,但是通过参数配置后,也可以用独立表空间存放,所以用虚线表示。

2024-06-06 22:12:54 1045

原创 MySQL的执行原理、下

MySQL执行一个查询可以有不同的执行方案,它会选择其中成本最低,或者说代价最低的那种方案去真正的执行查询。I/O成本我们的表经常使用的MyISAM、InnoDB存储引擎都是将数据和索引都存储到磁盘上的,当我们想查询表中的记录时,需要先把数据或者索引加载到内存中然后再操作。这个从磁盘到内存这个加载的过程损耗的时间称之为I/O成本。CPU成本读取以及检测记录是否满足对应的搜索条件、对结果集进行排序等这些操作损耗的时间称之为CPU成本。对于InnoDB存储引擎来说,页是磁盘和内存之间交互的基本单位。

2024-06-05 22:04:13 739

原创 MySQL的执行原理、上

连接的本质就是把各个连接表中的记录都取出来依次匹配的组合加入结果集并返回给用户。所以我们把e1和e2两个表连接起来的过程如下图所示:这个过程看起来就是把e1表的记录和e2的记录连起来组成新的更大的记录,所以这个查询过程称之为连接查询。连接查询的结果集中包含一个表中的每一条记录与另一个表中的每一条记录相互匹配的组合,像这样的结果集就可以称之为笛卡尔积。因为表e1中有3条记录,表e2中也有3条记录,所以这两个表连接之后的笛卡尔积就有3×3=9行记录。

2024-06-05 20:55:22 1031

原创 Explain执行计划

有了慢查询语句后,就要对语句进行分析。一条查询语句在经过MySQL查询优化器的各种基于成本和规则的优化会后生成一个所谓的执行计划,这个执行计划展示了接下来具体执行查询的方式,比如多表连接的顺序是什么,对于每个表采用什么访问方法来具体执行查询等等。EXPLAIN语句来帮助我们查看某个查询语句的具体执行计划,我们需要搞懂EPLATNEXPLAIN的各个输出项都是干嘛使的,从而可以有针对性的提升我们查询语句的性能。

2024-06-05 16:06:37 933

原创 MySQL中的系统库

MySQL有几个系统数据库,这几个数据库包含了MySQL服务器运行过程中所需的一些信息以及一些运行状态信息,我们现在稍微了解一下。这个数据库里主要保存MySQL服务器运行过程中的一些状态信息,算是对MySQL服务器的一个性能监控。包括统计最近执行了哪些语句,在执行过程的每个阶段都花费了多长时间,内存的使用情况等等信息。这个数据库保存着MySQL服务器维护的所有其他数据库的信息,比如有哪些表、哪些视图、哪些触发器、哪些列、哪些索引。这些是一些描述性信息,称之为元数据。sys。

2024-06-03 16:31:55 1038

原创 MySQL体系架构

使用独立表空间来存储表数据的话,会在该表所属数据库对应的子目录下创建一个表示该独立表空间的文件,文件名和表名相同,只不过添加了一个.ibd的扩展名而已,所以完整的文件名称长这样:表名.ibd。这个文件是所谓的自扩展文件,也就是当不够用的时候它会自己增加文件大小,当然,如果你想让系统表空间对应文件系统上多个实际文件,或者仅仅觉得原来的ibdata1这个文件名难听,那可以在MySQL启动时配置对应的文件路径以及它们的大小,我们也可以把系统表空间对应的文件路径不配置到数据目录下,甚至可以配置到单独的磁盘分区上。

2024-06-02 22:20:15 894

原创 MySQL8新特性(对比5.7)

一个staff表,里面有id,有name还有一个 m_id,这个是对应的上级id。数据如下:如果我们想查询出每一个员工的上下级关系,可以使用以下方式。

2024-06-02 11:30:51 724

原创 MySQL中的锁

InnoDB 中锁非常多,总的来说,可以如下分类:

2024-06-01 20:58:54 864

原创 MySQL事务与MVCC

事务是数据库管理系统(DBMS)执行过程中的一个逻辑单位(不可再进行分割),由一个有限的数据库操作序列构成(多个DML语句,select语句不包含事务),要不全部成功,要不全部不成功。A 给B 要划钱,A 的账户-1000元, B 的账户就要+1000元,这两个update 语句必须作为一个整体来执行,不然A 扣钱了,B 没有加钱这种情况就是错误的。那么事务就可以保证A 、B 账户的变动要么全部一起发生,要么全部一起不发生。

2024-06-01 08:26:09 1254

原创 MySQL调优

慢查询日志,顾名思义,就是查询花费大量时间的日志,是指mysql记录所有执行超过参数设定的时间阈值的SQL语句的日志。该日志能为SQL语句的优化带来很好的帮助。默认情况下,慢查询日志是关闭的,要使用慢查询日志功能,首先要开启慢查询日志功能。如何开启,我们稍后再说。这一点,也是针对联合索引来说的,前面我们反复强调过,所有记录都是按照索引列的值从小到大的顺序排好序的,而联合索引则是按创建索引时的顺序进行分组排序。

2024-05-31 19:36:25 845

原创 MySQL中的索引

全文索引、哈希索引,其中比较关键的是B+树索引。

2024-05-30 19:41:39 835

原创 数据库范式化设计

范式来自英文Normal Form,简称NF。实际上你可以把它粗略地理解为一张数据表的表结构所符合的某种设计标准的级别。就像家里装修买建材,最环保的是E0级,其次是E1级,还有E2级等等目前关系数据库有六种范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴斯-科德范式(BCNF)、第四范式(4NF)和第五范式5NF,又称完美范式)。满足最低要求的范式是第一范式(1NF),在第一范式的基础上进一步满足更多规范要求的称为第二范式(2NF),其余范式以次类推。

2024-05-30 16:56:32 727

原创 java枚举

在java中,类的对象是有限个,确定的。这个类我们可以定义为枚举类。Java 枚举(enum)是一种特殊的数据类型,用于定义一组固定的常量。它可以用于表示一组相关的值,例如季节、方向、状态等。Java 枚举类型的设计初衷是提供一种类型安全且可读性强的方式来表示固定的常量集合。

2024-05-29 10:35:15 332

原创 java注解

注解其实就是代码里的特殊标记,这些标记可以在编译,类加载,运行时被读取,并执行相应的处理。通过使用注解,程序员可以在不改变原有逻辑的情况下,在源文件中嵌入一些补充信息。代码分析工具、开发工具和部署工具可以通过这些补充信息进行验证或者进行部署。使用注解时要在其前面增加@符号,并把该注解当成一个修饰符使用。用于修饰它支持的程序元素。自定义注解使用很少,一般情况下都是用现成的注解。@interface,跟接口没有一点关系。

2024-05-28 22:33:29 1130

原创 JAVA18

Java 18 在 2022 年 3 月 22 日正式发布,Java 18 不是一个长期支持版本,这次更新共带来 9 个新功能。

2024-05-28 11:44:37 230

原创 JAVA19

JDK 19 2022 年 9 月 20 日正式发布以供生产使用,非长期支持版本。不过,JDK 19 中有一些比较重要的新特性值得关注。JEP 405: Record Patterns(记录模式)[1](预览)JEP 424: Foreign Function & Memory API(外部函数和内存 API)[3](预览)JEP 425: Virtual Threads(虚拟线程)[4](预览)JEP 426: Vector(向量)API[5](第四次孵化)

2024-05-28 11:33:19 6568

原创 JAVA 17

JDK 16 刚发布半年(2021/03/16),JDK 17 又如期而至(2021/09/14),这个时间点特殊,蹭苹果发布会的热度?记得当年JDK 15的发布也是同天Oracle 宣布,从 JDK 17 开始,后面的 JDK 都全部免费提供!!!JDK 17 是自 2018 年 JDK 11 后的第二个长期支持版本,支持到 2029 年 9 月,支持时间长达 8 年,这下可以不用死守 JDK 8 了,JDK 17+ 也可以是一种新的选择了。

2024-05-28 09:48:58 964

原创 JAVA16

2021年3月16日正式发布,一共更新了17JEP。

2024-05-27 23:09:31 669

原创 JAVA15

2020年9月15日,java15正式发布,(风平浪静的一个版本)共有14个JEP,是时间驱动形式发布的第六个版本.相关文档:一个孵化器阶段,三个预览,两个废弃和两个移除JAVA15参与企业java各版本主要特征JDK5:enum 泛型 自动装箱拆箱 可变参数 增强循环JDK6 : 支持脚本语言 JDBC4.0APIJDK7 :支持trycatch-with-resources switch语句新增String支持 NIO2.0JDK8。

2024-05-27 16:12:30 1043

原创 JDK14特性

Oracle在2020年3月17日宣布JAVA14 全面上市,JAVA14通过每六个个月发布一次新功能,为企业和开发人员社区提供增强功能,继续了Oracle加快创新的承诺.最新的JAVA开发工具包提供了新功能,其中包括两项备受期待的新预览功能,实例匹配的匹配模式(JEP 305) 和记录(JEP 359),以及文本块的第二个预览(JEP 368),此外,最新的JAVA版本增加了对switch表达式的语言支持,公开了,用于持续监控JDK Flight Recorder数据的新API。

2024-05-03 21:57:01 1229 1

原创 JAVA13

2019年9月17日,国际知名的OpenJDK开源社区发布了Java编程语言环境的最新版本OpenJDK13。Features:总共有5个新的JEP(JDK Enhancement Proposals):http://openjdk.java.net/projects/jdk/13/Features2 语法层面的变化1_switch表达式(预览)在JDK 12中引入了Switch表达式作为预览特性,JDK 13提出了第二个switch表达式预览。JEP 354修改了这个特性,它引入了yield语句,

2024-04-27 21:09:51 565

原创 JAVA12

2019年3月19日,java12正式发布了,总共有8个新的JEP(JDK Enhancement Proposals)Features低暂停时间的GC http://openjdk.java.net/jeps/189微基准测试套件 http://openjdk.java.net/jeps/230switch表达式 http://openjdk.java.net/jeps/325JVM常量API http://openjdk.java.net/jeps/334。

2024-04-26 21:24:32 1026 2

原创 JAVA11迭代更新

2018年9月26日,Oracle官方发布JAVA11,Oracle 表示会对 Java 11 提供大力支持,这一支持将会持续至 2026 年 9 月。这是JAVA大版本周期变化后的第一个长期支持版本。非常值得关注,最新发布的JAVA11将带来ZGC HttpClient等重要特性,一共17个需要我们关注的JEP,参考文档。181:基于嵌套的访问控制309:动态类文件常量315:改进Aarch64 Intrinsics318:Epsilon:一个无操作的垃圾收集器。

2024-04-25 22:48:57 591

原创 JAVA10迭代更新

2018年3月21日, Oracle官方宣布JAVA10正式发布JAVA9和java10 都不是 LTS (Long-Term-Support)版本.和过去的JAVA大版本升级不同,这两个只有半年左右的开发和维护时间. 而JAVA11 也是就是18.9,才是JAVA之后的第一个长期支持版本JAVA10 一共定义了109个新特性,其中包含JEP,对程序员来说,真正的新特性也就一个,还有一些新的API和JVM规范以及JAVA语言规范上的改动.

2024-04-25 21:40:09 839

原创 JAVA9迭代特性

经过4次推迟,历经曲折的Java9最终在2017年9月21日发布。因为里面加入的模块化系统,在最初设想的时候并没有想过那么复杂,花费的时间超出预估时间。距离java8大约三年时间。Java 9提供了超过150项新功能特性,包括备受期待的模块化系统、可交互的REPL工具: jshell, JDK编译工具,语法层面的改变:Java公共API和私有代码,以及安全增强、扩展提升、性能管理改善等。可以说Java 9是一个庞大的系统工程,完全做了一个整体改变。但是这个巨大改变的功劳,都给了java11了,

2024-04-24 21:31:58 778 1

原创 Netty-优化与源码

### 3)ulimit -n* 属于操作系统参数* 可以设置一个进程同时打开的文件描述符的数量。### 4)TCP_NODELAY* 属于 SocketChannal 参数* 默认 false 开启了 nagle 算法### 5)SO_SNDBUF & SO_RCVBUF* SO_SNDBUF 属于 SocketChannal 参数* SO_RCVBUF 既可用于 SocketChannal 参数,也可以用于 ServerSocketChannal 参数(建议设置到 Se

2024-04-23 20:29:13 586

空空如也

空空如也

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

TA关注的人

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