今天的内容比较轻松,推荐 5 个不错的开源项目~
- IdGenerator:唯一 ID 生成器
- JNotepad:跨平台文本编辑器
- Fury:高性能多语言序列化框架
- x-easypdf:快速生成 PDF 文档
- Jarboot:可视化 Java 进程管理平台
IdGenerator:唯一 ID 生成器
项目介绍:
- 和 UidGenerator、Leaf 一样,IdGenerator 也是一款基于 Snowflake(雪花算法)的唯一 ID 生成器。
- IdGenerator 生成的唯一 ID 更短,速度更快,兼容所有雪花算法(号段模式或经典模式),且不依赖外部存储系统。
- IdGenerator 解决了时间回拨问题,支持手工插入新 ID
- IdGenerator 原生支持 C#/Java/Go/C/Rust/Python/Node.js/PHP(C 扩展)/SQL/ 等语言,并提供多线程安全调用动态库(FFI)。
- 默认配置下,IdGenerator 生成的 ID 可用 71000 年不重复。
IdGenerator 生成的唯一 ID 组成:
IdGenerator 生成的 ID 组成
- timestamp (位数不固定):时间差,是生成 ID 时的系统时间减去 BaseTime(基础时间,也称基点时间、原点时间、纪元时间,默认值为 2020 年) 的总时间差(毫秒单位)。初始为 5bits,随着运行时间而增加。如果觉得默认值太老,你可以重新设置,不过要注意,这个值以后最好不变。
- worker id (默认 6 bits):机器 id,机器码,最重要参数,是区分不同机器或不同应用的唯一 ID,最大值由
WorkerIdBitLength
(默认 6)限定。如果一台服务器部署多个独立服务,需要为每个服务指定不同的 WorkerId。 - sequence (默认 6 bits):序列数,是每毫秒下的序列数,由参数中的
SeqBitLength
(默认 6)限定。增加SeqBitLength
会让性能更高,但生成的 ID 也会更长。
相关地址:
- 项目地址:https://github.com/yitter/IdGenerator
- Java 语言使用示例:https://github.com/yitter/idgenerator/tree/master/Java
JNotepad:跨平台文本编辑器
项目介绍 :基于 JavaFX 开发的文本编辑器,供了完善的文本编辑和查看功能,支持 Mac / Windows / Linux。
效果展示:
目前还是处于玩具项目的阶段,bug 挺多,体验也比较差。
相关地址 :
- 项目地址:https://gitee.com/jcnc-org/JNotepad
- JNotepad 开发者指南:https://gitee.com/jcnc-org/docs/blob/master/CN/Dev-Guide/JNotepad-Dev-Guide/JNotepad-Dev-Guide.md
Fury:高性能多语言序列化框架
项目介绍:
- Fury 是一个基于 JIT 动态编译和零拷贝的多语言序列化框架,支持 Java/Python/Golang/JavaScript/C 等语言,提供极致的性能和易用性。
- Fury 可以用于替代 JDK、Kryo、Hessian 等序列化框架,无需修改任何代码。
详细介绍可以查看这篇文章:比 JDK 最高快 170 倍,蚂蚁开源的这款序列化框架有点厉害!!
性能对比:
Fury 与其他常见序列化框架的性能对比如下图所示。
更多 benchmark 数据请参考 Fury Github 官方文档:https://github.com/alipay/fury/tree/main/docs/benchmarks
x-easypdf:快速生成 PDF 文档
项目介绍:基于 pdfbox/fop 二次封装的框架,分为 pdfbox 模块(主打 pdf 编辑功能)和 fop 模块(主打 pdf 导出功能)。两个模块均可单独使用,也可以结合使用,帮助开发者快速生成 pdf 文档。
软件架构:
使用效果:
创建 PDF:
代码语言:javascript复制// 定义pdf输出路径
String outputPath = "E:\pdf\test\pdfbox\test.pdf";
// 构建文档
XEasyPdfHandler.Document.build().addPage(
// 构建页面
XEasyPdfHandler.Page.build(
// 构建组件
XEasyPdfHandler.Text.build("文本内容")
)
// 保存文档并关闭
).save(outputPath).close();
编辑 PDF:
代码语言:javascript复制// 定义pdf输出路径
String sourcePath = "E:\pdf\test\pdfbox\test.pdf";
// 定义pdf输出路径
String outputPath = "E:\pdf\test\pdfbox\output.pdf";
// 读取文档
XEasyPdfDocument document = XEasyPdfHandler.Document.load(sourcePath);
// 获取页面
XEasyPdfPage page = document.getPageList().get(0);
// 创建文本组件
XEasyPdfText text = XEasyPdfHandler.Text.build("test");
// 将组件添加到页面
page.addComponent(text);
// 保存文档并关闭
document.save(outputPath).close();
相关地址:
- 项目地址:https://x-easypdf.cn/
- 官网:https://gitee.com/dromara/x-easypdf
Jarboot:可视化 Java 进程管理平台
项目介绍:
- Jarboot 是一款对业务代码无侵入的可视化 Java 进程管理平台,支持 Java 进程启停、诊断、监控。
- Jarboot 支持开发者使用调试命令对其启动的进程进行调试,有些命令是 Arthas 中的命令,用法大致相同。
效果预览:
服务配置
在线诊断:
jad 反编译:
系统实时数据面板:
原理:
Jarboot 具体的技术原理是通过 JavaAgent ASM 来往目标 Java 进程注入代码:
- JavaAgent 可以在加载 Java 文件之前对字节码进行修改,也可以在运行期间对已经加载的类的字节码进行修改。
- ASM 是一个 Java 字节码操作框架,可以帮助我们操作 Java 字节码。
市面上绝大部分的 Java 诊断/分析工具的原理都类似,只是具体使用的字节码操作框架的不一样。
Jarboot 基于 Vue3(前端) SpringBoot(后端),通过 WebSocket 向前端界面实时推送进程的相关信息,同时与启动的 Java 进程维持一个长连接,以监控其状态。
类似于 Arthas,Jarboot 也提供了一些开箱即用的命令(如获取 JVM 信息、 监控线程状态、获取线程栈信息等),并且,你还可以通过 SPI 扩展(支持 JDK 和 Spring 的 SPI)机制来实现自己的命令。
相关地址:
- Gitee 地址:https://gitee.com/majz0908/jarboot
- 文档:https://www.yuque.com/jarboot
·············· END ··············