首先要说明,我很弱,从不好好学习,没有好好复习。这次能上 80% 的话就谢天谢地了。其次,这个主要是自己的总结,有很大的个人因素(实在写不出来足够 General 的东西)
. check 1point3acres for more.
UPDATE @ 19 NOV 2009 - Raw Score=62, Correct 63, Incorrect 5, Omit 2
我的复习基本上都是在 05-06NOV2009 两天搞定的,大约 20 小时。在考场上感觉复习的东西基本覆盖了。复习材料很少,Booklet + 20031010.pdf。后面那个 pdf 在附件里(现在已经不太好下载了),虽然内容比较老,但是也能用。
最 General 的一句话:好好复习基本知识,考试的时候依靠基本知识与其上的推理。.--
复习的时候集中了两个地方,排序和图论。从用处、原理、分析(主要是时间复杂度,空间复杂度应该会极少)三个方面压结识了。排序的 Bubble/Merge/Quick/Heap/Shell,图论的 Prim/Kruskal/Dijkstra/BFS/DFS/MincutMaxflow 这些,个人感觉 Wikipedia 上的知识就够了,而且很清晰。要着重于最常用、最基本的东西,CS Sub 不会有太深的。数据结构上,Graph+HashTable+LinkedList(Bi/Single)+Array+BinaryTree+一般的 Tree(比如给你一个 x-ary tree 让你回答几个性质) 差不多就够了,附带一些软知识比如 hash 函数的特点。. ----
国内很多人都花很多时间复习 theory,不过我的感觉就是 exclusively theory cs 的内容都是基本概念,语言类的只有 regular language = finite automata, cfg=push down automata,感觉经常有语言间的包含关系、判定子集是什么语言这类题目,复杂性类的只有 np-complete, reduction, np, p 和不同 class 里面常见的一些 problem。其他的 theory 基本上就是数学,尤其是 number theory。这次有个 fermat 定理的我忘记了……f*ck me,除了 fermat, 还有 gcd 和 lcm,算术基本定理(唯一分解)。
程序语言涉及 C/PASCAL/Java,本身就学计算机的话没什么好复习的(到考 Sub 的时候对程序语言基本特性不熟悉的,别说自己还想学计算机)。递规调用、迭代调用、各种条件判断要熟悉,考试的时候会有实例让你算(比较恶心的题目会有让你用人脑跑程序,which is my weak point,这个我不会干,希望有人教教我哈)。
编译器知识我觉得可以分成两类,一类是可以深入了解语言特性后自己明白的(比如这次考得虚函数 dynamic dispatch table,写程序的时候寻思寻思会变成什么底层代码就可以很容易的想到这个数据结构),另一类是跟 theory 部分 automata 很近的东西(比如 abstract syntax tree)。有些 high level 的软知识要知道,比如解释语言和编译语言的区别。主要是把常见概念搞懂,比如本段说的两个。