2022/11/30

NPM node package manager

  • NPM node package manager 列入NodeJS默認模塊管理工具 
    • npm -v
  • NPM兩大核心
    • 模塊倉庫 Register/Repository 
      • 內置模塊 built-in modules
        • http ... etc
      • 第三方模塊 3rd party modules
    • CLI 命命行介面
  • NPM 模塊查詢頁面
    • https://www.npmjs.com/
  • NPM CLI
    • 下載 更新 卸載模塊
    • 指令
      • npm init 初始化項目 
        • 生成 package.json
      • npm intall xxx@version   安裝xxx模塊
        • npm install --save xxx (默認)
        • 所有被安裝的模塊都會被保存在 node_modules
          • xxx模塊內也有package.json
      • npm uninstall xxx 卸載xxx模塊
        • 清除node_modules
      • npm -l 查看
      • npm install --save-dev mockjs 安裝開發用的模塊
      • npm install 依照package.json內容下載安裝所有模塊
  • package.json
    • "dependencies"  項目需要依賴的第三方模塊
    • "devDependencies" 項目開發依賴 , 不會打包
  • /node_modules
    • 所有被安裝的模塊都會被保存在 node_modules
  • /dist 
    • 編譯後待發布的檔案

2022/11/28

Vue 筆記

  • 核心
    • 聲明式編碼:
      • 插值語法&指令語法


  • vscode extension plugin
    • open in browser
    • Vue 2 Snippets
    • Live Server
  • dev tool & Vue config
    • Vue.config 是一个对象,包含 Vue 的全局配置。可以在启动应用之前修改下列 property

    • $ 符號開頭為vue提供給程序員使用的屬性


  • vue cli
    • vue --version
    • npm install -g @vue/cli
    • vue create 項目
  • MVVM模型

  • Vue 數據代理











2022/9/27

LeetCode

  •  時間與空間複雜度


  • 刷題歷史
    • https://leetcode.com/zeralux/
  • Java Collection



2022/8/8

Golang

  •  與java比較

  • GMP模型 官方
  • GMP模型  來源 
    • G:Goroutine,实际上我们每次调用 go func 就是生成了一个 G。没有数量限制。但会受内存限制(Goroutine 创建需申请 2-4k 连续内存块)
    • P:Processor,处理器,一般 P 的数量就是处理器的核数,可以通过 GOMAXPROCS 进行修改。 本地隊列存放G
    • M:Machine,系统线程。默认数量限制是 10000
    • 流程: 
      • 1. 调用 go func()创建一个goroutine;

        2. 新创建的G优先保存在P的本地队列中,如果P的本地队列已经满了就会保存在全局的队列中;

        3. M需要在P的本地队列弹出一个可执行的G,如果P的本地队列为空,则先会去全局队列中获取G,如果全局队列也为空则去其他P中偷取G放到自己的P中

        4. G将相关参数传输给M,为M执行G做准备

        5. 当M执行某一个G时候如果发生了系统调用产生导致M会阻塞,如果当前P队列中有一些G,runtime会将线程M和P分离,然后再获取空闲的线程或创建一个新的内核级的线程来服务于这个P,阻塞调用完成后G被销毁将值返回;

        6. 销毁G,将执行结果返回

        7. 当M系统调用结束时候,这个M会尝试获取一个空闲的P执行,如果获取不到P,那么这个线程M变成休眠状态, 加入到空闲线程中



  •     GM模型(舊)與GMP模型(新)   來源
    • GM缺點
      • 调度 : 获取G全局队列锁,形成了激烈的競争
      • 轉移 : P0執行G0生成G1 , 為了繼續執行G0需要轉移給P1執行 , 但G0和G1又共享資料
    • GPM:
      • 調度 : 因為多了P的本地隊列, 減少鎖競爭
      • 轉移 : P0執行G0生成G1 , G1优先存放到P0的本地队列中,如果队列满了,则会把P0队列中一半的G移动到全局队列
        • 如果P的本地队列为空,那么他会先到全局队列中获取G,如果全局队列中也没有G,则会尝试从其他线程绑定的P中偷取(steal)一半的G

  • 效能調教工具 pyroscope
    • wget https://dl.pyroscope.io/release/pyroscope-0.31.0-linux-amd64.tar.gz
    • tar -zxvf pyroscope-0.31.0-linux-amd64.tar.gz
    • "github.com/pyroscope-io/pyroscope/pkg/agent/profiler"
    • profiler.Start(profiler.Config{
    •    ApplicationName: "name",
    •    ServerAddress:   "address",
    • })
    • /tmp/pyroscope  adhoc go run main.go
  • 效能調教工具 pprof
    • main.go
      • _ "net/http/pprof"
      • gorace()
      • func gorace() {
      •    c := make(chan bool)
      •    m := make(map[string]string)
      •    go func() {
      •       m["1"] = "a" // First conflicting access.
      •       c <- true
      •    }()
      •    m["2"] = "b" // Second conflicting access.
      •    <-c
      •    for k, v := range m {
      •       fmt.Println(k, v)
      •    }
      •    http.ListenAndServe("localhost:6060", nil)
      • }
    • 所有效能資訊
      • http://localhost:6060/debug/pprof/
    • cpu報告
      • go tool pprof http://localhost:6060/debug/pprof/profile
    • heap報告
      • go tool pprof http://localhost:6060/debug/pprof/heap 
    • cli模式
      • top10 前10名
      • list [method] 查看method
      • pdf 匯出pdf
    • flat : func執行所需heap或cpu時間(不包含內部func所需時間)
    • cum :  func所有所需heap或cpu時間
    • online分析報告
      • go tool pprof -http=:8080 C:\Users\david\pprof\pprof.alloc_objects.alloc_space.inuse_objects.inuse_space.003.pb.gz

