南大浙大推免之旅(鸽了北航复试)

还有学上真是万幸呐

Posted by Dongbo on September 29, 2019

在等待系统开放的晚上,终于可以把博客写一下了。当晚应该弄不完,不过起码把想写的东西先写下来,以防时间久了忘记细节或者回到学校之后开始颓废。之前在不少前辈的博客里得到了很多帮助,所以我也希望自己的一些体会和经验希望能够帮到学弟学妹们。可能很唠叨很像流水账,还请大家见谅。

从决定要争取保研到现在,走了不少弯路,真真就是靠着头铁一路莽过来。由于无知、挑剔和懒惰,以及今年推免生比例缩减等种种原因,差一点就面临无学可上、在保本校和工作的死亡选择题中二选一的结局,有段时间我甚至已经看见 Bad End 的字幕滚动了。最后能够侥幸录上浙大计科,结果已经远超当初的预期了。虽然现在又想着要是当初我再努力一点,会不会就不是专硕而是学硕了呢ww

保本校和直接工作其实也不错,但不是我目前想要的结果。大二开始决意要保外校,如果失败了,那我的付出那些算什么啊。不过现在想来,好像也没有什么特别努力的样子,没有特别明确的目标,只想离开这里;学习全凭兴趣和心意,能有学上可能是靠以往的积累和一点运气吧。在浙大的面试完之后我更加真实的感受到了这一点,之后再详细说明。

对于在犹豫该读研还是工作的同学,我现在也没法告诉你本科毕业工作和硕士毕业或者博士毕业之后工作的体验有什么不同,可能到那个时候我还会来更新一下吧;如果是决定读研但是还没有明确方向,单纯觉得比起工作更想读研究生的同学(像我一样用学费和本应有的工资给快乐续费三年吧),在大二大三时候,跟老师做项目做科研也好,自己自学也好,尽量发掘自己的兴趣方向。总之尽量避免随波逐流,看到周围人参加这个那个竞赛,就跟风参加;又或者看到大家都在搞机器学习,也跟着一起学,但是学得不深不细,最后老师一问什么也答不上来这种。最开始尝试着玩一玩,当做拓宽知识面是可以的,但是要在玩的过程中明确自己的方向。

如果是犹豫选什么学校的,可以拉到文末,看看我选择学校(虽然最后也没得选)的心路历程,说不定对你有帮助;

如果你已经有明确的目标了,比如已经想好目标学校和研究方向了,那么朝着目标努力就好。也可以偶尔来这里看看这么菜的我,找找自信。但是备胎学校也是要找的,做好冲击第一目标失败的最坏打算。

下面进入正题,说说我参加夏令营和预推免的经历。

南京大学

我参加的是七月南大的夏令营(本科生开放日)。南京是个挺好的地方,南大给我各方面的印象也都挺好的,遇见的老师都很和蔼,机试面试时候感觉挺人性化的,以及住宿开的是四星酒店啦,邮件单发啦(后来才知道有群发单显,但是其他学校连这个都不没做),邮件还附上了地图指出详细的报道路线之类的。不过实在由于自己太菜又准备不足,没能够拿到offer,也没能好好体验一下南京的风光。我们这一届最后去南大的有那么四五个,不过都不是熟到能一起胡吃海喝的程度,可惜可惜。

南大机试面试占比是1:1,但是机试200分以上面试应该是很稳的。是我在面试后联系的老师跟我说的,原话是

机试不够200分的,推荐找好备胎。

所以听到1小时ak的大佬在群里说老师面试问他最喜欢的明星是什么这种水问题也是意料之中…艹,我要是再强一点会是今天这个吊样.jpg 总之南大的机试我做的很差,三道题300分拿了110,前两道题都没做完,只过了一部分测试点,机试出来就觉得没戏了。网上找到两道原题,贴一下搜到的题解。

  • 第一题
    给出一个最多100位的十进制数字,问从其中删去K位后得到的最小数字是什么。贪心,参考题解。听说暴力搜索能拿70分,没试,血亏。
  • 第二题
    回溯+剪枝。给出男孩和女孩的人数,规定两个男孩之间不能相邻,问有多少种不同排队方法。不计排队的顺序,即男孩A->女孩->男孩B等同于男孩B->女孩->男孩A。题解没找到。
  • 第三题
    给出二叉树的前序和后序遍历,问有多少种不同的中序遍历结果。其实简单,但是我不会,参考题解

