自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(38)
  • 收藏
  • 关注

原创 easycode 自定义模板

#自动导入包(仅导入实体属性需要的包,通常用于实体类)import $!import;#end。

2024-09-29 21:29:54 509 2

原创 非阻塞式 I/O 模型 【NIO】补充内容

其实相当于就是一个线程处理大量的客户端的请求,通过一个线程轮询大量的channel,每次就获取一批有事件的channel,然后对每个请求启动一个线程处理即可。这里的核心就是非阻塞,就那个selector一个线程就可以不停轮询channel,所有客户端请求都不会阻塞,直接就会进来,大不了就是等待一下排着队而已。这里面优化BIO的核心就是,一个客户端并不是时时刻刻都有数据进行交互,没有必要死耗着一个线程不放,所以客户端选择了让线程歇一歇,只有客户端有相应的操作的时候才发起通知,创建一个线程来处理请求。

2024-07-08 16:05:08 308

原创 Netty 详细讲解,附服务端,客户端代码例子

的作用是管理事件循环组,它们负责处理不同类型的事件,如接受传入连接、读取/写入数据等。在这里,我们创建了两个bossGroup和。bossGroup用于接受传入的连接请求,而则用于实际处理连接的流量。是 Netty 用于启动服务器的帮助类。通过group()方法将两个绑定到服务器上。channel()方法指定了服务器使用的通道类型。在这里,我们选择了,这意味着我们将使用基于 NIO 的 Socket 通道。方法设置了一个,当一个新的连接被接受时,这个初始化器将会被调用。

2024-02-27 14:24:36 2415

原创 netty nio poll epoll 的关系及原理详解

综上所述,Java NIO、poll 和 epoll 是用于实现高性能 I/O 的技术,它们之间存在一定的关系,而 Netty 则是基于 Java NIO 开发的高级别网络应用框架,充分利用了这些技术来实现高效的网络通信。

2024-02-27 10:56:23 1217

原创 非阻塞式 I/O 模型的工作原理【NIO】-2

类中,并在遍历处理事件时创建新的线程来处理每个事件。这样可以实现并发处理不同连接的读写事件,提高系统的并发处理能力。在这个优化后的代码中,我们将处理事件的逻辑封装在。优化上一篇文上的代码。

2024-02-27 10:41:57 876

原创 非阻塞式 I/O 模型的工作原理【NIO】

非阻塞式 I/O(Non-blocking I/O,NIO)是一种改进的 I/O 模型,引入了通道(Channel)和缓冲区(Buffer)的概念。相比于阻塞式 I/O,非阻塞式 I/O 允许在进行读/写操作时不会导致线程阻塞,而是立即返回,如果数据没有准备好,方法会返回一个特殊的值(通常是零),表示操作无法立即完成。在非阻塞式 I/O 中,一个线程可以管理多个连接,通过选择器(Selector)实现多路复用,从而提高了系统的并发能力和性能。

2024-02-27 10:25:44 1181

原创 阻塞式 I/O 模型的工作原理【BIO】

方法上,当没有数据可读时,该方法会一直阻塞当前线程,直到有数据可读或者连接关闭。这种模型适用于连接数较少、并发请求不高的场景。在这个例子中,我们创建了一个简单的服务器程序。在这个例子中,阻塞式 I/O 的特点就体现在。,用于接受客户端连接并处理客户端发送的消息。

2024-02-27 10:20:53 611

原创 mac 环境下执行 ps -ef 打印信息太长,影响问题定位的解决办法。

例如这种的一大片,不易读。

2023-03-24 17:04:54 1961

原创 java 常见软件的性能指标

Akka:Akka 是一个基于 Actor 模型的并发框架,可以支持数百万的并发连接。从报告中,我们可以得出 Redis 的单机 QPS 可以达到 8w+(CPU 性能有关系,也和执行的命令也有关系比如执行 SET 命令甚至可以达到 10w+QPS)。需要注意的是,并发连接数只是衡量并发能力的一个指标,还需要考虑每个连接的处理时间、资源消耗等因素。Spring 框架:Spring 本身不直接处理并发,但是它可以与支持高并发的技术如 Netty、Vert.x 等集成,因此具体并发量取决于所使用的技术。

2023-03-10 11:55:26 4895

原创 JVM 参数的调整

制定 JVM 参数模板是一个需要考虑多方面因素的复杂过程。以下是一个基本的步骤:理解项目特点:首先,需要深入了解公司项目的性质、规模、复杂度和负载情况等特点。这些因素将直接影响 JVM 参数的选择。参考 JVM 文档:JVM 提供了一系列参数,可以调整其性能和行为。你需要查阅官方文档以了解这些参数的含义和用途。实验和测试:在制定 JVM 参数模板之前,建议进行一些实验和测试,以确定哪些参数对你的应用程序性能有正面或负面的影响。