2022/8/7

乙太鏈

  • 乙太鏈 2.0 升級
    • 為何升級
      • 1.0 採用POW , 遇到交易堵塞, 手續費高...等問題
      • 2.0 採用POS , 分片技術 (64個分片 , 每分片1秒15個交易) , 預計要到2024年完成
    • 合併
      • 執行層面 execution layer
        • 智能合約
        • DApps 
      • 共識層面 Consuensus layer
        • 2020/12/01 已有一個 POS機制的Beacon chain , 將於2022/09使用
    • 升級優點
      • 交易速度增加
      • 交易費降低
    • 升級缺點
      • 分片過程的風險
      • DApps的風險
      • 安全性的風險
  • EIP 提案
    • 介紹 https://github.com/ethereum/EIPs
    • 所有提案列表 https://eips.ethereum.org/all
    • 提案狀態
  • ERC 智能合約
    • 所有介面標準 https://eips.ethereum.org/erc

2022/8/2

比特幣

  •  背景
    • 作者 : 中本聰 (未公開長相 ,已消失於網路上)
    • 比特幣曾經歷過多次分叉
      • 如硬分叉 > 比特幣現金BCH
  • 帳戶模型: utxo-based model
  • 3 種比特幣核心地址格式:

    • P2PKH (pay to pubkey hash)

      • 1開頭

      • non Segwit

    • P2SH (pay to Segregated hash)

      • 3開頭

      • BIP13

      • Segwit

    • bech32

      • bc1開頭

      • Segwit

  • github主流項目
    • Bitcoin Core
      • 中本聰發起 , C++語言
      • 官網 https://bitcoin.org
      • 節點 https://bitcoin.org/en/full-node
      • RPC DOC https://developer.bitcoin.org/reference/rpc/index.html
    • Bitcore Node 

      • bitpay發起 , javascript語言
    • Btcd ,
      • btcsuite發起 , golang語言
  • 配置 bitcoin.conf
    • 產生器 : https://jlopp.github.io/bitcoin-core-config-generator/#config=eyJfX2ludGVybmFsIjp7InBsYXRmb3JtIjoiTGludXgifX0=
    • 介紹 : https://en.bitcoin.it/wiki/Running_Bitcoin
  • 手續費計算
    • https://bitcoinops.org/en/tools/calc-size/
  • 字節說明
    • https://en.bitcoin.it/wiki/Script
  • test net scan
    • https://www.blockchain.com/explorer?view=btc-testnet
  • main net scan
    • https://www.blockchain.com/explorer?view=btc
  • RPC URL 說明
    • https://en.bitcoin.it/wiki/API_reference_(JSON-RPC)
  • BIP   Bitcoin Improvement Proposals
    • https://ithelp.ithome.com.tw/articles/10279944
    • 開發者向比特幣社群提出比特幣Bitcoin 新功能或改進建議的技術設計文件
      • 目前所有BIP提案內容 https://github.com/bitcoin/bips
    • 地址產生器Mnemonic Code Converter
      • https://iancoleman.io/bip39/
    • BIP 32 : 定義 Hierarchical Deterministic wallet (簡稱 “HD Wallet”),是一個系統可以從單一個 seed 產生一樹狀結構儲存多組 keypairs(私鑰和公鑰)
      • https://ithelp.ithome.com.tw/articles/10279944
    • BIP 39 : 將 seed 用方便記憶和書寫的單字表示。一般由 12 個單字組成,稱為 mnemonic code(phrase),中文稱為助記詞或助記碼。
      • https://ithelp.ithome.com.tw/articles/10280092
    • BIP 44: 基於 BIP32 的系統,賦予樹狀結構中的各層特殊的意義。讓同一個 seed 可以支援多幣種、多帳戶等。
      • 第一個 m代表的是master node。
      • 第二個 purpose固定是44,代表使用BIP44所規範的路徑。
      • 第三個 coin_type提供不同加密貨幣的區隔,每個貨幣都有一個編號,
        BTC是0、ETH是60,這裡有所有已登記的幣的編號。
      • 第四個 account提供不同用途的帳戶。
      • 第五個 change分成兩個,0是外部鏈(對外公開)可用來收錢,1是內部鏈(對外不公開)用來找零。
      • 第六個 即是你的地址編號,從0開始逐一遞增。




