个人背景

出身:中九软件工程

排名:200+ 人专业,5.5%(夏令营),5.9%(预推免)

英语:四级 570+、六级 540+

学习情况:计算机系统(系统结构、OS、编译、网络等)掌握自认为还过得去,AI、安全之类的一窍不通;算法方面没碰过竞赛,写过 200 多道力扣但没几道 hard 题,水平比较差。

课外经历:一个 RM 国奖;校级水奖若干(都没什么用);一段三个月的实验室实习,没有产出;清华大学开源操作系统训练营营员(没有含金量但很重要的一个经历,两次面试被问到)

报名倾向:纯就业向,未来不想走学术道路,因此 title > 导师,学硕 ≈ 专硕 >> 直博, 优先清北华五,不考虑中科院

最终去向:清华大学深圳国际研究生院

前期准备

如果你对于保研这件事还没有概念,推荐你阅读一下这篇文章:

面向纯新手的2022计算机保研记录(南大/浙大/北航/华科/北大等绝大多数985和中科院研究所)

前期准备工作主要包括:收集信息、准备材料、复习、套磁

收集信息

我的保研应该是在三月开始的,前期基本就是在不断收集信息,知乎、CSDN、一些本校学长个人博客上的保研经验帖基本都看了个遍,加了绿群(太早加入绿群其实也没什么意义,有用信息很少,每天只有复读)。在我看来这是开始阶段必须花时间做的事情,这段时间要对保研这件事在脑子里大致建个模,了解下保研是什么流程、各个学校学院实力、培养模式、bar 有多高、考核侧重、强弱 com 等等,这个阶段就能很大程度上制定好自己之后的报名策略,节约很多时间,在之后各校开放报名的时候,你早已决定好了报不报、报什么学院什么专业、需要做什么准备,而不是到报名才开始急急忙忙做调研。

申请材料

请善用 GPT

首先是文书,主要就是个人简历、个人陈述等等,这些我是在四月就做掉了。这里我也不准备细说具体该怎么写了(我也不懂到底该怎么写),Github 和知乎上有很多模板,选个觉得顺眼的就抄吧。个人陈述个人比较推荐按模块化的方式去写,就是按不同侧重写一些不同的可以互相组合/替代的段落,到时候根据不同学校的情况去拼接组合这些段落,有些学校要求的字数多那就多拿几段拼起来,要求少那就只挑点最重要的。

然后是竞赛获奖、科研成果、个人信息这些,早点整理好你的各种证书、成绩单、英语成绩证明,连带身份证正反面、学生证、学信网学籍验证报告、证件照等资料,都提前扫描成电子版保存并整理好,以备随时使用,报名时会大量用到。

复习

  • 专业课

由于我院大三下半学期大部分是一些乱七八糟没有什么用的课,所以需要额外抽时间复习基础,主要是数学和 408(数据结构、计算机组成原理、操作系统、计算机网络)。数学方面我线性代数学得非常烂,所以花了点时间过了一遍 MIT 18.06 ,概率论和离散就简单看了一轮课本,记得重要的定义和定理就行(像什么大数定律、中心极限定理之类的肯定要能答得上来),不用在意细枝末节的东西,也不太用做题。408 我本身比较有自信,没有系统复习,选择性看了一部分蒋炎岩老师的操作系统郑烇老师的计算机网络加深了一下印象。另外因为知道南大面试会问编译原理,还单独复习了一下,并跟教程写了一个小型解释器。总之复习专业课就是自己看情况来,比如如果你是做 AI 的,那你可能就要复习 ML 之类的课,以及更深入的数学。

  • 项目

这部分因人而异,总之尽量做到自己简历上的项目的各方面细节你都经得起深入追问。我本身参加过的科研竞赛比较少,能写在简历上的项目不多,好在大三上的时候因为想着万一没书读了需要保底春招秋招,就结合 sylarco_context 自己搓了一个 C++ 服务器框架,代码量不少,且性能很好,能在简历上撑一大段话,另外还用了一个做得比较好的课设。

