2019年华中科技大学计算机考研经验

 

3月18日待录取名单公布后,幸运地被“待录取”了。然后前两天去和导师面谈了,实验室基本也确认下来了。趁现在回忆一下自己的备考过程,供学弟学妹们参考,也当作纪念一下自己这一年来的努力。

 

1. 初试备考经验

我初试并没有考好,数学一,英语二以及政治的复习建议看一下知乎上一些考得比较好的同学的回答,例如这个回答:考研400分到底有多难?另外我自己的复习经历以及一些感悟如下,供参考。

  1. 数学一:华科计算机专硕考的是数学一,而且是初试里面拉分最大的科目,专业课难度不大所以拉分不大。可惜数学是我考得最糟糕的一门,所以就不想分享详细的复习经历了,这方面可以去参考一下知乎和各种论坛上面一些大神关于数学一的复习建议。
  2.  834专业课:考研初试分数占比最大的是数学和专业课,但是华科计算机专硕的初试专业课是自主命题的,难度不大,科班生的话,7月再开始复习感觉都绰绰有余,最后除开几个比较顶级的考生,大家得分差距不大。我的复习方法主要就是先看完《王道》/《天勤》,然后数据结构可以买一本习题来做一下:

    2019年华中科技大学计算机考研经验_第1张图片

      

计网注意官方通知的参考书

2019年华中科技大学计算机考研经验_第2张图片

虽然很多人都看的是谢希仁的书,但有些考试题目只能在这本书找到答案,建议看看《自顶向下》这本书。834计网喜欢考一些知识点的记忆,一些课本的重要图表最好记一下

另外834有一个很明显的特点:历年真题重复性特别高,上一年刚考完的题目,这一年改一下数据甚至原题再考一次完全有可能。起码考察的知识点基本都是一致的。所以建议围绕着真题来复习,提高效率。

3. 英语二:前期我用知米背单词这个APP来背单词,喜欢扇贝或者墨墨应该也没问题,主要是能坚持。在19年4月前我的学习量是一天100新词加上复习已经学过的单词。4月开始做真题阅读之后,我积累词汇的主要方式是做完阅读之后用欧路词典查不懂的单词然后保存到生词本,然后背这些生词。到了暑假我又把红宝书的重点词汇过了一两遍。。历年英语真题建议买张剑的黄皮书。我前期先做了英语一阅读,有些题比较难受不要害怕就好,这时候的目的是积累词汇和做题技巧。到了后期开始做英语二真题就会发现挺简单的了。如果你做英语一的阅读都觉得蛮简单,平均一套题只错了4,5道阅读,我建议减少英语学习时间,最后你考到80+估计问题不大。因为和我一起备考的一个同学就是这样,他做英语一的时候平均一篇文章错一道,最后他考前很少学英语,也考了85......总之我发现英语这东西特别吃基础,考研期间花很多时间学的话性价比其实不是很高。大作文我是看了一些王江涛的《高分写作》上面的范文和一些其他地方的范文然后自己总结了一个模板。小作文我是分类整理了一些范文来背。

4. 政治:我政治考了67。9月才开始看的《精讲精练》,但是后来感觉太厚了,不够时间看,而且感觉太多看了也记不住,就换了《风中劲草》。强烈推荐《风中劲草》,看好这本书,适当刷一下肖秀荣的《1000题》,选择题可以说没什么问题了。分析题前期不用理,到了肖秀荣出肖八肖四,赶紧买来背就行了。很多公众号会出一个精简版,可以先背精简版,然后再看熟原版的答案就好,到了考场上其实不少地方要靠自己发挥,所以很多地方自己懂得怎么表述就没问题的。马原的分析题我是总结了一下历年的考点,但是最后发现还不如直接背肖四直接和高效......肖秀荣真的太神了哈哈哈。

2. 复试备考经验