2022/7/30

區塊鏈淺嚐

  • 名詞解釋
    • 區塊鍊
      • 區塊 : 內含被打包的多筆交易 , 產生 block hash
      • 鏈 : 因為每一個塊都有前一個塊的block hash , 故能串成鏈
    • 最長鏈 : 當多個節點同時在打包區塊時, 以算力最快者打包出的最長鏈為正確結果 ,   經驗以超過六個區塊的機率會降低近乎於0
    • 節點 : 即有安裝服務的獨立主機 , 可以與網路上其他節點取得共識 , 複製塊數據資料, 或挖礦
    • 挖礦 : 是一個獎勵行為 , 因為沒有特定維護人員 , 故誰可以維護將提共獎勵
      • 打包交易>出塊 >  必須符合條件 > 挖礦成功 > 獲得獎勵
    • 軟分叉 : 節點版本升級 , 新舊版本節點互相認同,傳送區塊資訊 
    • 硬分叉 : 新舊版本節點無法相容 , 已是獨立的區塊鏈。新節點無法傳送資料給舊版本,舊版本節點卻可以傳送給新版本,在這樣的情況下,新版本的節點可以接收新舊版本,最長鏈就會在新節點
    • 帳務模型
      • Account Model
        • 例如乙太幣 , 馬蹄幣... etc
        • 每一個帳戶皆有餘額欄位
      • UTXO Mode  
        • Unspent Transaction Output
        • 例如 比特幣 , 比特幣現金...etc
        • 沒有餘額欄位 , 因每次交易都會記錄找零 , 故餘額來自於 所有找零的總和.
    • 隔離見證 SegWit
      • 隔離(Segregated): 見證數據(簽名數據)從交易信息里抽離出來,單獨存放

      • 見證(Witness): 對交易合法性的驗證 , 即付款人擁有該筆交易的”UTXO輸出”

      • 在基本塊大小(base block)有限下 , 改變儲存結構隔離出見證數據(scriptSig) , 騰出更多存放交易數據的空間,得到提高交易速度與降低手續費的效果

    • 共識機制
      • 不可能三角
        • 去中心化(Decentralization)
        • 可擴展性(Scability)
        • 安全性(Security)
      • POW ( Proof-of-Work)工作量證明機制
        • 猜數字競賽
      • POS (Proof of Stake)權益證明
        • 以"持幣數量"有更高的機率能夠獲得記帳的權利,以及相對應的報酬



  • 區塊鏈4大核心技術
    • 分佈式帳本
      • 數據儲存
      • 去中心化
      • 當一筆數據產生後, 數據將同步到所有節點服務上
      • Q1 : 雙花問題: 同一筆錢因為網路問題或惡意行為 , 造成重複消費
        • A: UTXO+時間戳
        • UTXO模型 : 鏈上會先確認該筆資金來源是否已被消費過,並通知全網節點
        • 時間戳 : 提供時間烙印,按時間順序處理
    • 共識機制
      • 數據處理
      • 因所有節點服務都在處理數據, 需要決定一套處理規則
      • Q1 : 拜占庭將軍問題: 多個將軍(節點)分散在不同地點 , 必須同時完成同一件事情, 並且沒有數據安全性問題(偽造,錯誤)
        • A: 只要超過一半多數節點投讚成票 , 即數據是正確的.
    • 密碼學
      • 數據安全
      • 打包好的數據, 透過密碼學的hash函數加密, 並且每一塊都有前一個塊的hash值故串出區塊鏈結構 , 防止數據竄改
    • 智能合約 
      • 數據應用
      • 透過智能合約的接口 , 故能調用數據加以應用

  • 匯率  https://www.coingecko.com/
    • https://api.coingecko.com/api/v3/coins/matic-network/?localization=false
    • https://api.coingecko.com/api/v3/coins/tether/?localization=false

  • https://www.blocktempo.com/what-is-l0-l1-l2-l3/




test2