(三)多模块混淆 示例项目: https://github.com/abel533/yguard-modules-parent 假设有如下多模块项目: 1234module-parent├─module-a├─module-b└─module-c 在 混淆技术研究笔记(一)常见工具介绍 中提到,默认只能使用单模块混淆,每个模块构建时的上下文只有自己,无法对其他模块进行处理,虽然 <<inoutpa 2024-06-22 系列文章 > 混淆技术研究笔记 #混淆 #yGuard
(二)yGuard入门 yGuard官方文档地址:https://yworks.github.io/yGuard/index.html yGuard官方文档包含了比较全面的内容,由于文档是英文的,而且文档翻译后的浏览效果不是特别好,所以看文档入门有点难度。 这个系列的重点是混淆,所以不会涉及yGuard中的shrink用法,主要是rename的用法。 本文使用的 maven-antrun-plugin 插件,插件的基本配 2024-06-22 系列文章 > 混淆技术研究笔记 #混淆 #yGuard
(一)常见工具介绍 混淆技术研究笔记包含多篇内容,记录了一次混淆的研究和应用的过程。 最近有一个 Java 的底层框架需要进行混淆(从原始的 Java 项目改造为了 Maven 多模块),而且要实现和该框架以前一样的混淆和反篡改功能(旧的打包配置我没权限看到),为了实现这些功能,开始了本系列的研究。 1. 常见工具介绍第一节先来点简单的内容,下面是通过 AI 生成的几款常见的混淆工具简介及对比。 ProGuard 2024-06-22 系列文章 > 混淆技术研究笔记 #混淆 #yGuard
避免啰嗦,不要多此一举! 看到一段代码,写的比较啰嗦就用GitHub Copilot简化了一下,简化结果很简单,复杂度从273%降低到13%(复杂度使用IDEA插件 Better Highlights )。代码行数从79行变成了29行,下面是原始代码: 1234567891011121314151617181920212223private static boolean comparelogic(String condit 2024-06-06 技术文章 > 编程技巧 #设计模式 #策略模式 #代码优化 #Java
Redis 异常三连环 本文针对一种特殊情况下的Reids连环异常,分别是下面三种异常: NullPointerException: Cannot read the array length because “arg” is null JedisDataException: ERR Protocol error: invalid bulk length JedisConnectionException: Unex 2024-06-04 技术文章 > 解决问题 #Java #异常 #Redis
谷歌 Colab:学习 Python 和大模型的利器 简介谷歌 Colab,又称 Colaboratory,是一个基于 Jupyter 笔记本的免费在线平台,可让您在浏览器中编写和执行 Python 代码。它无需配置,即可轻松访问 GPU 和 TPU 等强大硬件,并支持丰富的文本、代码、图像、视频等格式,非常适合学习 Python 和大模型。 网址:https://colab.research.google.com/ 谷歌colab更简洁,打开 2024-03-18 技术文章 > 工具
编码技巧:多条件判断拼接字符串 在写代码业务逻辑的时候,有时候需求稍微变化一下都让代码变的很麻烦,如果只在现有代码基础上硬改,可能会让可读性降低,本文通过一个例子来演示字符串拼接的变化。 一开始的业务逻辑比较简单,是固定条件加一个需要判断再追加的条件: 123List<String> currentUserDeptIds = getCurrentUserDeptIds();return "forcetend 2024-03-15 技术文章 > 编程技巧
GitHub Copilot - Elasticsearch 和 MySQL 单表查询耗时比对 当单表数据库超过百万后,数据库 like '%xxx%' 查询明显变慢,为了对比 Elasticsearch 的效果,将百万级的测试数据导入到 Elasticsearch 中对比看看效果。导入和查询 Elasticsearch 的过程完全通过 GitHub Copilot Chat 辅助编码。 Elasticsearch 环境使用 Docker Compose 快速搭建环境,com 2023-12-13 技术文章 > 性能
WSL 配置 Docker 内存和 CPU 资源限制 我用的电脑一共有40G内存,最近发现电脑重启后,VmmemWSL 进程很快就会占用一多半的内存(20+G),电脑中有多个停止运行的容器,正常启动状态的只有一个 MySQL 服务,通过 docker stats 查看占用内存也不多,不知道为什么会占用这么多内存,但是必须限制一下。 Docker Desktop 早期版本可以直接配置内存使用,改成 WSL 方式后需要去调整 WSL 的资源使用,参考官方 2023-12-06 技术文章 > 运维 > Docker
Windows 系统配置 GraalVM 的 native-image 环境 由于 GraalVM 和相关组件会更新变化,所以文章内容的有效性会受影响。 1. 下载 GraalVM打开官网 https://www.graalvm.org/ 点击 Download 下载。 在当前时间(2023-11-29)我下载的版本为: graalvm-jdk-21_windows-x64_bin.zip 解压 GraalVM,例如目录 D:\Dev\graalvm-jdk-21. 2023-11-30 技术文章 > 运维
MyBatis 分页插件 PageHelper 6.0.0 发布 6.0.0 - 2023-11-05 基于jdk8适配,6.0开始不支持jdk6和7,如果有需要可以使用5.x版本 增加异步count支持,全局配置asyncCount,默认false,单次设置:PageHelper.startPage(1, 10).enableAsyncCount();异步使用独立连接(事务)查询,有增删改操作影响查询时不适合开启异步查询。closed #334 JSqlP 2023-11-06 开源项目 > 分页插件
Virtual Threads 虚拟线程 原文:https://docs.oracle.com/en/java/javase/21/core/virtual-threads.html 虚拟线程是轻量级线程,可以减少编写、维护和调试高吞吐量并发应用程序的工作量。 有关虚拟线程的背景信息,请参阅 JEP 444。 线程是可调度的最小处理单元。它与其他此类单元同时运行,并且基本上独立运行。它是 java.lang.Thread 的一个实 2023-09-20 技术文章 > Java
虚拟线程最佳实践 Virtual Threads: An Adoption Guide虚拟线程:采用指南 接上篇 Virtual Threads 虚拟线程 原文:https://docs.oracle.com/en/java/javase/21/core/virtual-threads.html 虚拟线程是由 Java 运行时而不是操作系统实现的 Java 线程。虚拟线程和传统线程(我们称之为平台线程)之间的主 2023-09-20 技术文章 > Java
Linux环境Runtime如何运行子进程? 在Linux服务器上通过Java的Runtime运行命令时可能会报错:Cannot run program "pwd": error=13, Permission denied。 在制作Linux服务器上的产品安装包时遇到了这个错误,各种搜索资料都找不到解决办法,经过对比分析确定最后的问题后,顺藤摸瓜找到了一些资料。 1. 问题产生的原因因为要制作Linux产品安装包,在产品安 2023-09-06 技术文章 > Java
git fsmonitor--daemon 占用目录,导致无法修改 当我通过命令 git clone 目录然后导入 IDE 操作时,由于想修改目录名,就退了 IDE,再修改目录名,系统提示我文件夹正在使用: 通过 LockHunter (或者PowerToys) 发现占用该目录的进程,右键打开。 打开后如下所示 PowerToys查询的结果 为什么会有大量 git 占用目录呢?打开任务管理器发现好多: 右键增加命令行列后如上图所示,大 2023-05-22 技术文章 > 解决问题
多种工具协同创建一个基于CentOS,包含最新版本sysstat的镜像 服务器上部署了sysstat,通过sar可以保留系统监控记录,从服务器下载数据在别处分析时,不是很方便,因此考虑构建一个方便使用的Docker镜像辅助工作。 sysstat: https://github.com/sysstat/sysstat 1. Bing AI 创建 Dockerfile直接让 AI 帮忙写 Dockerfile 内容复制如下: 123456789101112131415# 2023-04-28 技术文章 > 运维 > Docker
WSL2 对外暴露端口 参考文档 一口气搞定 WSL2 的网络问题 从局域网 (LAN) 访问 WSL 2 发行版 通过本地网络连接到 WSL2 服务器 按照下面的操作步骤进行操作。 1. powershell 支持 sudohttps://github.com/gerardog/gsudo 可以直接下载msi安装:https://github.com/gerardog/gsudo/releases 2. pow 2023-04-25 技术文章 > 运维
MyBatis游标Cursor在Oracle数据库上的测试 测试数据的列更多,内容更多,和 MyBatis游标Cursor的正确用法和百万数据传输的内存测试 不同,占用内存没有可比性。 1.1. 不配置内容,查询全部,99万数据 内存缓慢增长,12分钟都没有查询完。 1.2. 初始2G内存,最大4G内存,fetchSize=10000当不设置fetchSize时,Oracle默认10,内存增长和1一样缓慢,查看源码发现Oracle默认为10: 2023-03-27 技术文章 > MyBatis
MyBatis游标Cursor的正确用法和百万数据传输的内存测试 很早以前为了处理大量数据想过使用Cursor,当时发现没有效果,就没有继续深入。这次为了搞清楚 Cursor 是否真的有用,找些资料和源码发现是有效果的,只是缺了必要的配置。 准备测试数据创建表: 123456CREATE TABLE test_table ( id INT PRIMARY KEY, name VARCHAR(20), age INT, address VARCHAR(20 2023-03-25 技术文章 > MyBatis
MySQL JDBC 中 tinyint(1) 处理为Boolean 的代码逻辑 MySQL JDBC 中 tinyint(1) 类型,在查询时默认会被处理为 Boolean 类型。 参数配置官方文档中提供了参数配置: 上图标记的两个参数可以控制如何处理 tinyint(1) 类型和 BIT 类型。 tinyInt1isBit 默认 true,因此会把 tinyint(1) 类型转换为 BIT 类型。 转换的逻辑在 com.mysql.jdbc.Field 类中的构造方法, 2023-02-16 技术文章 > MySQL