有的时候博客内容会有变动,首发博客是最新的,其他博客地址可能会未同步, 认准 https://blog.zysicyj.top
本地跑的,cpu 是 i9-13 代,内存 32G
方法是这个:
123456789101112131415public static void main(String[] args) { int i = 1000000; int i2 = 100; StopWatch watch = new StopWatch(); watch.start(); Set<Long> ids = new HashSet<>(); for (int i21 = i2; i21 > 0; i21--) { for (int i1 = 0; i1 < i; i1++) { ids.add(IdUtil.getSnowflake().nextId()); ...
有时候博客内容会有变动,首发博客是最新的,其他博客地址可能未同步,请认准https://blog.zysicyj.top
系列文章地址
报错内容 报错信息显示 ID 重复。
原因分析 在最终添加的方法中,出现了重复 ID 的报错。对于为什么 ID 会重复,我思考了很久也没有想通。我沿着代码往上找到了saveList。
123456789int batchSize = 5000;if (CollUtil.isNotEmpty(saveList)) { List<List<Map<String, Object>>> batchList = ListUtil.partition(saveList, batchSize); for (List<Map<String, Object>> batch : batchList) { if (CollUtil.isNotEmpty(batch)) { firstRecordMapper.insertJghz ...
有的时候博客内容会有变动,首发博客是最新的,其他博客地址可能会未同步, 认准https://blog.zysicyj.top
1. 什么是 MySQL 的 ROW_NUMBER()函数?ROW_NUMBER()是 MySQL 中的一个窗口函数,用于为查询结果集中的每一行分配一个唯一的连续整数值。它可以根据指定的排序规则对结果进行排序,并为每一行分配一个序号。
2. 为什么需要使用 MySQL 的 ROW_NUMBER()函数?在某些情况下,我们可能需要对查询结果进行编号或者按照特定的顺序进行排序。ROW_NUMBER()函数提供了一种简单而有效的方法来实现这个目标。通过使用 ROW_NUMBER()函数,我们可以轻松地为结果集中的每一行分配一个唯一的序号,并且可以根据需要对结果进行排序。
3. MySQL ROW_NUMBER()函数的实现原理 MySQL 并没有内置的 ROW_NUMBER() 函数,但我们可以使用变量和子查询来模拟实现该功能。具体步骤如下:
首先,在查询语句中添加一个变量,并初始化为 0。
然后,使用子查询将结果集按照指定的排序规则排序。
接下来,使用 SE ...
b9883d58b8990977424973b91adc44d1e7904864033180a8ca281396f6c6ef513f51fead549bd7f505da4b0eb79b968a3be249dfaa85756f77b925df4e29b534e5be7a9128c4c479853556d91b2a443365863c1b0202a03f0176624bfd60709d5656aaa33754e32b7bc07322d4e8bf2895cd6d11f869e68d73fdada32382cabcda0770211b1c7a1f1176398c43429dd1d97b75df792945b2f3d863058343d65165adf486adf79a54643ec3439f2079db92941dc28585b92e1e93a477684d6f5c95643d7994a6531a49ce1eb82472924837e85f847d59b6010bc14479c62cb0f3012c76297d4553a0d392028f39ff9181fe681596d9acf216c ...
有的时候博客内容会有变动,首发博客是最新的,其他博客地址可能会未同步, 认准https://blog.zysicyj.top
| 453: | Structured Concurrency (Preview) |什么是结构化并发(Structured Concurrency)?结构化并发是一种用于简化并发编程的 API。它将在不同线程中运行的相关任务组视为一个单独的工作单元,从而简化错误处理和取消操作,提高可靠性,并增强可观察性。
为什么需要结构化并发?传统的并发编程模型,如ExecutorServiceAPI,由于其无限制的并发模式,引入了复杂性和风险。这些模型没有强制执行或跟踪任务和子任务之间的关系,使得管理和观察并发任务变得困难。结构化并发模型认为任务结构应该反映代码结构,在单线程代码中,执行总是强制实施任务和子任务的层次结构,每个子任务的生命周期相对于其他子任务受到代码的语法块结构的控制。
结构化并发旨在消除与并发编程相关的常见风险,例如线程泄漏和取消延迟,并增强并发代码的可观察性。
结构化并发的实现原理 结构化并发通过引入新的 API 来实现,其中最重要的类是 Str ...
有的时候博客内容会有变动,首发博客是最新的,其他博客地址可能会未同步, 认准https://blog.zysicyj.top
| 452: | Key Encapsulation Mechanism API |1. 什么是 Key Encapsulation Mechanism API?Key Encapsulation Mechanism (KEM) API 是一个 JavaAPI,用于支持密钥封装机制。密钥封装是一种加密技术,它将一个对称密钥(也称为会话密钥)与公钥结合使用,以便在不直接暴露私钥的情况下安全地传输密钥。
KEM API 提供了一组方法和类,用于生成、封装和解封装密钥。它可以与现有的密码学算法和协议集成,提供更高级别的密钥管理功能。
2. 为什么需要 Key Encapsulation Mechanism API?在传统的密钥交换过程中,通常需要事先共享或分发密钥。这可能存在许多安全风险,例如密钥泄露、中间人攻击等。而密钥封装机制通过使用公钥进行密钥交换,避免了这些问题。
Key Encapsulation Mechanism API 的出现使得开发者能够更方便 ...
有的时候博客内容会有变动,首发博客是最新的,其他博客地址可能会未同步, 认准https://blog.zysicyj.top
| 451: | Prepare to Disallow the Dynamic Loading of Agents |1. 什么是动态加载代理禁用准备(Prepare to Disallow the Dynamic Loading of Agents)?动态加载代理禁用准备(Prepare to Disallow the Dynamic Loading ofAgents)是一个 Java 增强提案,其目标是在 JVM 中禁止动态加载代理。代理是一种能够修改或监视应用程序行为的机制,它可以通过字节码注入来实现。
2. 为什么需要动态加载代理禁用准备?动态加载代理允许开发人员在运行时修改和监视 Java 应用程序的行为。虽然这对于调试和性能分析等方面非常有用,但也存在潜在的安全风险。恶意代码可能会利用动态加载代理的功能来执行恶意操作,例如窃取敏感信息、篡改数据等。
因此,为了加强 Java 应用程序的安全性,限制动态加载代理的使用是很有必要的。
3. 动态加 ...
有的时候博客内容会有变动,首发博客是最新的,其他博客地址可能会未同步, 认准 https://blog.zysicyj.top
| 449: | Deprecate the Windows 32-bit x86 Port for Removal | 名字太长了。。后面简称 449
1. 什么是 JEP 449?JEP 449(Java Enhancement Proposal 449)是一个针对 OpenJDK 的提案,旨在废弃并最终移除 Windows 32 位 x86 平台上的 Java 支持。
2. 为什么需要废弃 Windows 32 位 x86 平台上的 Java 支持? 主要有以下几个原因:
过时的硬件和操作系统 :Windows 32 位 x86 平台已经逐渐被淘汰,现代计算机普遍采用 64 位架构。同时,大多数新版本的 Windows 操作系统也只提供了 64 位版本。
性能限制 :32 位架构限制了可寻址内存空间的大小,导致无法充分利用现代计算机的资源。而 64 位架构可以提供更大的内存地址空间,从而提高应用程序的性能和扩展性。
安全问题 :32 位架 ...
有的时候博客内容会有变动,首发博客是最新的,其他博客地址可能会未同步, 认准https://blog.zysicyj.top
| 448: | Vector API (Sixth Incubator) |1. 什么是 Vector API (Sixth Incubator)?Vector API (Sixth Incubator) 是 Java 平台的一个项目,旨在提供一种简单且高效的方式来执行向量化计算。它引入了新的类和接口,以支持使用SIMD(Single Instruction, Multiple Data)指令集进行并行计算。
2. 为什么需要 Vector API (Sixth Incubator)?在许多应用程序中,存在大量的数据并行计算任务,例如图像处理、科学计算和机器学习等领域。传统的 Java编程模型无法充分利用现代硬件的并行计算能力,导致性能低下。而 Vector API (Sixth Incubator) 的目标就是通过向量化计算来提高这些应用程序的性能。
3. Vector API (Sixth Incubator) 的实现原理?Vector API (S ...
有的时候博客内容会有变动,首发博客是最新的,其他博客地址可能会未同步, 认准https://blog.zysicyj.top
| 446: | Scoped Values (Preview) |1. 什么是 Scoped Values (Preview)?Scoped Values (Preview) 是 Java 平台的一个新特性,它在 JDK 17 中引入。该特性旨在提供一种机制,用于在代码块级别上设置和使用临时变量。
2. 为什么需要 Scoped Values (Preview)?在传统的 Java 编程中,我们通常会将变量声明在方法或类的作用域内,并且这些变量的生命周期与其所在的作用域相同。然而,在某些情况下,我们可能希望在更小的范围内定义临时变量,以便更好地控制其可见性和生命周期。
Scoped Values (Preview) 提供了一种简洁、安全的方式来定义和使用临时变量,使得代码更加清晰易读,并且可以减少不必要的命名冲突和资源泄漏问题。
3. Scoped Values (Preview) 的实现原理?Scoped Values (Preview) 的实现基于 ...