我这篇帖子估计最有价值的就是这一部分了。毕竟作为复试逆袭了100名最后被成功录取的幸运儿,我想我的复试复习规划做得的确不错。

  1. 心态问题:先说明一下,华科计算机考研存在的一个现象是跨考生挺多的,如果你是跨考生,初试考得不错甚至很好(400+),你千万别掉以轻心,你看一下前几年的录取数据就可以发现,每年都有初试高分的人最后翻车的,这部分人估计多半是跨考的。如果你是科班的,初试考得不太好,不需要太绝望,只需要继续保持紧张感,科学备考,最后录取概率还是不小的。
  2. 专业课笔试:一般情况下,数据库难度最小,是必选的。算法和汇编难度适中,建议看自己基础选择,我因为本科学过算法分析,所以选了算法。复习资料是官方指定参考书,数据库还买了一本配套习题册:

    2019年华中科技大学计算机考研经验_第3张图片

    这本书建议做一下,18年考到了上面数据库恢复那一章的补充习题,带有检查点的数据库恢复那道题。我还买了红果研出的复试资料,上面有历年真题、期末试卷和一些练习题,建议买来练习一下。复习资料就是这些,详细的复习过程以及一些注意事项我下面再说。

  3. 机试:机试是决定复试成败乃至考研成败的一个关键点,是科班生比跨考生有优势的一个地方,是跨考生必须高度重视的一个地方。华科以前的机试只允许使用C语言,考察重点是字符串的处理,偶尔会考一下算法。从18年开始允许使用C++,19年限定使用Dev-C++或者Code::Blocks编码。我个人对Dev-C++比较熟悉,所以后来就用了它,用Code::Blocks也可以。详细的复习过程以及一些注意事项我下面一起说。

  4. 英语听力和口语:考试的听力非常简单,速度很慢,选项基本就是数字等简短的词(例如17,70,14,40,就是听材料选出某个东西的数量是多少就好)。我考前练习了六级听力和四级听力,其实只需要练一下四级听力就完全超过了考试要求。所以建议每天练一篇四级听力吧。如果初试很高分,或许你可以忽略这部分复习,毕竟最后这里拉分很小(太简单)。口语我是考前写了一篇自我介绍,然后根据自己的自我介绍准备了几个问题。例如自我介绍里面提到我喜欢看电影,于是我准备了如何用英文表述自己喜欢的电影以及为什么喜欢这个电影,最后运气很好考官问到了。其实口语这一块感觉运气的确蛮重要,据说有的老师还会问专业问题,不过我考前也准备了几个,例如"What data structures are you familiar with?"和"What algorithms are you familiar with?"。再提一点就是面试一定要自信,面带微笑,即使说错了也无需纠正自己,老师有可能没注意到你这个错误的。

  5. 专业面试:我报的是金海实验室,虽然最后录取实验室不是这个,但是可以分享一下这个实验室老师喜欢问的问题。首先简历不需要,老师拒绝看简历,自我介绍就好。老师会根据你的自我介绍来提问。主要包括:你的项目经历的细节、毕业设计的情况、六级多少分、机试的情况(可能问一下你的CCF的情况)和是否接受调剂(必问的,不用担心以为是自己没希望了)。建议大家好好准备一下毕设,不需要已经完成得很好,但是实现思路一定要清晰准确,而且选题最好不要太low那种......

    接下来我详细讲一下专业课笔试和机试的复习策略,毕竟这两块是复试的重头戏。

A. 数据库

从初试结束开始,我意识到自己没考好,马上开始了专业课笔试的复习。首先是准备好了资料(看前面),然后开始看课本,同时做课后习题。由于本科学过,所以效率还是蛮高的。我把重心放在了数据库的复习上,因为我觉得算法其实你只要会那些算法设计技巧和那些经典例题,它怎么出题都问题不大。而数据库需要很多的记忆,所以应该分配多一些时间去识记吧。

数据库的重点是很明显的,我之前看过一个经验帖分析地很好,贴上来大家看一下吧:

选择题 (单选) 15 分
第一道大题:关系代数语言结合 SQL 查询(4 小问)
第一小问是给出了一个关系代数语句,让你写出结果(画一个表即可)
第二小问是根据要求写出合适的关系代数语句
第三、四小问是根据要求写 SQL 查询语句
第二道大题: Armstrong 公理,然后给出两条函数依赖关系后给出一个结
论,判断正误,正确给出你的推导,错误说明理由(5 分)
第三道大题:数据库的故障恢复(8 分)
考点主要是
第四道大题:根据文字描述写出 E-R 图(7 分)
每年的试题中考察知识点的范畴出的比较广可以从第一章绪论一直考到第
十章数据库的完整性(按找第三版目录,第五版为第一章直到并发控制那一章节),
但其实分值比较高的大题永远是出现再那几个章节(后续会针对这些问题作出说
明),当然也因为这些知识点是数据库的重点,所以不考它考啥。用一句话的点
评就是基础扎实拿分容易。
时间不够时重点复习的内容(每年大约有 40 分左右):
(1)第一章绪论中出现的概念, 2018 年就在此出了几道选择题,对这一章
中的出现概念基本上都要弄清楚是什么,一些概念之间的区别在复习时也要特别的注意;
(2)关系代数语言(单独出成题的可能性非常低)经常和 SQL 查询混到一
起考察,因为两者共性的内容比较多(比如关系代数中的选择运算就和 SQL 其
中 where 部分功能相当都需要判断是否条件为真,投影就如同 select 某列(但
是去除该列中重复属性值)), 2018 就是如此考察,比如给出某个代数查询语
句后让你给出它的结果(用表格表示)或者描述出它所代表的含义或者按照题目
要求写关系代数式子,还有一些基础的题目,例如如何使用 5 种基本运算(并、
差、笛卡儿积、投影、选择)来描述其他三种运算(交、连接和除)而 SQL 查
询出题情况就较为单一,根据题目描述来写出相应 SQL 语句,在附件中给出了
一些我复习中使用过的一些 SQL 查询语句的相关补充,基本上能独立完成给出
的这 25 条查询语句能解决复试中遇到的任何 SQL 相关试题。
(3)数据库设计那一章节中逻辑结构设计, E-R 图及其转换为相对应的关
系模式,
这道题目通常有一大段文字,首先会让你画出相关的 E-R 图,标明主码和外
码,然后通过该 E-R 图给出你的转化生成的关系模式,所以需要熟练掌握的是
E-R 图的相关概念,和转化的一些原则
(4)关系数据理论:主要侧重于对于规范化理论的考察,比如题目中给出
的关系满足第几范式,然后会评价下该范式所存在的缺点,少量题目会考察
Armstrong 公理,其后的章节基本不考。
(5)数据库故障恢复:非常重要的章节,每年都会来那么一道选择和大题
基本概念的考察常常在选择题中会出现,比如事务的几个特性,判断是什么
类型的故障大题中考察的重点,当然就会放在故障恢复策略这一块(这一小结因为结合
了之前的知识点,出题考察了基础又还比较综合,所以大题一般都会在这一块),
比如恢复时的步骤,具备检查点的恢复策略又是怎么样的,或者给你一个情景,
让你给出恢复一个方案来。
(6)并发控制:
选择题常常涉及的点比如封锁协议,活锁死锁相关的知识点,封锁的强度等
一些书中黑体标注的概念(今年选择题也有所涉及);大题常常涉及的点有比如
并发控制所带来的数据不一致性问题有哪几类或让你造出造成数据不一致性的
事务序列、并发调度的可串行性和两段锁协议,题目会给出一些序列问题为是否
可串行化

我补充一下今年数据库大题大致情况如下(可能有遗漏):

  • 关系代数和SQL语句考了一道大题,题目给了一张作者表,论文表,引用表(还有一张表忘记了......):第一小题是一个关系代数表达式的书写(题目好像是“求同时引用了1号和3号文献的论文”),如果我没做错,应该要用到交运算,虽然平时做的题很少用到,不过课后习题有用到过差运算,而且考场上我也想不出别的写法了,所以就写了交运算的表达式;第二小题考了由一个关系代数表达式写结果表(印象中是关系代数,也有可能是根据SQL语句写结果表,记不太清楚了。不过还是比较简单的);第三小题考了一个SQL语句的书写(题目好像是“求发表过10篇以上的论文,且每篇论文被引用不少于5次的作者”),我用到了嵌套查询,里面一个group by外面一个group by,不知道对不对。
  • 给了一个属性集和一组函数依赖,问属于第几范式,要求说明理由。我先把码求出来(完全按照课本的算法流程,每一步都写清楚了),然后根据各范式的定义进行判断即可。
  • 给了两个事务,问有几种可能正确的执行结果,然后要求 1.构造可串行化的调度 2.构造遵守两段锁协议且不产生死锁的可串行化调度 3. 构造遵守两段锁协议且产生死锁的调度。这道题完全就是第5版课本第11章课后习题第9题的翻版,会做课本这道习题完全没问题了。
  • 画ER图的大题,这个估计每年必考,而且不难。要求不需要画属性,只需要分清实体和联系,正确判断联系的类型即可(有点送分的感觉)。