第二天面试的表现也是糟糕透顶,小组倒数第二进场,从8点等到了快11点才轮到我。要命的是我还把我的序号记差了1号,没有在门口候场,要记录员到外面走廊找我,然后进去的时候有两个老师很不高兴的样子。虽然我很想吐槽一下要我们在门口候场但是连一张椅子都没有,但是毕竟也是我记错序号的错,只能连连道歉,然后开始面试。

第一个老师先让我列举了几个排序算法的复杂度,然后开始问我赛马场问题,跟这里的问题差不多,换成了9匹马3条赛道,问我要比多少次得到最快的3匹。我说先分成3*3组,每组组内比赛选出最快的1匹,得到的3个小组第一进行比赛。老师问,然后呢,还要比几次?我当时真是脑子抽了连这种明显的暗示都没听出来,说就选完了。老师又暗示了几次,我还是没转过弯来。然后老师说这个问题你回去再看看吧,就开始下一个问题了。第二位老师问我研究生毕业之后有什么打算,我也就如实说了想要就业(真实老实人),扯了一些有的没的,然后又问我数据库同时读写的时候,如何进行并发访问控制,我也没怎么复习,只答了一个加锁,老师也没追问我。(后来才发现一共有基于锁、基于时间戳、基于有效性验证三种)最后一个老师直接问我离散学过没,学过说说都学了什么。我真的是一点都没复习!之前都在练机试和复习概率、线代去了,凭印象说了几个章节的标题,具体内容一点都想不起来。老师就改成让我英文描述堆的性质。我组织了一会语言,磕磕绊绊的回答了。

面试到这里就结束了,表现得是真的非常糟糕。首先记错序号没有候场这一点就已经严重减分,然后准备不充分、问的问题基本答不出来或者答不全面;居然有人对简历上的项目都不熟,面试也没练习过,专业课没复习多少就敢参加夏令营,现在想想也是佩服自己当时的勇气了。不过,多少知道了复试大概是什么形式,算是积累了经验吧。

浙江大学

一开始我根本没有想过我去浙大的可能性,毕竟浙大高出我高考分数的层次太多了,报名也只是随手报着试一下,刚收到初审通过进入复试的通知那会甚至还在打游戏。下线之后仔细想了一下,杭州,浙江,啊浙江卷,知道了!是那个高考题目古古怪怪、我连题目都看不懂的卷子但是他们还能答满分的地方,是那个英语阅读巨长、题目我基本没全答对过的地方。这么一想,感觉被录上的希望又小了几分。所以在去浙大前一天先参加了本校的复试作为保底,虽然不是很想留在本校但是多少留条后路。到杭州之后,找到住宿地方安顿好,跟同学逛了逛玉泉校区,大概是因为跟同学唠了挺久,看到同学挺放松的我也没那么紧张了。

然后第二天下午去紫荆港校区准备机考。路上意外得知有一个高中同学在紫荆港。这人之前明明去了北大医学部,怎么又回去复读来浙大了。还想蹭他两顿饭的,结果食堂可以用支付宝加一点额外手续费支付了,没蹭成。我还跟他说如果我能留下来的话要天天拉他出去上网来着233。在走去计算中心机试的路上,不由得感叹紫荆港校区看起来是真的豪华啊,感觉就算留不下来,当作来玩一趟也不亏。

浙大今年是第一次需要机考,题目与PAT甲级难度一致,要求相同,也可以用当年的PAT甲级或顶级成绩代替机试成绩。

PAT的题目练习可以到他们官网上找,甲级题目也才一百多道,全做完捋一遍是最好的(我只做了十几道,因为之前刷的是Leetcode洛谷)。官方给出的上机环境IDE有 dev c++ 和 codeblocks,实际上机房电脑里还有 vs2017。codeblocks 的版本是17.1往后的,不是官网说的16.01;没有设置 debugger 的路径,导致我一度没法在 codeblocks 调试,回来之后查了一下发现设置很简单,但是没设置过不懂(摊手);然后vs用freopen读取输入之后,调试窗口直接一闪而过,确认了好几次断点没问题之后还是不知道怎么解决;并且不知道为什么,鼠标右键点击黑框没法弹出win7应该能看到的粘贴菜单,让我怀疑我鼠标的右键是不是被抠掉了。

最后调试的输入还是得手动一个个字符的敲,不过问题不大。