个人觉得简历上写个人项目或者课设并不一定比正儿八经的实习/科研项目差,重要的是内容如何,一个编译器、一个操作系统内核之类的个人项目写上去就很棒,而什么 Java SSM 前后端之类的就还是算了吧。

  • 英语

我的建议是如果已经到了大三下,就不要指望用这个学期真正提升自己的英语水平,因为你大概率会花很多时间并且得不到什么提升。我认为有意义的准备英语的方式应该是写好一系列稿子,然后直接开背。自我介绍、介绍家乡、介绍自己学校/学院、介绍简历上的项目、介绍专业课里的某些算法/概念、未来规划等等,想到了的问题就准备一版英文回答,然后背下来。这样做相比试图真正提高英语水平要靠谱得多。

套磁

我是一个非常非常非常自闭的人,对个人背景极其没自信,十分抗拒和老师交流,因此没有进行任何套磁(其实有尝试套过一次,但对结果没造成任何影响,基本等于没套),因为不套磁,报名范围也就被限制在了强 com 学校的硕士,弱 com 和直博都与我无关了。我这样的性格在保研中很吃亏,找本校老师要个推荐信都感到困难,如果你是个社牛的话会好过很多。

总之套磁应该是很重要的一件事情,可惜我没有能分享的经验。

夏令营报名情况

我的整体策略是夏令营尽可能报 bar 低的项目,拿到保底确保下限,预推免再冲击更高的 title,因此清北复交浙科我都没报计算机系,转而报一些更好入营的学院。(然而没想到夏令营就拿到最终最满意的 offer)

下表顺序随机,无特殊含义:

学校 学院 专业 入营/offer 备注
复旦大学 工程与应用技术研究院 0812 未入营 突出一个宁缺毋滥,不报计算机也没能入营
南京大学 计算机系 0854 未入营 入营人数非常多,但还是没轮到我
南京大学 软件学院 0835 入营,放弃面试 面试前已拿到更好的 offer,遂放弃
中国人民大学 信息学院 0812 未入营 疑似卡 CSP 成绩
浙江大学 工程师学院(大数据方向) 0854 未入营
中国科学技术大学 苏州高等研究院 0854 入营,放弃 开营时已有更好的 offer ,放弃
上海交通大学 密西根学院 0812 未入营
上海交通大学 软件学院(可扩展计算) 0812 入营 名额非常少
北京大学 软件与微电子学院 0854 未入营 初筛过,论文考核寄
清华大学 深圳国际研究生院 TBSI 0812J3 入营,offer

0812 即计算机学硕,0854 为专硕,0835 为软件工程学硕,0812J3 似乎是清华自己搞的限定专业。

一些可报但没报的学校/学院:

  • 北航:因为一些个人原因对北航印象很差,未报名
  • 人大高瓴:高瓴很好,但我实在不懂 ai,也就不去白给了
  • 南大 AI、南大智能:原因同上。南大可以报 3 个学院,我只报了计软

可以看出我的夏令营情况很离谱,本来预计能入的南大 CS、浙工、人大信院等等都寄了,反而自认为机会渺茫,随便报着玩玩的上交、清华居然入营,甚至拿到 offer 。夏令营后我更加确信,保研就是一场智者千虑不如歪打正着的游戏,运气比实力重要得多

参营情况

以下按照开营时间从早到晚排序:

7.3 ~ 7.5 清华-伯克利(TBSI)

TBSI 是清华和 UCB 的一个双学位项目,和清深其他专业一起报名,英语成绩卡得高一些(六级 500+)。清深报名系统首页写了一条说明,意思是说选择 0812J3 这个专业就表示选择 TBSI,我一开始觉得这个项目可能会 bar 比较高所以并不打算报这个。

实际上与其说不打算报 TBSI,不如说我根本不认为自己的 bg 能有机会入清华的营,所以完全就是填着玩玩,没有仔细读说明,资料也填得很不认真,留着大片空白就提交了,这随便一填刚好填的就是 TBSI,没想到最后还就那个歪打正着了。

