以太坊区块中继服务(Go 实现)

一个轻量、高可靠、可扩展的以太坊区块同步与分叉检测中继服务 专为 实时监听、持久化、去重、防分叉 设计,适用于 DeFi、NFT、链上数据索引、监控告警等场景。 ...

2025年10月30日 · 3 分钟 · 1161 字

聊聊我的 Polymarket 套利机器人:用 Go 找预测市场的赚钱机会!

最近我在搞一个好玩的项目,用 Go 写了个程序来监控 Polymarket 上的套利机会。Polymarket 是个基于区块链的预测市场,里面有各种事件的结果可以交易,比如“某件事会不会发生”之类的。这篇文章我就来聊聊这个程序(polymarket_arbitrage.go)的代码和设计,带你看看它是怎么帮我发现潜在赚钱机会的! ...

2025年10月24日 · 8 分钟 · 3595 字

GO Slice 链式操作

示例 首先模拟一个业务场景,有订单、产品、自定义订单三个结构体,订单中包含多个产品: type Order struct { Id string Products []Product } type Product struct { Id string Price int } type CustomOrder struct { Id string } 初始化模拟数据: var orders = []Order{ { Id: "o1", Products: []Product{ { Id: "p1", Price: 1, }, { Id: "p2", Price: 2, }, }, }, { Id: "o2", Products: []Product{ { Id: "p3", Price: 3, }, { Id: "p4", Price: 4, }, }, }, } 接下来对订单列表做各种操作: ...

2023年4月7日 · 2 分钟 · 845 字

Go 基于泛化调用与 Nacos 实现 Dubbo 代理

前言 由于工作中使用的 rpc 框架是 dubbo,经常需要调试不同环境的 dubbo 接口,例如本地环境、开发环境和测试环境。而为了同一管理 http 接口和 dubbo 接口,希望使用统一的调试工具,例如 PostMan 或 ApiPost 等,因此萌生了开发一个 dubbo 的 http 代理工具的念头。 ...

2023年4月3日 · 2 分钟 · 919 字

Redis 性能优化

阻塞点 集合全量查询和聚合操作; bigkey 删除; 清空数据库; AOF 日志同步写; 从库加载 RDB 文件; 异步机制处理阻塞点 bigkey 删除、清空数据库:4.0版本后支持异步删除数据(UNLINK、FLUSHDB ASYNC),旧版本可以先SCAN读取数据,再进行删除; AOF 日志同步写:AOF 日志配置成 everysec 选项后,可以异步执行; 无法异步处理的阻塞点优化 集合全量查询和聚合操作:先SCAN读取数据,再在客户端计算; 从库加载 RDB 文件:主库数据量控制在 2-4GB 左右; CPU 多核对 Redis 性能的影响 Redis 实例被频繁调度到不同 CPU 核上运行,导致上下文切换频繁。 ...

2022年5月2日 · 2 分钟 · 693 字

LeetCode 六大股票问题解法

推荐阅读:股票问题系列通解(转载翻译) 为了更好的理解和记忆,这里给出我重新整理后的解法,每个解法都很相似,只需改动少量的条件 121. 买卖股票的最佳时机 public int maxProfit(int[] prices) { int buy = -prices[0]; // 第一天买,减去买的价钱 int sale = 0; // 第一天卖,不存在这种情况,没有收益 for (int price : prices) { buy = Math.max(buy, -price); // 买,减去买的价钱 sale = Math.max(sale, buy + price); // 卖,在买的收益基础上加上卖的价钱 } return sale; } 122. 买卖股票的最佳时机 II public int maxProfit(int[] prices) { int buy = -prices[0]; // 第一天买,扣掉买的价钱 int sale = 0; // 第一天卖,不存在这种情况,没有收益 for (int price : prices) { buy = Math.max(buy, sale - price); // 买,在卖的收益基础上减去买的价钱 sale = Math.max(sale, buy + price); // 卖,在买的收益基础上加上卖的价钱 } return sale; } 123. 买卖股票的最佳时机 III public int maxProfit(int[] prices) { int buy1 = -prices[0]; // 第一天买,减去买的价钱 int sale1 = 0; // 第一天卖,不存在这种情况,没有收益 int buy2 = -prices[0]; // 第一天买,减去买的价钱 int sale2 = 0; // 第一天卖,不存在这种情况,没有收益 for (int price : prices) { buy1 = Math.max(buy1, -price); // 第一次买,减去买的价钱 sale1 = Math.max(sale1, buy1 + price); // 第一次卖,在第一次买的收益基础上加上卖的价钱 buy2 = Math.max(buy2, sale1 - price); // 第二次买,在第一次卖的收益基础上减去买的价钱 sale2 = Math.max(sale2, buy2 + price); // 第二次卖,在第二次买的收益基础上加上卖的价钱 } return sale2; } 188. 买卖股票的最佳时机 IV 这是六大问题中最难的一个,所对应的解法是最通用的 ...

2021年11月4日 · 2 分钟 · 914 字

《Java 并发编程的艺术》读书笔记

方鹏飞 魏鹏 程晓明 机械工业出版社 2020 年 12 月第 1 版 第 1 章 并发编程的挑战 (多线程会出现什么问题) 上下文切换过多, 解决: 1) 无锁; 2) CAS; 3) 减少线程; 4) 协程; ...

2021年5月7日 · 6 分钟 · 2530 字

Redis 命令大全

String SET key value [EX seconds] [PX milliseconds] [XX|NX] 为字符串键设置值, O(1) GET key 获取字符串键的值, O(1) GETSET 获取旧值并设置新值, O(1) MSET key value [key value ...] 一次为多个字符串键设置值, O(N), N 为用户指定的字符串键数量 ...

2021年4月5日 · 9 分钟 · 4491 字

你还在new对象吗?Java8通用Builder了解一下?

程序员经常会遇到灵魂拷问:你有对象吗? 没有,但我可以 new 一个! public class GirlFriend { private String name; private int age; // 省略 getter & setter ... public static void main(String[] args) { GirlFriend myGirlFriend = new GirlFriend(); myGirlFriend.setName("小美"); myGirlFriend.setAge(18); } } 没问题,老铁!但如果对象的属性太多,咋办? ...

2019年8月30日 · 3 分钟 · 1434 字

Spring Aop中解析spel表达式,实现更灵活的功能

前言 在Spring Aop中,我们可以拿到拦截方法的参数,如果能结合spel表达式,就能实现更加灵活的功能。典型的实现有Spring的缓存注解: @Cacheable(value = "user", key = "#id", condition = "#id lt 10") public User conditionFindById(final Long id) { } @Caching(put = { @CachePut(value = "user", key = "#user.id"), @CachePut(value = "user", key = "#user.username"), @CachePut(value = "user", key = "#user.email") }) public User save(User user) { 本文介绍如何在aop编程中解析spel表达式,提供几个通用的方法。 ...

2019年2月25日 · 2 分钟 · 807 字