这次复试的机试题在拼题A教育超市上架了。隔了几天用例和一些细节记得都不是那么清楚了,大概说一下题意吧。

  • 第一题,Happy Number,把一个数字的每一位求平方,然后相加得到一个新数字,比如19,运算一次为 $1^2+9^2=82$,第二次是 $8^2+2^2=68$,不断进行下去如果能得到1,那么这个数字就是 Happy Number,输出从原数字得到1所进行的运算次数(称为度数);若进入循环无法得到1就是 Sad Number,输出循环部分的第一个数字。 这题我有一个测试点一直到最后也没通过,扣2分。

  • 第二题,把一个数组按照蛇形排列的方式输出(是这么翻译吗,我翻译太渣了将就看)。第一行先输入元素的总个数N和输出的每行元素个数M,第二行是这N个元素。

    1
    2
    3
    4
    5
    6
    7
    8
    
      input:
      10 4
      1 3 4 6 2 5 7 8 10 9
    
      output:
      1 2 3 4
      8 7 6 5
      9 10
    

    输入不保证有序,sort()排序一下就行。要注意输出格式,每行的最后都不能有多余空格。

  • 第三题,给出二叉搜索树的前序遍历,问该组数据满不满足AVL树的平衡条件。只要能够根据搜索树的前序遍历正确的建树,这题应该还比较简单。Leetcode上有类似的给出二叉搜索树前序遍历建树的题目,没记错的话应该是道序号1000往后的中等题,可以去搜搜看。

  • 第四题,求朋友圈中人气最高的三个人。就是给出一个无向图,求某个给定的子图中度数最大的三个节点。 这题需要注意的是节点和边的数据量比较大,5w还是5k来着,现在记不清了。反正邻接矩阵会爆内存,用邻接表之类的就没问题。

我左边有个神仙,1-2考场80号机,40分钟ak,而且这还包括了客户端崩溃不能读题提交的10分钟。神仙交卷走人的时候真是吓死我,让我觉得我可能一题都写不出来了。这位神仙除了读题时间那短暂的一小段时间外几乎没有停下过敲键盘的手,看来是几乎没有调试,而且读题速度还比我快很多倍,手速还比我快。哭了,这就菜鸡(我)和大佬的区别吧。以后还得继续练习呀。

整体感觉确实如通知所说,难度跟PAT甲级基本一致,时间也挺充裕的。我做这么慢还两个IDE来回切换调试还能做得差不多。只要平时有在练习上机题,PAT的题目也多练一练,应该能拿到一个不错的成绩的。(顺带一提,交卷的时候看排名,满分大概有90个,98分大概三四十个,是报名计科和软院、并且参加机试约400人的统一排名)

机试说完了还有面试。这是复试中分数的大头,面试拿到高分可以弥补机试中的一些失误,据说今年录取的人里最低机试分数是78分,所以机试没发挥好的也不要失望,争取一下还是有机会的。

面试的时候会抽红白纸各一张,上面有关于计算机学科的各种英文资料,红纸上的通常会难一点,可以用前一个人面试的时间阅读这两份材料,听说不给用手机,但是我看到第一个人面试前用手机查了查,也没人制止他。但是到我的时候助管一直就坐我边上,没敢查(后来发现并不需要,红纸查了单词也看不懂概念,白纸不查也能看)。我的白纸上是三段没有关联的节选,大概讲了B语言的历史, preprocessor 的作用和C语言的不定参数,纯粹介绍而已,应该只是考察阅读英文资料能力和口语。 红纸上是关于 function dependency 的一些我看不懂的东西。草草做了点笔记,红纸还没看明白就到我进场了。

一进门五个老师坐在教室第一排,姑且按照从左往右编号ABCDE。我的座位就几乎没有间隙地紧贴着第一排的桌子,近到你能伸手在老师的脸上画个王八。我给老师们递了简历,随后老师E介绍了一下面试的流程,然后就开始英文提问,问我研究生打算做什么,我之前已经对这个问题的回答做过无数次彩排,回答说我对分布式感兴趣,自学了分布式的一些知识,做过 Raft 算法的实现。老师捕捉到 Raft 这个词,有一丝好奇,问我怎么学的,从哪学的,实现的时候碰到了什么困难等等。然后问我还知道有没有什么类似的算法,我回答说我了解到的有 Paxos,但是 Paxos 的论文我暂时没有看过,只知道它在分布式系统应用很广,但是过于复杂,给工程人员理解和实现造成了很大困扰。 Raft 就是为了解决 Paxos 的这个问题提出的。基本上也没太深入,英文考核就结束了,也没问我红白纸上的内容。