2023-03-10 08:49:20 1925

原创 jvm 垃圾回收

开发人员可以根据应用程序的需求选择适合的垃圾回收器和回收算法,并通过JVM参数进行配置和优化。除了上述垃圾回收器之外,JVM还提供了其他一些垃圾回收器,例如ZGC(Z Garbage Collector)和Shenandoah收集器,它们适用于更大的内存和更高的性能需求。开发人员可以根据应用程序的需求选择适合的垃圾回收器,并通过JVM参数进行配置和优化。以上算法具有不同的优缺点和适用场景,开发人员可以根据应用程序的需求选择适合的算法和垃圾回收器组合,并通过JVM参数进行配置和优化。

2023-03-09 12:03:13 2708

原创 在工具类中查询数据库的正确写法(或者说在 实体类中 调用 service 的方法的思路)

此时就可以在需要调用 A 里面的方法 使用静态的 成员变量 A来点出来。

2022-10-13 16:24:38 2164

原创 ThreadLocal 学习总结

ThreadLocal是Therad的局部变量的维护类,在Java中是作为一个特殊的变量存储在。当使用ThreadLocal维护变量时,ThreadLocal为每个使用该变量的线程提供独立的变量副本,所以每一个线程都可以独立地改变自己的副本,而不会影响其它线程所对应的副本。因为每个Thread内有自己的实例副本,且该副本只能由当前Thread使用,也就不存在多线程间共享的问题。

2022-09-29 14:54:30 2509 1

原创 最简单的 设置java 线程池,线程名称的几种方法

最简单的 设置java 线程池,线程名称的几种方法共 3 种,简单易上手。

2022-09-28 15:10:20 2063

原创 抢土狗机器人——无代码基础可以使用

抢土狗机器人,带页面的。

2022-07-07 10:54:55 3705 8

原创 rabbit MQ 学习笔记,面试总结

概念须知:Broker:可以理解为消息队列服务器的实体,它是一个中间件应用,负责接收消息生产者的消息,然后将消息发送至消息接收者或者其他的Broker。 Exchange:消息交换机,是消息第一个到达的地方,消息通过它指定的路由规则,分发到不同的消息队列中去。 Queue:消息队列,消息通过发送和路由之后最终到达的地方,到达Queue的消息即进入逻辑上等待消费的状态。每个消息都会被发送到一个或多个队列。 Binding:绑定,它的作用就是把Exchange和Queue按照路由规则绑定起来,也就是E

2022-05-11 02:00:51 2141

原创 币安链预售抢购机器人,支持pinksale、dxsale(附代码)

环境准备 :安装 nodejs,vscode使用方法 :安装npm 依赖 重命名.env.example文件为.env文件,并按照要求添加相应参数(具体要求下面会写) 执行node sniper-bot.js.env配置文件# 节点 默认BSC主网 测试网:https://data-seed-prebsc-1-s1.binance.org:8545node=https://bsc-dataseed.binance.org/# 预售地址(复制PinkSale或DxSale的预售地.

2022-05-05 16:06:36 4623 3

原创 最近使用抢土狗机器人被杀了 bot killed,过程分析,及解决办法。

上一篇文章,写了抢开盘的机器人,自己测试了3次,都是成功的,第四次,买进去了,但是卖不出去,我具体分析如下 :首先我们先看下项目方的代码:定义的全局变量 :uint256 public KillNum = 3; //kill bot买进的时候:if(sender != owner && recipient != pair && block.number < launchedAt+ KillNum ){isXXKING[recipient]

2022-05-03 15:23:38 4121 1

原创 pancakeswap 开盘抢跑机器人 (附代码)

这个机器人主要就是抢跑用的:机器人一次只能狙击一个令牌。如何运行1. 拷贝代码2. $ npm 安装3. 复制你的 env.example到 .env4. 使用以下说明设置您的 .env: WBNB_CONTRACT=0xbb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c购买代币的 WBNB 合约FACTORY=0xcA143Ce32Fe78f1f7019d7d551a6402fC5350c73Pancake Factory 合约获

2022-04-30 17:14:51 9029 11

原创 Flashswap 学习笔记(附代码)

什么是Flashswap?利用交易的原子性,可以在这样的同一笔交易中调用智能合约,同时完成借和还,参考下图:

2022-04-27 15:49:37 2633

