曾筱善

@shanvia

Joined on Jan 5, 2018

  • 1. 什麼是區塊鏈,對我們有什麼好處 區塊鏈是分散式帳本 (Distributed Ledger Technology) 的一種應用,透過分散式的節點替人們保存有用的資訊,而不依靠中央存儲節點。因此區塊鏈也可視為一種資料庫,並以密碼學、共識演算法等技術保障其安全、同步。 區塊鏈的起源 (Bitcoin) 中本聰在 2008 年發表《Bitcoin: A Peer-to-Peer Electronic Cash System》,提到了如 P2P 網路、transaction、timestamp server、密碼學等區塊鏈的核心技術。並於 2009 年一月三號產生第一個區塊,稱為創世區塊 (Genesis block);一月九號產生第二個區塊,兩者相連誕生區塊鏈。 應用領域 舉凡會產生資料、保存資料、交換資料等需求的應用,都可以加入區塊鏈。 e.g., 數位貨幣、車載網路、工業控制網路等等
     Like  Bookmark
  • (上) 前情提要 我發現我的程式會崩潰,甚至連第一個 entry 都加不進去,以下是我將 pointer to pointer 改寫為指標的程式片段 : void add_entry(node_t *h, int new_value) { /*create new_node*/ //printf(Address of h = %p, &h) if(h == NULL) h = new_node; else {
     Like  Bookmark
  • contributed by < Shanola > 第一周題目 GitHub程式碼 測驗 1 程式碼 考慮單向 linked list 結構,已知無 circular,嘗試以遞增順序進行 Quick sort,以下為有進行新增或修改的程式碼片段 static inline void list_concat(node_t **left, node_t *right) {
     Like  Bookmark
  • contributed by < Shanola > 測驗 1 POSIX Thread (pthread) API 認識 透過 pthread 可以實現並行化的程式,對於多核或多處理器的系統中可以平行化或分散式執行,進而提高程式效能。相較於透過 forking 來產生的行程不必再配置記憶空間而是共享一個行程的資源。 Thread(執行緒) 的操作有 建立 終止 同步 排程 資料管理 行程互動: pthread_create() 建立新的執行緒,成功時回傳 0,反之回傳錯誤值。
     Like  Bookmark
  • contributed by < tsengsam > 第一週測驗題 測驗 1 題目為一個沒有 circular 的 singly-linked list,其資料結構為 : typedef struct __node { int value; struct __node *next; } node_t;
     Like  Bookmark
  • 測試環境 一台實體機 (Server),與一台遠端主機 (Client) 透過外部網路互連,並非直接網路線對接或只經過一台交換器 Server side (physical machine) 作業系統 Ubuntu 20.04.1 LTS Linux kernel v5.8.0 硬體 CPU: Intel® Pentium CPU 4500 @ 3.50GHz × 2
     Like 2 Bookmark
  • 步驟 分別對兩種 web server 丟出十萬次 request,每一千筆取樣一次(共100次)分別存到 uring.txt 與 epoll.txt 透過腳本繪圖: $ gnuplot plot.gp 檢視圖片: $ eog performance.png Plot script plot.gp set term png font "Verdana, 12" set title "Time consumpsion of do\\_request func.' set xlabel "experiment"
     Like  Bookmark
  • Request with keep-alive parameter io_uring ab -n 100000 -c 100 -k http:140.116.aaa.aaa:8081/ ab -n 100000 -c 300 -k http:140.116.aaa.aaa:8081/ ab -n 100000 -c 500 -k http:140.116.aaa.aaa:8081/
     Like  Bookmark
  • contributed by < tsengsam > lab0 學習目標 [x] 不定個數參數的處理, signal, setjmp/longjmp 及記憶體管理 [x] GNU/Linux 開發工具 Cppcheck Valgrind
     Like  Bookmark
  • contributed by < tsengsam > 測驗 1: 把 FP32 轉換成 bfloat16 將 IEEE 754 的 FP32 (Single-precision floating-point format) 轉換成動態範圍相同,精度較低的 bfloat16 浮點數若以位元表示時會分成 sign, exponent, fraction 三個區間,與以前將整數表示成位元的方式不一樣。 以 bfloat16 為例:有 1 位元 sign bit、8 位元 exponent bits、7 位元 fraction bits。 換算成十進位的數值時:
     Like  Bookmark
  • 測驗 1: divop 當被除數 slot 為偶數:計算 $divop(orig / D1, slot)$ 為奇數:計算 $divop(orig / D1, (slot + D2) / 2) + divop(前者, slot)$ 可知每次遞迴 divop 的 orig 應越來越小,而除數 slot 則根據其奇偶會補上 D2, 可判斷應為 1 若將奇數的程式化為數學式,假設被除數為 A, 除數為 B: $\dfrac{A}{B} = \dfrac{A/D1}{(B+1)/2} + \dfrac{\dfrac{A/D1}{(B+1)/2}}{B} = \dfrac{A/D1}{(B+1)/2}(1 + \dfrac{1}{B}) = \dfrac{A/D1}{(B+1)/2}(\dfrac{B+1}{B})$ $= \dfrac{A}{B}(\dfrac{2}{D1})$,因此 D1 等於 2。
     Like  Bookmark
  • contributed by < tsengsam > 第四週測驗題 測驗 1: Hamming Distance 計算兩數在二進位表示時有幾個位元不同 我需要記錄兩數在相對應的位元數值不同的數量:根據題目使用 popcount 算 set bit 數量可以推測兩個不同的位元經過 OP 計算後應為 1,而相對應的運算子便為 XOR,本題選 (c)。 int hammingDistance(int x, int y) { return __builtin_popcount(x ^ y);
     Like  Bookmark
  • contributed by < tsengsam > 第三週測驗題 測驗 1: Arithmetic Right Shift 因為負數的算數右移屬 unspecified behavior,表示負數在不同平台做算數右移後的最高位元不一定相同 int asr_i(signed int m, unsigned int n) { const int logical = (((int) -1) OP1) > 0; unsigned int fixu = -(logical & (OP2)); int fix = *(int *) &fixu;
     Like  Bookmark
  • contributed by < tsengsam > 第二週測驗題 【測驗 1】 如何計算輸入的字串是否全為有效的 ASCII 字元,這邊有效定義為 ASCII 10 進位表示的數值介於 1~127,128~255 則屬無效。 第一種寫法為單一字元逐個確認,因無效字元的最高位元為 1,而 0x80 的二進位正好只有最高位元是 1,故第 13 行的運算可判斷是否有效。 #include <stddef.h> bool is_ascii(const char str[], size_t size)
     Like  Bookmark