跳到主要内容
Apache王也道长

Apache王也道长

喜欢写一点代码,喜欢折腾

产品

正在打磨的产品

把技术文章沉淀成产品能力,也把产品研发过程继续写成文章。

开发中

Cloud Album

面向海外用户的私有云相册,围绕备份、整理和订阅体验持续打磨。

从真实产品研发出发,记录 iOS 客户端、MinIO 存储、海外支付与增长实验的完整过程。

iOS AppMinIO 存储海外订阅

技术博客

最新文章

GitHub 提交 Pull Request:Fork、分支、同步上游与代码评审

· 阅读需 1 分钟
Apache王也道长
软件开发者与技术作者

Github贡献PR六部曲

选中自己要贡献PR的仓库,点击Github右上角的fork

2. clone代码

git clone git@github.com:{username}/seata.git

高质量 PR 不只是把代码推送到远程,还应保持改动范围单一、提交信息清晰、测试通过并说明修改动机。开始前先阅读仓库的 CONTRIBUTING 和行为准则。

Frida 安装与配置:客户端、frida-server、架构与版本匹配

· 阅读需 1 分钟
Apache王也道长
软件开发者与技术作者

frida安装与配置

下载python 3.8.x

下载 frida-server

https://github.com/frida/frida/releases/download/12.8.0/frida-server-12.8.0-android-x86_64.xz

Frida 客户端与设备端服务版本应保持一致,设备 CPU 架构和权限也必须匹配。仅在自有应用或已授权目标上使用动态插桩,并保留测试范围和操作记录。

Frida获取微信消息内容

· 阅读需 1 分钟
Apache王也道长
软件开发者与技术作者

Frida获取微信消息内容

获取微信消息内容

var SQLiteDatabase = Java.use("com.tencent.wcdb.database.SQLiteDatabase");
SQLiteDatabase["insert"].implementation = function (str, str2, contentValues) {
console.log('SQLiteDatabase.insert is called:', 'str=', str, 'str2=', str2, 'contentValues=', contentValues);
var result = this["insert"](str, str2, contentValues);
console.log('SQLiteDatabase.insert result=', result);
return result;
};

目标应用升级后,类名、方法签名和参数结构都可能变化,因此示例中的定位结果不能长期复用。动态分析应限定在授权测试环境,并避免记录或上传真实用户的敏感消息。

Android Studio搭建Xposed项目

· 阅读需 1 分钟
Apache王也道长
软件开发者与技术作者

settings.gradle 在dependencyResolutionManagement添加 Xposed 会修改应用运行时行为,只应在自有设备、测试应用和获得授权的环境中使用。不同 Android、LSPosed 和目标应用版本可能导致接口变化,排查时应先记录完整版本信息。

搭建可观测平台SigNoz

· 阅读需 1 分钟
Apache王也道长
软件开发者与技术作者

使用signoz快速搭建可观测平台 快速部署完成后,应使用一条真实请求验证 trace、metric 和 log 是否按预期关联。若没有数据,应依次检查 SDK、Collector、网络、资源属性和时间同步。

深入理解计算机浮点数存储

· 阅读需 2 分钟
Apache王也道长
软件开发者与技术作者

深入理解计算机浮点数存储

根据IEEE 754 浮点标准

V = (-1)^s * M * 2^E

s: 符号 s决定这数是负数(s=1)还是正数(s=0)
M: 尾数 M是一个二进制小数
E: 阶码 E的作用是对浮点数加权,这个权重是2的E次幂

浮点数是对实数的有限近似,并非所有十进制小数都能被二进制精确表示。理解编码结构有助于解释比较误差、溢出、下溢以及金融计算中为何需要十进制定点方案。

Spring + RocketMQ + MySQL 事务一致性:事务消息、回查与幂等消费

· 阅读需 7 分钟
Apache王也道长
软件开发者与技术作者

Spring解决RocketMQ发消息与MySQL事务一致性

  1. 用户订单并支付
  2. 发送消息开通查看文章权限 数据库事务与消息发送无法依靠普通本地事务一次性提交。RocketMQ 事务消息通过半消息、本地事务执行和事务状态回查协调结果,下游仍必须实现幂等。

Java G1 垃圾收集器详解:Region、并发标记、Mixed GC 与调优

· 阅读需 23 分钟
Apache王也道长
软件开发者与技术作者

Garbage-First (G1) 收集器是一种服务器式垃圾收集器,针对具有大内存的多处理器机器。它以高概率满足垃圾收集 (GC) 暂停时间目标,同时实现高吞吐量。 Oracle JDK 7 update 4 及更高版本完全支持 G1 垃圾收集器。 G1 收集器专为以下应用而设计:

  • 可以与 CMS 收集器等应用程序线程同时操作。
  • 紧凑的可用空间,没有冗长的 GC 引起的暂停时间。
  • 需要更多可预测的 GC 暂停持续时间。
  • 不想牺牲很多吞吐量性能。
  • 不需要更大的 Java 堆。 G1 的目标是在吞吐量与可预测停顿之间取得平衡。分析问题时应基于 GC 日志、对象分配速率和停顿原因,不应只凭单个 JVM 参数判断效果。
总访问量 -- · 访客数 --