前一个月我什么都没管,就抱着几本英文资料从头读到尾了,包括以下几本书:
1、Algorithms and Data Structures in C++ - Alan Parker
2、Introduction to the theory of computation (1989 gurari)
3、Operating System Concepts 5th ed
4、Introduction to the theory of computation by M Sipser(MIT)(读这本书是因为2中列出的书读得不太懂,后来才发现其实这本比2要更适合一些)
5、Discrete Mathematical Structures (Bernard Kolman 等三人) 清华大学出版社
6、Structured Computer Organization (Andrew S. Tanenbaum) 机械工业出版社
5和6两本在一个月以后也花了不少时间看,因为前一个月没有看完这两本。
对于看英文资料,我有以下几点看法:
首先我认为在考前两个月的时间大批量的这么看书其实很不划算,其实考试用到的基本上都是书中的一部分,一般不会全部都有用,其实指南一书中已经介绍了应该先看看真题,然后根据真题中出现的问题,有针对性地找书中的相关知识点来阅读,这样效果会比较好,我基本上赞同这种观点。为什么说基本上呢,这个留在等会儿在和大家说。
其次我觉得有些书还是应该全部阅读,这里我指的是4和5两本,另外我觉得编译原理应该好好的、完完整整的看看,可惜我没有找到比较好的英文教材,其次这门课我认为是计算机学科里内容最繁琐、耗时最多的一门课,最后等我意识到需要好好看看的时候,我实在是没时间看了,而且当时觉得大脑都被塞得满满的,基本上已经觉得看不进去了,所以就放下了这一块,但是这是迫不得已而为之,对于以后考试的人,我个人认为应该好好看看这方面的书。
1 计算理论 这是ETS老喜欢考,每年也都会有不少的题目考到的,而且每次考到都不是简简单单的某一个知识点,而是需要你对计算理论有系统的了解才能作答的,比如他会把dfa,pda,tm合起来出题,这样实际上整本书都考到了,但却就只是简简单单的一个题或者几个题而已。
2 离散数学结构 这么多年,ETS考很多有关集合,关系,布尔代数,格,半群和群之类的东西,近几年又老在考什么图算法,这些都在离算数学中作了介绍,所以干脆把离散数学从头到尾看看,这样大家也会放心,没有什么知识点漏掉了,而且考试的时候一般那些看到的东西都会用得上的。
3 编译原理 我觉得这一部分很重要,文法的性质,有关推导和规约方面的知识,还有内存回收,存储管理,调试链接等等方面的知识点在这门课里都有介绍,而且编译从操作系统层下面开始讲起,有助于给大家提供一个对计算机的整体认识。而且考试的时候单独靠某个知识点的也很少。今年有一题,考属性文法的性质,选项好像有什么属性文法适合自上而下推导,适合自底向上规约什么的,这些都不是书上可以找到原文的,需要你对属性文法的理解,如果你理解了,也就是看透了,那么很容易就会答出来,我就只是看了却不懂,原来虽然学过也忘记了,所以就瞎猜了一通,其实这样的题目考的就是功底了。
以上三本呢,我希望大家会在考试前重点看看。说到这里,我就想和大家说说为什么我说基本上同意指南书中的看法。这次遇到这样一个题目,问DRAM和SRAM有什么不同,其实我看过,我在6里面看到了这些东西,而且我考试的时候我还记得我明明看过,可是我就是不记得正确的选项是DRAM需要refresh every few nanoseconds了,我当时特别后悔,怎么就忘记了呢,我瞎猜了一个猜错了。说这话什么意思呢。我在备考的过程中,发现有很多我们经常来这里讨论的概念,比如reference count,garbage collection,copy on write,locality等等,其实都是计算机科目里非常基本的概念,而且我们也都学过,可就是不知道英文怎么念,这就是说其实很多题目你不会做不是你不懂计算机,而是你不懂计算机里的英文。而弥补这些的唯一的办法就是阅读英文资料了,不要放过每一个计算机里的基本概念。但是这些在考试之前作显然是不合适的啦。我在准备考试的时候也发现这样一个问题,真正关注论坛的人是马上要准备考试的人,而那些考完了,有经验的人却很少来给大家提供指导,当然我说了是很少,而不是没有,因为我还是接受了一些前辈的指点的。所以造成大部分人都是摸索,而且都好像临时抱佛脚一样,仅着那么点时间,能看多少看多少。说到这里大家可能明白了,我希望对于我没有推荐你在考前阅读的书,我希望你能早早的就好好看看,多读英文的资料,会对自己以后考sub带来很多的方便和信心。而且sub和general绝对不同,因为它涉及到的都是你本专业的基础知识,你多学一点绝对没有坏处。我这次考试也深有体会,以前遗漏的很多知识点都捡了起来,而且原来学过的东西也都在复习了一遍,而且是用英文学习的,如果我去了美国念书,这给我专业学习和交流也扫除了不小的障碍。我原来觉得考general大家功利一点无所谓,考到个合理的分数就成,至于英语到底如何,general不能代表一切。但是sub我却是另外一种看法,我觉得你越能考好一点越好,因为你会在准备期间学到不少东西,给你以后出国的学习带来很大的方便。
接下来我说说第二个月吧。我开始做题,首先试了试到底自己什么水平,一做完就傻了,错的比对的多,我一下子急了,我说这么多书都白看了,明明看到的内容都做错,当然也有没看到过的东西。此时我才觉得时间紧迫,于是赶紧把历年真题老老实实的都做了,对答案,把问题都找出来,留在后来归纳总结。我流了几套近年的题目和practice book做模考。对于题目我也说说我的建议,完整的题目大概有八九套,然后有两三套模考题,其他的比如96-2000的回忆题就可以不要了,因为在指南这本书里题目都出现了,而且回忆题一般都是中文描述,而且题目很多不完整,看了也难以看懂再说什么,这些题目一般都收录到相关的sub考试的书籍里面了,所以没有必要再单独去看他们。对于讲解类的书籍,我看了两本,一本比较老的,按照年限分类题目的,那本我觉得不如指南好,其实作者是一个人吧,而且那本书错误比较多(个人观点),所以大家尽可以看看计算机专项考试指南这本书就好了。其实我也看到很多人在给这本书的作者提建议,所以这本书以后会越写越完整,错误也会更少,而且分类个方面会更加合理,这本书作为真题指导绝对够用了。我昨晚真题后,就对照着这本书把知识点都总结了一遍,其实总结知识点还是有必要的,老是考得那些东西如果你总结一下,考试碰到会节约很多时间。比如,sorting algorithm的复杂度,包括best case, average and worst case,是否sort in place,需要的space是多少等等,还有就是在计算某个算法的复杂度时,给出了递归方程,如何求解复杂度的问题,严格的说这个问题,是一般的数学界方程的问题,但是对于一般较简单的递归方程是有公式可以套用的,这里不详述具体内容,还有比如图算法有哪些,复杂度是多少,有哪些经典NPC问题,P问题等等,都可以先准备好,考试的时候直接选,可以节约不少时间。总的来说,sub考试真题其实不算多,做起来也不会很花时间,所以大家应该把大量的时间用来巩固题目中所提到的知识点,并由此展开,给自己补充,并且注意总结归纳并记熟,基本上就算是完成任务了。