随后中间一位年纪较大的老师C开始提问,让我描述一下中断,问我操作系统如何处理中断的。我机组一点没看但是当时居然完全不慌,脑子里记得林驰上课好像提过软中断和硬中断,就说中断有软中断和硬中断,然后……老师打断我,说,是硬中断,中断不都是硬件产生的嘛。 我:哦,那就是当操作系统接收到中断时,如果中断的优先级比正在执行的程序要高,那么就保存程序现场,跳转执行中断处理程序来处理这个中断,执行完毕后,再恢复程序现场,继续执行原来的程序。然后老师问,你觉得什么设备适合使用中断,我:鼠标键盘(升调,疑问)?如果我说错了请纠正我。然而老师没搭理我QAQ,继续问我知不知道中断向量,让我描述一下中断向量是什么。我根据机组实验课上的残存的印象,回答说是中断向量是相应中断时首次跳转的地方,中断向量其实是一个指针,指向将要执行的中断处理函数真正的地址。 接着老师就从刚才我的回答里找漏洞,问我软中断是什么,我支支吾吾了一下,说软中断是由操作系统产生的,比如DMA在完成的时候就会发出一个软中断通知这个任务已经完成(全是在胡扯,其实我完全不记得具体的软中断都有什么了),接着又追问我 DMA 是什么,我能说我一时之间连 DMA 中文是什么都忘了吗,记得全称是 Direct Memory Access,是不经过CPU直接从磁盘中读取数据到内存,来节省CPU资源、提高效率的一种什么方式。老师面无表情的点了点头,中断部分的提问终于结束了。

然后噩梦就来了,坐中间桌子的另一个老师D,问我网络栈的七层模型,我答了。然后他说,假设有两台手机,它们用微信互相发消息,描述一下这个过程发生了什么。我呆了呆,说,微信跟QQ都是即时通讯软件,那么应该使用的协议…….老师B又打断我:现在我们就说微信。(你能不能闭嘴听我说完!)被打断之后我续不上话了,开始口胡。其实是因为计网复习不多,他让我就这么描述过程我只能记得大概会用到哪些协议,像ARP,DHCP一类的没复习只记得他们功能,具体过程几乎说不上来。老师B有点生气的样子,说,你不是网络工程的吗,怎么这么简单的问题都回答不好,还重复了好几次。我:……我还是中国人呢,你看我语文成绩好吗,你看我中文溜吗。老师改口说那就假设两台电脑吧,两台电脑之间传输数据,这个过程都发生了什么。我没有办法,又开始胡扯。最后老师放弃让我回答这个问题了。

之后老师A和B看我的简历,问我,你简历上写的项目都是大作业吧。我:不,都不是(我太菜了能怎么办啊)。然后老师就稍微问了一下项目具体做什么的,大概是觉得没什么意思,也没问很仔细。

最后老师E让我具体介绍一下 Raft 算法(感觉是为了捞我),我就开始了,从设计的基本思路到节点之间的如何交互一路扯,讲到时间结束还没讲完。老师E还想了解一下我对 GFS 等了解多少,我说了解不多,我是刚刚接触分布式这领域的内容。最后时间到了,老师D就问出了那个经典问题 「你支持法轮功吗」 ,回答反对或抵制,面试就结束了。

出来后感觉哪怕最后过不了,这次复试我也算尽力没有遗憾了,所以一直开开心心的跟同学聊天玩耍。晚上想起来面试前有老师说可以去参加 CCNT 实验室的面试笔试,抱着开开眼界的觉悟去试一试。但是一看笔试题,只有一页纸3道题,1.写出你印象最深的公式,并阐述其含义及意义。2.阐述你对 AI 是否会全面威胁人类这一观点的看法。3.国庆70周年感言。这也太随意了吧。我就瞎写 $E=mc^2$,解释了几句;不会全面威胁,解释了几句;感到自豪,补充了家乡近年来的发展变化,证明祖国在变得更加富强。10分钟左右交了溜了。

然后算了一下面试的时间,提前二十分钟到面试的教室外面等,一等就是一个多小时…进去之后,老师说,我们这个面试目的就是跟你们聊聊,看看你们的意向和兴趣,然后推荐给相应领域的老师,你们也可以自己联系他们,咱们做一个双向选择。打听了一下我的 offer 有什么,还夸了一下大工,反正就是随意唠嗑。

第二天去医院体检,想着万一浙大没过28号我就报华科。当初连华科的夏令营都进不了,给几个老师发了四五封邮件也没人回我,卑微。还好26号上午结果就出来了,一下飞机收到十几条同学们祝贺的消息,虽然是专硕,但是已经满足了。给家里打了个电话汇报,想着北航我这也就不操心了,就当去北京溜达溜达得了。

