- 博客(24)
- 资源 (1)
- 问答 (1)
- 收藏
- 关注
原创 solidity合约中的interface怎么使用
通过定义好的 interface 我们可以在不清楚目标合约具体实现方式的情况下,调用目标的合约。- 接口中的方法不能定义为私有或者内部方法,所有的方法必须定义为外部方法(external)//通过第二个合约接口调用counter合约,对counter的值进行递增操作。//判断counter的值是否 == bigNumber('3')//获得最终的counter的值。// 定义接口中的方法和返回值。* @notice 目标合约。// count值递增。//获得上面的2个合约。- 不能实现接口中的方法。
2022-11-17 15:20:33
2005
原创 React Hook useRef的使用方式和场景
这是因为我们页面在 re-render 的时候其实是读不到 timeoutID 这个本地变量的.通过 console.log 可以看到这个 undo 里面的 timeoutID 的值是 null。通过运行我们会发现及时我们触发了 Undo 事件取消了 timeoutID,我们还是会再页面上收到 alert 信息?通过运行脚本我们会发现及时触发了点击事件并且改变了 countRef 的值,但是实际页面上没有任何的变化。| 值的改变 | 可在渲染过程外改变值 | 只能通过设置函数 |
2022-11-14 15:55:30
680
原创 solidity之函数篇
Solidity 中主要有 4 种可见性的关键字其中需要特别注意的是只有 public 和 external 函数可以加上 payable 特性,而 internal 和 private 函数就不行。
2022-08-28 18:13:07
1890
原创 Solidity之地址篇(address)
ETH中的地址都是唯一的,因为他们都是来自一个公钥或者合约。在ETH交易中的支付环节,预期的收款人都是一个地址。类似于银行中的转账账号。Externally Owned Accounts (EOA)(外部拥有账户):这些账户通过私钥来控制。通过私钥可以控制账户中的TOKEN,在和智能合约进行交互的时候,私钥还可以用来提供身份认证。Contracts Accounts (Smart Contracts)(合约地址):这些账号是通过代码(solidity)控制的。
2022-08-24 22:00:14
2310
原创 Solidity中的数据存储位置
下面的表格会是每块数据存储位置的概览,标识了读写的权限。具体每个数据存储位置的详情,可以阅读对应的具体模块。在函数内部所有的三种数据存储位置都能被指定,不管函数的可见性。为什么比较不用的存储位置,我们使用了不同的函数使用不同的数据类型关键词。当我们指定数据存储位置的时候,有2件主要的事情需要考虑:影响范围和gas的使用量。下面的表格展示了函数参数可选的数据类型,取决于函数的可见性。在ETH中memory保存了临时变量,就像函数的参数。calldata几乎是免费的,但是有一个长度的限制。
2022-08-24 21:43:41
485
原创 Solidity之Mappings篇
你只需要通过传入**_KeyType**参数给getter就能返回**_ValueType.**关键数据不是储存在一个mapping中的,相反的它的keccak256 hash值用来存储关键数据指向的value值。Solidity中****Mappings**** 的概念类似于java中的hashmap或者python中的dictionnary。可以记录一个counter的计数器,来告诉你mapping的长度当有新增的value值的时候。# 关于****Mappings****
2022-08-24 20:16:24
3381
原创 golang协程调度详解之GMP模型
什么是GMP?Ggolang协程M内核线程(真正执行计算的资源)P逻辑处理器(队列)调度器生命周期•1 go func() 创建G•2.1 放入局部队列•2.2 如果局部队列已满则放入全局队列•3 M1 获取G 进行计算•3.1 M1 从P的本地队列中获取一个G绑定进行计算•3.2 如果本地队列为空则从全局队列获取•3.3 从其他的MP组合中窃取G•4 调度•5 执行G.func()•5.1 如果G.func()发生systemCall/阻塞 (systemCall:程序从内
2021-07-26 11:52:57
398
原创 PHP的SESSION和SESSION的GC机制
PHP的SESSION和SESSION的GC机制什么是Session?session是一次浏览器和服务器交互的会话.当我们使用浏览器打开一个网页,用到的是HTTP协议学过计算机的应该知道,HTTP有5个特点:支持客户/服务器模式简单快速灵活无连接无状态那么无状态的一段连续的HTTP请求,我们怎么把他们关联起来呢?这里就用到了Session.并且Session存储在服务端(默认放到/tmp临时目录下),很好的解决了安全的问题.php通过session_start()函数开启sessio
2021-07-22 14:19:42
377
1
原创 mysql基本索引类型
mysql基本索引类型索引列表:•B+Tree索引•Hash索引•full-text索引•R-Tree索引B+Tree索引我们经常使用的MyISAM 和 InnoDB 存储引擎,采用的都是B+Tree索引.和B-Tree相比,B+Tree的所有数据都放在了 叶子节点,并且为了加快相邻数据的检索效率,会把叶子节点连成数据链表. 说到B+Tree我们需要先了解下B-Tree的结构.B-Tree是为磁盘等外存储设备设计的一种平衡查找树.一棵m阶的B-Tree有如下特性:•每个节点最多有m个孩子•除了根节点和叶子节
2021-07-22 14:18:53
128
原创 golang gin如何添加自定义中间件
func TestMiddle() gin.HandlerFunc { return func(c *gin.Context) { fmt.Println("logging...") }}func InitRouter() *gin.Engine { r := gin.New() r.Use(gin.Logger()) r.Use(gin.Recovery()) r.Use(TestMiddle()) apifront := r.Group("addiction") ap.
2021-04-12 20:18:55
345
原创 Golang调度器
G:goroutineP:逻辑处理器M:真正执行计算的资源每个goroutine都有一个状态,Scheduler根据状态知道要运行哪个goroutine 可运行(Running) 正在运行(Runnable) 已经阻塞(Blocked) M:N有一个全局运行队列(Global Run Queue) ,某些操作会将新的Goroutines放入运行队列。但是那些阻塞的Goroutines会在哪里呢?可能阻塞的情况: Cha...
2021-04-08 16:50:21
160
原创 在golang grpc中如何使用拦截器
在我认识的人当中大多数对中间件都有深刻的认知,但是对拦截器却知之甚少。接下来让我们剖析一下拦截器,来学习下怎么写和使用拦截器,并且为什么要这么做。gRPC是一项伟大的技术,我把之前写的许多API替换成了这种方式。我发现开发gRPC接口比基于HTTP的接口要更加容易。我还是建议大家花点时间去学习下这项技术。这里已经是这个系列的第2部分了,但是你并不需要一些预习的知识,甚至不需要去看第1部分和1.1部分.- 1- 1.1- 2(我们在这里)- 3 gRPC的数据流在普通的HTTP服务中,我们...
2021-04-07 16:11:37
749
原创 golang如何解决import cycle not allowed的问题
1.import cycles now allowed是如何产生的?2.几种解决方式
2021-03-15 15:02:10
817
原创 golang select的几种情况解析
func main() { msg := make(chan int) select { case <-msg: fmt.Println("msg") default: fmt.Println("default") } msg <- 1 time.Sleep(time.Second * 1)}:default fatal error: all goroutines are asleep - deadlock!func main() { ...
2021-03-09 13:41:23
135
原创 堆内存和栈内存的定义
栈:通过os自动分配和释放,用来存放函数的参数值、局部变量的值等。因为栈内存的分配内置于计算机CPU的指令集,所以它的效率很高,但是分配内存量有局限。堆:通过new、malloc、realloc分配的内存,可以被GC回收内存。...
2021-03-03 10:17:05
205
原创 Golang中的select应该怎么用
1.什么是select select就是用来监听和channel有关的IO操作,当 IO 操作发生时,触发相应的动作。2.基本用法 select { case <- chan1: pass case chan2 <- 1: pass default: pass }如果有一个,或者多个IO操作可以完成,则golang运行时会随机选择一个执行,否则的话会执行default分支语句,如果没有定义default的话会一直阻塞3.思考输出...
2021-03-02 18:00:00
207
原创 Golang实现字符串交替打印的两种方式
var chan1 = make(chan bool, 1)var chan2 = make(chan bool)var index = make(chan bool)func func1() { for i := 1; i < 27; i++ { <-chan1 fmt.Print(i) chan2 <- true }}func func2() { for i := 'A'; i <= 'Z'; i++ { <-chan2 fmt.P.
2021-03-01 17:03:49
916
原创 all goroutines are asleep的一次记录
func testDeadLock(c chan int) { for { fmt.Println(<-c) }}func main() { c := make(chan int) c <- 'A' go testDeadLock(c) time.Sleep(time.Millisecond)}上面的代码会产生fatal error: all goroutines are asleep - deadlock!的错误提示func testDeadLock(c .
2021-03-01 16:46:33
115
原创 基于Golang的冒泡、插入、选择排序demo
1.冒泡排序package mainimport "fmt"func main() { arr := []int{8, 12, 46, 12, 2, 4, 15, 3, 9, 44, 5, 6, 1, 59, 2} fmt.Println(bubbleSort(arr))}func bubbleSort(arr []int) []int { if len(arr) == 0 { return arr } for i := 0; i < len(arr); i++ {
2021-03-01 15:28:19
105
原创 Golang defer运用规则
1.是什么defer是Go语言提供的一种用于注册延迟调用的机制:让函数或语句可以在当前函数执行完毕后(包括通过return正常结束或者panic导致的异常结束)执行。defer通常运用在 打开/关闭连接,加锁/释放锁,打开/关闭文件。2.为什么要用defer我们在编程的时候经常会使用到一些外部的资源,比如文件、连接、锁 等,使用defer关闭这些资源避免可能造成的一些内存泄露的问题。3.怎么用deferfunc f1() int { r := 1 defer fun
2021-03-01 14:19:55
175
1
原创 Golang gc(垃圾回收)机制
1.什么是GC 程序创建对象等引用类型实体会在虚拟内存中分配给他们一块内存空间,如果该内存空间不再被任何引用变量引用是就变成了需要被回收的垃圾。对于一个运行时间比较长的程序,如果产生的内存垃圾没有及时被回收,就会造成内存泄露甚至系统崩溃等问题。2.常见的GC算法引用计数 标记-清除 节点复制 分代手机3.golang的gc算法 3.1 何时触发gc 在堆上分配大于 32K byte 对象的时候进行检测此时是否满足垃圾回收条件,如果满足则进行垃圾回收。...
2021-03-01 11:09:54
431
object c调用哦用类方法
2015-04-07
TA创建的收藏夹 TA关注的收藏夹
TA关注的人