自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

改良版雪花算法,分布式唯一ID神器!

開發(fā)
市面上絕大部分的 Java 診斷/分析工具的原理都類似,只是具體使用的字節(jié)碼操作框架的不一樣。

本期項(xiàng)目概覽:

  • IdGenerator:唯一 ID 生成器
  • JNotepad:跨平臺(tái)文本編輯器
  • Fury:高性能多語(yǔ)言序列化框架
  • x-easypdf:快速生成 PDF 文檔
  • Jarboot:可視化 Java 進(jìn)程管理平臺(tái)

IdGenerator:唯一 ID 生成器

項(xiàng)目介紹

  • 和 UidGenerator、Leaf 一樣,IdGenerator 也是一款基于 Snowflake(雪花算法)的唯一 ID 生成器。
  • IdGenerator 生成的唯一 ID 更短,速度更快,兼容所有雪花算法(號(hào)段模式或經(jīng)典模式),且不依賴外部存儲(chǔ)系統(tǒng)。
  • IdGenerator 解決了時(shí)間回?fù)軉?wèn)題,支持手工插入新 ID
  • IdGenerator 原生支持 C#/Java/Go/C/Rust/Python/Node.js/PHP(C 擴(kuò)展)/SQL/ 等語(yǔ)言,并提供多線程安全調(diào)用動(dòng)態(tài)庫(kù)(FFI)。
  • 默認(rèn)配置下,IdGenerator 生成的 ID 可用 71000 年不重復(fù)。

IdGenerator 生成的唯一 ID 組成

IdGenerator 生成的 ID 組成

  • timestamp (位數(shù)不固定):時(shí)間差,是生成 ID 時(shí)的系統(tǒng)時(shí)間減去 BaseTime(基礎(chǔ)時(shí)間,也稱基點(diǎn)時(shí)間、原點(diǎn)時(shí)間、紀(jì)元時(shí)間,默認(rèn)值為 2020 年) 的總時(shí)間差(毫秒單位)。初始為 5bits,隨著運(yùn)行時(shí)間而增加。如果覺得默認(rèn)值太老,你可以重新設(shè)置,不過(guò)要注意,這個(gè)值以后最好不變。
  • worker id (默認(rèn) 6 bits):機(jī)器 id,機(jī)器碼,最重要參數(shù),是區(qū)分不同機(jī)器或不同應(yīng)用的唯一 ID,最大值由 WorkerIdBitLength(默認(rèn) 6)限定。如果一臺(tái)服務(wù)器部署多個(gè)獨(dú)立服務(wù),需要為每個(gè)服務(wù)指定不同的 WorkerId。
  • sequence (默認(rèn) 6 bits):序列數(shù),是每毫秒下的序列數(shù),由參數(shù)中的 SeqBitLength(默認(rèn) 6)限定。增加 SeqBitLength 會(huì)讓性能更高,但生成的 ID 也會(huì)更長(zhǎng)。

相關(guān)地址

  • 項(xiàng)目地址:https://github.com/yitter/IdGenerator
  • Java 語(yǔ)言使用示例:https://github.com/yitter/idgenerator/tree/master/Java

JNotepad:跨平臺(tái)文本編輯器

項(xiàng)目介紹 :基于 JavaFX 開發(fā)的文本編輯器,供了完善的文本編輯和查看功能,支持 Mac / Windows / Linux。

效果展示

目前還是處于玩具項(xiàng)目的階段,bug 挺多,體驗(yàn)也比較差。

相關(guān)地址 :

  • 項(xiàng)目地址:https://gitee.com/jcnc-org/JNotepad
  • JNotepad 開發(fā)者指南:https://gitee.com/jcnc-org/docs/blob/master/CN/Dev-Guide/JNotepad-Dev-Guide/JNotepad-Dev-Guide.md

Fury:高性能多語(yǔ)言序列化框架

項(xiàng)目介紹

  • Fury 是一個(gè)基于 JIT 動(dòng)態(tài)編譯和零拷貝的多語(yǔ)言序列化框架,支持 Java/Python/Golang/JavaScript/C++ 等語(yǔ)言,提供極致的性能和易用性。
  • Fury 可以用于替代 JDK、Kryo、Hessian 等序列化框架,無(wú)需修改任何代碼。

詳細(xì)介紹可以查看這篇文章:比 JDK 最高快 170 倍,螞蟻開源的這款序列化框架有點(diǎn)厲害??!

性能對(duì)比