TBSI 提交材料后会再发一个单独的短信通知选择研究方向,一共有 7 个方向,不知道会不会影响到入营:

  • 工业工程与运筹学
  • 智能交通与物流系统
  • 智能电网与可再生能源
  • 大数据与人工智能
  • 计算机系统研究
  • 传感与测控
  • 光电子

看起来感觉乱七八糟的,但是 TBSI 主打一个交叉,所以也正常,我选择的自然是计算机系统(报名方向似乎和最后实际方向无关,以开学双选为准)。

之后没想到清华真的让我入营了,整个清深各种专业入了一共大约 450 人,TBSI 55 人(或者是 56?具体不清楚)。 不过当时其实也并没有多高兴,因为我没有套磁 TBSI 的老师,绿群里面很多同学说 TBSI 如果不套磁,就算去面试也是陪跑。现在看来他们可能是在胡扯,可是当时确实搞得我很难受,去深圳的往返机票就要 3000 块,清深报销又不多,一想到自己要花那么多钱去给人陪跑,心里总归是比较烦的。

到深圳后先是 7 月 3 号报道,登记检查材料,领一个清华的袋子和营服,之后就没其他事情了。第二天 7 月 4 号全天听讲座,上午是整个数信院统一的报告,讲了一些清华校史和数信院的概况,下午各专业分开听自己专业老师的汇报,TBSI 这边就是各个老师作学术报告,介绍自己的研究方向和成果。这天深圳下了巨大的雨,下午去听报告的时候直接把我拍碎在半路,浑身湿透,最后迟到了 T T。

7 月 5 号就是一整天的面试,面试一共分三组,应该是按照之前选的 7 个方向分组,分别有大概 20、20、15 人。面试一人 20 分钟,全程英文。我事先看了一些 TBSI 的经验贴,前人大部分是说主要问项目,并且因为全英文,压力也不是很大,所以我准备的完全是我简历上项目的英文介绍。

但真轮到我面试的时候我直接被问麻了,和想象的完全不同,压力很大,一直考我专业课知识,问得很细,答得不好会抓着追问。一开始我还勉强招架得住,后面越问越难,我被问到心态很崩,说话都在发抖,最后一个关于 TLB 的问题我直接就完全不会了。中间有一个术语我想不起来用英文怎么说,询问能不能用中文说一下这个词,老师也不允许,必须全程英文。好在其他地方我听力口语还过得去,全程整体上还是保持了正常对话的状态,没有支支吾吾半天说不出话来或者听不懂老师在说什么。

面完后感觉就是非常失落,毕竟问题都答得不好,加上没有套磁,心里认为自己已经完全没希望。另外听说往年 TBSI 的 offer 发得非常快,一般面试完当天晚上就出优营,我等到晚上也没有消息,遂认为彻底 G 了。之后调整了一下状态,就去准备交大夏令营了。

而实际上今年似乎是有 UCB 的人到 TBSI 开会(道听途说,不知道是真不真的),所以并没有很快出 offer 。之后在 7 月 16 号我收到了清华的 offer 短信,简直就是惊了个大呆。

事后我问了一个学长,他表示 TBSI 是强 com,不用套磁。而且我一个没套磁的选手不仅入营,还拿了 offer,应该也可以说明 TBSI 的 com 比较强。

7.11 ~ 7.14 上海交通大学软件学院

上海交大的入营通知是 6 月 25 号发的,也是我的第一个入营通知,收到邮件的时候心里很惊喜。

交软内又分成五个方向,分别是:

  • 智慧应用
  • 并行与分布式系统(IPADS)
  • 可扩展计算
  • 数据服务
  • 大数据智能

入营邮件附带 5 个附件,分别是这 5 个方向的具体面试考核内容,都是给一个论文清单,选择其中一篇文章精读,面试的时候就会考察这篇文章相关的内容。确认入营的话需要选择一个自己感兴趣的方向,然后回复邮件。今年交软入营有 130+ 人(不知道包不包括直博),其中 IPADS 39 人,可扩展计算 16 人,剩下三个方向都是二三十人的样子。

