
曾喜煌#
學歷:#
- 國立臺中教育大學 資訊工程學系 學士畢業 (2019/09 ~ 2023/06)
- 國立臺中教育大學 資訊工程學系 碩士畢業 (2023/09 ~ 2025/07)
專長:#
C, C++, Linux, Shell, Makefile, gdb, Golang, Kubernetes, Docker, Dockerfile
專業技能#
Linux#
- 從大一開始把筆電灌成 Linux,長期並持續使用的情況下,熟悉 Linux 的命令操作
- 曾經使用 Ubuntu, Debian, CentOS, Arch, 等等的 Linux 發行版
- 習慣且熟悉使用 tmux + vim 作為我的開發環境
C Language and System Software#
Cloud Computing#
- 大學專題與研究所的研究領域,
- 大學專題:「賽局理論應用於資源分配之實現——以 Apache Yunikorn 為例」
- 碩士論文:「雲端邊緣運算中微服務部署之離散化粒子群最佳化演算法」
- 參與開源專案 Apache Yunikorn 並貢獻程式碼及文件撰寫
作品集與個人經歷#
xv6 學習紀錄#
系列文章連結:xv6 學習紀錄

International Collegiate Programming Contest (ICPC) 程式競賽#
大學時期相當喜歡程式競賽這項活動,透過練習及參與程式競賽提昇程式實做能力
The 2021 Taiwan Online Programming Contest#
比賽結果:Honorable Mention (為校內最佳)

The 2021 ICPC Asia Taipei Regional Programming Contest#
比賽結果:Bronze(銅牌獎,台灣區名次/隊伍數:46/103)

LeetCode 解題#
除了以實做出題目需求作為目的,也嘗試把解題過程中的思路記錄下來。
系列文章連結:LeetCode 解題
2021 iThome 鐵人賽 (主題: C 語言筆記)#
系列文章連結:C 語言筆記

這個網站的誕生#
- 系列文章連結:這個網站的誕生
- Git Repository: yamatrail-site
- 學習以下技能:
- Google Cloud Platform 建立及管理虛擬機
- Cloudflare 註冊 Domain 及產生憑證
- Nginx 建立 HTTPS server
- Hugo 建立部落格網站
Apache Yunikorn contributor#
Apache Yunikorn 是一個 Kubernetes 的 scheduler 的開源專案,在實驗室學長的帶領之下也進入開源社群進行貢獻,主要讓我學習到
- 大型專案的 CI/CD 模式
- 學習大型專案的 trace code 能力
下圖是我貢獻的 issue

大學專題:「賽局理論應用於資源分配之實現——以 Apache Yunikorn 為例」#

碩士論文:「雲端邊緣運算中微服務部署之離散化粒子群最佳化演算法」#
研究所的研究領域為微服務架構的效能優化,碩士論文題目為「雲端邊緣運算中微服務部署之離散化粒子群最佳化演算法」
- 硬體環境為 Cloud-Edge computing 的異質性架構
- 軟體環境以 Google Cloud Platform 提供的 benchmark: Online-Boutique, 是一個以微服務架構實做的購物平台
- 演算法使用離散化粒子群最佳化演算法進行效能(Response time)優化

