目錄
- 前言
- 背景
- 成績
- 個人書單
- 讀書方式
- 各科建議
- 考後感想
【前言】
在準備研究所考試的時候,有時會覺得心情很低落,因為身邊的朋友大部分都是應屆就考上或推甄上自己理想的研究所,而自己還在奮鬥。
從ptt上看到很多的人PO出自己的心得文,一方面會覺得羨慕人家已經考上喜歡的研究所,但另一方面也會覺得安心。從文中可以發現大家的狀況多少與自己相似,不自主會油生一股「我也可以做的到」的念頭。
會發這篇是因為我自己從網路上得到很多無形的幫助,所以想要出來發篇文給正要準備與未來可能會看到這篇的人,也許可以給點幫助。
不過得先說一件事,這篇文適合「沒補習」的人看,畢竟我自己就是覺得有點浪費錢才沒去補習。
【背景】
本人大學是114資工系畢業,系排約50%-55%。因為是本科系的學生,所以對於軟體與硬體都有基本的概念。但因為懷著這種具有優勢的想法去考第一次,所以反而跌了一跤,才知道自己真正不足的地方在哪裡。
因此,這次考的時候,就花了更多的時間把所有科目融會貫通。
【成績】
數學 軟體 硬體 總分 錄取情況
台大 80 37 51 172 正取
交大 80 49 68 194 正取
清大 57 XX 31 88 落榜
成大 70 72 40 182 正取
【個人書單】
- 除了演算法以外,其餘都有上網買了別人的筆記
線性代數 LA
- 黃子嘉分類題庫
- 線代啟示錄加減看
- 原文書(沒什麼看)
離散數學
- 黃子嘉分類題庫
- stackexchange
計算機組織
- 張凡上下冊
- 白算盤
作業系統
- 恐龍本(沒寫習題)
- 網路資源google
資料結構
- 演算法筆記
- 別人雲端分享的統整pdf
演算法
- 洪捷的《演算法:名校攻略秘笈》(不太推買這本)
- Wjungle大的筆記
- 演算法筆記
以上的書單大部分跟原文書沒什麼關係,都是別人統整的資訊。因為我網路上買的筆記倒是寫得很棒,所以原文書很少碰。
但是!!硬體的原文書基本上很建議要有,因為我讀到一半或是寫完題目後,對於沒在筆記上的問題,通常可以從原文書找到一些幫助。
以上書單我個人覺得都算是好入手的,其他不足的部分可以參考 Wjungle大的筆記。
【讀書方式】
版上有很多的讀書方式,大部分都蠻強調一天要念個很多科以免忘東忘西。然而,我自己從以前就有個習慣,一定要把每科的大部分概念順過一遍,才會接下去讀另外一科。其實這麼做的原因是有時科目之間的連結性不強,如果一天念多科,對我而言會造成沒辦法記得太多東西,記憶都很模糊。所以喜歡一次念多科的人可能可以直接跳過這段。
總之,我的讀書方向是以「連結性強」作為主軸,像是OS跟計組在虛擬記憶體的部分就是相互輔助,OS可以把page replacement的細節補充齊全。或者,資結跟演算法在圖論有很多重複的地方,可以作為複習。
因為第一次是處於應屆考試,所以準備時間沒有很充分,因此這裡就不放。
以下是我讀書的歷程(第二次準備):
- 2019/6–7月(每天3小時)
讀線性代數+把題庫重新寫一遍
大約每四天一個章節,前兩天把該章節讀熟,最後兩天把題庫的easy, medium, hard題目都寫過一遍。
把題庫常出現的公式或是觀念寫下來,尤其是對角化、投影與第八章的各式normal矩陣。
- 2019/7–8月(每天3小時)
讀離散數學+題庫再寫一次
跟線代不太一樣,因為離散的章節比較多,項目比較雜一點,所以大部分的時間都花在遞迴、生成函數與圖論上面,至少考試真的很愛考這裡。大項目花了約2/3的時間,剩下來就留給代數結構與絡。
除此之外,題庫也是同線代,大部分的章節都寫過一遍,並且把每個章節出現的專有名詞記下來,或是把遞迴常見的題型解法寫下來。
- 2019/9–10月中(每天4小時)
讀計算機組織,把張凡的上下冊讀得滾瓜爛熟,並且把裡面的題目寫完。
前面兩章的內容蠻硬的,但算是計組的基本知識,所以建議至少要把浮點數、ALU還有MIPS指令集都讀通,交大計組蠻常考的,不論是多選或題組今年都有考。
後面的single-cycle、pipeline、cache都不難,畢竟機器是人設計的,所以都有其邏輯可循,個人覺得肯花時間一定能不必死背。(datapath倒是要背)
至於I/O還有進階管線等部分,就建議背清楚他們的定義以及應用,但不必把課本的定義全記在腦海中,可以透過找keyword並寫成小筆記,把他們的功能作分類。計算題偶爾會考multiple-issue搭配unrolling,像今年清大就考出來(但我還是不會XD)。
另外,我在讀各種平行度時,會整理一個表出來,可以幫助你統整這些進階管線或處理器被製作出來的目的。
- 2019/10–11月初(每天4小時)
讀完計組後,就順著把OS再讀一遍。原因無他,像我前面講的,你必須要把連結性強的科目連著一起讀,讀起來才會比較有共鳴。
作業系統有很多實作方面的比較,像是page replacement algorithm或是CPU scheduling strategies,因此建議把這些觀念一個一個做比較表出來。而且在做的時候,我通常會先把比較對象與項目寫出來,把書本闔上,自己試著在腦海中複習然後寫下來。即便無法全部寫得很清楚,但至少要確定自己對這些實作方法有概念。
- 2019/11–12月初(每天5小時)
把資結跟演算法重新看一遍,這次在網路上買了洪捷的名校攻略秘笈。
因為本身是本科系的學生,所以程式底子還算不錯,面對資結就大概花兩週左右,主要把advanced tree搞懂,再稍微把排序演算法整理成一張表格。
至於演算法,老實說上次考試時,我幾乎沒有讀就上場考了,結果連NPC或NP的定義都不知道,max flow也都不會。因此,這次花兩週的時間在把DP、NPC reduction以及圖論的演算法都自己寫過一次。
尤其是NPC,一開始看到題目要求做reduction時,腦袋都會一片空白,挫折感其實很重,會覺得自己怎麼都想不到。等到練習幾次之後,可能是抓到訣竅,自然會聯想到一些有趣的reduction方式,而今年清大也考了一題。
另外,如果真心要讀演算法,比較推薦去讀林立宇或別人寫的講義,因為洪捷那本比較偏向給你練題目用,程式碼的話裡面其實有一些錯誤。除此之外,網路上有一些資結方面的視覺化網站,如果對於中間步驟有疑問的話,可以直接從該網站看到詳細過程。
- 2019/12–2月(每天5–6小時)
開始瘋狂刷考古題,一天至少一份,有時進度快可以兩份。
以下是我寫過的考古題列表:
- 清大:99–107
- 交大:97–108
- 台大:99–107
- 成大:98–108
考題方面,清大硬體偏難,計算跟申論大概一半一半。交大算是挺平均的,但軟硬體的題組式出題很機車。至於台大,我大部分是寫軟體跟數學,因為通常找得到答案,而硬體就是蠻多情境題,所以也只能加減寫一下,讓自己適應而已。成大的話,相對於前面三間算簡單的,常常出考古題,像今年數學第一大題就滿滿考古味,所以寫起來挺有成就感的。
第一次考試時,因為準備時間不夠,所以考古題幾乎是跳著寫,沒有系統性可言,可說是寫心安的,而這次就寫了海量的各校考古。
這段期間對於實力會大大地提升,因為你會發現自己容易錯的地方,以及先前純讀書時所欠缺的部分。每寫完一份考古,我會做成一張訂正表,裡面會註記考題大致內容與解法。除了避免事後又錯一樣的題目,也幫助考前整理重點考題類型。
練習寫考古題時,依照各個心得文的建議,我也是訂一科80分鐘,中間會休息個約20–30分鐘。另外,我通常是寫完後當天對完答案,對答案加上訂正的時間約莫花一個小時半,有時寫交大的題目會花比較久,因為硬體與軟體有很多的選擇題,每個選項檢討起來會花蠻多時間的。因此,通常交大的考古一天我只會寫一份,否則會檢討的很疲倦。
至於寫題目的技巧,我一開始還不太會跳題,尤其是寫數學時,會不小心栽進迴圈中而忘記時間,導致後面簡單的題目沒寫到。後來大約寫了第三份才學乖,開始學習如何跳題,因為在正式考試中,時間是不會等你的,所以考生必須要學會什麼樣的題目得先寫。
總之透過寫考古題,可以幫你做一系列的檢定,讓你了解自己何處不足,一步步建立起更堅固的城牆。
【各科建議】
線性代數
第1~5章一定要看熟,後面第7章要把投影讀通、公式背下來,而第8章要背熟各個normal matrix的定義以及其性質。至於第6章真的有空再回來看就好,今年印象中只有台大有考一題。
在所有科目中我最喜歡線代,因為他的證明都不是非常難,通常可以用算式證明,唯向量空間以及線性映射那邊會比較抽象一點。
如果對於證明有不了解的地方,google通常都會有很多過來人在討論,比較麻煩的可能是全英文的部分,但反正考試也都是英文,不妨順便練一下英文也好。那如果真的不喜歡看太多英文的人可以去線代啟示錄。
關於第八章,我自己在把大部分的考古題寫完後,閒暇時會去試著自己把一些比較難的證明,譬如對稱矩陣為何能正交對角化,或是如何判斷一個矩陣是否為正定與其原理。雖然很少考這些性質證明,但我自己不喜歡在不懂原理的情形下在計算題中使用這些性質。
離散數學
前面五章的數學蠻硬的,建議心力放在遞迴跟生成函數,這兩章每年必考所以CP值蠻高的。排列組合大多數在高中就學過了,也沒特別的地方,但少數像是禁位與rook polynomial記得要自己動手寫幾次,網路上也有一些圖片搭配解說。
後面的章節,主力要放在圖論跟樹,因為內容真的超級多,也是不少的證明與性質。平面圖、Bipartite、HP&HC等等觀念都要有,今年成大就考了一題關於平面圖的證明(但我眼殘直接噴20分)。
第10章偶爾會繃出來一題,考你邏輯或是叫你畫hasse diagram;而如果有空再去看第9章吧,因為內容複雜度不比圖論還低,有很多的專有名詞會搞得你暈頭轉向,考試很少出現。因此建議這兩個章節放最後讀即可。
計算機組織&作業系統
這兩個硬體科目概念上都不難,我計組是看張凡的書,覺得受益良多,而作業系統其實蠻多是靠之前在課堂中奠下的基礎。
比較麻煩的通常是名詞解釋與比較,因為這考驗你有沒有真的理解這些概念,所以我會建議直接做個小筆記,把常見的專有名詞寫下來,寫上他們的keyword,再不然就是做一個比較表。像是process communication有分shared memory跟message-passing,你就能自己做張表格去比較兩者的優缺點。計組的話,I/O那邊可能要多看幾次,那邊內容有點雜,RAID真的要做個表格分清楚他們的優缺點。作業系統的話,重點放在process/thread、interrupts、同步機制與記憶體管理,最常考的大概就是這些。個人認為同步真的需要多看幾遍才會懂,尤其是semaphore的製作方法,其中的演算法要搞懂為何符合三大原則。每年交大都會考幾題跟同步相關的題型。
要刷觀念可以寫交大的考古,寫完包你滿載而歸;台大的題目就比較活,每次都會傻住,今年考了個CNN,只好加減寫一下。
這裡私心推一下,周志遠的OCW可以去看,教得很仔細。自己在學時,有修過老師的作業系統,因為會直接寫code,所以對於process/thread與interrupt都有點概念,其實OS我根本是吃老本。
資結&演算法
資結的重點在要自己動手去把程式碼trace過幾次,尤其是advanced tree,雖然不見得可以實際寫出程式碼,但必須要會insert或delete特定節點的一系列步驟。除此之外,當你看著眼前的程式碼或是步驟時,第一個反應要是了解整體的時間複雜度,因為考試很常會丟一串程式碼,問你他的時間複雜度是多少。
演算法的話,我的讀書重心是放在DP跟NP,因為他們都算蠻抽象的東西,所以建議多寫幾次練習題,多去觀察解題的方向,通常都是從基本的去做變化,算是只能意會的部分。至於圖論,在資結都有提及,頂多多個shortest-path跟max flow要讀,了解各個演算法的特性跟做幾次實際練習即可。
除此之外,Master Method的題型也多做幾次,要訓練出一眼就能判斷可不可以用與要使用哪個case去解,今年成大就考一題不能用master method解的題目,而你必須講出為什麼不能用。
總之,資結偏向計算,演算法就是考驗你的創造力與運氣,最好的作法就是多寫考古題,熟悉每個學校的出題尿性,像是成大蠻喜歡叫你寫出一個跟圖論相關的演算法且時間複雜度限制在某個upperbound。
【考後感想】
第一次考試前的那個學期,我自己修了12學分的課以及還有專題要忙,所以起步太晚而且讀書時間不固定,導致那一次根本是把錢丟給學校,所有學校都落榜。
因為第一次沒上,所以自己曾經還想過自己到底要不要再考一次,或是直接出去工作。除了家人希望我再繼續往上讀,我也想要在研究所精進自己找尋問題與解決問題的能力,彌補過去自己的不足,所以決定再拼一次。
沒有去補習的原因有三個:費用相對昂貴、喜歡自己安排讀書時間,以及最不重要的自尊心。從國中到大學,自己都不曾去大型補習班,都是自己在家裡念書,因為相對自由且放鬆。因此,在這兩次的研究所考試,我自己秉持著「不靠補習班也要成功」的信念,每當我唸書唸到覺得挫折時,我就會想起自己給自己的這句話。
而這次考試的結果算是出乎我意料,因為今年四大的硬體軟體都有點反常,相對於去年平均變難不少,使我考完後認為只會有成大會上。
數學是我的強項,今年根本是抱數學大腿,尤其是台大,快一半的分數來自它。認真講的話,我也蠻推薦先讀數學,因為得到的回報真的比較高,寫過考古題就會知道,正所謂「數學不會背叛你」。
給未來的考生們:
讀書往往是痛苦的,我自己就曾經太心累而偷懶快一個禮拜。若覺得累或想哭沒關係,那是準備考試的必經過程,稍微停下來把心情整理好再出發。
這篇文或許沒有辦法給予實質上的幫助,但可以在你們讀累時,偶然逛到這一篇心得文,讓你們從中獲取一些信心,重新充電後繼續向前邁進。
如果是重考生的你,可以看看我這篇,似曾相識的感覺或許能讓你感到安心。人生失敗一次不過份,過份的是當你拼第二次卻重蹈覆轍,沒有記取先前的教訓。
若你也跟我一樣不喜歡補習,那建議可以找一些志同道合的人開讀書會,找戰友有時候讀起來會開心一點,別像我老是愛當獨行俠。
最後,祝福未來的考生都能考上理想中的研究所。