7 月 11 号是签到,到了交大之后首先是被巨大的校门和校园,以及外卖自由进出校门给惊到(虽然不久后就闹出了中间商赚差价的新闻),什么叫一流大学啊。进到软院的楼之后我转了半天,没找到签到的地方怎么走,这时候一个老师从房间里出来看到我,笑着问我是不是来参加夏令营的,我说是的,他就帮我指了路,告诉我哪里上电梯,到几楼哪边转。签到检查材料后发了一件营服,出去的时候我又找不到路了,这时候又一个路过的老师看到我在看导航,就叫我是要出去的话跟着他走就行,交大的老师真是太好了 T T。

然后 12 号正式开营,上午听报告,主要介绍一下学院情况和夏令营安排,没什么内容,下午是第一个重头戏:机试。

交软的机试属于一股清流,每个人用自己的电脑编程,可以准备任何离线材料,语言、库、工具等等都不做任何限制。开始前会给每个人发一个 U 盘,里面是题目内容,一个加密压缩包,考试开始后公布压缩包密码,大家解压做题,考试结束后把代码拷到同一个 U 盘里交上去即可。评分也是学长来人工读你的代码,即使没做出来或者没有调通也会根据你写了的内容给一些分数,所以代码风格、规范、注释等等都可能帮你争取到多一点分数。

题目内容方面是用一个背景故事把几道小题串联缝合在了一起,指引你一步步编程实现。今年的大背景是流密码,考察内容涉及到文件读写、字典树、大模拟、最短路等,整体上每道题其实看一眼就知道大概怎么做,但是有很多细节和坑要注意,比如如果你选择使用 C++,那就要注意 C++ 和 Python 取模运算的差别,以及知道如何用 C++ 实现 Python 中的取模等。整体来看我觉得一般人很难做得完,一个我认识的银牌佬同学也没有 AK。我因为一开始看到读题看到实现 Trie 和最短路,觉得用 C++ 搓会比较舒服,遂选择用 C++ 写,结果做着做着才发现坑了自己,用 Python 会快很多,最后整体做得非常差。不过我代码写得挺规范,写了 Makefile,命名、注释之类的小方面都很注意,肯定混到了一些分数。

第二天 7 月 13 号没有考核,安排了一整天的学术报告来介绍五个方向的研究情况,同时这一天内机试会改好并发布成绩,今年和往年不同,机试没过 60 分也可以进入面试,只是如果最后机试 + 面试总成绩低于 120 的话就会直接拒绝,但如果机试分数非常低(面试接近满分也救不回来的那种),会发邮件劝退。学术报告内容方面基本上是 IPADS 一枝独秀,IPADS 在 system 领域属于世界顶级的水准,全程应接不暇的干货轰炸,相比之下剩下四个方向就平平无奇。

第三天是面试考核,按自选的方向分成 5 组,每人 20 分钟,流程是自我介绍 - 论文汇报 - 英语问答。开始先自我介绍,没什么好说的,这个过程中老师们会传看你的资料。介绍完之后就是论文环节,直接开讲文章内容,中间讲到某些地方的时候老师可能会打断提问,问题可能是关于论文中的细节,也可能是和论文有关的基础知识问题。我选的论文是我很感兴趣且本科也学得很不错的一个领域的比较新的文章,我读得非常非常细,一篇论文就差不多读了一个礼拜,一些相关的工作和开源代码我都有去看,所以面试过程基本上是侃侃而谈,聊了很多扩展和延伸,老师的问题也答得没什么问题(有一个简单问题我脑子短路没答上来,老师提示了一下之后瞬间想起来然后一顿输出)。不过出了个很大的问题是我聊得太多了没控制好时间,还没讲到 Implementation 部分就超时夹断了(明明这部分是我花时间最多而且可以直接讲代码的 T T),这一点可能很减分吧。后面会聊两分钟英语,这个就没啥规律,因为我是少数民族,英语部分问了问我的家乡,聊了两句我这个民族现在的大致情况。不过也有同学的英语问题比较专业,比如用英语介绍下 Transformer。