录取的名单我想办法弄一份贴在[这里](虽然是官网上公示的名单但是稳妥起见还是把名字都隐去吧)9

再记录一下得到录取结果以后联系导师的情况。 刚过初审的时候,我就发邮件联系了一位看起来很和蔼的教授,他回邮件告我说让我好好准备,争取先通过复试。官方回复,很正常。在出结果之后我又跟学长打听了一下具体情况,发邮件给老师说我通过了。第二天老师回我邮件让我当面或者电话交流一下,然后电话里老师就说名额的话还有,但是给不给你嘛…这一停顿搞得我心里揪了一下。之后老师开始问我机试成绩多少,数据库学了多少,有多少课时,事务是什么,有什么具体的例子,并发控制有几种方式,两阶段锁协议是什么等等一系列问题。我大概的都记得定义,但是确实学得不深,把我知道的全都说了。老师说好我知道你大概是什么水准,当然你还是本科生,大四,如果全都懂了那也就不用读研究生了。你表个态吧,来不来我这里,来我就把名额给你。 因为之前了解到这位老师人挺好,待遇也不错,方向我也感兴趣,反正各方面我都很满足了,就直接答应下来了。那么浙大复试的这一段旅程,到这里,终于算告一段落了。

总结一下浙大的复试情况。 机试就是之前多练。但是面试被问到了机组、计网两门我复习不到位的科目。机组是靠当初预习复习打下的基础勉强回答上来的;而关于计网的那个问题,我知道计网书上有一节,一步一步分析了从输入url,到显示网页这一过程中都发生了什么,大概有二三十点,好几页纸,奈何就是没看。上课和复习的时候都没讲这节的内容,只是略微提了一下让我们自己看。我其实是在这页折了一角,打算课后抽时间看的,但是后来老师划了考试重点,不包括这里,我想那不然就算了吧,多复习点别的地方。所以说当年偷的懒,最后迟早要还的。

北京航空航天大学

从杭州到北京,一下飞机就疯狂吸雾霾,难受的不行。

北航的种种奇葩操作,实在无法让人对这个学校产生好感。 夏令营不提供食宿,夏令营不通过考核九推不能再报,九推卡27、28日两天复试,上机不提供草稿纸等等等等。(计科学科评估A的底气?)

算了不扯这些有的没的了,还是把机试的题目大概介绍一下,整体来说感觉不难,只不过看不到机试成绩不知道最后结果是不是跟我预想中的一样。(这点也让人不爽)

  • 第一题,给出某种数对$(c_i, d_i)$的定义,第$i$个数对中的$c_i$值为前$i-1$个数对不曾出现过的最小正整数的值,$d_i$的值为$c_i+i$。因此递推得到的数对为(1,2) (3,5) (4,7) (6,10) (8,13) (9,15) (11,18) (12,20) (14,23) (16,26) (17,28) (19,31) 输入为两个正整数M,N,其中M < N,N <= 2000 (是M<=N还是M<N记不清了,当作边界值注意一下),求第M个元素到第$N$个元素中,比值$c_i$/$d_i$最小的元素和最大的元素都有哪些,比值相同的按照序号升序输出。第一行输出比值最小的数对,第二行为比值最大的数对,每个数对后面都要包含空格(包括最后一个)。老师在考试开始前说最后一行行尾的回车换行有或没有都无所谓。

    1
    2
    3
    4
    5
    
     input:
     4 12
     output:
     (6,10) (9,15) (12,20) 
     (8,13) (16,26) 
    

    一开始我还想了一下分数的比较大小,不过感觉用浮点数运算会方便那么一点。 那么就注意判断两个浮点数相等时,考虑一下浮点数除法运算可能出现的舍入误差就好。别用d1 == d2而是abs(d1 - d2) < 10e-8来比较是否相等。

    回来之后闲着没事把分数版本也写了,随便测了几组数据,输出结果跟浮点数版本没有区别,那么大概可能也许这题过了吧。

    update:后来再仔细一想,哪怕用浮点数得到正确结果,这样的做法也不够好。稳妥的方法应该是消去分母,转换成整数的大小比较,可以完全避免浮点数的表示误差问题。

  • 第二题,上来画了一个一整屏四五十个节点的文件目录,题目又长又啰嗦,但是主要内容就那么几句,然后告诉你这些节点有目录和文件,每个节点都包含修改时间这一信息。保证所有目录不重名,同一目录下所有文件不重名。输完目录(和文件名)之后,再输入一个文件名进行查询,按照以下规则输出符合条件的、所有文件名的完整路径名称:

    1. 按照修改时间从近到远
    2. 如果修改时间相同,按照层次从小到大
    3. 如果修改时间和层次相同,按照从上到下的顺序

    层次小到大是指深度从小到大。从上到下是指,这一层的子节点,按照在输入中出现的顺序,先出现的在上面,后出现的在下面;

    我的做法也是比较简单,先建树,然后dfs搜文件,搜到的存进结果数组里,然后按照修改时间和层次排序。第三点要求通过dfs的顺序和稳定排序来保证。因为 STL 的sort()不保证稳定,所以我手写的归并排序(虽然写过很多次但是这次又是边界初始设错调试了一阵子)(啧,后来才知道 STL 有stable_sort())。做完时间还剩下二十来分钟,心想反正明天也不参加面试,就提交走人了。

