分享到plurk 分享到twitter 分享到facebook

版本 0fd9ec478d24400e0449eb419597b9b6c56f9d66

User/blueskyson

Changes from 0fd9ec478d24400e0449eb419597b9b6c56f9d66 to current

---
title: blueskyson (林政傑)
categories: User
...

## 簡介

- 成功大學 資訊工程系 111 級 (2018~2022)
- github: [blueskyson](https://github.com/blueskyson)

## 2020 秋季班 自我評量

a) 知道 x - y < 0 敘述為何不能寫為 x < y 嗎? (CS:APP 第 2 章)
   需要考慮 overflow 的狀況,例如在 int32 下 2147483647 - (-1) < 0 ,但是 2147483647 > -1 
b) 知道 C 語言規格書如何解釋 ptr++ 和 *ptr++ 行為的差異嗎?
   在第 40 頁中 *p++ 實際上會被視為 *(p++) ,也就是 *ptr++ 會回傳對 ptr 的取值,然後將 ptr 指向該型態的下個位址;而 ptr++ 則單純回傳 ptr 然後指向該型態的下個位址。
s) 知道如何實作無失真資料壓縮嗎?你知道有哪些相關演算法?
   1. wiki: 產生輸入資料的統計模型,利用這個統計模型將較常出現的資料用較短的位元序列表示,較不常出現的資料用較長的位元序列表示
   2. Huffman coding, Run-Length coding, Golomb-Rice coding
(a) 知道 x - y < 0 敘述為何不能寫為 x < y 嗎? (CS:APP 第 2 章)

需要考慮 overflow 的狀況,例如在 int32 下 2147483647 - (-1) < 0 ,但是 2147483647 > -1 

(b) 知道 C 語言規格書如何解釋 ptr++ 和 *ptr++ 行為的差異嗎?

在第 40 頁中 *p++ 實際上會被視為 *(p++) ,也就是 *ptr++ 會回傳對 ptr 的取值,然後將 ptr 指向該型態的下個位址;而 ptr++ 則單純回傳 ptr 然後指向該型態的下個位址。

(s) 知道如何實作無失真資料壓縮嗎?你知道有哪些相關演算法?

1. wiki: 產生輸入資料的統計模型,利用這個統計模型將較常出現的資料用較短的位元序列表示,較不常出現的資料用較長的位元序列表示
2. Huffman coding, Run-Length coding, Golomb-Rice coding

### 作業

- lab0: [hackmd](https://hackmd.io/@blueskyson/Syc7wgGBv)
- dict: [hackmd](https://hackmd.io/@blueskyson/SJr_5S58D)
- render: [hackmd](https://hackmd.io/@blueskyson/ByJ6R9Zdw)

### 小考

- quiz1: [hackmd](https://hackmd.io/@blueskyson/BySB2oEBD)
- quiz2: [hackmd](https://hackmd.io/@blueskyson/B1NLpOvrw)
- quiz3: [hackmd](https://hackmd.io/@blueskyson/ryjFPLlLv)
- quiz4: [hackmd](https://hackmd.io/@blueskyson/HJiOA7evv)
- quiz5: [hackmd](https://hackmd.io/@blueskyson/BJOVmRUYv)

### 期末專題

以 exp-golomb code 說明 clz ,並改進 x-compressor

- [hackmd](https://hackmd.io/@blueskyson/Skh0XRBhw), [exp-golomb code](https://github.com/blueskyson/Exponential-Golomb-coding)

## 2022 春季班 自我評量

### 作業/隨堂測驗

- lab0: [hackmd](https://hackmd.io/@blueskyson/linux2022-lab0)
- fibdrv: [hackmd](https://hackmd.io/@blueskyson/linux2022-fibdrv)
- ktcp: [ktcp](https://hackmd.io/@blueskyson/linux2022-kecho)
- quiz1: [hackmd](https://hackmd.io/@blueskyson/linux2022quiz1)
- quiz2: [hackmd](https://hackmd.io/@blueskyson/linux2022quiz2)

### 期末專題

探討從無到有打造 Linux 平台的高效能網頁伺服器,涵蓋是否該將伺服器實作於 Linux 核心內部、並行處理、I/O 模型、epoll、Reactor pattern,和 Web 伺服器在事件驅動架構的考量。

- [hackmd](https://hackmd.io/@blueskyson/linux2022-final-project), [github](https://github.com/blueskyson/sehttpd)

### 自我評量 (1 ~ 10)

我給自己 6 分。

在學期初做 lab0 實作 linked list 的 merge sort 過程中,學習到了查閱原始材料的重要性,其可以避免繞許多彎路,也不會被其他人的穿鑿附會所誤導,再來 trace code 時也要避免舉燭,而要參照 commit message 理解目標程式碼的目的,並搭配實驗去執行。在設計演算法的同時最好也針對硬體特性來優化,例如 linux 的 list_sort 為了減少 cache thrashing,引進了 2:1 balanced merge。前述這些經驗都幫助我在未來設計軟體時考慮到更多議題。

在學期中做 fibdrv 時,學習了 kernel module 的特性和相關議題,例如 kernel space 到 user space 資料複製的成本、讓記憶體配置能夠 deterministic、in-place,比較 Karatsuba 和 Schönhage–Strassen 乘法的差異。在 ktcp 的作業追蹤了 kernel module 載入的過程。