- 博客(60)
- 资源 (2)
- 收藏
- 关注
原创 以太坊虚拟机介绍
以太坊虚拟机介绍近期打算写一些关于以太坊虚拟机(后面简称EVM)的文章,这是其中的第一篇。这一系列文章想站在EVM指令集的角度,带领读者逐步理解EVM工作原理,进而理解以太坊区块链技术细节。由于网上介绍以太坊的文章也比较多,所以这一系列文章将最大程度减少不必要的废话,直接提供文章想要表达的信息。EVM基本信息编程语言虚拟机一般有两种类型,基于栈,或者基于寄存器。大部分我们所熟知的语...
2018-08-20 09:16:41 5953
原创 以太坊虚拟机介绍4-按位运算指令
以太坊虚拟机按位运算指令EVM定义了8条按位运算指令,分别是: * AND,按位与,操作码0x16 * OR,按位或,操作码0x17 * XOR,按位异或,操作码0x18 * NOT,按位取反,操作码0x19 * BYTE,取第n个字节,操作码0x1A * SHL,左移,操作码0x1B * SHR,逻辑右移,操作码0x1C * SAR,算术右移,操作码0x1D下面是按位运算...
2018-08-27 15:00:32 1520
原创 以太坊虚拟机介绍3-算术运算指令
以太坊虚拟机算术运算指令EVM总共定义了11条算术运算指令,分别是ADD(加法指令,操作码0x01)、MUL(乘法指令,操作码0x02)、SUB(减法指令,操作码0x03)、DIV(无符号整除指令,操作码0x04)、SDIV(有符号整除指令,操作码0x05)、MOD(有符号取模指令,操作码0x06)、SMOD(无符号取模指令,操作码0x07)、ADDMOD指令(操作码0x08)、MULMOD指...
2018-08-22 23:10:56 1975
原创 以太坊虚拟机介绍2-栈操作指令
以太坊虚拟机栈操作指令本文介绍POP指令、PUSHx系列指令、DUPx系列指令、SWAPx系列指令。这些指令只对EVM栈进行单纯的操作,它们的操作码分布如下图所示:POP指令POP指令(操作码0x50)从栈顶弹出一个元素。下面是POP指令的操作示意图(白色表示元素即将发生变动):PUSHx指令PUSH系列指令把紧跟在指令后面的N(1 ~ 32)字节元素推入栈顶。PUSH...
2018-08-21 07:32:00 2535 1
原创 Java9之class文件格式变动
Java9之class文件格式变动Java9已经于2017年09月27日发布。Java9引入了很多新特性,其中最重要的特性无疑就是模块化了。为了支持模块化,Java从方方面面都进行了改进,包括class文件格式。网上已经有很多文章介绍Java9模块化,因此本文并不打算成为另一篇模块化入门文章。本文主要介绍Java9相较Java8在class文件格式方面的变动。测试代码本文将基于模块mymod进行讨论
2017-10-19 16:57:55 1614 1
原创 Go语言小知识之append()函数
内置的append()函数,给slice追加一个item。如果这个slice还有空闲容量(cap(s) > len(s)),则直接进行追加。否则,先对slice进行扩容,然后再进行追加。上述这些在append()函数的文档里有详细的说明,但是文档并没有说扩容是如何进行的,所以下面用一段代码做一个试验:package mainfunc main() { s := []int{}; printl
2017-04-13 17:11:20 11008 1
原创 Go语言小知识之map遍历
1Go语言里的map,是不保证遍历顺序的(这一点很好理解)。甚至同样内容的map,两次遍历的顺序,也可能不一样。下面是一个例子:m := map[string]int{"a1": 1,"b2": 10,"c3": 2,}for k, v := range m {fmt.Printf("%s=%d;", k, v)} // c3=2;a1=1;b2=10;println()for k, v :=
2017-04-13 16:38:43 39220 6
原创 图解Protobuf编码
图解Protobuf编码Protobuf是Google发布的消息序列化工具。Protobuf定义了消息描述语法(proto语法)和消息编码格式,并且提供了主流语言的代码生成器(protoc)。本文仅讨论Protobuf消息编码格式,并且假定读者已经熟悉Protobuf消息描述语法(proto2或者proto3)。基本编码规则Protobuf消息由字段(field)构成,每个字段有其规则(rule)、
2016-11-21 13:53:13 23374 4
原创 Akka边学边写(4)-- MiniRPG
前面几篇文章用Akka写了HelloWorld和EchoServer,为了更进一步学习Akka,本文将会实现一个很小的RPG游戏服务器:MiniRPG。
2014-10-21 11:29:51 3704 2
原创 Java8学习笔记(5) -- 写给Guava使用者
本文举了几个例子,用代码来说明原先需要借助Guava来实现的功能,如何用Java7或Java8实现。
2014-09-23 17:39:53 10214 1
原创 Java8学习笔记(3) -- InvokeDynamic指令在Groovy里的使用
上一篇文章以Java8的Lambda表达式为切入点,讨论了
2014-08-06 18:24:34 4211
原创 看懂Gradle脚本(6)- Hello Groovy, Goodbye Getters&Setters
本篇文章很简单,就是把下面这段Gradle脚本打回原形:version = 1.0Groovy语法糖Java程序员对JavaBeans和Getter/Setter方法肯定不陌生,所以就不过多介绍了。虽然现代的IDE都提供了快捷方式,可以很方便的给字段生成Getter和Setter方法,但我还是很讨厌他们。还好,有Groovy的语法糖在手,就可以跟Getter/Setter方法说再见了!
2014-06-13 16:56:58 2454 3
原创 看懂Gradle脚本(5)- 跟Gradle学领域驱动设计
领域驱动设计(DDD)如果第一次听说领域驱动设计,那么赶紧买一本,或借一本Eric Evans写的那么同名经典书补一下课。Gradle是一个自动化build工具,所以Gradle面对的领域就是自动化构建这一领域。Gradle是按照DDD的思想设计和开发的,所以自动化构建领域里的大部分概念,在Gradle的源代码里都有一个接口或类与之对应。本文介绍对Gradle新手来说最重要的三个领域对象:Pr
2014-06-12 16:49:31 3430
原创 看懂Gradle脚本(4)- Groovy语法之运算符重载
继续讨论Task定义回顾一下前一篇文章的例子:task myTask { doLast { println 'hello world!' } }这段脚本定义了一个名为myTask的任务,并且通过一个闭包对这个任务进行了配置,给它加了一个Action。doLast是Task的一个方法。因为这种情况很常见,所以Gradle提供了一种更
2014-06-10 18:52:46 5168
原创 看懂Gradle脚本(3)- Groovy AST转换
延续上一篇文章上篇文章末尾有一段脚本,定义了一个Task:task 'myTask' { doLast { println 'hello world!' } } 我们已经知道,这段脚本其实是调用Project的task方法,并且传入两个参数:一个是Task的名字,另外一个是闭包,用来配置Task(在这段脚本中,给Task添加了一个A
2014-06-10 15:00:34 5309
原创 看懂Gradle脚本(2)- Groovy语言的闭包语法
本篇文章讨论下面这一小段Gradle脚本:repositories { mavenCentral()}闭包字面量闭包字面量看起来像Java里的代码块:用一对儿花括号包起来。前面讨论过,方法调用的圆括号可以省略,补上圆括号之后,脚本看起来是这样:repositories({ // <-- mavenCentral()})如果闭包是方法的最后一个
2014-06-10 09:04:54 6520
原创 看懂Gradle脚本(1)- Groovy语言的Map语法糖
这一系列文章是写给刚开始使用Gradle,并且对Groovy语法不是特别了解的Java程序员看的。本篇文章的目标是解释清楚下面这行Gradle脚本:apply plugin: 'java'行尾的分号是可选的用过JavaScript语言的人对这个语法糖应该比较熟悉,下面是补上分号后的脚本:apply plugin: 'java';Map字面量(Literal)Java语言
2014-06-09 17:57:30 9680 6
原创 GSON使用笔记(1) -- 序列化时排除字段的几种方式
GSON是Google发布的JSON序列化/反序列化工具,非常容易使用。本文简要讨论在使用GSON将Java对象转成JSON时,如何排除某些字段。
2014-03-18 18:14:08 24321 2
原创 Netty4学习笔记(9)-- Channel状态转换
分析NioSocketChannel如何进入open、registered和active状态
2014-01-08 10:37:49 28340 3
原创 Netty4学习笔记(8)-- Channel接口
Channel是Netty4最核心的接口之一,拥有将近40个方法和一个内部接口。本文将对Channel接口的众多方法做一个归类和总结,为进一步研究Channel实现做准备。
2014-01-07 15:17:05 8869
MyGroovyConsole.zip
2013-09-25
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人