Fury 與其他常見序列化框架的性能對(duì)比如下圖所示。

更多 benchmark 數(shù)據(jù)請(qǐng)參考 Fury Github 官方文檔:https://github.com/alipay/fury/tree/main/docs/benchmarks

x-easypdf:快速生成 PDF 文檔

項(xiàng)目介紹:基于 pdfbox/fop 二次封裝的框架,分為 pdfbox 模塊(主打 pdf 編輯功能)和 fop 模塊(主打 pdf 導(dǎo)出功能)。兩個(gè)模塊均可單獨(dú)使用,也可以結(jié)合使用,幫助開發(fā)者快速生成 pdf 文檔。

軟件架構(gòu)

使用效果

創(chuàng)建 PDF:

// 定義pdf輸出路徑
String outputPath = "E:\\pdf\\test\\pdfbox\\test.pdf";
// 構(gòu)建文檔
XEasyPdfHandler.Document.build().addPage(
    // 構(gòu)建頁(yè)面
    XEasyPdfHandler.Page.build(
        // 構(gòu)建組件
        XEasyPdfHandler.Text.build("文本內(nèi)容")
    )
// 保存文檔并關(guān)閉
).save(outputPath).close();

編輯 PDF:

// 定義pdf輸出路徑
String sourcePath = "E:\\pdf\\test\\pdfbox\\test.pdf";
// 定義pdf輸出路徑
String outputPath = "E:\\pdf\\test\\pdfbox\\output.pdf";
// 讀取文檔
XEasyPdfDocument document = XEasyPdfHandler.Document.load(sourcePath);
// 獲取頁(yè)面
XEasyPdfPage page = document.getPageList().get(0);
// 創(chuàng)建文本組件
XEasyPdfText text = XEasyPdfHandler.Text.build("test");
// 將組件添加到頁(yè)面
page.addComponent(text);
// 保存文檔并關(guān)閉
document.save(outputPath).close();

相關(guān)地址

  • 項(xiàng)目地址:https://x-easypdf.cn/
  • 官網(wǎng):https://gitee.com/dromara/x-easypdf

Jarboot:可視化 Java 進(jìn)程管理平臺(tái)

項(xiàng)目介紹

  • Jarboot 是一款對(duì)業(yè)務(wù)代碼無(wú)侵入的可視化 Java 進(jìn)程管理平臺(tái),支持 Java 進(jìn)程啟停、診斷、監(jiān)控。
  • Jarboot 支持開發(fā)者使用調(diào)試命令對(duì)其啟動(dòng)的進(jìn)程進(jìn)行調(diào)試,有些命令是 Arthas 中的命令,用法大致相同。

效果預(yù)覽

服務(wù)配置

在線診斷:

jad 反編譯:

系統(tǒng)實(shí)時(shí)數(shù)據(jù)面板:

原理

Jarboot 具體的技術(shù)原理是通過(guò) JavaAgent + ASM 來(lái)往目標(biāo) Java 進(jìn)程注入代碼:

  • JavaAgent 可以在加載 Java 文件之前對(duì)字節(jié)碼進(jìn)行修改,也可以在運(yùn)行期間對(duì)已經(jīng)加載的類的字節(jié)碼進(jìn)行修改。
  • ASM 是一個(gè) Java 字節(jié)碼操作框架,可以幫助我們操作 Java 字節(jié)碼。

市面上絕大部分的 Java 診斷/分析工具的原理都類似,只是具體使用的字節(jié)碼操作框架的不一樣。

Jarboot 基于 Vue3(前端) + SpringBoot(后端),通過(guò) WebSocket 向前端界面實(shí)時(shí)推送進(jìn)程的相關(guān)信息,同時(shí)與啟動(dòng)的 Java 進(jìn)程維持一個(gè)長(zhǎng)連接,以監(jiān)控其狀態(tài)。

類似于 Arthas,Jarboot 也提供了一些開箱即用的命令(如獲取 JVM 信息、 監(jiān)控線程狀態(tài)、獲取線程棧信息等),并且,你還可以通過(guò) SPI 擴(kuò)展(支持 JDK 和 Spring 的 SPI)機(jī)制來(lái)實(shí)現(xiàn)自己的命令。

相關(guān)地址

  • Gitee 地址:https://gitee.com/majz0908/jarboot
  • 文檔:https://www.yuque.com/jarboot
責(zé)任編輯:張燕妮 來(lái)源: 互聯(lián)網(wǎng)架構(gòu)小馬哥
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)