2020 年上海交大软件工程专硕的考研笔记。
数学和专业课笔记内含 LaTeX 公式,建议 iOS 上使用 MWeb 查看、电脑上使用 VS Code 预览。
先说一下初试分数:政治 75,英语 80,数学 121,专业课 139,总分 415。
再说一下我的个人情况:我从初中开始自学编程,在大学主要也是自学,没怎么听过课,学校是普通双非本科,教学质量一般,从小英语学得不错,大一上下学期分别裸考通过四六级(四级 624,六级 546),从高中开始一直到大学数学都没认真学,比较菜。
如果你和我的情况差不多的话,下面的经验也许可以帮到你;但如果你和我的情况很不一样,这些经验不一定有用,甚至可能误导你,请自行斟酌。
我从 2 月底开始复习,直到考试差不多整整 300 天。前几个月因为要上课,耽误了一些进度,6 月开始比较疯狂,到后期有些疲惫(无论是生理上还是心理上),但最终坚持了下来。
总体上来说,有以下这些经验:
- 搞清楚为了什么考研,然后下定决心,不要半途放弃
- 放下其它的一切事情,即使它们很重要
- 可以不用很早决定目标学校,但要想好几个备选
- 从一开始就给自己定下各科的目标分和保底分,并随着复习不断更新
- 每一轮复习结束后,想办法评估自己此时的水平
- 饱和式复习,把每一科都复习到极致,即使某些可能已经达到目标了
- 除非特殊情况,否则每天去图书馆学习
- 制定详尽的复习计划,以周或若干天为单位,让每一天都有事做
- 根据自己的熟练程度、进度的紧迫程度,及时调整学习方式和计划
- 保持谦虚和低调,即使觉得已经稳了
可以总结为:努力、专注、坚持、计划、低调。
其实最重要的就是要明确自己在干什么,自己到底是什么水平,对自己要有清晰的认识。我复习时候给自己定的目标分是政治 70、英语 79、数学 120、专业课 120、总分 389;考完之后估分是政治 70、英语 80、数学 100、专业课 133、总分 383;真实分数是政治 75、英语 80、数学 121、专业课 139、总分 415。可以看出,我在考前对自己的判断和最终考试结果还是比较接近的(事实上考前的定目标和估分时,我故意低估了自己)。而饱和复习的结果就是,即使真的有一门课发挥失常(比如我考试时以为数学炸了),最终分数也令人满意。
数学可以在知乎上找一找复习经验,基本上总结得很好了。这里想强调的就是,数学真的是所有科目中最重要的一门,也是最飘忽不定的一门。要想考好,首先一定要打好基础,如果时间充裕的话高数最好刷一遍同济版教材,而不是直接去看考研辅导;然后就是一定要疯狂刷题,并且做好错题归纳和总结,我几轮复习下来一共刷了 3000 多道练习题(有一半是高数书上习题,属于小题),并且做了从 1987 年开始的所有历年真题,就这样我在最后都感觉不是很稳,应该是因为错题总结做得不够好,个人建议可以只刷 15 年真题,并且做好整理和总结。
除此之外,考试时得状态也非常重要。我做真题的时候几乎每一份都是限时做完(基本在 2 个半小时完成),但真的考试的时候,一旦有某题卡住了,整个对时间的概念都会有影响,紧张感会导致根本想不出解法,即使题目并不算难。所以,考试时一定要冷静。
最后,如果考试的时候真的无法冷静,做来做去发现大题没有几个完整会做的时候,一定要根据剩余时间情况,选择「性价比」最高的题,深呼吸,开始头脑风暴,把任何能推出的可能有关的式子都写上去。比如我吧,我的大题除了高数前两题和概率第一题之外,没有一题是完整答完并且检查没问题的,但是最后我把能写的式子都写上去了,尽量把试卷填满,我以为只能考 100 多,没想到考了 121。
825 软件学课基础总体来说考得比较简单,下面分科目讲一下。
软件工程考的比较简单,以书本上的内容为主。个人认为重点有这些:
- 软件过程:常见的软件过程的特点,其中敏捷软件过程比较重要
- 需求工程:FURPS+ 模型似乎考过好几次
- 设计工程:设计模式非常重要,考过好几次,需要能够说出特点并举例,今年考了架构风格,建议也要熟悉常见的架构风格
- 结构化方法:实体关系图和数据流图最好跟着书上画一画,虽然似乎只考过一次,但还是可能考的
- 面向对象方法:重中之重,最主要是用例图、类图,几乎必考,应该信手拈来;用例、类之间的关系(泛化、关联等)的识别也会考;类和包设计原则最好也看一看,可能会给出例子让比较或优化
- 软件测试:几种测试的概念,常见的白盒和黑盒测试;控制流测试和基本路径测试是最重要的,应该要会编写实现各种覆盖的测试用例
- 其它:除了上面给出的重点,其它部分可能主要考简单的名词解释,认真看一遍书应该问题不大
复习时建议结合平常写项目和使用软件时的体验来记忆,可能效果会好一些,比如设计模式和架构风格那块,我在复习的时候感觉给自己项目中的很多做法找到了理论支撑。
另外,书后的习题感觉没必要做,重点部分跟着书上给的例子做一遍(比如用例图、类图那块),之后再拿真题练习就 OK 了。
ICS 也是主要考书上内容,题目基本和书上习题差不多,建议至少刷两遍,其中第 2 章(信息的处理和表示)的书后题比较多,感觉没必要全刷,把内容中穿插的题刷掉就差不多了,第 8、9、10 章有的题是编程题,建议在电脑上动手写一写。
本科 ICS 课的作业和试卷也比较有用,不过比考研题目难一些,建议最后刷一遍就好。
去年这门课的参考书是邓俊辉老师的《数据结构》,是本很不错的书,我先用这本书复习了一遍,后来今年参考书改成了《C++程序设计:基础、编程抽象与算法策略》,其实总体上区别不大,都是用 C++ 实现常见的数据结构和算法。
数据结构基本不太可能直接考书上的内容(但书上内容还是很重要),一般就是考几个算法题,一部分可能只需要写算法描述,一部分可能需要写出完整代码,然后让分析复杂度,题目还会分成多问,第一问让写基本方法,第二问让提出优化之类的。总体难度不大,相当于把书上的算法做一点调整的程度,比如今年的 Top K 问题就是快排做一点修改。我刷了 LeetCode 热门 100 题里的简单题和一部分中等题,然后看了《王道数据结构》和《算法与数据结构考研试题精析》里几个重点章节(栈、二叉树、堆、排序)的部分算法题的思路(它们的选择题没什么用),感觉很有用。
个人认为算法题需要重点关注栈的应用(求排列、组合、栈混洗等)、递归(包含/排除模式、二叉树的各种递归操作)、二叉树的遍历(各种遍历的递归和迭代方法)、堆(建堆和增删)、排序(各种排序的性质和实现,以及稍加修改的变体)。
值得注意的是,虽然近年算法题比较简单,但在 2016 年曾出现过动态规划的应用题(完全背包),相对来说稍难一些,建议也最好熟悉一下,可以参考《背包问题九讲》。
英语我能给的经验有限,如果你的英语水平大于等于我,那就随便复习就可以了,可能主要需要注意的就是下面这些:
- 真题很重要,要认真做,关注其中不认识的单词和短语表达(有些往往会重复考)
- 留几份真题在最后隔几天做一份来保持状态
- 背单词对阅读中的某些题会有用,还是比较值得的
- 作文还是要好好练一练的,毕竟平常主要还是听和看比较多,写起来会有点不同
- 那些什么某某模拟题、阅读理解XX篇、阅读理解技巧啥的,没什么用,别浪费时间了
我个人理解英语复习是有极限的,即使整篇文章能完全看懂,有些题还是会错的。总的来说历年真题的平均分会跟最后考试得分差不了多少,我是从 2005 年的开始做的,客观题平均扣 8.2,再减去作文和翻译的扣分,差不多就 80 左右。
如果你一直觉得英语很烦,成绩本来就不太好,那还是老老实实跟个老师的课学吧,多看看长难句。
还有一个有趣的事情是,我在复习的时候全程都是用 iPad 做英语真题的,到真的考试时候,试卷是一个小册子,让我一下有点懵,读起来的感觉是不一样的。所以建议在最后阶段还是把剩下来的真题打印下来做,会更有实感一些。
政治分为选择题和分析题,其中选择题是重点,因为是客观打分的,而主观的分析题很难拉开大差距,尤其是在北京、上海之类会压分的地区。
选择题我主要是刷了一遍徐涛强化班视频,全程几乎没有记笔记(记了一点点也没看),配合刷肖 1000(毛中特部分没刷完),然后去做徐涛优题库真题版,先按章节做了一遍,最后考前按年份做了一遍,同时刷了肖 8、肖 4 的所有选择题,全都控制在 25 到 30 分钟完成(因为我写字慢,要给分析题留很多时间),还刷了几份徐涛和腿姐的模拟卷的选择题。另外 12 月还粗略刷了一遍风中劲草,只看了重点部分(大约花了十几天,平均一天半小时左右)。还看了金柳安的重难点精讲,但是感觉没什么用。最后考试时候觉得单选有点难,但对答案发现选择题总共只扣了 6 分左右(单选多选各错两个,可能有记错的会有一点点误差)。
分析题方面,非常不建议无脑背肖 4,因为就算背完了 4 套,最后能直接默写作为答案的最多 3、4 个小问(今年只有 3 小问是能直接写的),而这种背诵会浪费复习后期大量的时间。我分析题主要跟了金柳安(不是很出名),重点就是他的「分析题答题思路」和「终极点题」两个课(前面说了,「重难点精讲」没什么用),再结合历年真题和肖 4 第一套,自己写个几题(我写了一共 10 题左右吧,相当于两套卷子),就能总结出适合自己的答题框架。当然最后也不是完全不背,只需要考前几天背一下马原会用到的原理、毛中特和史纲的几个可能考的点(金柳安的终极点题会给出 PDF),主要还是马原,毛中特、史纲、思修、当代基本都是完全类似的套话,然后考试的时候根据材料提炼几句,按照答题思路写得很顺畅。
我 10 月初国庆之后才开始准备政治,总结来说,打基础比较有用的是徐涛强化班、肖 1000,选择题比较有用的是优题库真题版、肖 8、肖 4、风中劲草彩色打印部分,分析题比较有用的是金柳安的答题思路和终极点题。
最后,我觉得挺关键的一个点是,不要把政治仅仅当成是一个需要应付的考试。政治课的内容,尤其是毛中特,都是我们所处的国家真真实实的政治制度,即使不考试也是值得我们去了解的,很多人天天说国家这里不好那里不对,可是他们(包括曾经的我)根本就没有去仔细了解我们的国家是怎么运行的,根本没有参与政治的意识。当你渐渐体会到共产党的执政风格、它所在乎的重点的时候,很多题通过推理就可以选对,根本不用死记硬背。