晚上出面试分组名单后,看到我在面试分组第一个,八点半开始,发了封邮件表示不参加,第二天睡到了十点多才起。

总之就是,上机代码量不太大,也没有什么需要费脑筋想算法的地方,只要平常有在练习的应该不成问题。面试情况不清楚,就不多说了。

关于保研的琐事介绍

推免流程

我在各类论坛博客上了解到的是,大家估计也能找到(说的是外校,本校的跟老师联系就行),资格获取可以从

  • 夏令营:一般为七月到八月,报名时间可能从四五月开始
  • 预推免:一般在九月,通过预推免的话,9月28号直接在国家系统里填报就可以录取了
  • 九推: 指9月28号国家系统开放之后,可以填写的三个平行志愿,学校可能会给你发送复试通知让你参加复试,通过复试之后再给你发放预录取通知。通过这种方式也有录取的机会,但是风险很大(一般学校这时已经没什么名额了,能录上通常属于捡漏),请尽力避免在这个时候才冲击想要去的学校。

不过真正等到系统开放之后,再通过国家研招网报名的学校好像已经不多了,今年了解到的只有华科是这样。据我所知更多学校都是在国家系统开放之前组织复试,到国家系统开放之后,就能直接给有资格的学生发送预录取通知了。所以好像也有把九月的预推免叫做九推的。

解释一下为什么到国家系统开放之后的报名方式风险大,因为一般来说在夏令营和预录取拿到资格之后,大部分学校会要求你28号凌晨系统开放之后立即填报,通常在半天之内完成两次确认(复试通知和预录取通知),否则视为你放弃资格,开始录取候补名单中的学生。也就是说,你想在这个时候拿到某个学校的 offer,就 可能 要放弃之前夏令营和预推免拿到的 offer 了,并且还要看运气。

另外各个学校发放通知的时间不太一样,南大说是凌晨2点和4点会分两批发放,截止时间不太清楚;浙大填报志愿截止至早上7点,确认复试时间截止至10点,确认预录取时间截止至晚上8点。你需要先确认复试通知,学校才能发送预录取通知给你,预录取确认完成之后,你才被这所学校接收了,所以最好尽早完成这些确认工作,以免夜长梦多。当然也有不急的,听说清华的截止时间是29号中午12点→_→。

推荐学习路线

