本文主要会从理论出发,给出一些经验上的总结,而非详细的备考规划。因为具体的情况不同个人备考方案也会不一样,就好比考双非二本研究生和考北大研究生的需要的知识量和理解深度肯定不一样,因而备考时间和具体方案也会不一样。
作者背景
湖北某末流双非二本,但本科期间有多项奖项,并且绩点为3.86/4.00,专业排名第一,无挂科记录。四六级分别为547与549(都不是裸考,大概都有两个月的准备时间)
考研目标为华东师范大学软件工程学院专硕,备考科目为22408,为一战考生,已经上岸。
择校经验
当初一开始择校确定的是上海交通大学,觉得自己 11408 也能考到 390 分,后来复习期间被概率论劝退,所以只能选择22408,地区又定在上海,那么只剩下了复旦大学和华东师范大学,加上认为自己有蓝桥杯的经历,所以就选择了机试更难的华东师范软专。
考研规划
数学
数学我最后考的不错,所以如果你按照我的学习方法来,你应该最后会取得一个比较好的成绩,因为我认为我的方法还算是科学可靠的。
听课学习阶段
数学永远是个大头,所谓得数学者得天下,这次也幸亏是数学救了我一命,我们投入的时间也大部分会在数学上。
首先备考期间,我跟的是张宇老师,基础课和强化课我都听了一遍,但是基础三十讲我刷了3遍
这里要讲一下,我所说的刷三遍,并不是完完整整刷了三遍
- 第一遍我是和视频课一起刷的,当老师讲到某一题时,我先暂停试试自己能不能做出来,然后再听老师讲,当然如果你没做出来,记得在题目号旁边画三角标记
(首先,只有自己做出来的才是自己的,如果听完课再写总会有种我已经会了的错觉,这种错觉在后面很可能会坏事)
-
第二遍做第一遍画三角的题目,不需要听课,如果还是不会再多加一个三角
-
第三部做第二遍也没做出来的题目
当然,张宇老师的线代基础部分其实讲的有点难,如果听不懂的同学可以选择先听李永乐老师的线代强化课(基础差的可以把基础课也学了,但是我没学,我不确定有没有必要),然后再去听张宇老师的线代基础强化课,会轻松很多
数学的学习过程,不能把每种问题分开看待,需要能在某一瞬间构建出自己的思维体系,这个时候会有一种顿悟感,也就是把所有东西串了起来,而后刷题的过程就是在不断印证或者完善自己的体系框架,以及学习一些方法技巧的过程(我不能把刷题看作学习知识的过程,应该最重要的是把基础打扎实)
刷题阶段
我选择的是660+880+1000题,而1000题我只抽取出了重点的两三百题进行练习。这里值得注意的是,选择刷什么并不重要,但是一定要选择市面上比较流行的练习册。当然,尽管如此,我还是很推荐660+880的组合,尤其是660一定要刷。
大家一定要避免一个误区,也就是认为“基础=简单”,事实上,当你做了660就会发现,基础才是最难的。所以前期打基础阶段会痛苦是再正常不过的,如果你觉得太轻松,或者太简单,那你就要反思一下,自己到底有没有提高
(对了,其实衡量数学有没有学到东西,最直观就是看自己痛不痛苦,如果学习过程太轻松,这绝对不是一个好的现象,除非你已经确定自己学的特别好)
(还有还有,要避免为了完成任务而听课刷题,比如你坐在那边听课脑子没动,那还不如直接刷题,又或者你已经会的知识点,你没必要还完整地把视频看完,只需要挑不熟悉的地方就行了)
除此之外,我推荐大家使用“欧几里得小程序”代替习题册配套的答案,因为这个小程序上面的答案比较全面而且有些题目会有一题多解,同时看答案效率也会比看课高很多。
408
408这门科目我考的不是很好,当然跟题目难也有一定的关系,我是认为这门科目有一定的运气成分在里面,因为很多题型你可能都没见过,所以对知识的掌握深度和广度都有要求,但是我可以给一些失败的经验。
听课阶段
408的知识体系太过于庞大,他最大的难点在于知识点多,遗忘的速度很快。当时我学习是一门一门学习的,于是乎出现了一种情况:“学一门忘一门”。
所以我认为,大家最好能四门一起开,比如今天学计组+操作系统,明天学数据结构+计网。听课的话,计网最好能去哔哩哔哩听【湖科大教书匠】”的课,现在计组好像也在更新,大家也可以去试一试。
除此之外,单看24考研,408的知识考查深度也在加深,所以在使用王道书的同时辅佐使用一些黑书之类的会比较好。
笔记我认为是必要的,我推荐大家使用marginnote(有ipad的同学)作为记笔记的软件,因为比较方便找构建思维体系,以及定位知识点。
软件效果如下图:
1709262175849
刷题阶段
其实市面上408的题目还是比较少的,而且模拟题质量都不高,王道的题目大家可以多刷几遍,然后历年真题以及模拟卷。其实我觉得大部分时间还是回归到知识点本身比较好,刷题也不过就是检验知识点的把握深度,其实大家也可以使用我上面推荐的marginnote去生成一些闪卡题目(这个请自行研究),这我相信会比刷题学到更多东西(当然,题目还是要刷完的,但是题目确实不多,但是如果有同学时间紧还是建议先把题目刷完再说)
英语
英语最重要的是,背单词一定要贯穿始终。
听课阶段
建议基础差的同学可以先听听田静的长难句课程,然后尝试跟着她的每日一句去分析一些长难句题目,其实学会长难句的关键在于看懂题目,很多题目都会在长难句上面下坑。
然后接下来,大家可以选择颉斌斌或者唐迟的阅读课。阅读课主要就是学习做题方法的,其实很多同学在多年的练习之下已经掌握了一定的做题方法,如果觉得自己的阅读方法正确率挺不错的也可以不看,主要是能做对题就行,阅读课只是针对看不懂的地方用逻辑推导正确的解法的。
刷题阶段
英语其实主要就是刷历年真题阅读就行了,一天一到两篇阅读即可,但是一定要精读
当时我一开始是先看完一篇文章写好题目后,再自己用笔记软件翻译一遍,然后再做一遍。如果第一遍错了,第二遍对了,说明是文章没看懂,如果不管第一遍对没对,第二遍错了,说明不仅文章没读懂,阅读方法也有问题,
然后大家照着自己的弱点专项练习即可。
下面是我英语阅读练习的模板:
政治
听课阶段
如果有时间,可以选择早开政治,听课只能去加深一些你对知识点的理解,但是政治方面的听课作用不是很大,所以听课可以当成一种娱乐方式吧,就是放松的情况下听一听
刷题阶段
刷题阶段,推荐大家去刷肖秀荣的《1000题》,其实政治背书也大部分是为了选择题部分能拿高点的分数,所以其实不如多刷几遍题目巩固的更加深入。还有刷题可以使用小程序刷题,一般小程序刷题可以看到评论区有一些比较好的记忆方法。
冲刺阶段
很多同学可能都会比较担心分析题背不完什么的,但是其实这次考试下来感觉,背书用处不大,因为分析题这块分数差的不是很大,我背了十多天跟人家背了一两天考出来的分数其实差不多,所以如果各位觉得自己其他三门已经很好了,那么可以多给些时间给政治分析题的背诵,但是说到底,最重要的还是政治的选择题。
当时我做肖四肖八选择题均分才28,最后考试考了46,可以说,所以不用对于肖四肖八的选择题分数太过于慌张。
复试经验
复试的内容主要是机试+面试(分专业面和思政面)
机试
机试题没怎么看到常规的算法题,也就是仅仅听了acwing 的算法课可能没什么用,还是得靠长时间的训练。我站在一个没有 acm 经历的学生角度来看,今年机试题对应到 leetcode 大概是 3hard 或者 1middle2hard,没有签到题,但是可以暴力骗分(但是暴力也要有技巧,没那么简单,也就是也要有一定的算法经验可能才能暴力)
以下是机试的题目,分为预备赛和正式赛(实际上是因为出现故障所以换了套题目, 原先题目作为了热身题)
小花狮与藏宝洞
描述
小花狮在寻宝的时候发现了一个藏宝洞!藏宝洞里总共有 n 个宝箱,每个宝箱有一个属性 pi ,一个魔法值 ai ,里面装着 bi 个金币。
小花狮仔细观察了宝箱,发现宝箱的属性只有三种,分别是 &,∣,^ 。
假设小花狮当前金币数为 x,如果打开 & 宝箱,小花狮的金币数会先 按位与(and) ai ,再加上 bi ,金币数变为 (x&ai)+bi ;如果打开 ∣ 宝箱,小花狮的金币数会先 按位或(or) ai ,再加上 bi .金币数变为 (x∣ai)+bi ;如果打开 ^ 宝箱,小花狮的金币数会先 按位异或(xor) ai ,再加上 bi ,金币数变为 (x⨁ai)+bi
小花狮初始有 0 个金币,他可以按照任意顺序打开宝箱,请你告诉他最终最多可以拥有多少金币,所有宝箱要全部打开且每个宝箱只能打开一次。
输入描述
第一行输入一个整数 n,表示宝箱的个数。
接下来 n 行,每一行输入一个字符 pi 和两个整数 ai,bi ,表示每个宝箱的类型、魔法值以及金币个数。
输出描述
输出共一行,包含一个整数 ans,表示能获得的最大金币数量
用例输入 1
3
^ 5 1
& 0 8
| 10 2
用例输出 1
16
提示
对于 50% 数据,保证 1≤n≤5.
对于所有数据,保证 1≤n≤10, pi∈{ & , ∣ , ^ } , 0≤ai,bi≤109 .
小花狮与消消乐
描述
小花狮有一个排成一排、长度为 n 的积木序列,每块积木都有各自的颜色 c,我们用一个 [1,k] 之间的正整数来表示,于是这些积木的颜色构成了一个序列 c1,c2,…,cn . 小花狮能执行若干次操作,每次操作能从序列的头部拿走一段连续的积木,记 x 为这段积木中颜色的种数,那么这次操作的得分为 x3 . 当所有积木都被拿走后,最终得分便为每次操作的得分之和。请问小花狮在消掉整段序列后,最终得分最大是多少呢?
输入描述
第一行两个整数 n,k.
第二行 n 个整数 c1,c2,…,cn .
输出描述
一个整数,代表小花狮的最大得分。
用例输入 1
5 3
1 1 1 2 3
用例输出 1
29
提示
对于 30% 数据,保证 1≤n≤2000 .
对于所有数据,保证 1≤n≤105,1 ≤k≤100 .
小花狮与字符串
描述
小花狮喜欢研究字符串。最近,小花狮发现了字符串的奇妙性质:对于一个字符串对 {s1,s2},记 s1,s2 的最长公共前缀长度为 k,那么这个字符串对就能为小花狮带来 1+2+⋯+k=k(k+1)2 的快乐值。对于一个可重字符串集合 S=s1,s2,…,sn (允许一个字符串出现多次),小花狮会将其中的字符串两两配对,计算每一个字符串对的快乐值并求和,最后就得到 S 带来的快乐值啦。
小花狮现在要维护一个可重字符串集合 S. 初始时 S 为空,接着小花狮会进行 q 次操作,每次操作为以下两者之一:
1 str
: 小花狮向 S 中加入字符串 s t r
2 str
: 小花狮从 S 中移除字符串 s t r (保证此时 S 中至少有一个 s t r)
请你在每次操作后,帮小花狮计算 S 带来的快乐值。
输入描述
第一行一个整数 q,表示操作的次数。
接下来 q 行,每行一个整数 opi 与一个字符串 stri ,表示操作的类型与要加入/移除的字符串。保证 stri 中只包含小写英文字母。
输出描述
q 行,每行一个整数,表示该次操作结束后字符串集合 S 带来的快乐值。
用例输入 1
4
1 abc
1 abc
1 abd
2 abc
用例输出 1
0
6
12
3
提示
在第三次操作后, S={abc,abc,abd} . 为了方便起见,我们将两个 abc 分别标记为 abc1 与abc2 . 在 {abc1,abc2} 这个字符串对中,两个字符串的最长公共前缀为 3,因此其带来的快乐值为 1+2+3=6. 而另外两个能组成的字符串对是 {abc1,abd} 与 {abc3,abd} . 它们中所包含的两个字符串的最长公共前缀都是 2,因此它们带来的快乐值都是 1+2=3. 综上,整个集合带来的快乐值便是 6+3+3=12.
对于 30% 的数据,保证 1≤q≤100 并且 ∑i=1q∣si∣≤100 .
对于所有数据,保证 1≤q≤3×105 并 ∑i=1q∣si∣≤3×105 .
基建高手
描述
现在有 n 条赤金生产线,第 i 条生产线在启动后,每 ai 分钟可以产出一块赤金。在 t=0 时刻,所有赤金生产线同时启动。现在你需要找到一个最早的时刻 T, 使得在 0 ~ T 的时间中,产出的赤金块数不小于 k.
输入描述
第一行两个整数 n 和 k.
第二行 n 个由空格分隔的整数 a1,a2,…,an .
输出描述
一行一个整数 T.
用例输入 1
3 3
1 1 1
用例输出 1
1
用例输入 2
3 3
1 2 3
用例输出 2
2
提示
对 40% 的数据 1≤n≤20,1≤k≤100,1≤ai≤10
对 70% 的数据 1≤n≤103,1≤k≤105,1≤ai≤103
对 100% 的数据 1≤n≤105,1≤k≤109,1≤ai≤109
我的代码
#include<bits/stdc++.h>
using namespace std;
const int N = 1e5+10;
int n,k;
int a[N];
int times[N];
int cnt = 0;
int main(){
cin >> n >> k;
for(int i = 0;i < n;i ++){
cin >> a[i];
times[i] = a[i];
}
int time = 0;
int minT;
while(cnt < k){
minT = 0x7fffffff;
for(int i = 0;i < n;i ++){
minT = min(minT,times[i]);
}
for(int i = 0;i < n;i ++){
times[i] -= minT;
if(times[i] == 0){
cnt ++;
times[i] = a[i];
}
}
bool flag1 = false;
for(int i = 0;i < n;i ++){
if(a[i] != times[i]){
flag1 = true;
break;
}
}
if(!flag1){
time = k / cnt * time;
cnt = k/cnt * cnt;
}
time += minT;
}
cout << time;
return 0;
}
得分:70
计数问题
描述
给定n个整数 a1,…,an
问 [l,r] 中有多少数x,满足 ∃i,x%ai=0
输入描述
第一行给定测试组数T。
对于每组测试数据,第一行给定三个整数n,l,r,第二行n个整数,表示 a1,…,an 。
输出描述
T行,每行输出一个整数,表示答案。
用例输入 1
2
2 5 20
2 3
3 201 1120
3 7 11
用例输出 1
10
443
提示
T≤10,n≤15,2≤ai≤106,1≤l≤r≤109
对 50% 的数据, r−l≤105
我的代码
#include<bits/stdc++.h>
using namespace std;
const int N = 1e8 + 10;
int T;
int n,l,r;
set<int> flag;
bool flag2[N];
vector<int> a(20);
int main(){
cin >> T;
while(T --){
memset(flag2,false,sizeof flag2);
// flag.clear();
int cnt = 0;
a.clear();
cin >> n >> l >> r;
for(int i = 1;i <= n;i ++){
cin >> a[i];
}
for(int i = 1; i <= n;i ++){
for(int j = l/ a[i] * a[i];j <= r;j += a[i]){
// if(j >= l && flag.find(j) == flag.end()) {
// cnt ++;
// flag.insert(j);
// }
if(j >= l && !flag2[j-l]){
cnt ++;
flag2[j-l] = true;
}
}
}
cout << cnt << endl;
}
return 0;
}
得分:50
排列删除
描述
给定一个长度为n的排列p,你可以删除序列中的一个数当且仅当以下两个条件中的一个成立:
- i=1
- i>1,pi−1>pi
你可以重复执行删除操作,直到p为空。
现在有q次询问,每次询问给出x,y,你需要回答 px 能否在 py 之前被删除。
输入描述
第一行给出n。
第二行给出n个正整数表示序列p。
第三行给出q。
接下来q行每行两个正整数x,y表示询问。
输出描述
q行,每行输出Yes
或No
表示询问的结果。
用例输入 1
7
1 3 7 5 2 4 6
4
3 1
2 5
7 4
6 4
用例输出 1
No
Yes
No
Yes
提示
对于 40% 数据,保证 1≤n≤5000 .
对于所有数据,保证 1≤n,q≤100000,1≤x,y≤n,x≠y .
我的代码
#include<bits/stdc++.h>
using namespace std;
const int N = 1e5+10;
int n,q;
vector<int> p;
int tmp;
int main(){
cin >> n;
p.resize(n + 1);
for(int i = 1;i <= n;i ++){
cin >> p[i];
}
cin >> q;
while(q --){
int x,y;
cin >> x >> y;
if(x < y || p[y] > p[x]) {
cout << "Yes" << endl;
continue;
}
int flag = false;
for(int i = y + 1;i < x;i ++){
if(p[i] > p[x]){
flag = true;
break;
}
}
if(flag){
cout << "Yes" << endl;
} else{
cout << "No" << endl;
}
}
return 0;
}
分数:100
面试
面试都是一个大桌子,你坐在这边,老师们坐在对面
思政面
就是老师跟你简单聊聊家常,看你这个人正常不正常,比如问你为啥选这个学校,大学干过啥工作,正常聊天就行了
专业面
没有口语(所以导致我天天找 gpt 练口语,结果都没用上。。。) ,上来先 ppt 做自我介绍,介绍完老师让你抽信封,阅读英文片段并且翻译,我读的翻译得都很烂,但是老师好像不是很 care 这个。
专业面是怼着我的简历问,感觉都是越问越深,直到你回答不出来,看看你的深度到哪,我是没有被问到简历以外内容的
不过据说有跨考的被问了软件工程的问题