iT邦幫忙

3

想自建區塊鏈不可不知物件導向的hashcode基本概念

最近都在思考如何應用spark來應付未來公司方向的需求以及被空降的急案壓榨,好久沒有發文刷存在感了!

今天手邊工作到一段落又湊巧看到fysh711426大大發的使用 Token 進行 API 授權驗證
流程跟 『區塊鏈』 「分散式電子帳本」技術中帳本間的串接原理類似,所以來分享一下物件導向
hashcode的一些基本概念。

String s1 = "abc";
String s2 = "abc";
Integer a = 123;
Integer b = 123;
System.out.println(s1.equals(s2));
System.out.println(a.equals(b));

上面這段程式沒啥特別的地方結果當然都是輸出true !

public class BlockChain {

    Integer page;
    Date date;
    List<String> transations;
    
    // BlockChain的建構子
    public BlockChain(Integer page, 
                      Date date, 
                      List<String> transations) {
        this.page = page;
        this.date = date;
        this.transations = transations;
    }
}

那如果我們有一個 BlockChain 的物件,包含整數的page日期的dateList的交易
三個屬性; 然後我們創建兩個物件b1跟b2且b1與b2的三個屬性值均相等

public static void main(String[] args) {

    List<String> trans4Darwin = new ArrayList<String>();
    trans4Darwin.add("Darwin2Joe");
    Date now = new Date();
    BlockChain b1 = new BlockChain(1, now, trans4Darwin);
    BlockChain b2 = new BlockChain(1, now, trans4Darwin);

    System.out.println(b1.equals(b2));
}

這時執行反而會印出false。Why ? 如果認為是List.class跟Date.class造成的
可以只留page,但結果還是false !
不賣關子公佈答案了:
其實原因出在當我們自建物件時,編譯器會很貼心的幫我們創建物件對應的hashcode!
以 Java 為例

System.out.println(b1.hashcode());
System.out.println(b1);

會輸出1627674070
而在toString()後則會跑出com.company.BlockChain@610455d6
上面這串鬼東西就是依據編譯器幫我們建的hashcode產出的b1代表字串。
在物件導向中,hashcode就是一個物件的代表
所以如果我們有一個物件是老百姓,那最簡單的hashcode就可設定為身分證字號!
其實在SCJP Java 5.0專業認證手冊(台中國資圖有2本可借)的第七章中,有強調
『當你改寫hashcode()這個方法時,equals()這個方法也要一併改寫的鐵則。』
個人還滿私心推薦 Kathy Sierra 的程式相關書籍 XD !

講了這麼多,那這跟區塊鏈分散式電子帳本技術有啥關聯?
https://ithelp.ithome.com.tw/upload/images/20180906/20109107Vki74Yheii.png
基本上區塊鏈分散式電子帳本最主要就是紀錄:
公鏈hashcode時間戳交易明細(挖到的比特幣跟買毒交易的比特幣)
而公鏈hashcode的產生過程不精確的簡單說就是把
fysh711426大大文章中的header、payload、signature替換成帳本的每一頁。
而實際存在 nosql DB 或者 spark、hadoop等平台的就是這些加密後的公鏈hashcode !

而目前的瓶頸在於FILO堆疊檢索的極限以及配合獎勵機制及其他零零總總確保交易的
程式碼,是否因為不當的公鏈hashcode而系統崩潰!
總而言之言而總之,當你設計的區塊鏈加密貨幣可在其他國家發行時,
別忘了寫篇論文分享公鏈技術,賺了裡子也賺了面子 XD !

最後,誰說電腦沒極限,認為沒極限的可幫忙幫我把下面這個數字作因數分解,感謝!
64397501735471938465017354627948578301837045820347501927402947850284756


圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言