B. 算法

往年的真题有考过课本的经典算法,所以我把大部分课本的经典算法都搞明白了,例题也可以独立完成了,还挑了一些课后习题来做。最后考试的时候只有两道大题,没有考课本经典算法例题

  • 第一题是给一个包含n各数的无序数组A[n]和一个数Z,若存在两个数X和Y使得X+Y=Z,把所有满足的X和Y打印出来。若不存在则打印"No Answer!"(可能不是这个词组,记不太清了)。我之前准备初试似乎做过这个题,做法就是先升序(题目还特意提示:“若用到排序,只需把排序作为一个基本操作,无需写出具体代码”),然后i=0,j=n-1,若A[i]+A[j]==Z则打印;若A[i]+A[j]=j时算法停止。题目要求是写出算法描述,给出伪代码并分析时间复杂度
  • 第二题是考的回溯法设计。题目是有i件物品,重量分别是Wi,有两艘船,载重分别是Z1和Z2,且题目保证  。求是否存在一种方案使得这i件物品可以装入这两艘船。例如若W1=5,W2=5,W3=3,Z1=4,Z2=9。则这样的方案不存在,输出"No Answer!"。若W1=1,W2=5,W3=3,Z1=8,Z2=1,则输出x1=1,x2=0,x3=0(xi=1表示重量为Wi的物品放入1号船,xi=2表示重量为Wi的物品放入2号船)。要求写出限界函数,给出算法的伪代码描述。

 

C. 机试

我的机试复习经验不一定适用于跨专业考生,因为我本科期间学过一点C++,对C++基本的使用还是有点熟悉的。从初试结束开始,我就先去做了牛客网上面的华科真题,然后做了搜集来的历年机试真题(03年-18年)。第一轮不限时,主要目标有两个:一是先熟悉真题喜欢考什么,二是总结可能考的但自己还没有很熟悉的基础知识(我的总结在下面贴出来)。另外我跳过了一些诸如“无冗余接受并输出”等我认为价值不大的题目。刷完第一轮之后我去看了《算法笔记》,选了一些自己认为比较贴合考试风格且自己不熟悉的章节来看,而且选做了一些觉得不错的例题。然后就开始二刷真题,第二轮每道题限时20分钟。如果无法按时完成的题目我会标注出来方便日后再复习。做完两遍真题后我开始刷LeetCode上面的难度为中等的字符串和树的题目,以及牛客网上面一些其他高校的真题我选做了一些树、矩阵操作等类型的题目。另外自己还写了一些回溯、动态规划的题目(曾考最长回文子串,要求用动态规划来做)。还做了几道蓝桥杯的题目(因为当时发现18年第三题求循环节其实是蓝桥杯考过的题目),不过后来不做了。我给跨考同学的建议是加强基础题型的训练,保证起码能做对两道题。因为有时候有一道题很多人不会,其实你不会做也问题不大。不过我是有点编程基础的,而且初试分数已经很低了,所以每分必争的。下面是我之前小结的C++上机基础,基础不太好的可以看看:

字符串与数字相互转换

  • 字符串到整数
#include 
#include 
using namespace std;

int StringToInt(string str) {
	return atoi(str.c_str());
}
  • 整数到字符串
#include 
#include 
using namespace std;

string IntToString(int num) {
	char str[100];
	return itoa(num, str, 10);
}

进制转换

  • 十进制转其他进制
#include 
#include 
using namespace std;

string DecToOther(int dec) {
	char str[100];
	return itoa(dec, str, 2);//把2改为其他数字即可转换为其他进制
}
  • 其他进制转换为十进制
#include 
#include 
using namespace std;

int OtherToDec(string str) {
	const char *s = str.c_str();
	char *stop;
	return	strtol(s, &stop, 2);//把2改为其他数字即可由其他进制改为十进制
}

排序

#include 
#include 
using namespace std;

struct Node {
	int x;
	int y;
};

//如果x不相等则按x降序排列,x相等则按y升序排列
bool com(Node &a, Node &b) {
	if (a.x != b.x) return a.x > b.x;
	else return a.y < b.y;
}

int main() {
	vector vec;
	//...给vec添加数据,略
	sort(vec.begin(), vec.end(), com);
	return 0;
}