7 月 19 号收到了上交的邮件,通知我总成绩排名。上交每个学院在 8 月底才能拿到名额,因此只能告知排名,不会通知是否 offer 。

另外想多说几句的是,交软夏令营的体验真的非常好,各个老师都很和蔼,即使作报告的时候看起来很严肃的老师,面试的时候也嘻嘻哈哈的很友善,完全不会给人压力,如果问你的问题没答出来,也是慢慢给提示 + 引导(换成清华我那一组的面试可能就是直接质疑否认追问连续拷打);机试就更不用说了,题目质量高,做题比较自由,你想用很小众的技术也完全没问题,写个 readme 即可,负责机试的学长认真负责,考试的时候会给你解释题目内容,人工判题但出成绩很快,做得不好也会捞你不少分数;负责夏令营的李力老师人也很好,开朗有耐心好相处。缺点是食宿都没有补贴,以及那几天上海的天气真得热到离谱,寸步难行,但这些都是小问题,交软在关键部分上的体验是的确 yyds。

9 月初公布结果,交软名额非常非常少,每个方向大概就 1~3 人的样子,招人最多的 IPADS 也只有个位数。

7.17 ~ 7.19 南京大学软件学院

清华面试结束之后因为觉得自己表现很差,所以一直很 emo,就在这个时候收到了南软的入营通知邮件,才算是得到了一点安慰,这种意义上很感激南软。

南软的培养和大部分其他学校学院区别比较大,基本完全面向进企业就业,专硕只有两年,可以实习拉满,对于没什么科研理想的同学(比如我)而言非常合适,缺点是专硕似乎没有工位和宿舍,以及 title 稍差(指在清北华五中),但对实习向来说我觉得这些完全不成问题。前面讲过我认为自己的 bg 配不上清北复交,且我并不想做科研,因此在保研前期南软就是我的第一目标(南大也是我高考时候的梦校,无奈自己实力不足)。

南软夏令营 7 月 17 号正式开始,我 7 月 16 号下午到了南京,然而当晚就收到了令我十分震惊的消息:我拿到了清华的预录取。这样的情况下南软再怎么香,我也很难放弃清华的 title 选择南大。但我并没有放弃考核,一方面还不能确定清深的预录取就是铁 offer,一方面人都来了,就当进去参观一下南大也是好的。

南软的夏令营只有签到和考核,没有报告宣讲之类的各种活动,17 号上午是签到,检查材料 + 领一个袋子。然后等到下午,14:00 开始机试。机试用的是学院自己的 OJ ,非常简陋,支持 C++ 和 Java,在线代码编辑器连语法高亮都没有,别说自动补全之类的了,不过可以把代码拉到本地,在本地编程然后再复制到 OJ 中。本地的环境还算齐,VS、Idea、VSCode、DevCpp 都有,VSCode 的插件也比较全,有 CMake 之类的,另外也提供了 cppreference、C 标准库和 Java 的文档。南软的 OJ 对 C++ 比较不友好,因为服务器上应该是用 gtest 这个库来做测试评分的,但是因为 C++ 众所周知的包管理问题,考试的机器本地并没有 gtest 这个库,所以拉到本地的 C++ 代码是不能直接运行的。而 Java 用的是 Junit,本地有 Idea 有 Maven,三两下就安装好了,可以直接跑测试。

登陆 OJ 需要一个虚拟手机号和密码,离谱的是一个大几十人的机房,老师告知每个考生账号密码的方式居然是一个一个点报名号,然后发一张纸条,这一点非常离谱,极其浪费时间,考试开始后还有很多人没有账号密码登录不了系统,只能干等着点名。真心不知道负责机试的人在想啥。。另一边,开始考试之后题目指定的 Java 版本是 11,而本地安装的是 Java 8,所以代码跑不起来,解决这个问题又耽误了一些时间,最后本来 17:00 结束的考试延长到 18:00。

