本文是我的 2019 年碩士推甄心得,
一個小魯蛇從 國防大學資管系 -> 北市大資科系 -> 交大資科工所(丙組)
的故事。
我高中不愛讀書,成績超爛(學測成績:國13 / 英15 / 數8 / 自9 / 社12 ... 總級分57)
加上當時家裏有不小的醫療開銷,而我不想成爲家裏的累贅,所以就自己跑去讀軍校了(結果軍校有夠苦...)
在軍校讀了整整三年後,覺得自己還是不適合軍中的生活,況且人生就那麼一次,在條件允許的情況下應該好好去追求自己所喜歡的職業。
於是我硬著頭皮,求家裏借我60萬讓我從軍校退學(軍費生退學要賠錢)。
接著我便我降轉到一般大學,並持續朝向成爲 software engineer
的夢想邁進。
學校 | 結果 |
---|---|
臺大網媒 | 備3X |
交大資工甲組 | 備2XX |
交大資工丙組 | 面試正取 |
臺科資工 | 面試正取 |
北科資工 | 直接錄取(榜首) |
中央資工 | 直接錄取 |
政大資科 | 直接錄取 |
師大資工 | 直接錄取 |
在 國防大學 即將升大四的暑假,我和家人借了60萬和軍校辦理退學。隨後在同個暑假,降轉到 臺北市立大學資科系三年級。
年級 | 就讀學校 | 平均分數 | 排名/人數 |
---|---|---|---|
大一上 ~ 大三下 | 國防大學資管系 | 92.07 | 1/16 |
大三上 ~ 大四下 | 臺北市立大學資科系 | 95.67 | 1/38 |
除了成績之外,還有一些比較重要的經歷:
項目 | 備註 |
---|---|
TOEIC 950 | 高三考的,大三剩910 |
Synology Internship | 於系統部門實習(2019暑假) |
SITCON 2019 speaker | 解放 Linux 桌面!用 Xlib + 樹狀結構打造自己的 Window Manager |
GNU/Linux 使用經驗 | 只使用 GNU/Linux 作爲日常工作環境 > 3年 (用過 Debian, Arch, Gentoo 等發行版) |
大型作品 | 自己寫過兩個超過 10,000 行程式碼的系統:Hacklympics, Vigilante |
自傳、讀書計劃 (PDF)
我參考了三位學長的自傳和讀書計劃:
我的格式大致上是參考 Su Billy 學長的自傳,以條列式的寫法,讓教授們可以快速了解我這個人所會的技能。但我的文字有點太多,其實可以再進行精簡,這樣閱讀起來會比較輕鬆。
根據許多學長姐的經驗,感覺推甄非常重視校名和成績,所以我用較大篇幅來介紹自己的程式作品。我想讓教授們知道,雖然我的校名不如人,但我想在這份自傳中展現我四年來的決心、毅力與努力。除了在校成績是第一名外,我更花費了所有自己可支配的時間去經營自己的作品,並且曾有幸獲得 Synology 的認可,取得系統部門的實習機會(真的很感謝群暉的主管)
當時看到 Su Billy 的文章,得知 jserv 老師可以幫學生看申請研究所的自傳,所以就厚著臉皮密了jserv的粉專。 其實最初密粉專的時候,單純只是想請 jserv 幫我看看我的自傳就好了,沒想到老師居然還願意幫我寫推薦信,真的很開心又很感動 QQ
以下是粉專的公告內容:
#免費協助準備研究所推薦甄試 #撰寫推薦信 兩年前開始,jserv 著手協助學生準備研究所推薦甄試,已有幾位受益,今年我們會繼續這樣的服務,一樣免費 (讓學生有更好的出路,才是教育該做的事),幫你撰寫推薦信和協助調整備審資料。 以下學生優先處理 (其一即可),請有需要的學生透過 Facebook 發私人訊息給 Jserv與他愉快的小夥伴:
- 和 jserv 合作過開發開放原始碼專案,不限於程式碼協作,也有文件撰寫、錯誤回報等;
- 修過成功大學系統軟體系列課程的學生,或者透過網路參與,能提出兩項以上完整的程式作業者;
- 對開放原始碼專案做出程式貢獻,能舉出具體成果者;
- 開發過作業系統核心、編譯器,或者虛擬機器等專案,並且將成果開放原始碼出來者; 來訊前,請詳閱經驗分享的案例,並附上備審資料草稿和欲推甄的研究所 (只接受交大資工所和台大資工所)。
筆試的部分是「性向測驗」,我記得是一張A3雙面的試卷,題目類型包山包海,如:程式語言、演算法、資料結構、web、security、design pattern、linux kernel。
以下是我們這屆筆試的幾道例題(完整筆試題目清單,感謝 @splitline 大大等人整理):
- 舉出一個你會實作的較複雜的演算法,並用 30 字簡介
- stack, queue 分別是啥(20字)?分別會用在什麼演算法?
- 開發 linux kernel 或 driver 時怎麼 debug?有辦法在不 recompile 的狀況下改變數然後重複執行測試嗎
- 請問 GMM 和 K-means 的差別在哪裡?大致說明一下原理
- 寫程式的開發環境?有用 Github 多人協作的經驗嗎?有考過程式檢定嗎?幾小時幾題?
- memory allocation 太慢怎麼 debug?可以用什麼工具如何解決?
- 一個 function int
freq_mode(int a, int b, int c, int d)
,回傳其眾數出現的次數。例如freq_mode(1, 3, 3, 4)
要回傳 2,因為 3 出現 2 次。求最優雅的解法?- 實作演算法:找出陣列 int A[n] 第二小的數, O(n) 解,並證明所有可能的解都不可能比 Ω(n) 好
口試的部分,一開始被問到我的 X11 Tiling window manager 用到的資料結構和演算法。接下來被問了大概七個 C++11 的問題,但當時有蠻多題是我不會的(因爲我在自傳上寫了自己的 skill set 包含 C++11,加上我的C++算是自學的,當初寫的時候不知道天高地厚)。
一走出面試的那間研討室,想說大概沒機會了,所以回家刷 LeetCode 刷到半夜兩點...很希望隔天的臺科面試不要也爆炸了 QQ
交大面試隔天,就是臺科資工的面試。這天的面試感覺蠻順利的,最後也如願正取。
面試第一關被問到 linux kernel SLAB allocators,我就大概說了自己對這個 topic 粗淺的理解(剛好之前玩 CTF 有接觸到)
面試第二關是 whiteboard coding interview,題目是寫一段 BFS (Breadth-First Search) 的 pseudo code 並和老師解說自己的程式碼。由於並沒有限制是 tree/graph,我就用 binary tree 舉例並寫了這段程式碼:
std::queue<TreeNode*> q;
q.push(root);
while (!q.empty()) {
size_t size = q.size();
for (size_t i = 0; i < size; i++) {
TreeNode* node = q.front();
// Do something with `node`
q.pop();
if (node->left) q.push(node->left);
if (node->right) q.push(node->right);
}
}
除了自身的努力外,我相信貴人也是很重要的成功條件。感謝一路上幫助我的家人、老師和朋友們,並且特別感謝 jserv 在百忙之中幫我看了自傳,甚至幫我寫了推薦信!
希望這篇文章也能幫助到要推甄研究所的你,如果之後你也如願正取,也可以寫一篇心得文幫助之後的學弟妹~