- 博客(72)
- 资源 (2)
- 收藏
- 关注

原创 微服务必备:Spring Boot 中通过自定义注解 + 路径匹配实现多版本接口(含 Bean 命名冲突解决方案)
基于 Spring Boot 实现多版本 API 接口,通过自定义RequestMappingHandlerMapping、@ApiVersion注解及RequestCondition,结合 URL 路径{version}动态参数与正则匹配,实现版本(v1、v2)路由。涵盖 Bean 命名冲突解决、版本条件匹配逻辑及不同版本控制器示例,适合微服务场景下接口兼容与迭代管理。
2025-05-28 17:57:53
924
原创 Solidity 核心知识点大揭秘:从基础到进阶的深度教程
本文深入探讨Solidity编程的核心要素,包括内置变量/函数、receive/fallback函数和函数修改器三大关键知识点。内置工具解析:介绍了msg.sender、msg.value、block.timestamp等基础变量详细说明数学函数(addmod/mulmod)和地址函数(balance/transfer)的用法通过智能合约示例展示如何应用这些内置元素特殊函数机制:receive函数专门处理纯以太币转账fallback函数作为通用后备处理未知调用两者配合确保合约能
2025-06-11 22:38:02
584
原创 Solidity 开发从入门到精通:语法特性与实战指南
这篇文章详细介绍了Solidity智能合约开发的核心要点,包括三大关键内容:开发环境搭建:重点讲解了Remix IDE的使用方法,包括创建.sol文件、设置编译器版本等基础操作。Solidity基础语法:详细解析了源文件格式、编译器版本声明方式(如pragma语句的不同写法)以及构造函数的特性与用法。可见性控制机制:深入剖析了四种函数可见性修饰符(external/public/internal/private)的具体作用范围和使用场景,以及它们对合约安全性和模块化的影响。全文提供了丰富的代码示例和实
2025-06-11 22:02:24
757
原创 以太坊、EVM、EVM兼容链到底是啥?一文用大白话讲清楚
以太坊通过智能合约将区块链从"数字账本"升级为"全球计算机",其核心EVM虚拟机充当代码翻译器和运行环境。为了解决以太坊的高费用和低效率问题,EVM兼容链(如BSC、Avalanche)应运而生,它们保持EVM兼容性同时优化性能。这种模式类似安卓生态,以太坊是系统,EVM是应用商店,兼容链则是优化版手机。开发者可"一次编写,多处部署",用户则能在低成本链上使用相同功能。这种兼容性推动了Web3生态繁荣,实现多链共生。
2025-06-10 21:54:25
510
转载 Name for argument of type [java.lang.String] not specified, and parameter name information not avail
Name for argument of type [java.lang.String] not specified, and parameter name information not available via reflection. Ensure that the compiler uses the '-parameters' flag.
2025-06-10 21:41:42
47
原创 从比特币到以太坊:Web3开发者必须掌握的核心概念解析
对比以太坊与比特币差异,简述以太坊 POS 共识、EVM 执行代码原理,解析 Gas 机制(含 EIP1559)及账户类型(普通 / 合约账户)与钱包,介绍测试网、EVM 兼容链等网络生态,助 Web3 开发者理解以太坊核心概念
2025-06-09 10:00:00
597
原创 从信任危机到代码自治:解构区块链核心技术与比特币运行原理
本文剖析传统中心化系统信任成本高、单点故障等痛点,阐述区块链以去中心化、不可篡改、透明自治重构信任体系,解析智能合约、POW/POS/DPOS共识算法及非对称加密等核心机制,结合比特币P2P网络、区块链结构等运行原理,揭示技术协同逻辑,最后探讨性能、监管等挑战与Web3发展方向。
2025-06-08 17:31:34
627
原创 MySQL间隙锁入手,拿下间隙锁面试与实操
深入解析 MySQL 间隙锁,先以场景比喻结合官方原理阐释其定义、作用及与事务隔离级别的关联,说明防幻读机制;再通过订单、库存场景及建表实操,展示不同隔离级别下的加锁情况;最后针对面试,分享清晰有条理的回答思路及优化建议。
2025-06-05 23:33:00
1040
1
原创 Java程序员视角- NIO 到 Epoll:深度解析 IO 多路复用原理及 Select/Poll/Epoll 对
Java IO模型从BIO到NIO的演进提升了高并发处理能力。BIO的线程模型存在线程爆炸问题,而NIO通过Selector实现多路复用,单线程即可处理多个连接。文章深入解析了操作系统层面的三种多路复用模型:Select受限于FD数量且效率低,Poll改进了FD管理但仍需全量扫描,Epoll采用事件驱动架构实现O(1)查询和零拷贝机制,成为Linux高并发的最优解。同时提供了Java NIO的优化实践,包括避免空轮询、正确处理非阻塞IO以及FD泄漏排查等。最后指出Netty框架对Selector的深度优化,
2025-06-03 21:31:50
818
原创 mac处理问题:curl: (7) Failed to connect to raw.githubusercontent.com port 443 after 13 ms: Couldn‘t con?
【摘要】针对curl连接GitHub失败问题,提供解决方案:(1)确认GitHub可访问性;(2)访问ipaddress.com查询域名IP;(3)修改mac系统hosts文件(/etc/hosts),添加解析的4个IP地址(如185.199.108.133对应raw.githubusercontent.com);(4)保存后重新执行命令验证。该方法通过手动绑定域名与IP解决连接问题。
2025-05-24 20:53:52
237
原创 数据库幕后英雄!redo、undo、binlog 如何撑起 ACID 特性的一片天?
在数据库管理中,事务的ACID特性(原子性、一致性、隔离性、持久性)是确保数据完整性和可靠性的关键。redolog、undolog和binlog这三种日志通过各自的独特功能和紧密协作,共同维护这些特性。undolog负责记录数据修改前的状态,确保事务可以回滚,保障原子性;redolog记录事务的修改操作,确保数据的持久性;binlog记录所有数据变更,用于数据同步和恢复,保障一致性。此外,undolog与MVCC结合,通过维护数据版本链,支持隔离性。redolog和binlog通过两阶段提交机制协同工作,确
2025-05-23 15:47:29
537
原创 性能狂飙!从原理到实战,一文吃透 LRU 缓存的 4 种 Java 实现
LRU(最近最少使用)缓存策略是一种简单高效的缓存管理技术,广泛应用于提升系统性能。其核心思想是在缓存满时移除最近最少使用的元素,为新元素腾出空间。在Java中,可以通过LinkedHashMap快速实现LRU缓存,利用其按访问顺序排序的特性,并通过重写removeEldestEntry方法控制缓存容量。这种实现方式简单且时间复杂度为O(1),适合轻量级缓存需求。然而,基础实现可能面临线程安全问题。为此,可以通过以下方式增强线程安全性:1)使用Collections.synchronizedMap包裹
2025-05-21 11:00:05
857
原创 MetaMask安装及使用-使用水龙头获取测试币的坑?
本文介绍了在使用以太坊网络时可能遇到的两种常见异常:无法请求drip和需要持有至少1LINK才能请求原生代币。针对这些问题,提供了使用Google Cloud的Web3应用水龙头服务的解决方案,并建议等待几分钟。同时,文章还提到了MetaMask的安装和使用,并提醒读者注意网上教程可能因软件或网站更新而存在差异。
2025-05-18 21:34:44
362
6
原创 从 Hash 到 Lua 再到看门狗!Redisson 锁实现原理大揭秘
Redisson分布式锁的实现主要依赖Redis的Hash数据结构、Lua脚本、发布订阅机制和看门狗机制。其核心原理包括:通过Hash数据结构确保锁的互斥性和可重入性;使用Lua脚本保证加锁和解锁操作的原子性;通过看门狗机制定期续期锁,防止死锁;利用发布订阅机制实现非公平锁竞争。Redisson还支持公平锁和非公平锁,非公平锁通过Hash存储锁状态,结合Lua和Pub/Sub实现高效竞争,而公平锁则通过维护等待队列确保按顺序获取锁。整体上,Redisson分布式锁在保证安全性和性能的同时,提供了灵活的可重入
2025-05-17 21:59:25
552
原创 springCloud Alibaba教程- 搭建springboot工程(最新版本)
springcloud alibaba教程开篇,基于最新的cloud alibaba版本搭建基础的微服务开发环境
2022-10-14 16:22:45
2134
转载 Redis:string类型带来的空间消耗过大的问题
案例:使用Redis的string类型保存图像ID和图片存储对象 ID,图像ID为Key、图片存储对象ID为Value。两者均为10位纯数字。保存1亿对键值消耗空间6.4GB,平均1个键值对消耗64字节。问题:按理来说8个字节可以表示2的64次方-1,超过了10位数字,案例中键值对加起来消耗16字节也就罢了,为什么消耗了64字节?回答:除了记录实际数据,String 类型还需要额外的内存空间记录数据长度、空间使用等信息,这些信息也叫作元数据。当实际保存的数据较小时,元数据的空间开销就显得比较大了。.
2021-03-13 10:06:16
1004
原创 gateway使用protobuf进行鉴权的坑
1、问题描述 项目中使用了springcloud alibaba这一套。其中网关使用的gateway,序列化使用的protobuf。 使用protobuf作为序列化框架,我们都使用的POST请求,将请求体都放body中。进行鉴权的时候需要获取到body中的内容。异常信息如下:2020-09-26 23:38:15.066 [reactor-http-nio-2] INFO [ChainedDynamicProperty.java:115] - Flipping propert...
2020-09-26 23:58:19
5320
原创 proto3默认值与可选项
proto3特性proto3相较于proto2支持更多语言但在语法上更为简洁。去除了一些复杂的语法和特性,更强调约定而弱化语法。删除原始值字段的presence字段逻辑,删除required字段以及删除默认值。这使得proto3更容易实现如在Android Java,Objective C或 Go等语言中的开放式结构化表示。 移除unknown关键字. 去掉extensions类型,使用Any新标准类型替换。 针对未知枚举值的固定语法. 增加maps(主要指代码生成支持map) 添加.
2020-08-26 00:03:58
7980
原创 创建线程的方法?
1、实现 Runnable 接口 实现 Runnable 接口,然后重写 run() 方法,之后只需要把这个实现了 run() 方法的实例传到 Thread 类中就可以实现多线程。2、继承 Thread 类 继承 Thread 类,并重写了其中的 run() 方法。3、线程池创建线程 3.1使用ThreadPoolExecutor类public ThreadPoolExecutor(int corePoolSize, ...
2020-07-25 17:16:35
162
scala-2.12.11.zip
2020-07-10
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人