其实不能说是推荐,每个人的学习成长路线都是不一样的。只能说是在我今天的角度来看,如果让我再从大一开始,我会怎么做。希望能给还在迷茫的后辈们一点点帮助吧。

  • 大一、大二
    首先得把绩点提上来。我大一的时候还是有点贪玩了,整个大一的学分占比几乎等于大二大三两个学年的总和,对最后排名的影响相当大。所以最优先的事情还是把必修课分数提起来,该认真学的专业课学扎实。现在大学的期末考试其实比起高考差得多了,只要每个知识点及时弄明白,课后独立思考完成作业,考试90分上下应该不成问题。我是没有办法在保证课业的同时再兼顾其他东西了,所以我做好这一个就可以了。也有许多到处参加比赛,组织各类活动,学这学那成绩还一直很好的大佬,大家可以以他们为目标。
    然后这两年把编程好好地练一练。大一学的C、C++在最开始学完之后,我还是只会考试答题的水平,连一个反转链表都要写半天还不一定对,大整数的加法都写得乱七八糟。一开始想通过ACM的一些书籍来入门练习结果感觉太难了。后来才发现,用各类OJ是挺好的选择。只要有完整清晰可理解的题解,就是好用的(点评批评牛客网,用来看题型还行,用来练习的话,体验极差)。我最开始在Leetcode上刷了两三百的简单和中等题,南大夏令营回来之后在洛谷上做了十几道,后来接到浙大复试通知后练了十来题PAT的题目。建议先从Leetcode的简单题中等题入手,分模块练,这时候主要掌握这类题型的思想。实在不会就看讨论区里面高票题解,学习思想和代码风格以及各类编程的小技巧。比起其他OJLeetcode好在能够给出错误用例帮助快速纠错,而且不用关心输入输出格式,对初学者很友好。概括起来就是Leetcode入门,然后开始用其他的作为提高或者专项的练习。
    另外英语得要不断练习。四六级成绩(或者托福雅思)有时会与绩点一同作为初审的参考。北航和浙大英语能力考核都占面试分数25%,我不知道口语的流畅程度能带来多少加分,但是能跟老师谈笑风生的话,肯定能提高自己的信心和增加印象分的。我四六级口语因为懒没有报名,但是在英语强化班被同学刺激着断断续续练了两三年口语,起码发音听起来能舒服一点。
  • 大三
    这阶段课程应该会相对轻松(说的是软件工程,计科听说课还是很多),可以尝试跟感兴趣方向的老师学习学习。不一定要发表论文(有论文是锦上添花),做一些实际项目也可以,只要你能对这个方向有一个大致的了解。甚至都不需要懂太全面,只要对老师带领你做的那个部分比较熟悉,相关的内容有了解,做到能够站在讲台上给不了解这方面的同学作介绍的程度就可以了。这个也能作为面试的预演和练习,练多了基本就能克服紧张。

    再有就是按时作息,多加锻炼保持健康了(熬夜第二天起来一薅掉一把头发,太伤了)。游戏可以玩,但是要适度,实在控制不住就用强制手段戒除。

关于学校选择的建议

这点是我当初最最希望别人告诉我,但是一直没有找到的。现在终于能结合自身的体验和周围同学的情况,给像我一样不知如何选择的后辈们一点建议。

我在大一时候,因为懒惰贪玩,实验室啊创新中心啊什么的都没有加入(有人很早就进老师实验室,也有在创新中心开始做项目的),也没有发掘出自己的兴趣点,对未来的发展甚至没有做过设想。在大二时候,林驰老师给我们上机组课时候跟我们提了几句关于保研的看法,他说,如果能够保上C9,那么一定去;不然的话去同档次学校,不如留在本校(老师眼里我们是次于C9的学校?有趣,我还以为是末流那一档呢)。后来我在另一位老师那里也听到了类似说法,说留在本校你能在大四时候就开始研究生阶段的工作,也能提前选修研究生的课,还能拿奖学金。这样在研三时候可以出去实习,为工作做准备。而且奖学金和实习工资加起来,在研究生读完时候就比保研外校的同学多挣好几万了。

二位老师的说法让我产生了先入为主的看法,后来我又咨询了一位不太熟的保本校的学长,问他关于本校外校选择的看法(问保研本校的人本校有什么不好属实蠢,而且还不熟),他说选择学校有些人会看就业啦,所以他们会根据地域选比如北上广深的学校或者中科院的研究所;有些人就是单纯的不想呆在本校啦,就根据自己的兴趣和能达到的层次去了对应的学校。说实话当时跟他聊完我还是懵逼的,感觉还是没法选择。也问了问班上的同学(三个),他们不想留在本校的原因是食堂吃腻了???这对我完全没有参考价值好吧。

那么再现在仔细分析一下老师们的说法究竟是不是这么一回事。首先关于奖学金,首先保研的学生在研一时候,应该都能拿到一等学业奖学金8k(也就是返还你的学费啦),之后各凭本事评选。这一点在各个学校研究生招生网上的招生简章里应该都能看到,并且有些学校还有不少额外的诸如校长奖学金和其他奖学金一类杂七杂八的东西,总之奖学金这一点不能成为留在本校的理由;其次是提前开始研究生的学业和工作,就目前我所了解到的,已经有同学在夏令营结束后就跟导师开始实习了,也就是说导师同意的话你是可以提前开始研究生工作的,所以这一点也不足以让我留下;最后是关于实习,放不放实习,取决于你的导师,实习的目的也是为了更好的适应工作。假期社会实践的时候,在商汤科技,一位本科西交硕士上交、93年的年轻前辈,就给我们分享他在蚂蚁金服和IBM的实习经历,看得出来,是不缺实习机会的。好一点学校的毕业生,只要不是太差劲成天混吃等死真的啥也不会的,应该不会愁找工作的事。所以这一点也不成立。甚至有一点老师没有提到的是,研究生每个月是有补助的。国家每年发放6k还是多少,剩余部分由导师发放,关键就是在于导师补助的这部分,不说学校之间,甚至同一实验室之间不同老师,发放的金额都可能差距巨大。再具体的我也没法说了。

