[本文为代po]
前言:
写下这篇的原因主要是为了对台大土地公还愿XD,并且鼓励之后要考资工所的学弟妹们,
考试不是那么恐怖的东西,但每个人的学习历程和读书方法不太可能复制,并套用到其他
人身上就有效,因此建议大家心得文参考就好,心得文看个一两篇后,放下手机拿时间去
读书比较实际。
[个人背景]:
112工学院跨考,资工所考科无一学过,全部从0开始自学,也因此,准备初期就将目标定
在台大网媒上,将时间投入在软硬件四个科目上达到最大利益,但相对的风险也比准备六
科考资工所来得高,毕竟资工所有四大四中二科可以考,因此不建议用像我一样的投机方
式,时间充裕的状况下还是乖乖准备六科,不至于把鸡蛋放在同一个篮子上,台大考题难
度又非常不稳定。
111年考研成绩:数学/软件/硬件
台大网媒:X / 8x / 7x 正取
交大资工:落榜
清大资工:5x / 7x 正取
如同上述,因为数学没有准备,清交其实是抱持着一种练笔的心态去考的,但清大计科成
绩出乎意料的高,可能是今年离散部分较简单,对我来说写起来有点像智力测验,又演算
法部分我应该
是拿满的,意外摸到正取。
台大今年考题佛心很多,但我软件还是粗心一堆,因此考试也是蛮吃考运的,土地公还是
有包我正取XD
[准备方法]:
1. 要不要做时间规划表?
我讨厌排定读书规划和时程来催促自己读书的方式,因为我觉得排出来有种被时间追着跑
的压力,又因为自己在学就读中,没有太多时间可以挤出来读研究所的书,一天读的时间
大概就是 6~8 小时,对比板上其他神人差蛮远的,但我觉得重点在坐在书桌前的时间就
真的要完全善用,如果这 6~8 小时你能有 90% 的时间都知道自己是心无旁骛的状态,那
就可以了,如果不行,就出去走走呼吸一下空气。
2. 要不要补习?
我虽然有买资工所课程内容,但实际看完的只有算法和记组,认真觉得依照你自己的读
书习惯衡量要不要补习,资料结构和OS看了几堂后,我就觉得不如自己去翻mage大和wjun
gle大的笔记比较快,这边也感谢两位大大提供的资源,除非有笔记上自己看了无法理解
,原文书和google完还真的不懂的部分,我才会真的回去找补习班的影片来看,不过这样
的机会是蛮少的XD
3. 要不要刷考古?
我自己是连一年都没有拿出来刷过的,但我有在各个科目读完一轮后,大致浏览过台大5
年内的考古才做出这个决定的,因为台大出考古的机率偏低,刷考古只是帮助自己厘清观
念而已,但刷考古的时间我可以投资在读更多的材料,我选择了后者,相对的,我会在te
legram的资工读书会上回答其他人的问题,把自己所学内容消
化后输出成别人能理解的内容并教到会这个学习方式比较适合我,又大家会在上面的问题
通常都是经过筛选了,基本题一般不会出现在上面,在吃饭、空闲时间回答上面的观念题
和值得讨论的题目是一个互惠的过程,也省去了我找考古来刷的时间。
要不要刷考古只能说因人而异,我的方法不一定适用于你,建议自己找到适合自己的
读书方式就好,我自认我的准备方式不太适合以稳妥上榜为目标的人。
[四科读书方法]:
下面是我读各科的方式和一些读书资源,供大家参考
1. 资料结构
补习班讲义搭配Mage大讲义 -> 自己做一次笔记 -> CS 6.006 -> CLRS
资料结构的部分我其实只看过两轮,因为这科老实说不难,只要先搞懂ADT的意义,知道
资料结构是为了让对某些资料做operation的时间复杂度可以下降或一些特性而有不同设
计,理解他是设计方式后,就开始自己想说,如果是我,我会怎么设计这些资料结构。
再来将各章节的ADT中的定义和上面的操作搞清楚,并了解其时间复杂度和为什么要做这
个设计就差不多了,建议去拿mit CS 6.006的quiz 1来写,里面会有题目要你针对某些应
用,对某些item去设计资料结构来存资料以达到针对此应用最有效的设计,大概写完就有
上面的素养了。
还有比较常考的就是sorting,要理解每个是怎么操作的,什么情况会用他,具备什么性
质等等,大致上就没问题,还有quick sort的证明。
剩下的比较难的就是一些偏定理的部分,这部分大概具备数学归纳法的能力即可应付,很
多资结定理证明都仰赖数学归纳法,反倒是比较难的如hashing的证明是需要在CLRS上才
能读到,建议某些高等树和hashing那章直接读CLRS就好,对于观念理解比较妥当。
读书资源:
1. wjungle讲义
2. Mage讲义
3. 补习班讲义
4. 圣经本
5. MIT CS 6.006
6. 何谓资料抽象化(https://reurl.cc/GoRDpZ)
7. Data Structure Visualizations (https://reurl.cc/RjlDer)
2. 算法
林立宇讲义 -> CLRS -> 台大ADA -> MIT CS 6.006 -> MIT CS 6.046 -> CS 6.890
这科和记组是我觉得最有趣的科目,读的很开心,最一开始是要先学会当遇到一个算法
时,要如何分析其执行时间,会用一个时间复杂度来分析他的bound,时间复杂度的部分
比较偏数学理论,要完全搞懂,搞懂后只要能抓住前面的观念就能进到后面的算法设计
技巧了,遇到问题时,要怎么设计一个好的算法来解他,最基本的就是用brute force
,可以先想一个暴力法得到解这个问题的upper bound,再去想要低于这个upper bound的
话要怎么下去设计,设计策略又有Divide & Conquer、Dynamic Programming、Greedy Al
gorithm等等,要注意题目是否具备使用这些策略的特性如optimal substructure、greed
y choice property和overlap subprob
lem,再下去用这些技巧设计算法。
其中最常考的是Dynamic Programming,分为四个步骤,定义子问题 -> 写出子问题的递
回关系式 -> 用bottom up的方式建表格填表得原问题的optimal value -> 纪录额外资讯
得opti
mal solution,写多了就知道最难的是定义子问题,但考试会出的pattern就那几种,自
己练看看mit的期中、末即可。
之后是图论算法,这边要会证算法的正确性,并了解他可以用在哪些应用上,遇到哪
些情况时,可以reduce到这个问题的problem instance用这里的算法去解等等,尤其是
flow network那边,CLRS的证明很精彩,但补习班讲义完全没提到,清大教授也有跟我抱
怨过flow network不该考,因为考了也只是考跑跑实例,但真正要通盘理解得会这里的证
明。
再来就是NPC了,要先搞懂这些问题的集合,complexity class,还有reduction的含义,
推荐去看CS 6.890,那个证得马力欧是NPC的天才教授,讲的有够清楚,超级舒服,如果
不像我读到走火入魔的可以停在第一堂课就好XD
这一科准备方式就是多写,把逻辑理清楚,对于算法背后的正确性要会证,其实就没什
么问题,下面会附我算法的笔记连结。
读书资源:
1. 林立宇课本
2. CLRS
3. CS 6.006
4. CS 6.046
5. CS 6.890
6. Stack overflow
7. GeeksforGeeks
8. Leetcode
3. 作业系统
周志远线上课程 -> 补习班讲义、笔记 -> 恐龙本 -> Linux 核心设计
-> System programming
不好准备的一科,有够杂,我其实补习班讲义只读过一遍,剩下时间就几乎拿去读一些原
文书和不在课本的内容,只能说多想,作业系统其实就是一个很大的abstraction,这里
要怎么设计,里头的各个module的设计,都是底层硬件知识和算法、资结内容的结合,
只能多想,多看,有时间的可以去实作玩看看,我是没时间,剩下的交给土地公。
读书资源:
1. wjungle讲义
2. Mage讲义
3. 补习班讲义
4. 恐龙本
5. Linux 核心设计
6. Stack overflow
7. System programming
8. 周志远作业系统线上课程
4. 计算机组织
补习班课程 -> 补习班讲义、笔记 -> CMU Computer architecture
2015 -> 原文书 -> paper阅读
另一个读的最有兴趣的一科,相当推荐看CMU Computer architecture 2015这堂课,老师
讲的超级超级超级棒,不只是着重在单一系统的介绍,而是教你如何因为一些考量,决定
你要在哪一层的抽象层上做设计,要做怎样的设计
,这样的设计的优、缺点是什么等等,相当于从设计发想到实作细节到分析设计优劣的整
套流程,尤其是补习班老师我认为没讲很好的第六章(SIMD, Vector Machine, GPU)这
些章节在上完CMU课程后只能说通体舒畅,再去读该堂课推荐的一些paper,对付手写题我
觉得游刃有余了,下面一样会附我在这边的笔记。不过不太推荐他2021的课程,好像变成
比较著重在memory上头的设计,虽然是趋势但不适合应付考试。
但这里我是有点读的太过头了,单纯读的有兴趣会一直读,如果只是应付一般考试的话,
可以只把张凡课程搞懂,完全弄通保证自己这些东西都不会错,应该就足以上榜了。
读书资源:
1. wjungle讲义
2. Mage讲义
3. 补习班讲义
4. Computer organization原文书
5. Computer architecture原文书
6. CMU Computer architecture 2015
7. 一堆paper
[总结和笔记分享]:
总结来说,大家不要太过畏惧考试这件事,其实要上榜不难,可以想说如果是准备资工所
考科的话,认真准备总会有一间可以去的学校的,像我准备时数不知道有没有1000小时的
考生都能上榜了,你们也一定办得到,最后感谢一下我的爸妈让我不用顾虑生活可以好好
准备考试,感谢我的女友考试期间一路陪伴着我,感谢资工读书会的战友们,特别是里面
的几个,会特别私讯我问我问题,讨论的过程中也让彼此变得更强。
最后预祝看到这篇文的都能上榜!要记得上榜后才是真正的开始,找教授远比考试还痛苦
的QQ。
下面是计算机组织和算法的笔记连结,最近找教授还没有时间整理,考完会再整理的更
精简的:
https://reurl.cc/yQj4Ny
[找教授心得]
找教授真的是会找到心累,尤其是你是跨考的,可能我原先有顶着112校名,因此没遇到
直接拒绝我的教授,没满的教授都有排到面谈的机会,但自认背景或履历不足的考生,尽
量在考完到放榜的这一个月开始想办法充实自己的履历,不要抱持着放榜再来做的心态。
1. 要不要寄罐头信
我认为这是权宜之计,的确有教授抱怨过罐头信,但这是制度的问题,不是我们考生的问
题,因为大部分教授筛选人很多用FCFS的标准,时间一慢就满了,又考完到放榜这些时间
很难把各个教授的领域都摸到最熟,进而写出适合的信件,只能说那些你们很有兴趣的教
授尽量还是自己打,其他的就用罐头信海投吧,大部分教授都能理解的。
不过也可以用这种方式 自我介绍 -> 专题内容 -> 对教授感兴趣部分 -> 谢谢教授,只
改对教授感兴趣部分这边就ok,善用考完的时间调查好教授。
2. 寄信时间
一放榜就寄,不要拖,如同上述,很多教授是以FCFS的方式在挑人,要被这些挑中的方法
只能趁早。
3. 找教授要注意的事项
一、 保持礼貌
二、 别直接敲教授的门,寄信约时间是成人年的礼仪
三、 做好功课再去面谈,别浪费彼此的时间
四、 先认识自己要做什么,找教授的标准是什么,如:两年毕业、凉 or 学得到东西、
是否能实习、薪水、meeting频率等等
五、 诚实以告,别不懂装懂,教授不笨,何况进去后要长期共事的,骗得了一时骗不了
一世
六、 面谈后记得寄一封信回复你的意愿,不论要不要去
4. 敲实验室事宜
我遇到的实验室学长姐人都很好,有的还很好笑XD,看了就很想加入他们,实验室的人很
多时候才是你真正相处的对象,记得先去看看实验室风气,还有看看是不是每个人都会被
强制要求待在实验室,很多问题也只有学长姐们才清楚,也可以打听到一些八卦,反正敲
就对了, 当然要比较有礼貌的方式是寄信约时间,但学长姐们都经历过我们这个时段,
相信他们都很愿意帮忙的。
5. 如果我真的没有任何背景,也没有任何程式经验怎么办?
诚实以告,并且做好你的读书计画和future plan这些部分,让教授知道你是有动力和学
习力的人,能考上研究所的你们都很厉害了!剩下的只要证明自己是有热忱学习的就好,
读书计画的安排就是很好证明自己的方式。
6. 跨考找教授有关系吗?
我目前遇到的教授都对我很友善,跨考不会是你的阻碍,但是千万要准备好自己考资工所
的动机再面谈,和未来进了实验室要做什么,还有自己有没有程式设计的经验等等问题的
回答,这些都是教授评估是否要收你的条件,尽可能的表达出自己的优点和要找的教授的
领域的结合,把找教授当作是工作面试一样,我们挑教授的过程,他们也在挑我们。
下面是一些面谈和敲实验室时可以问的一些问题:
拜访教授可问的问题整理:
- 想请问老师硕一的时候,主要是修课和看paper吗?还是也需要帮忙接计画呢?
- 想请问老师如果接计画的话,计画会是硕士论文题目的方向吗?
- 对硕班生的规划
- 想请问老师individual meeting和group meeting的频率?
- 进入实验室前可先学习什么
- 进入实验室后有相关的训练吗
- 请问老师暑假时间需要进入实验室预先训练吗?
- 请问老师有推荐哪本书或是期刊可以让我在开学前先充实自己的能力的吗?
- 请问老师有什么和业界合作的案子吗
- 实验室主要用什么程式语言?
可以问学长姐的问题:
- 老师是否亲自带,或是由博班生带,又或是要自立自强
- 老师常来吗?
- 老师对硕一生的训练
- 请问老师对学生待在学校的时间上有什么特别的要求吗??
- 请问老师在毕业上有设定什么门槛??
- 实验室会定期有什么聚餐或是活动吗??
- 实验室主要研究方向?
- 对研究生有何要求与一般挑战或障碍?
- 如果有正常跟着进度几年可以毕业?
- 大四升硕一暑假是否先提前进入实验室?
- 进实验室前大四下学期要先做什么安排?
- 论文题目如何决定?
- meeting方式?
- meeting一周一次?
- 毕业门槛的要求?
- 教授的个性/禁忌?
- 实验室作息?
- 课业跟研究间如何取得平衡?