題目連結:746. Min Cost Climbing Stairs
解題思路 這題利用 DP 的方式,「有了前兩天的資訊可以推測出今天」依此類推的得知最後的答案。
程式碼 class Solution { public: int minCostClimbingStairs(vector<int>& cost) { int n = cost.size(); vector<int> dp(n, 0); dp[0] = cost[0]; dp[1] = cost[1]; for (int i = 2; i < n; i++) dp[i] = min(dp[i - 1], dp[i - 2]) + cost[i]; return min(dp[n - 1], dp[n - 2]); } };
題目連結:1004. Max Consecutive Ones III
解題思路 這題使用兩個 pointer left 與 right 來紀錄當前的 array 大小,像是:
0 1 2 3 4 5 6 7 8 9 ↑ ↑ l r 這個時候 left == 2, right == 6 長度的計算為
length = right - left + 1 也就是 6 - 2 + 1 == 5
如何表達 length == 0 這樣的設計會碰到的下一個問題是
假設 right == 6 如何表達 length == 0 的情況?? 會像是下面這個樣子:
0 1 2 3 4 5 6 7 8 9 ↑ ↑ r l 雖然是 left 不過卻在 right 的右邊,但這樣做的好處就在於我們計算長度的公式:
...
題目連結:1679. Max Number of K-Sum Pairs
解題思路 這一題跟 11. Container With Most Water 的感覺還蠻像的,都是先把兩的 pointer 放在兩端,並且根據不同的情況,用 greedy 的方式判斷下一步要做什麼。還有這個問題是配對到了就刪除掉,所以也不會有重複的問題。
程式碼 class Solution { public: int maxOperations(vector<int>& nums, int k) { int left = 0; int right = nums.size() - 1; int count = 0; sort(nums.begin(), nums.end()); while (left < right) { if (nums[left] + nums[right] == k) { count++; left++; right--; } else if (nums[left] + nums[right] < k) { left++; } else { right--; } } return count; } };
題目連結:345. Reverse Vowels of a String
解題思路 這題就很直覺得掃過兩遍,第一遍收集 Vowels,第二變把 Vowels 用相反的順序放回去,真有什麼好說的東西的話應該是寫個 helper function isVowels() 會方便一些。
程式碼 class Solution { private: bool isVowels(char c) { if (c == 'a' || c == 'e' || c == 'i' || c == 'o' || c == 'u') return true; if (c == 'A' || c == 'E' || c == 'I' || c == 'O' || c == 'U') return true; return false; } public: string reverseVowels(string s) { int n = s.size(); queue<char> q; for (int i = 0; i < n; i++) if (isVowels(s[i])) q.push(s[i]); for (int i = n - 1; i >= 0; i--) if (isVowels(s[i])) { s[i] = q.front(); q.pop(); } return s; } };
題目連結:334. Increasing Triplet Subsequence
解題思路 這題我剛開始是朝著先找出 i 與 k 之後再檢查 j 是否存在,想了幾遍都覺得有些瑕疵,後來發現依照 i, j, k 的順序尋找會比較合理一些,可以用很 greedy 的方式去尋找。
如果再來一次的話,我應該會先列出以下兩種可能:
先找出最大最小的 i 與 k, 再找出中間的 j 依照順序尋找 i, j, k 評估之後挑選較有可能的順序,並且保持另一個方案的可能性。
程式碼 class Solution { public: bool increasingTriplet(vector<int>& nums) { if (nums.size() < 3) return false; int i = 0; int j = -1; for (int l = 1; l < nums.size(); l++) { if (nums[l] < nums[i]) { i = l; } else if (j > 0 && nums[l] > nums[j]) { return true; } else if (nums[l] > nums[i]) { j = l; } } return false; } };
sudo apt-get update sudo apt-get install -y kubelet kubeadm kubectl sudo apt-mark hold kubelet kubeadm kubectl https://stackoverflow.com/questions/52893111/no-endpoints-available-for-service-kubernetes-dashboard
nodes: https://120.108.205.137:9999/ui/
192.168.1.115 ssh k1 # ssh [email protected] ssh k2 # ssh [email protected] ssh k3 # ssh [email protected] ssh k4 # ssh [email protected] sudo vim /etc/hosts # /etc/hosts 192.168.1.115 asus 192.168.1.11 k1 192.168.1.12 k2 192.168.1.13 k3 192.168.1.14 k4 # for cluster on virtualbox 192.168.56.1 thinkpad # my thinkpad 192.168.56.101 node1 # vm on virtualbox sudo systemctl restart systemd-resolved docker installation https://docs.docker.com/engine/install/ubuntu/ CRI (container runtime interface) 是 container 用來互相溝通的 API
...
This is my first article!
所以我說那個醬汁呢?