机试题目一共 4 道,3 道算法 + 1 道面向对象编程。面向对象题目非常简单,因为不需要自己设计任何类、接口、方法,题目给的框架已经完全写好了,考生只需要补全一些方法的实现,并且要补全的这些代码基本都有注释,翻译注释就行,不用读懂题目都能拿满分。算法题方面,第一题是前缀和,很简单;第二题是着色问题(一个圆环切成 n 段,用 m 种颜色给每一段染色,相邻段不同色,问不同的染色方式有多少种);第三题是个和凸包有关的问题,似乎难度比较大,我不会做,直接摆烂了。

18:00 考完机试后,很快 19:00 就要笔试,很无语,反正我是晚饭也没吃直接去考场了,考试的时候又渴又饿,无语了。笔试分四部分:软件工程、操作系统、计算机网络、数据库,每个部分 2 ~ 3 题,都是大题,题目难度对保研生来说应该算很大(也可能是我菜)。OS 和计网应该是 408 题型,数据库和软工就非常不常规,数据库我直接交了白卷,虽然是开卷,但是对那些题目来说查资料毫无意义。

总之南软的夏令营第一天体验很糟,后面两天 18 号和 19 号的安排都是面试,我被安排在 19 号最后一批,本身已经有了清深的预录取,19 号又收到上交软的邮件,排名比较靠前,挺有希望,于是直接放弃了南软的面试,最终良好营员(南大入营即 wl)。

预推免

夏令营拿到 TBSI 的 offer 我已经非常满意,但是后来发生了一些小插曲导致我又报名了一些预推免:

学校 学院 专业 入营/offer 备注
清华大学 深圳国际研究生院 TBSI 0812J3 入营,offer 走个流程
北京大学 软件与微电子学院 0854 金融科技 未入营
浙江大学 软件学院 0854 入营,放弃
同济大学 电子与信息工程学院 0812 入营,放弃 本校

因为已有满意 offer ,不想挤占其他人的机会,最终都没有参加考核。

再多说两句清华的预推免吧,TBSI 的夏令营 offer 就是真 offer ,但必须再走一遍预推免的流程,清华预推免的流程还是比较麻烦的,所有材料重新整理提交一遍,另外需要两个副高及以上老师的推荐信,并且这个推荐信是需要老师线上操作的。

按清华要求,预推免需要提交前六学期的成绩,所以不管是否是夏令营优营,如果想报名清华预推免的话建议你在第六学期末尽早开出前六学期的成绩单和排名证明(如果可能的话),否则可能会像我一样在暑假里找不到教务老师开证明,哭天抢地找到学院书记那里去,又被到处踢皮球的操作搞得焦头烂额。

后记和致谢

非常感谢同学院的 yx 和 llt 同学在整个保研期间愿意带上我共享信息和交流经验,这个 3 人小群是我保研期间最大的财富,如果只靠绿群,我恐怕走不到最后这一步。如果在看这篇文章的你正在参与保研,我强烈建议你尽量找到一些这样的伙伴,互相之间能抛弃对外的竞争姿态,成为彼此毫无保留的支撑。

保研本就是一段充满焦虑、不确定、自我否认、痛苦煎熬的旅程,我的保研之路已经比绝大多数人轻松得多,即使这样也历经了四个多月的折磨和两个多月悬而未决的提心吊胆,其间也屡次觉得坚持不住想要放弃,这种难受是在经验帖里写不出来的。上一届的学长做分享时说他相信坚持下来的每个人都会获得不错的结局,我不好说这是否只是一句鸡汤,但从结果上看,我身边每一个奋斗到最后的同学都走到了非常好的去处,不知这是巧合还是命运的馈赠,但现在我也相信这句话了。

有望得到的要努力,无望得到的不介意,则无论输赢姿态都会好看。如果你是后来的保研人,希望我的这些经验能为你所用,祝你前程似锦,一路生花。