- 博客(687)
- 资源 (18)
- 收藏
- 关注
原创 openrewrite 自定义recipe part2
本文介绍了使用JavaTemplate修改方法及OpenRewrite工具的高级应用技巧。主要内容包括:1)通过JavaIsoVisitor重写类、方法和变量声明,使用Matcher控制修改范围;2)Cursor的三种使用场景(直接访问、创建新Cursor和更新Cursor);3)自定义DataTable输出分析结果;4)集成ESLint工具链;5)在单个Recipe中创建多个Visitor实现交叉检查;6)估算代码修改耗时;7)管理Recipe间的版本依赖关系;8)使用Preconditions控制执行范
2025-12-26 10:58:05
771
原创 openrewrite 自定义recipe part 1
文章摘要:本文介绍了OpenRewrite recipe的包括基于starter或gradle/maven的初始化方式,Java版本建议设为1.8。详细说明了三种recipe类型:Declarative、Refaster template和Imperative recipes,其中Imperative recipes基于LST实现复杂逻辑。重点讲解了单元测试方法,包括RewriteTest类的使用、多断言支持及Java版本定义。最后介绍了生成Java代码块的JavaTemplate类及其apply方法的应用
2025-10-26 11:03:29
731
原创 openrewrite Lossless Semantic Trees (LST)
摘要: Lossless Semantic Trees (LST) 是 OpenRewrite 的核心代码解析模型,相比传统 AST 具有类型保留和格式保持特性,支持 Java 和 YAML 文件解析。LST 生命周期包括内存构建、转换(支持搜索标记或修改)、文本还原及文件覆盖。Java 的 LST 以 CompilationUnit 为根节点,包含类、方法、变量等结构化元素,可通过调试或 TreeVisitingPrinter 工具查看细节。目前存在注释解析问题,例如行末注释可能被错误关联到其他语句。
2025-10-26 10:47:08
1217
原创 openrewrite 的rewrite.yml 编写注意事项
本文介绍了OpenRewrite工具的使用规范和最佳实践。主要内容包括:1)recipe文件必须存放在META-INF/rewrite目录下;2)最佳实践如文件可包含多个recipe、需使用完整命名空间等;3)基本概念包括recipe和style的定义;4)格式规范示例;5)预处理条件的使用场景和常见类型;6)style配置的语法示例;7)依赖管理注意事项;8)运行时体系以composite方式执行多个recipe。文章提供了详细的配置示例和语法说明,帮助开发者正确使用OpenRewrite进行代码重构。
2025-10-14 18:24:06
774
原创 openrewrite Maven plugin configuration
本文介绍了Maven Rewrite插件的核心功能与配置。主要内容包括:1)5个核心命令(run/runNoFork/dryRun/dryRunNoFork/discover)的功能区别;2)-D参数的高优先级特性及常用参数;3)13项插件配置项详解,重点包括activeRecipes、activeStyles、checkstyle集成、文件排除规则plainTextMasks、10MB资源大小阈值等。特别说明exportDatatables功能可将分析结果导出CSV文件到target目录,并附带核心实现代
2025-10-14 04:11:48
759
原创 不修改项目代码,使用gradle/maven 运行openrewrite
本文介绍了使用Maven命令执行OpenRewrite代码重构的方法,无需修改pom.xml文件。主要内容包括:1)直接运行rewrite-maven-plugin插件,通过-D参数指定配方坐标和激活的配方名称;2)使用rewrite.yml配置文件或通过configLocation参数指定;3)通过options参数设置相关操作选项。文中提供了将Javax迁移到Jakarta的示例命令,以及一个静态分析配方的dryRun执行示例,展示了命令执行时的输出信息,包括项目构建过程、资源处理和插件执行情况等。该方
2025-10-14 03:55:39
316
原创 JAVA Toolchains 问题解决
摘要:JDK 9+支持多版本编译,但需配置工具链。Gradle通过gradlew javaToolchains自动检测PATH和~/.jdks中的JDK;Maven需在~/.m2/toolchains.xml中手动配置各版本JDK路径。示例显示Gradle检测到Corretto 21、OpenJDK 24和Oracle JDK 8/22,Maven配置文件则需指定JDK 8/11/17的具体安装路径。未配置工具链会导致编译错误。(149字)
2025-10-12 11:15:47
153
原创 查看jar里面的多版本信息
摘要:JDK9+支持JAR包内存储多版本class文件,可通过jar tf命令查看版本信息。要自动化处理,需开发少量代码。示例命令显示不同JAR包的多版本结构差异:kotlin-stdlib采用正则匹配versions/.*/$,而commons-lang3使用versions/./*匹配。测试发现commons-lang3-3.18.0.jar包含JDK9模块信息。注意未验证JDK10+兼容性。(149字)
2025-10-12 10:47:50
263
原创 使用openrewrite查找方法调用关系
OpenRewrite 方法调用查找示例摘要 OpenRewrite 提供了查找Java方法调用的功能,通过编写rewrite.yml配置文件即可实现。配置示例中查找了java.util.Collections类的shuffle()方法所有调用点。使用Maven命令执行分析后,会在target/rewrite目录生成结果文件,其中methodCall.csv包含了方法调用的具体位置信息。这种静态分析方法可用于代码审计、重构等场景,且支持批量配置多个方法查找。
2025-10-12 10:37:57
128
原创 使用openrewrite进行jdk升级
OpenRewrite工具使用指南 OpenRewrite是一款代码迁移工具,支持通过dryRun模式生成patch或run模式直接修改代码。使用时需确保代码可编译并正确配置JDK版本,否则可能报错。基本命令格式为mvn命令配合recipe参数,可处理pom和gradle文件。执行后会生成rewrite.patch文件,显示代码变更详情,如将Optional的notPresent()改为isEmpty()等Java版本升级相关的修改。使用时需注意Maven和JDK版本匹配,错误提示中会明确指出需要修改的文件
2025-10-12 10:33:32
830
原创 ontology-本体学习记录
本文探讨了本体(Ontology)与检索增强生成(RAG)在大型语言模型(LLM)中的协同作用。通过结构化本体为RAG提供精确的知识源,可显著提升LLM的响应准确性、推理能力和领域专业性。研究对比了两种方法:直接使用本体微调LLM,或通过ON-RAG将本体检索结果作为LLM输入上下文。后者能有效减少幻觉,增强回答可验证性。微软开源的OG-RAG系统实现了这一框架,为LLM注入结构化知识提供了可行方案。这种本体与LLM的协同模式特别适合需要高准确性、强逻辑性的企业知识管理场景。
2025-10-12 10:18:40
698
原创 国产及其它非Oracle JDK及OpenJDK
国内主流JDK发行版对比:阿里Dragonwell支持JFR、G1ElasticHeap等功能,提供明确的EOL周期;腾讯Kona支持国密算法,但EOL不明确;华为毕昇JDK提供融合版本特性,支持国产OS;ECLIPSE JDK和Amazon Corretto均为国际版本,其中Corretto 8/11的EOL延长至2030/2032年。各版本在功能支持、操作系统适配和维护周期上存在差异,用户可根据需求选择。
2025-09-27 10:08:52
853
原创 equals 定义不一致导致list contains错误
Java中equals方法的问题会导致contains判断失效。原代码中自定义的equals方法参数类型错误,应为Object而非Row类,导致List的contains方法调用了Object的equals而非自定义实现。正确的做法是重写equals方法,先判断参数是否为Row实例,再进行属性比较。同时还应相应地重写hashCode方法以保证一致性。这个案例展示了正确实现equals方法的重要性。
2025-09-06 22:50:02
329
原创 eclipse 安装 lombok
摘要:在Eclipse中快速安装Lombok无需安装插件,只需进入Maven本地仓库的Lombok目录(如org/projectlombok/lombok/1.18.38),双击运行lombok.jar文件,指定Eclipse安装目录完成安装。安装后会在eclipse.ini中自动添加-javaagent参数指向lombok.jar,重启Eclipse后Lombok功能即可生效,自动生成set/get等方法。这种方法简单快捷,省去了插件安装的繁琐步骤。
2025-09-06 22:44:41
274
原创 pattern of distributed system 读书笔记-Patterns of Communication between Nodes
摘要:本文探讨了分布式系统中节点通信的三种优化模式:1) 单套接字通道,通过持久化的单一连接确保消息有序传递,并配合心跳检测维持连接活跃;2) 请求批处理,通过聚合小数据量请求降低网络开销,需动态调整批次大小(如Kafka默认16KB)并设置等待时间阈值;3) 请求流水线,采用发送/接收双线程提升吞吐量,但需处理服务端过载和乱序请求问题(如Raft通过日志索引匹配机制实现请求校验)。这些方法在保证可靠性的同时,显著优化了延迟和吞吐量。(149字)
2025-07-20 11:01:55
978
原创 pattern of distributed system 读书笔记- Patterns of Cluster Management
文章摘要: 本文探讨了集群管理的核心模式,包括一致性核心(Consistent Core)、租约机制(Lease)和状态监控(State Watch)。一致性核心通过3-5个节点的小集群提供线性化保证,管理元数据和集群决策。租约机制利用一致性核心实现容错,通过心跳机制更新租约时间,并处理节点故障。状态监控允许客户端注册对特定状态变化的兴趣,减少服务器连接压力,但需注意连接故障和事件丢失问题。文中还区分了单调时钟时间和挂钟时间的不同用途及限制。
2025-07-20 10:57:28
491
原创 pattern of distributed system-Patterns of Distributed Time(logical timestamps)
分布式系统中的时间模式(逻辑时间戳) Lamport时钟:解决跨服务器时间戳不可比问题,通过单调递增的数字维护因果关系,但只能提供偏序关系,无法比较不同服务器的独立事件。 混合时钟:结合系统时间和逻辑计数器,既保持单调性又关联实际时间,适用于版本化存储(如MongoDB、CockroachDB),支持分布式事务的时间戳协调。 时钟边界等待:解决时钟漂移导致的读取过时数据问题,通过延迟读写确保节点时钟同步,并采用读取重启机制处理时钟滞后问题。云服务商通过原子钟等技术将时钟漂移控制在毫秒级。 这些模式在保证分布
2025-07-17 09:00:50
889
原创 pattern of distributed system 读书笔记- Patterns of Data Partitioning
摘要:分布式数据存储与事务处理策略 本文介绍了三种分布式数据存储和事务处理的关键技术: 固定分区:通过哈希函数将数据映射到逻辑分区,再分配到集群节点,实现均匀分布和快速查询。新增节点时只需移动少量数据,并采用协调节点跟踪分区映射关系。 键范围分区:针对范围查询场景,采用有序键分区策略。支持预定义键范围和自动分区拆分,基于负载指标(请求数、CPU/内存使用率)动态调整分区大小。 两阶段提交:解决分布式事务一致性问题,包含准备阶段(节点承诺执行)和提交阶段(实际执行)。采用预写日志保证持久性,提供多种锁策略(错
2025-07-17 06:52:59
1077
原创 pattern of distributed system 读书笔记- Patterns of Data Replication
摘要: 本文探讨了数据复制中的关键技术模式。首先介绍了Write-Ahead Log(WAL)机制,它通过顺序追加日志确保数据持久性,并讨论了日志管理、校验和性能优化策略。其次讲解Segmented Log和Low-Water Mark技术,前者将大日志分割为多个文件,后者通过设置最低偏移量来安全清理旧日志。在集群管理方面,重点分析了Leader-Follower架构及其选举机制(包括Zab和Raft算法),以及心跳检测在故障发现中的应用。文章还指出多数读写(Quorum)不足以提供强一致性保证,并比较了不
2025-07-14 22:17:56
897
原创 pattern of distributed system 读书笔记-Overview of the Patterns
分布式系统数据一致性模式综述 本文系统介绍了分布式系统中确保数据一致性的关键模式。在单服务器场景下,预写日志(WAL)保障数据持久性;多节点环境中,领导者-跟随者模式通过心跳检测维持可用性,多数派仲裁机制确保日志复制可靠性。高水位标记(High-Water Mark)机制有效跟踪可提交日志位置,而单更新队列和幂等性设计提升了系统吞吐量。分区技术通过合理的数据分布和复制策略(通常3或5副本)实现横向扩展,两阶段提交协议维护跨分区一致性。时间排序方面,Lamport时钟和混合时钟替代系统时间戳,解决了分布式环境
2025-07-14 21:49:16
1063
原创 JDK 8->21 NEW FEATURES
本文摘要:介绍了Java新版本(11-21)的核心特性更新,主要包括:1)文本块与多行字符串(""");2)增强的switch表达式(返回值、模式匹配);3)记录类(Record)简化数据类;4)密封类(Sealed Class)控制继承;5)改进的NPE提示;6)日期/数字格式化增强;7)Stream API新增toList()方法;8)虚拟线程(Virtual Threads)提升并发性能;9)垃圾回收器优化(ZGC/Shenandoah);10)结构化并发管理。这些特性显
2025-06-25 09:04:10
865
原创 jdk 升级相关
emt4j和jar-analyzer是两款Java工具:emt4j用于记录和追踪Java应用中特定方法的调用情况,支持按线程、时间等维度分析;jar-analyzer则专注于JAR文件分析,能检测冲突依赖、重复类等常见问题。两款工具均可帮助开发者快速定位性能问题和依赖冲突,适用于日常开发调试场景。参考文档详细介绍了工具的使用方法和实际案例。
2025-06-22 17:12:24
165
原创 华为数字化转型-平台篇
4.1 1 一把手担责4.2 2 战略引领4.3 3 重构业务4.4 4 转人磨芯4.5 5 眼高手低- 数字化转型一定要从高处着眼,目标要远大,要系统性地描绘出数字化转型愿景和架构蓝图,形成变革全局视图,确保企业上下一盘棋。但在具体开展时,企业一定要从解决自身的现实问题入手,识别业务运作的高能耗点、管理低效点以及客户体验缺失环节,找准转型突破口进行重点推进而非面面俱到,赢得信心,从而让更多人愿意参与进来,并带动其他转型工作有序开展。
2025-04-01 08:20:51
1308
原创 华为数字化转型-方法篇
IT产品团队由于包含了业务、数据、IT人员,更适合引入服务化架构,使得IT系统由做“功能”变为做“服务”,将一个复杂的IT系统拆分为一个个相对解耦的应用服务,使其能够基于业务场景的变化进行快速优化和迭代,从而更加灵活地响应业务变化。在规划工作中,规划团队首先需要解读企业业务战略和商业模式的变化,识别出企业的“新定位、新业务、新模式”,再思考通过什么样的变革来支撑业务战略目标的达成,进而通过一系列变革项目来改变业务运作模式,支撑业务发展和商业成功。(2)业务能力:业务能力是服务化变革的入手点。
2025-03-30 20:44:52
1086
原创 华为数字化转型-认知篇
模式,以清晰的业务战略作为数字化转型规划的输入,通过愿景来描绘未来5~10年数字化转型将取得的成就,进而设计架构蓝图,对愿景进行系统性的、分层分级的梳理和诠释,最后规划出变革项目,承接数字化转型举措,并为每一个项目确定优先级。客户需求的差异化和企业间分工的精细化,让单一企业的产品越来越难以满足客户的“痛点”需求。我们认为,只有认识到数字化带来的企业内生产关系的变化,设计好未来的企业运营模式,重新定义“总部”“区域”和“一线项目组”的关系,才能让数字化成为缩短决策链条、提升运营效率的推进器。
2025-03-30 20:30:32
699
原创 kv server code 分析
最后使用函数getDirectRequest调用store.LoadLastMsg然后使用mset.outq.send将消息发送到消费者的inbox。核心处理函数是processDirectGetLastBySubjectRequest,下图显示了调用堆栈和跟踪。kv流的访问有所不同,将通过功能subscribeToDirect设置为直接访问。
2025-03-09 21:15:30
354
原创 nats kv client code分析
update需要设置expectedRevision,其动作可以描述为:如果键存在并且其最新版本(expectedRevision)与预期匹配,则将其设置为键的值。使用 subject “DIRECT.GET.KV_profiles.$KV.profiles.sue.color”通过指令:DIRECT.GET. 告诉服务端调用 $JS.API.DIRECT.GET.KV.profile"就是一个流,如果有人写错了代码,可以删除它。使用filter订阅的要注意,以下代码是有问题,不能包括"sue"
2025-03-09 21:10:14
915
原创 nats jetstream server code 分析
jetstream导入两个对象:stream and consumer,在stream 之上构造jetstreamapi。在nats代码中,以下是一些常见的缩写。
2025-03-09 20:56:04
1143
原创 nats jetstream 测试和客户端分析
当一个消息保存到store后,一个全局的seq 被返回并送给客户端,实现了message的可最终和最少一次发送。当一个客户端发送了stream message,processJetStreamMsg 负责处理消息。当创建stream的时候,最重要的 option 是 retentionPolicy。msg先写入缓存,然后再写入磁盘,所以如果不是在集群模式下,可能会丢失。最后,写入磁盘的函数是flushPendingMsgsLocked。可以使用如下模式设置timeout。最后返回消息给客户端是如下函数。
2025-03-09 20:37:58
1239
原创 nats queue subscription 服务端代码分析
同时当一个服务被订阅的事后,$SRV 相关tpoic也被订阅,但只要service是使用队列订阅, 以下是通过增加测试代码的输出。首先可以看到下面的调用stack信息,可以看到调用了sublist.go 的insert 函数。如果在订阅使用了队列中,则放入qsubs map对象中,否则将放入psubs map对象中。如果是queue模式,解析接收到的message并发送给消费者是调用如下函数。如果打开debug模式和添加一些调试低码,跟踪消息处理可以得到如下结果,其中。非队列模式是如下代码。
2025-03-07 22:15:50
235
原创 nats service frame 代码分析
现在我们可以使用 req 来 ping 了,注意,下面的 $SRV.PING.minmax 不能被符号 ’ 或 " 包含。我们可以使用队列组“q”,所有服务提供者都会在队列中,以避免多个实例响应相同的请求并提供高可用性。service endpoint 订阅是通过 qGroup 参数来订阅,可以参考下面的代码。会得到如下输出,可以清楚的看到订阅了哪个subject以及是否通过队列订阅。注意,这里是 SRV ping,不是健康连接中使用的 ping/pong。然后让我们看看服务构建函数。
2025-03-05 21:18:05
500
原创 nats request 和reply 客户端模式代码分析
理论上,你可以使用两个消费者来回复同一个请求,两个请求都会发送给请求者,但只有一个响应会被分派到 Future.get 函数,我们使用 Future 来支持某些场景,例如从不同来源获取营销建议,但只向我们的客户显示一个。当每个返回的信息达到客户端的时候,deliverReply function 被dispatcher调用,通过token +remove 来保证每次request 只有第一个到达的reply会触发future调用。
2025-03-05 21:06:14
437
原创 nsc account 及user管理
从安全角度,推荐使用sign 模式进行nats account及用户管理此外通过nsc 管理用户和权限,可以统一实现全局管控,包括subject管控,避免随意增减subject。
2025-02-14 19:38:05
1315
原创 nats 消息系统架构
nats focus 在realtime ,但缺少了iot,另外nats的核心是快速,在core里面其实没有提供al least once, exactly once模式。Subject Mapping:通过消息mapping,实现原始subject按policy 转发到一个或者多个subject下,用于灰度分流,细分访问控制等场景。nats的serviceframe = request/reply+queue +指定$SRV subject。nats server/lead的核心对象。
2025-02-14 08:07:19
910
原创 Doris 2.1 Optimization Technology Principle Statistics
Doris 2.1 Optimization Technology Principle Statistics, very important for CBO
2025-01-25 16:04:23
118
原创 Doris 2.1 Optimization Technology Principle 学习笔记
Queries Acceleration Optimization Technology Principle
2025-01-25 15:54:39
304
原创 Queries Acceleration -Tuning- Common Tuning Parameters 学习笔记
2.1 Whether to enable the new optimizer 2.2 Default Value-true 2.3 For scenarios such as low-version upgrades, initially set to false; after upgrading, it can be set to true3.1 Whether to enable DML support for the new optimizer 3.2 Default Value-true
2025-01-24 18:16:45
225
原创 Queries Acceleration -Tuning- Tuning Execution 学习笔记
Doris runtime waittime , skey and parallelism adjustment
2025-01-24 18:13:27
214
原创 Timeout or no response waiting for NATS JetStream server
当使用jetStream 出现"Timeout or no response waiting for NATS JetStream server" 错误的时候要注意后面的“no response”,尤其是开发测试,要去check server 是否启动了 jet stream。
2025-01-24 08:34:19
535
hadoop 安全设置guide
2021-08-27
Semantic Software design -语义软件设计一书的资源
2023-11-12
starburst.io 关于datamesh的演进稿
2023-03-11
keda 安装测试资源包
2022-06-07
aws well architect 系列,英文版本
2022-01-26
localjmx_httpserver-0.11.0-jar-with-dependencies.jar
2020-05-01
ali CNCF学习笔记.rar
2020-04-03
error boundaries and suspense.rar
2021-04-28
example-graphql-tools.rar
2020-09-08
cncf-execrise@20200404.tar
2020-04-05
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