string容器实用函数

#include 
#include 
#include 
using namespace std;

int main() {
	//迭代器访问等基础不总结了,0基础的同学可以参考《算法笔记》
	string a = "xxxyyy";
	string b = "zzz";
	string s2 = a.substr(3, 2);//取子串。s2为"yy"
	string::size_type n = a.find("yy");//n为3
	a.find("yyx");//返回string::npos
	string s3 = a.replace(0, 3, "fff");//s3为"fffyyy"
	string::iterator p = a.insert(a.begin(), '_');//返回成功插入后指向'_'的迭代器
	a.insert(a.find('y'), "_str_");//在第一个找到'y'的下标前面插入一个指定字符串"_str_"
}

set容器的使用

#include 
using namespace std;

int main() {
	set s;
	for (int i = 0; i < 5; ++i) {
		s.insert(i*i);//添加元素
	}
	s.find(4);//查找返回迭代器,找不到则返回end()
	s.erase(4);//删除
	return 0;
}

map容器的使用

#include 
#include 
#include 
using namespace std;

int main() {
	map mp;
	mp['c'] = 1;//添加元素
	mp['b'] = 2;
	mp['a'] = 3;
	map::iterator p = mp.begin();//使用迭代器遍历
	for (; p != mp.end(); ++p) {
		//输出顺序是a,b,c,因为map使用红黑树实现,自动排序的
		cout << p->first << " " << p->second << endl;
	}
	cout << mp['b'] << endl;//使用下标访问,输出2
	map::iterator it = mp.find('b');//it指向<'b',1>
	cout << it->second << endl;//输出2
	mp.erase(it);//删除it指向的<'b',1>
	mp.erase('a');//删除<'a',3>,只剩下<'c',1>
	cout << mp.size() << endl;
	return 0;
}

队列的使用

#include 
#include 
#include 
using namespace std;

int main() {
	queue q;
	for (int i = 1; i <= 5; ++i) {
		q.push(i);//入队
	}
	if (q.empty()) {
		cout << q.front() << " ";
	}
	cout << q.back() << endl;//输出队首1和队尾5
	if (q.empty()) {
		q.pop();//队首1出队
	}
	return 0;
}

控制小数点后精度位数及补齐整数位数

#include 
#include 

int main() {
	int n = 9;
	double pi = 3.1415926;
	printf("%02d\n", n);//输出09
	printf("0.3f\n", pi);//输出3.142
	return 0;
}

cctype头文件中处理字符的函数

2019年华中科技大学计算机考研经验_第4张图片

文件操作(19年考了,20基本不会考)

#include 
#include 
#include 
#include 
using namespace std;

int main() {
	//打开文件,清空内容,重新写入。ofstream::out指示以写模式打开
	ofstream out1("D\\abc.txt", ofstream::out);
	string s;
	while (getline(cin, s)) {
		out1 << s << endl;
	}
	out1.close();

	//打开文件,向文件追加内容。
	//ofstream::out指示以写模式打开,ofstream::app指示写操作前定位到文件末尾
	ofstream out2("D\\abc.txt", ofstream::out | ofstream::app);
	while (getline(cin, s)) {
		out2 << s << endl;
	}
	out2.close();

	//读取文件
	ifstream in("D\\abc.txt");
	vector vecs;
	while (getline(in, s)) {
		vecs.push_back(s);//保存到vector方便后续处理。若只需打印则无需保存。
	}
	in.close();

	return 0;
}

求最大公约数

int gcd(int a, int b) {
	if (b == 0)return a;
	else return gcd(b, a%b);
}

求最小公倍数

求得A和B的最大公约数是C,则最小公倍数是A*B / C(防止溢出可以写为A/C * B)

函数指针

//声明一个函数指针类型ptask,该型指针指向一个函数,该函数返回void,输入参数为空。
typedef void(*ptask)();

void task() {
	//...
}

int main() {
	ptask p = task;
	p();//通过函数指针调用函数
	return 0;
}

以上就是我的19华科备考经验,其实自己考得很一般,只是想尽力帮一下学弟学妹们,希望大家吸取对自己有用的内容就好,毕竟经验这种东西不一定适用于每个人。如果有学习疑惑,欢迎加入20华科计算机考研交流群,群聊号码:538393519。

 

你可能感兴趣的:(其他)