原创 看懂Gradle腳本(4)- Groovy語法之運算符重載

繼續討論Task定義 回顧一下前一篇文章的例子: task myTask { doLast { println 'hello world!' } }這段腳本定義了一個名爲myTas

原创 Java8學習筆記(1) -- 從函數式接口說起

希望本文能夠成爲Java8 Lambda表達式的快速入門指南。 函數式接口 理解Functional Interface(函數式接口,以下簡稱FI)是學習Java8 Lambda表達式的關鍵所在,所以放在最開始討論。FI的定義其實很簡單:

原创 Java8學習筆記(3) -- InvokeDynamic指令在Groovy裏的使用

上一篇文章以Java8的Lambda表達式爲切入點,討論了invokedynamic(下文簡稱indy)指令。爲了加深對indy指令的理解,本文來研究一下Groovy是如何利用indy指令的。 準備工作 雖然Groovy從2.0開始支持i

原创 看懂Gradle腳本(3)- Groovy AST轉換

延續上一篇文章 上篇文章末尾有一段腳本,定義了一個Task: task 'myTask' { doLast { println 'hello world!' } } 我們已經知道,這段腳

原创 看懂Gradle腳本(1)- Groovy語言的Map語法糖

這一系列文章是寫給剛開始使用Gradle,並且對Groovy語法不是特別瞭解的Java程序員看的。 本篇文章的目標是解釋清楚下面這行Gradle腳本: apply plugin: 'java' 行尾的分號是可選的 用過JavaScrip

原创 以太坊虛擬機介紹

以太坊虛擬機介紹 近期打算寫一些關於以太坊虛擬機(後面簡稱EVM)的文章,這是其中的第一篇。這一系列文章想站在EVM指令集的角度,帶領讀者逐步理解EVM工作原理,進而理解以太坊區塊鏈技術細節。由於網上介紹以太坊的文章也比較多,所以

原创 以太坊虛擬機介紹2-棧操作指令

以太坊虛擬機棧操作指令 上一篇文章對EVM和它的指令集進行了簡單介紹,本文將介紹POP指令、PUSHx系列指令、DUPx系列指令、SWAPx系列指令。這些指令只對EVM棧進行單純的操作,它們的操作碼分佈如下圖所示: POP指令

原创 Netty4學習筆記(7)-- AttributeMap

IoSession MINA的IoSession接口定義了一組方法,讓我們可以利用IoSession來存儲一些數據: public interface IoSession {     getAttribute(Object key)  

原创 Java8學習筆記(4) -- Lambda表達式實現方式

前幾篇文章討論了函數式接口和Lambda表達式語法、invokedynamic指令,以及Groovy2如何利用indy指令。本篇文章在前面幾篇的基礎之上,簡要介紹Java8底層是如何實現Lambda表達式的。 示例代碼 本文將以下面的代碼

原创 Netty4學習筆記(8)-- Channel接口

Channel接口 Channel是Netty4最核心的接口之一,擁有將近40個方法和一個內部接口。本文將對Channel接口的衆多方法做一個歸類和總結,爲進一步研究Channel實現做準備。Channel繼承了AttributeMap接

原创 Netty4學習筆記(9)-- Channel狀態轉換

前面有一篇文章分析過Bootstrap類如何引導NioSocketChannel。上篇文章簡單討論了一下Channel接口的方法,知道有四個方法用來查詢Channel的狀態:isOpen()、isRegistered()、isActive

原创 GSON使用筆記(1) -- 序列化時排除字段的幾種方式

GSON是Google發佈的JSON序列化/反序列化工具,非常容易使用。本文簡要討論在使用GSON將Java對象轉成JSON時,如何排除某些字段。 最簡單的用法 假設有下面這個類: class MyObj {

原创 Java class文件分析工具 -- Classpy

Classpy Classpy是一個圖形化的class文件分析工具,功能和javap類似,界面主要參考了Java Class Viewer: 爲什麼要重新創造輪子? 寫這個工具花了將近一週的時間,那麼爲什麼要浪費時間重新發明一個輪子呢

原创 GSON使用筆記(3) -- 如何反序列化出List

本文通過3個問題來討論如何使用GSON把JSON反序列化爲List。 問題1 有這樣兩個類: class MyObj { int x; } class MyList { List<MyObj> objList = ne

原创 看懂Gradle腳本(5)- 跟Gradle學領域驅動設計

領域驅動設計(DDD) 如果第一次聽說領域驅動設計,那麼趕緊買一本,或借一本Eric Evans寫的那麼同名經典書補一下課。Gradle是一個自動化build工具,所以Gradle面對的領域就是自動化構建這一領域。Gradle是按照DDD