原创 ERC 20 优缺点,以及 eth 3 种转账方式

ERC 20 协议的产生(优点):定义统一的函数名:名称、发行量、转账函数、转账事件等 以便交易所、钱包进行集成 所有实现了这些函数的合约都是 ERC20Token ERC20 可以表示任何同质的可以交易的内容: 货币、股票、积分、债券、利息... 可以用数量来表示的内容 基本上可以ERC20 表示ERC 20 的缺点以下是一个遇到很多次的场景:有一天老板过来找你(开发者),最近存币生息很火,我们也做一个合约吧, 用户打币过来给他计算利息, 看起来是一个很简单的需求,你满口答应说好,结果自

2022-04-26 16:51:23 9854

原创 ERC 20 协议精讲

什么是 ERC20Token:ERC20的标准接口是这样的:contract ERC20 { function name() constant returns (string name) function symbol() constant returns (string symbol)......

2022-04-20 14:00:23 3107

原创 深入理解区块链共识算法

区块链的概念:区块链是一种去中心化、不可篡改、可追溯的分布式数据库系统[3]。区块链系统中底层网络采用对等式网络(P2P 网络)组织各个独立的网络节点。P2P网络是扁平式的拓扑结构, 网络中的每个节点地位对等, 不存在任何中心化的特殊节点和层级结构。因此区块链具备去中心化的特点, 系统中各节点相互独立, 具备相同的功能, 存储同样的信息, 相互监督; 与传统分布式数据库不同, 各个节点独立存储完整的数据, 任何组织或个人无法完全控制所有数据, 只拥有本地数据的控制权, 任何单个节点对本地数据的修...

2022-04-18 22:33:27 11528

原创 最简单的抢购机器人,抢菜,抢nft(很多原理都是类似的)

我们经常会碰到一些抢购的需要拼手速的时候。使用简单的脚本会让你比别人更快一步。分享一个很简单的自动点击脚本。这个脚本只需要浏览器就能运行有时候需要抢nft 页面有一个领取按钮 。到时间后点击。例子如下 :代码如下:claimInterval = setInterval(claim, 500); //每500豪秒function claim() { document.querySelector('#trybutton').click();}使用的时候 需要按 f12..

2022-04-18 14:51:56 16185 11

原创 solidity 智能合约中 Bytecode 和 ABI 的区别

Bytecode和ABI可以认为是智能合约源代码的两种外在表现形式,其中Bytecode是给机器执行的,而ABI是给DApp 开发者用的用自然语言描述的合约接口规范。 简单地将,智能合约可以理解为把“合同”变为代码,然后编译成Bytecode和ABI,Bytecode用来部署,ABI用来调用。...

2022-04-18 11:54:17 2285

原创 solidity中的 Keccak SHA3算法 ,跟函数选择器的关系

Keccak 和 SHA3 的产生背景最早出现并经常出现在大家视线中的是MD5,它是一种哈希算法。但是他被证明是不安全的,已出现碰撞。除了MD5,还有SHA1,SHA2,SHA3等等,现在最流行的安全且效率高的哈希算法是 SHA3-256。在区块链技术中流行的哈希算法是SHA3,SHA3是美国国家标准技术研究所所设计的一套SHA哈希算法,SHA3它不是SHA2的替代品,而是一种有别于SHA2的全新哈希设计方案。在15年8月才最终被才被NIST正式批准的。我们知道以太坊时在13年开始设计,15年

2022-04-06 23:57:36 5156

原创 Solidity中的事件和日志学习笔记

什么是日志,什么是事件EVM是以太坊和许多其他区块链的核心。EVM有一个日志功能,用于将数据“写”到智能合约之外的数据结构中。其中一个重要的数据是Solidity事件。事件允许我们“打印”在区块链上的信息,这种方式比在智能合约中保存到公共存储变量更容易搜索,且更省gas费。日志是区块链上的一种特殊数据结构。它们不能被智能合约访问,但能提供关于交易和区块中发生的信息。正是因为它们不能被智能合约访问,才使得它们的使用成本更低。滚动到交易的“日志”部分,我们可以看到以下内容:一个事件.

2022-04-06 19:02:23 4404

原创 prue view 函数需要注意的点

视图函数(view)、纯函数:(pure) 不修改状态,不支付手续费没有gas费用,但是就gas限制,比如说不能执行一个很大的循环,这就会超出gas限制。可以这么理解,gas price 为0.

2022-03-29 16:32:49 389

原创 创建智能合约有哪些方法

创建合约的几个方法:外部部署(Remix/Hardhat/Truffle)Web.js 合约使用New 最小代理合约(克隆) https://eips.ethereum.org/EIPS/eip-1167 https://github.com/optionality/clone-factor y Create2 C c = new C{salt: _salt}();分析一下:外部部署比较好理解,直接部署就好了 。 使用new的时候可以指定颜值 function cre...

2022-03-29 16:20:35 1185

原创 solidity 数组学习总结

注意点:solidity不支持删除中间元素,如果需要删除,将最后一个元素赋值给要删除的那个元素的下标,最后删除最后一个元素。如果按照传统的方式删除中间元素,然后将后面的前移,这就需要花费很多的gas。 循环数组的时候,一定要注意数组的长度,如果过长,那么操作的时候gas可能会超过当前区块的gas限制,导致任何人都无法执行这段代码。删除的事例代码:function remove(uint index) public { uint len = numbers.length; if (i

2022-03-29 11:02:21 1222

原创 calldata memory storage 区别详细讲解

首先明确一点calldata memory storage 都是用来修饰饮用类型的。强制指定的数据位置: • 外部函数(就是说使用external关键字的函数)的参数(不包括返回参数): calldata,效果跟 memory 差不多 • 状态变量: storage默认数据位置: • 函数参数(包括返回参数): memory • 所有其它局部变量: storageSolidity变量的数据存储位置现在让我们回到memory关键字。从0.5...

2022-03-28 17:27:11 5927

转载 Solidity 中 receive 函数 和 callback函数分析

在使用transfer 和 send 方法的是后需要关注一下 receive方法和callback方法。receive 接收以太函数一个合约最多有一个 receive 函数, 声明函数为: receive() external payable { ... } 不需要 function 关键字,也没有参数和返回值并且必须是 external 可见性和 payable 修饰. 它可以是 virtual 的,可以被重载也可以有 修改器modifier 。 在对合约没有任何附加数据调用(通常是对合约

2022-03-24 16:21:49 1970

原创 Solidity 中 transfer、send、call的区别

相同点 :都可以在合约之间相互转账,send和call都有返回值。需要在代码中判断返回值。addr.transfer(1 ether)、addr.send(1 ether)、addr.call.value(1 ether)的接收方都是addr。 如果使用addr.transfer(1 ether)、addr.send(1 ether),addr合约中必须增加fallback回退函数! 如果使用addr.call.value(1 ether),那么被调用的方法必须添加payable修饰符,否则转账

2022-03-24 15:45:25 3089 1

原创 Solidity 中Require ,Assert, Revert 的用法和区别

Require vs assert同样作为判断一个条件是否满足的函数,require会退回剩下的gas,而assert会烧掉所有的gas。Revertrevert的用法和throw很像,也会撤回所有的状态转变。但是它有两点不同:1. 它允许你返回一个值;2. 它会把所有剩下的gas退回给caller调用起来就像这样子:revert(‘Something bad happened’);require(condition, ‘Something bad happened’);

2022-03-16 12:30:01 1734

原创 solidity笔记 using for 的用法,以及库的讲解

简单的例子using A for B可用于在合约的上下文中,将库函数(来自库A)附加到任何类型(B)详细的例子pragma solidity ^0.8.0; library SafeMath { function add(uint x, uint y) internal pure returns (uint) { uint z = x + y; require(z >= x, "uint overflow"); return z; ...

2022-03-14 13:10:07 1031

原创 solidity 中 关键字 this 的理解

比如下面的代码中 this 指的就是 当前代码中 Score合约。contract Score { mapping(address => uint256) score; address teacher; constructor() { teacher = address(new Teacher(address(this))); }}

2022-03-14 11:17:31 1234 1

原创 hardhat 测试用例详细讲解

我们先看一个简单的测试例子,然后拆开来讲每一行const { expect } = require("chai");describe("Token contract", function() { it("Deployment should assign the total supply of tokens to the owner", async function() { const [owner] = await ethers.getSigners(); const Tok

2022-03-08 15:39:56 1421

原创 Solidity 中 call delegatecall transfer 大致理解

学习中自我总结transfer如果异常会转账失败,抛出异常(等价于requi(send()))(合约地址转账) 有gas限制,最大2300,目前不建议使用,因为随着 eip 的升级,底层的操作gas会发生变化,可能会导致之前安全的代码不在安全。 call 保持上下文。 delegatecall 切换上下文。 call 和 delagetecall 如果异常会转账失败,仅会返回false,不会终止执行(调用合约的方法并转账)可用与合约之间的调用。如果使用addr.transfer(1 eth..

2022-03-08 12:38:58 4881

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除