综上,我的结论是,老师们的说法多少是存了私心的,他们只说了在本校你会得到什么–你可以省事,不用到处奔波参加夏令营和预推免,大四的实习学分可以在老师实验室实习解决,虽然没什么钱,以及上面提到的其他便利,却没有提你失去了什么。

对于中末流985学校,尤其是像大工这种就业没有地域优势(尤其软院都不知道在哪个山沟沟里),计算机也没有突出方向的学校,保本校不如保外校。C9的学生倒是不用考虑这这一点,首先拿本校保底就挺不错的了。(可恶,我好酸啊;不过现在越来越卷的保研竞争来看,大家都不容易)

选择目标学校,除了像上面说的根据兴趣和地域选择之外,我觉得可以先把备选学校列一个清单,然后对清单上的学校一个个进行详细的了解。我的话一方面会考虑学校的影响力和环境、入学难度、地理位置等因素,以及我想做的方向能不能找到靠谱的导师,最后在心里做一个综合的评分,选出几所学校作为备战目标。

四月五月,就要密切关注各个学校的研究生招生网站,以免错过报名。如果已经有目标学校了,那么就可以了解导师情况,联系导师。如果是lamda这类很出名的实验室,很容易就能打听到。如果是知名度没那么高的,那么除了学院的官方网站、老师的个人网站来了解老师的情况之外(通常用处不大),还可以通过:

  1. 导师评价网看看匿名评价(总结:正面评价不一定好,负面评价多半是真的不好,最起码跟评价那部分人的关系不好。生活过得去没什么仇什么怨,一般也不至于到这里说人坏话); 2020/12/22 update:导师评价网现在变成收费的了,可能终究是触及部分人的利益了吧,现在只剩github上一位同学爬下来的数据,大家且看且珍惜。
  2. 跟同实验室的学长学姐打听,问一下毕业的要求,实验室的要求和待遇等等的问题。

如果感觉各方面都可以接受,就发邮件附上简历和个人陈述给老师,表明你想读他的研究生。虽然导师不一定会回复,别气馁,如果你真的想去,就想办法用各种途径到联系上为止。有时候可能是你用的邮箱、发件人名称和标题和称呼不够正式,让你的邮件被分到垃圾箱里了。一般来说gmail或者校园邮箱应该都不会有问题。如果这个老师一直没回就想办法要到他的电话、微信,直到看到他明确拒绝你;同时联系多个老师也可以,为了有书读广撒网也是一种策略,自己把控就好。

如果有机会的话,最好到目标学校里走一走,看看那儿是不是你想要在这里学3年的环境;跟老师学长聊一聊,接触一下具体的研究,看看他们的方向你是不是真的感兴趣,能够让你有动力早起学习而不是成天逃避。


对了,还有直博的事情,今年很多学校直博招不满人的样子,或者有学生鸽了导致名额空缺。大概上交、自动化所,在9月底时候开始发邮件说有名额空缺,浙大甚至10月1号还说直博名额有空缺,问有没有参加了复试并且还没确定学校的、愿意直博的学生,可以联系老师看看。

至于直博和硕士间的区别,我目前听说的是,直博的录取标准会比硕士稍微低一点点(浙大直博不用机试),具体不知道在之后的学习、毕业要求、工作等各方面体验会差多少。同学里有直博的,到他们毕业之后再打听一下吧。但是那就要6年之后了,如果他们都没有延毕的话wwww。

写在最后的话

总结在保研路上一路以来的感悟就是,不管是保研是工作还是出国,不管选哪条路都不是那么好走的。每个人得到的,几乎都与他所付出的有一定程度的关联。也不必因为现在一时的去向好坏而自满或懊悔,五年十年后看今天,不就像今天看三年前的高考吗。

此时此刻,我依然相信着,只要我还没有停止前进,我就是在走向我理想中的生活。

最后的最后,想要保研的学弟学妹们,祝你们好运呀~

更新记录
  • 2019-12-07:修改了推免流程部分的内容
  • 2020-12-21:更新了导师评价网的替代链接,修改了部分段落的语句。