我的保研之旅——北京航空航天大学、北理工、南大

我的保研之旅

   之前一直想着写一篇关于保研的经历(实属自己太懒了),现在研一了终于开始动笔了(对不起,我应该前年就写的),就写一写我自己的经历吧,我猜一定有很多人跟我一样,就是理论知识还凑合,但是代码能力实在不强,(毕竟是女生,平常不花时间在敲代码搞算法上面,)所以同学们也不要着急,慢慢往下看,里面每个学校都有详细的机试和面试题目的描述可以供大家参考当然北航那一部分有我专门整理的一些知识点,感兴趣的同学可以看一下!因为最终我是被北航计算机专业录取了

基本情况介绍

  本科是某末流985高校的计算机工程试验班,然后成绩排名是1/29,很惭愧,除了成绩以外没有什么跟本专业相关的项目和拿得出手的奖项,参加了美赛但是只拿了S奖(所以并没有保研加分),然后参加了校级数学建模比赛拿了一等奖,并获得了全国“深圳杯”优秀论文提名奖(相当于鼓励奖,还是没加分),节能减排竞赛校级三等奖,拿过国奖和两次校级大学生创新创业
  然后我准备保研的时间也挺晚的,因为之前成绩不是很好,所以没有想过能保研,但是由于大二我发现差0.2分我就能拿到国奖,所以就想着大三好好学习,因此大三成绩是排名第一的,因此把总成绩拉上来的!所以想提醒各位学弟学妹们,不到最后一刻千万不要垮掉,我就是后来居上的,就很多人都是到大三成绩追上去的,所以大一大二成绩不是很好也不要灰心!

准备情况

  说实话,我是三月份才开始准备保研的,二月在忙着参加美赛想着拿个H奖保研加分,然后当时也没有什么学姐学长指导我,我只能先暂时选择一些我认为相对来说友好的学校的导师发送邮件,但是当时我前五学期成绩是第二,但是当时以为成绩够了就行,但是后来才发现,很多老师都是注重你的科研能力,尤其是程序设计或者ACM这种有实力的东西,很多学校干脆就直接让你填写是否有ACM和其他计算机相关比赛的信息,就我只能空着,所以导致夏令营很多都没有进去,我到三月份我才发现算法能力非常重要,此时我数据结构基本都忘得差不多了,所以我只能重头开始捡起,然后真的从C语言的代码开始一点一点的学,但是时间太紧了,所以只能会了个大概,从而导致我有些夏令营即使进去了我的机试成绩也很糟糕导致被刷掉了…所以我的经历告诉我:
  1、提前参与一些跟计算机相关的比赛是非常重要的,尤其是在简历上面写上的话,至少能让面试的老师对你有一些印象
  ;2、可以尽早的联系导师,就三四月份联系都可以,联系导师的时候一定要注重强调一下你对他方向的看法,如果有类似的项目写进去,导师一定会很感兴趣,哪怕上过相关的课程也行,但是不建议太早,因为太早中途还得多联系,而且后期找导师的人太多了,老师把你忘记那就不好了
  3、一定要把简历写好,就自己不是很懂的东西一笔带过就行,会的就写得详细一点,万一面试老师一问你你连自己写的东西都不懂那就十分麻烦了
  还有就是,如果可能的话,可以通过你的老师来联系一些导师,比如说我当时给我一个本校的老师(是我们一个专业课的老师)发了邮件说想去找他谈一谈这个保研的事情,然后老师人很好,说他有同学在南京大学,可以把我推荐给他,通过这个老师,南大的那个老师就对我非常的友好,就感觉如果机试没问题的话就能直接去他那里了,并且平常也会跟我聊一下,了解一下我的近况,但是我最终还是卡在了夏令营的机试上面,所以就很对不起我本校的老师。
  其实很多人都有跟我一样的困惑,就是这么多学校这么多老师究竟该如何做选择呢,我觉得首先要看学校的地理位置,就你想离家近还是想去适合工作的大城市,老师其实这种建议真的很难说,因为有的老师当面非常的友好,但是真的进组了每天的活就非常多,就我舍友,选的那个导师真的非常和蔼,跟你说话笑眯眯的,我差一点也去他那里了,结果后来她形容她的实验室就是“女生当男生使唤,男生当牲畜使唤”,但是你很难找到很符合你心意的,所以我觉得像我们女生,最好是找一个脾气好一些的男导师,因为有一些女导师也会觉得女生代码能力不强所以不是很想要,当然这是因为我自己碰上的缘故,所以在此劝解一下大家,就是科研水平好,但是老师脾气好十分重要的!
  除此之外,我通过参加面试也了解到了各个学校的考察重点:
   1)了解到机试需要准备数据结构以及高级程序语言设计,利用C、C++进行编程;因此我特地从网上搜查了往年的机试题目并进行练习,北京理工大学侧重点是字符串,而南京大学侧重于算法的分析与设计,常用到数据结构的算法,难度较大。
  2)武汉大学进行的是笔试的考察,分成数据结构、高级程序设计和计算机网络三大部分,主要考察就是基础专业知识,并且考察知识点比较繁杂,复习起来比较花时间。
  3)面试的过程中大部分老师喜欢提及科研经历和项目、竞赛等,并且老师最注重的就是科研和英语四六级以及口语能力,如果没有这些则会重点考察专业知识的掌握能力,其中包括数据结构、计算机网络、操作系统以及高等数学概率论等,因此最好就是准备好自己的项目、竞赛,以及英文自我介绍,以备不时之需。
  4)了解各个学校的计算机专业的重点研究室以及其相关导师,尽量早的联系,以免名额不够,并且能够表现出自己的特点与进入实验室的热情和决心。
  然后我就开始然进行自己能力的提高:
  1)首先复习数据结构、计算机网络、操作系统,高等数学,由于知识点繁多,并且时间紧迫,所以唯一的办法就是查找往年的提纲,找出考察频率大的题目,例如数据结构中的快速排序、链表,计算机网络中的层,操作系统中的线程等,这样复习下来相对来说简单一些。
  2)每天开始在牛客网上面固定刷题,并且查找出现频率较大的题目进行归类,找出共同点来进行总结,并且出错次数多的题目要经常练习,由于我算法能力较差,因此部分算法的思考能力不足,因此有很多薄弱的环节,但是由于时间的紧迫很多东西只能够理解表层,但是相对来说还是有很大的进步。
  3)面对老师可能询问的问题进行了准备,先准备一篇英文自我介绍,然后把自己竞赛获得的成绩和曾今和导师一起做过的研究进行了准备,并且还需要会随机应变,还有英语口语能力的提升也至关重要,因此准备起来也难度很大。
  4)在导师评价网上面查看导师的相关信息,最注重的就是对待学生的态度以及自己科研的热情,如果是大牛导师可能很厉害,但是和学生接触的就不多,并且布置的任务会比较难,让学生无从下手,年轻的导师虽然相对来说科研经历没有那么多,但是可以带动学生一起做项目搞科研,因此需要在这两者中间进行抉择,根据自身的特点来选取特定的导师,并且能够让导师对你产生兴趣,前提是你也必须对这个方向有足够的兴趣。
  不过提醒一点,要是各位学弟学妹们能够有导师带领写论文的话,那就再好不过了,当时我们有一个导师就是会带本科生写SCI论文的,然后一作也会给你,并且会给你提供思路,一般跟他写论文的只要坚持都能写出来,但是我由于太懒了,大三去找他了嫌论文看不懂就放弃了,结果错失了写出论文带来的巨大的好处(虽然我大四好说歹说也写出来了):
  1)论文一作直接在总成绩的基础上保研加1分,总成绩是四年平均的成绩,然后加上1分很容易超过很多同学
  2)夏令营九推基本不用担心进不去,因为本科能写出论文的实在是太少了,要是简历里面写进去,老师直接会高看你一眼的,我有一个同学发表了两篇SCI论文,人大的老师一听说,直接就说我要你了
  3)面试的分数就会很高了,因为老师最喜欢有科研经历的学生,偏偏你还写了论文,项目经历就直接问你论文了,你能讲出来那分数就会非常高
  但是没有论文也不要灰心,机试也是一个分水岭,只要机试成绩高,老师是没有理由不要你的,所以好好刷题才是硬道理,并且努力准备好专业知识,对待夏令营其实不要很慌张,因为你去了你才发现很多人都是没有准备好的,都是尽力准备的,没有谁能够准备的十全十美,当时我去参加夏令营害怕的不得了,总感觉自己什么都比不过别人,但是到后来我才发现其实还只是我机试的确没准备好,其他的则跟别人差不多,面试什么的分数都还不错。
就是成绩单多复印几份简历多复印几份,面试的时候尽量做到每个老师都有一个你的简历,如果有的成绩不好,那就不给面试老师看成绩单

过程

   我当时拿到了的夏令营入营资格:北京理工大学、哈尔滨工业大学(本部)、南京大学、武汉大学,天津大学,但是当时太佛系了,并且也对自己的能力没有正确的认识,所以很多学校都没能进去,这时候才体会到计算机专业的可怕,入营比例居然能达到10:1的概率,很多和计算机非相关的专业的同学也会报名
   然后后来九推也就只参加了北航,就也没有想着去准备其他学校的,这一点其实自己都觉得后怕,因为万一没有进北航,很多好学校我连尝试的机会都没有,当时复旦和浙大我也没有去报名。

北京理工大学

   第一天上午主要是开营仪式,副院长会进行讲话,下午则参加了上机考试,两个小时之内做出两道题目,分别是给出几个单词,然后将其倒序,只需要对字符串遇到空格则分开存储就可以了,第二题就是求最长公共序列,实际上就是用动态规划算法进行求解,也可以一个一个字符进行比较,只是相对来说比较复杂一些,但是还是以自己的能力解决了这些问题。
   第二天上午分组进行了面试考核,由于是第一次面试,因此非常紧张,自己准备的英文自我介绍都忘了,但是三个老师很和蔼,让我用中文进行了介绍,并且询问了四六级成绩,报考北理的原因,以及参加的项目和竞赛经历等,因为老师都很好,因此后面我就不紧张了,并且跟老师能够很愉快的进行聊天,因此觉得自己的面试成绩还算不错,并且同时也认识了网络安全和大数据研究所的一个学姐,让我下午去了解一下他们实验室的研究内容。于是下午我就跟一群学生一起听老师讲述关于区块链的研究核心、未来的使用方向和潜能,有了深刻的理解,并且讲述完之后老师允许我们自由提问,很多同学有点惧怕数学,所以才选择这个方向,老师耐心的跟他们解释,同学们都放下心来。
  第二天晚上我找到了之前联系的导师与她进行了交流,就老师人很好,但是我后来觉得偏纯理论,感觉自己对理论性的机器学习兴趣不是很大,所以后来就跟老师说明情况了。
  第三天闭营仪式,指出学院组织专家对我们全体营员在笔试和面试方面进行考核,如果同学们在此次活动中各方面表现优异,将被授予“优秀营员”称号。并且优秀营员比例达到了百分之七十左右,且参加夏令营面试考核被评为“优秀营员”者,若能获得所在学校免试推荐研究生资格,可直接录取为计算技术科学与技术专业的2019年研究生;未获得所在学校推免生资格的优秀营员,如报考北理2019年硕士研究生且入学考试分数达到北理计算机学科专业复试分数线,则直接予以录取。因此相对来说北理的夏令营还是比较容易的。

武汉大学

   第一天到达了学校安排的酒店放下行李,于是就赶到武汉大学计算机楼提交材料,由于提前得知优秀营员的录取率外校的学生高达百分之七十,校内学生录取率是百分十六十,因此心里还算有底,只要笔试和面试正常发挥就可以了。因此相对来说没有那么紧张。并且总分=背景评估分×40%+笔试×30%+面试×30%,因此相对来说985的学生占优势较大。下午我们就参加了心里上机考试,看来学校对我们还是良苦用心,确保我们心里健康,也就是心里健康测试。
   第二天上午,我们就开始举行了开营仪式,首先由计算机研究院的院长来给我们致辞,给我们具体讲述了关于武汉大学计算机研究院的历史来源并且欢迎我们的到来,并且对笔试内容进行了简单的介绍,然后我们就去教室进行长达两个小时的笔试,笔试内容则是数据结构30分,高级程序设计40分,计算机网络30分,相对来说高级程序设计题目简单一些,首先是来写出一个时间复杂度为O(n)的排序算法,但是当时真的没想出来是用归并排序,只写出了一个快速排序,还有一个也是利用字符串数组进行运算求解的,由于是笔试,不需要程序运行所以还是降低了难度,但是数据结构考得就基本中偏难的了,考了图里的用邻接矩阵形式查找连通图,因此不能够用并查集来计算,也就是用数组来存放父结点的编号,还有一个也是利用时间复杂度为O(n)的排序算法对类中的对象按照变量的优先级进行依次排序,另外就是用堆来进行队列的进出,这样就比直接用队列多了一些步骤,而计算机网络考察的也很基础,但是知识点太多了,就复习不到,尤其是回退N算法的考察计算并没有了解太多,书上也只是浅显的介绍了一下并且没有举实际例子,还有一个计算IP地址和子网段、网络端口号的题目,由于题目限制了范围,所以做起来比平常要复杂,总体来说还是自己复习的不够,因此很多题目没有能够做出来,因此反而心里还是没底的。
   第二天下午,就是进行面试,首先是进行中文自我介绍,由于我奖学金和科研经历都没有,因此心里也没底,我之前听说,面试一般都是如果你有很厉害的科研经历或者论文或者项目,老师都会追问你这些东西;如果你只是成绩好,那就会用英文问你专业课知识了,首先不说你专业课复习得怎么样,但是英文专业名词一般还是不会很懂的。但是这次的老师有四个,两个分别用中文和英文提问,另外两个负责打分,中文回答一些关于人工智能的算法,由于之前准备过BP算法,因此回答起来比较流利,并且介绍一下自己的竞赛和获奖比赛等,但是英文就比较有难度了,问了edge computer 、JRE、Tomcat等细微的知识点,并且我的英语口语和听力也不是很强,所以相对来说很多题目都回答不出来,索性老师也没为难我,回答不出来的题目就给我更深的介绍或者换成其他问题,比如一些平常一些的问题来缓解一下我尴尬的境地,最后问了边缘计算和云计算的区别,这些问题碰巧是我在北理的时候老师回答的问题,因此也准备了一些。总体来说还算不错的,出来以后同学们很多问了高数的问题,回答起来比较难。
   第三天就是计算机学院各个所的负责人介绍自己所的情况和教授研究方向,分别有软件工程研究所、多媒体国家工程技术中心、人工智能研究所等,都是非常优秀的实验室,通过老师的介绍来对其有了更加深刻的了解,选择自己合适的方向,然后联系自己心仪的导师进行面谈,我找的导师是关于机器学习和人工智能的,主要是做图像处理和机器人的,但是与老师的沟通中发现自己很多的基础知识都掌握的不牢固,java里面的细节都忘记了,还有虚函数什么的,这让我感受到了自己仍旧和目标还有着很大的差距。
   下午我就去找华中科技大学的导师进行了交流,导师很年轻30岁就是副教授了,因此更多的是敬佩吧,导师方向是区块链的,通过交流下来发现老师是一个很随和的人,但是要求还挺高的,毕竟年轻又有精力来带同学,应该是有很多学生选她的。

南京大学

   第一天晚上到达的南京大学,首先就觉得南京大学的建筑十分的古朴,并且所有的建筑都非常有其特色,看得出来是一个百年学府的样式,因此从心油然而出的就是一种敬畏之情。
   第二天上午在计算机楼221报告厅我们开启了开营仪式,由周志华院长为我们进行了致辞和介绍,结束之后,我参加了海报宣讲,每一个课题组和老师通过海报的形式进行了介绍,并且有专门的学生来给我们介绍每一个课题组的研究内容,接着我们就去参观重点实验室,首先是一个智能匹配模型,通过隔空对电脑里面的物品进行组装,并且与结果进行匹配可以判断出是否是同一个物品,并且通过给出一个物品,可以智能查找到与其相对应的最相似的一个物品,接着我们观看了分布式实验室,由于课题组里面的老师人数众多,因此模型也是很多的,例如用rfid通过无线传输信号,通过戴上手套,在手套上面加上特定的rfid标签,通过运动手指,可以弹奏出钢琴的音符,并且还有一个液体高度计量器,通过向瓶子中导入液体,可以清楚的判断出来瓶子中的容量就行占用了多少,这项技术目前应用于医疗方面,能够产生较大的用处,让我印象颇深,并且最厉害的实验室是lamda实验室,主要是进行人工智能、机器学习等,通过智能算法,首先选取一幅图片,让机器自己找出图片中包含的物品,但是由于没有人工限制,机器找出来的可能跟颜色、形状相关联,这个时候通过人工进行筛选,反馈给机器让他进行学习这些选取的图片中的共同点是什么,这样子再进行智能选取出来的就非常接近人工了,经过多次筛选就能够获得完美的效果,并且此种算法还可以运用到智能导航,例如寻找船只,通过观看周围天气的变化来选择最佳的路径,可以看出,人工智能在当今这个时代是非常久发展潜力的。
   第二天下午我就去找了自己之前联系的导师对自己进行了自我介绍还有一些项目等,为了能够让老师看出我对其课题组有兴趣,并且老师给我说明了面试和机试需要注意的地方,交谈起来十分融洽,虽然感觉自己能力不是很够,但是老师还是给予我很大的鼓励。之后回去就开始准备面试和机试,希望能够考出好的成绩。
   第三天上午就开始进行了面试,由于之前参加过了两次面试,所以心里并不怕,果然老师还是顺水推舟问到了快速排序,最小生成树,这些都是数据结构里面最基本的知识点,后来又问到了bp算法,但是高等数学问了泰勒公式,自己确实记不得了,也很诚恳的说了,接着又问我项目经历和竞赛,最后让我用英文介绍数据结构这门课出来以后感觉回答的还不错,至少大部分知识都回答出来了。
   第三天下午就进行了机试,由于有三道题,但是我第一道题做不出来,然后一直绞尽脑汁的在想如何用递归求解,题目是给一个n,然后有n位0或1组成的字符串,例如n=3,则有000,001…111,求1不连续的个数,然后一直没有想出来,导致第二题其实可以做出来的,就是给一个n,再给出一个字符串,查找里面缺失了1-n中的那个数,直接用动态规划就可以解决,因此时间的分配导致我出现了失误,最终还是没有做出来。
小结: 南京大学夏令营能看出更加有挑战性,只有十分之一的人入营,因此竞争程度十分激烈,并且机试题目必须要有充分的准备才能够想出来,但是我准备不够,想不出来解决思路,并且对时间的掌控不够因此错过了简单题目的思考,因此还是掌握不熟练,毕竟去都是很厉害的人,因此做任何事情都不能够掉以轻心,一定要有着详细的计划才能够做的很好。我就栽在不够重视这上面了,而且专业知识复习不够,尤其是操作系统和数学知识,很多东西都忘记了没有及时复习,因此想要拿高分,就必须肯勤学苦练。虽然失败了,但是通过这次经历让我明白了我和其他人之间的差距,必须要努力学习才能够弥补过来,并且学习不是一天两天就能够出成果的,必须厚积薄发。

哈尔滨工业大学

   当时选择的是本部,所以主要是远程面试,面试题目还算简单,并且最后大部分人都过了,首先自我介绍,我用英文进行的自我介绍,然后老师开始让我用英文介绍一下在大学里面最自豪的事情,然后想了半天就只能回答说自己参加了比赛并且通过自己的努力获得了比较不错的成绩,因此平常自己动手能力比较差,不能够做很多厉害的项目,但是为了能够提高自己的动手能力,由于自己英语口语能力不是很强,所以相对来说还是有点回答的不是特别好。
   接下来英文翻译,ppt上展示一段英文,老师首先给一定的时间让我看,大概一分钟,之后让自己读一遍,读完后老师随机选择了其中几句让我翻译。这一环节很顺利。    第三个环节是抽题做,估计得有十个科目了吧,有两次放弃的机会,也就是5选3了。每个科目最多只能选两道题。我首先选择了数据结构的两道题,第一道是二叉树的前序遍历,很容易,第二道问的是“字符串是顺序表吗,为什么?”,这道题目老师问的比较细,我从存储结构,表达方式,两个结构的相同点来说的。最后老师点头我觉得也还行,第三道选择了高数题,判断两个函数的收敛性,由于这两个函数比较常见,我直接说出了答案,没有计算,最后老师也没有说对错,然后老师开始问我关于计算机网络的知识,问我五层协议和七层协议的区别以及为什么会分这么多层而不是一个层就可以完成任务了,我当时只想到了黑盒,也就是每一个层不需要知道其它层做了些什么,只需要完成自己的任务,也就是上一层传下来的任务,然后自己做一部分另一部分也传给下一层,这样子各层之间相互合作就能够完成一个应用,接着老是问我操作系统学了什么内容,我当时有点忘记了,只知道进程和线程,还有一个处理机调度,老师问我死锁是怎么造成的,还有死锁的危害,以及电脑蓝屏死机是什么情况,我都答的堆栈溢出,接着老是问我概率论里面的正态分布,概率论我都没有怎么看,因此基本都忘光了,所以很实诚的跟老师说自己并没有很仔细看,不过老师貌似也不以为意。
   然后老师开始问我项目问题,项目的话基本都能够回答出来七七八八的,毕竟自己还是参与其中了,但是老师更希望问一些关于原理的知识性问题,例如神经元的算法以及BP算法、遗传算法等,所以这一部分其实是需要特别注意的,但是老师貌似有点赶时间,所以就也没有问的那么详细,因此我觉得还是回答的比较满意。
   最后一个环节就是自由问答了,估计因为我是最后一个吧,老师们也觉得任务快完成了,老师们显得很放松,问了我很多问题,项目,比赛经历,学习情况,兴趣爱好,自己选择放松的方式,自己最得意和最失意的一件事。这些都比较好。有个老师问我我联系好的老师已经没名额了,然后问我如果跟其他老师能够接受,我说能接受,最后问的我觉得是我觉得非常后悔回答的一个,老师看我成绩单,其中有很多和嵌入式相关的课程,问我难道只选择做软件,不选择做硬件吗?当时自己回答做硬件也是能接受的,可以做,但是后来自己后悔了,因为自己最后决定还是做软件,不做硬件,怕这样一说就被分配到硬件去了。最后,面试结束,整个下来,面试的感觉还是挺顺利的。

北京航空航天大学

   北航的机试一般难度,建议有意报考的提前考CCF,成绩好的话可以拿去当作机试成绩。面试难度很大,问的问题涉及很广,且会问比较多的基础问题。老师也会经常怼你,有个准备就行。
   但是很可惜的就是我没有考ccf,我后来才发现CCF是非常有用的,简直就是一个分水岭,比如说我一个同学去考了ccf,一共四个小时,五个题目,满分500分,然后北航是根据你的ccf排名来直接抵你的机试成绩,但是在CCF里面你是和全国各个地方的人来比较成绩啊,所以我同学考了250分,CCF排名前百分之十,另一个210,排名前百分之二十,后来上机考试他们分数都拉开了我几十分,所以真的能考一定去考,不要拖着,尤其是九月推免的时候,CCF考试正好在北航报名之前,所以能抵排名简直是血赚,幸好我面试发挥的还比较稳定,勉强过了,否则真的会后悔很久的。
   而且重点在于,你需要真的很努力刻苦的去学知识,由于有些同学夏令营已经过了北航,这个时候去了解一些相关的知识就非常重要了,比如说机试的时候能不能用STL以及面试的时候会问到什么题目,将大体的题目都记下来,
   第二天报道,由于我是参加了九月推免,报道时只收ccf c/c++成绩单,java是不算数的,因此我有一些特别优秀的同学就没有去考北航,因为他们比较擅长用java,所以这也是很可惜的一点,毕竟学校里面如果考察编程能力是不需要看编程语言而看你的编程能力就好了,而且说成绩转换是按百分比,也就是如果ccf考了5%,那么机试成绩就是所有参加机试的同学里前5%的人考的分数,血赚,讲真北航两道机试题,5%基本就满分了吧。之后老师说专硕和学硕在北航并没有什么区别,都是三年,且毕业要求一样,且都可以转博。另外又说了直博的难度并不会下降,后边也确实如此,直博总共报了20个人,最后可能是留下了6-8个,比例大致是一样的。各实验室宣讲,也没什么特别有用的信息
   然后我们就开始了上机考试,说实话他们的资料还是非常有用的,第一道题目就是让你输入n个学生的姓名和身份证号,然后从身份证号里面选出学生的生日,按照学生的年龄大小进行排序,年龄越小越靠前,如果年龄相同的话,那就对学生的姓名进行字典排序,这样子排序玩以后输出结果,这道题目很简单,首先建立一个结构体,里面存放学生的身份证号和姓名,然后从身份证号里面从某个范围的字符串位置截取信息,然后存放到string数组里面,然后自己写一个比较函数,并且利用sort函数对结构体进行排序,最后输出正确结果就好了。
   第二题比较麻烦,可能只是对我而言,因为我不大会用字符串进行模拟,题目的意思是有n个窗口,每一个窗口都有一个编号,按照输入的顺序从大到小,然后设定每一个窗口每一行最大的字符数和行数,然后输入一个字符串,在这个窗口范围内如果到头了就换行,实际上就相当于在文档里面输入到达最右边自动换行一样,然后每一个窗口都这样以后,开始点击窗口,随意点击几次,如果点击的范围内有窗口,则将这个窗口的优先级设置为最高,然后依次点击,最后输出窗口的优先级顺序并且随机选择一个窗口,要求输出这个窗口未被覆盖的字符,如果被覆盖了则用#代替,我想的办法就是利用取模的方式先对这一整个字符串进行分行显示,然后利用vector数组,由于vector里面是邻向链表,因此你可以利用erase或者insert函数进行直接的删除或者插入比较方便一些,然后定义一个结构体,里面存放的都是窗口的属性,然后进行循环,每一次对窗口进行分行,然后对每一次的点击进行判断,如果在范围内,就用vector插入到优先级最高的地方,不过我仍旧是没做出来,听其他同学说貌似有简便的方法,直接利用矩阵数组,然后直接判断,只要不在最上面就用0取代,否则用1取代,而且最可惜的就是,这一道题目是之前北航复试的题目的改版,之前那道题目并没有字符串,而是直接用窗口模拟,所以相对来说简单一些,可惜我当时用堆栈做的,思路本来就不是很清晰,所以这一次题目没有做出来也是在我可以接受的范围之内的。
   晚上九点的时候则出来了面试名单,做出来的应该都过了,可是机试100分,面试200分,因此面试占比非常大,但是面试其实差的分数不是特别多,所以最关键的还是机试,所以真的要好好敲代码!真的是非常重要了。
   给大家看一下我的复习知识点
1、自我介绍
  Good morning , my honored professors:
  First of all, please allow me to express my appreciation for the opportunity that you give me to join the interview.
  My name is , 21 years old. I comes from University, my major is computer science and technology. I am in the engineering experimental class.,My father is an IT staff, he actively guide me to learn computer knowledge,so I find my interest in that and take it as my life-long career when I came into contact with this major and studied hard,so at present, my score is the first in my class
  I am open-minded, quick in thought. I am able to operate the computer well .I am skillful in coding some simple programs and searching for information on the Internet。my hobby is reading, reading a lot of common knowledge, like the book in the hope of increasing wisdom
That’s all, thank you for your attention!
2、你有什么项目经验?What project experience do you have?
  I am following the teacher to writer a paper about Towards Minimum Delay for Code Dissemination in Loss Wireless Sensor Networks
  Our method is to increase the number of active nodes by using the energy left by nodes in the far sink region. This allows code to spread faster without reducing network life
  I also participated in an energy saving and emission reduction competition to write android programs in Java
3、擅长什么专业课?在实际的项目如何做的
  I am good at program design language C++ and the basic knowledge of computer network.and database. To practice C++, I have written several small programs, like Library management system and The address book .
4、Can you tell me the difference between C and C++
the main difference is on the OOP (object oriented programming) technology.

  C++ is an OOP language. It can use the objects to call the methods and complete the operations, but it is an extension of C language. C is focused on the process for implementing (实现)the functions.
5、The idea of object orientation 面向对象的思想
抽象、封装和数据隐藏、多态、继承、代码的可重用性

  abstract、Encapsulation and data hiding、polymorphism[ˌpɒlɪ’mɔ:fɪzəm]、inheritance、Code reusability
6、What is virtual reality?(虚拟现实是什么)
  虚拟现实技术是一种可以创建和体验虚拟世界的计算机仿真系统,它利用计算机生成一种模拟环境,是一种多源信息融合的、交互式的三维动态视景和实体行为的系统仿真使用户沉浸到该环境中
7、What is a heap?什么是堆(重点!)(北航面试让我说出堆排序算法)
  堆中某个节点的值总是不大于或不小于其父节点的值;堆总是一棵完全二叉树
  Heap sort stability (堆排序稳定性):不稳定
  稳定度(稳定性):指待排序的序列中有两元素相等,排序之后它们的先后顺序不变
  稳定性算法: 基数排序 , 直接插入排序 , 冒泡排序, 归并排序
不稳定性算法: 二分插入排序,希尔排序, 快速排序, 简单选择排序,堆排序
重点!! 快速排序,背一下,真的很有用,我参加的南大、北航的面试都要求我说出快速排序的过程**

8、什么是优先队列?
  以操作系统的进程调度为例,当有处理机结束一个进程的调度,在就绪队列中选择优先级最大的那个进程,然后放入处理机进行调度并且在就绪队列中插入新的进程
9、全局变量是好是坏?Global variables are good or bad
  1.由于全局变量,程序运行期间,始终占有那块存储区,所以空间利用率比较低,大量的全局变量,很快就会把内存用光,所以要少用全局变量;
  2.全局变量由于每个函数都可以使用,所以任何一个函数的修改,如果修改了全局变量,都有可能影响到其他函数,所以不利于调试。
10、What is compute network?什么是计算机网络
  计算机网络是一组相互连接的计算机。它由许多节点和链接组成。节点可以是计算机或路由器。这些链接连接所有节点。
A computer network is a group of interconnected computers. It is composed of many nodes and links. The node may be computer or router. The links connect all nodes
  11、What is software testing? 什么是软件测试(北航面试我抽到了software development的翻译)
  软件测试是一项旨在向客户提供产品软件质量信息的调查。作为一名QA,您应该尽最大努力找到尽可能多的错误,这样程序员就可以修改它们。测试方法包括黑盒测试和白盒测试。
  12、什么是计算机图形学、计算机视觉、图像处理?
  计算机图形学(Computer Graphics,简称CG)是一种使用数学算法将二维或三维图形转化为计算机显示器的栅格形式的科学。简单地说,计算机图形学的主要研究内容就是研究如何在计算机中表示图形、以及利用计算机进行图形的计算、处理和显示的相关原理与算法。
  计算机视觉是使用计算机及相关设备对生物视觉的一种模拟。它的主要任务就是通过对采集的图片或视频进行处理以获得相应场景的三维信息
  在图像科学中,图像处理是用任何信号处理等数学操作处理图像的过程,输入时图像(摄影图像或者视频帧),输出是图像或者与输入图像有关的特征、参数的集合
Computer Graphics和Computer Vision是同一过程的两个方向。Computer Graphics将抽象的语义信息转化成图像,Computer Vision从图像中提取抽象的语义信息。Image Processing探索的是从一个图像或者一组图像之间的互相转化和关系,与语义信息无关
13、BP算法很重要,武大就问过我这个问题
  BP算法的基本思想是,学习过程由信号的正向传播与误差的反向传播两个过程组成。正向传播时,输入样本从输入层传入,经各隐层逐层处理后,传向输出层。若输出层的实际输出与期望的输出(教师信号)不符,则转入误差的反向传播阶段。误差反传是将输出误差以某种形式通过隐层向输入层逐层反传,并将误差分摊给各层的所有单元,从而获得各层单元的误差信号,此误差信号即作为修正各单元权值的依据。这种信号正向传播与误差反向传播的各层权值调整过程,是周而复始地进行的。权值不断调整的过程,也就是网络的学习训练过程。此过程一直进行到网络输出的误差减少到可接受的程度,或进行到预先设定的学习次数为止。
  BP神经网络是这样一种神经网络模型,它是由一个输入层、一个输出层和一个或多个隐层构成,它的激活函数采用sigmoid函数,采用BP算法训练的多层前馈神经网络。BP算法全称叫作误差反向传播(error Back Propagation,或者也叫作误差逆传播)算法。其算法基本思想为:在2.1所述的前馈网络中,输入信号经输入层输入,通过隐层计算由输出层输出,输出值与标记值比较,若有误差,将误差反向由输出层向输入层传播,在这个过程中,利用梯度下降算法对神经元权值进行调整。
• Sigmoid - 用于隐层神经元输出
优点:自学习和自适应能力
容错能力:BP神经网络在其局部的或者部分的神经元受到破坏后对全局的训练结果不会造成很大的影响,也就是说即使系统在受到局部损伤时还是可以正常工作的。即BP神经网络具有一定的容错能力
  缺点:(1)训练时间较长。对于某些特殊的问题,运行时间可能需要几个小时甚至更长,这主要是因为学习率太小所致,可以采用自适应的学习率加以改进。
  (2)完全不能训练。训练时由于权值调整过大使激活函数达到饱和,从而使网络权值的调节几乎停滞。为避免这种情况,一是选取较小的初始权值,二是采用较小的学习率。
  (3)易陷入局部极小值。BP算法可以使网络权值收敛到一个最终解,但它并不能保证所求为误差超平面的全局最优解,也可能是一个局部极小值。这主要是因为BP算法所采用的是梯度下降法,训练是从某一起始点开始沿误差函数的斜面逐渐达到误差的最小值,故不同的起始点可能导致不同的极小值产生,即得到不同的最优解。如果训练结果未达到预定精度,常常采用多层网络和较多的神经元,以使训练结果的精度进一步提高,但与此同时也增加了网络的复杂性与训练时问。
(4)“喜新厌旧”。训练过程中,学习新样本时有遗忘旧样本的趋势。
14、马尔科夫模型
  对于一个随机过程,如果其未来所处的状态仅与其当前状态有关,而与过去的状态无关,则该随机过程被称为Markov过程
15、模拟退火
  第一步是由一个产生函数从当前解产生一个位于解空间的新解;第二步是计算与新解所对应的目标函数差;第三步是判断新解是否被接受,判断的依据是一个接受准则,最常用的接受准则是Metropolis准则: 若ΔT<0则接受S′作为新的当前解S,否则以概率exp(-ΔT/T)接受S′作为新的当前解,第四步是当新解被确定接受时,用新解代替当前解,这只需将当前解中对应于产生新解时的变换部分予以实现,同时修正目标函数值即可。
16、虚基类
  在继承间接共同基类时只保留一份成员
  class 派生类名:virtual 继承方式 基类名
  在最后的派生类汇总不仅要负责对其直接基类进行初始化,还要负责对虚基类进行初始化
17、多态性
  虚函数:在基类生命函数是虚拟的,并不是实际存在的函数,然后在派生类中才正式定义此函数,允许在派生类中重新定义与基类同名的函数
  这样就可以允许在派生类中对基类中声明为虚函数的函数进行重新定义,并且赋予新的功能,并且可以通过指向基类的指针指向同一类族中不同类的对象,从而调用其中的同名函数
   纯虚函数:在基类里面留一个函数名,具体功能留给派生类根据需要去定义
19、C++多态性:
  多态性从系统实现的角度来讲可以划分为两类:静态多态(也叫编译时多态性)和动态多态(又称运行时多态性),以前学过的函数重载和运算符的重载属于静态多态性,在程序编译时就能决定调用的是哪一个函数,静态多态是通过函数的重载来实现的
  动态多态:在基类的函数前加上virtual关键字,在派生类中重写该函数,运行时将会根据对象的实际类型来调用相应的函数。如果对象类型是派生类,就调用派生类的函数;如果对象类型是基类,就调用基类的函数。
C++纯虚函数 :
  定义:纯虚函数是在基类中声明的虚函数,它在基类中没有定义,但要求任何派生类都要定义自己的实现方法,基类中实现纯虚函数的方法是在函数原型后面加“=0”。例如:
virtual void f() = 0;
为什么要引入纯虚函数:
  1、为了使用多态特性,我们必须在基类中定义虚拟函数。
  2、在很多情况下,基类本身生成对象是不合情理的。例如,动物作为一个基类可以派生出老虎、孔雀等子类,但动物本身生成对象明显不合常理。 为了解决上述问题,引入了纯虚函数的概念,将函数定义为纯虚函数(方法:virtual ReturnType Function()= 0;),则编译器要求在派生类中必须予以重写以实现多态性。同时含有纯虚拟函数的类称为抽象类,它不能生成对象。纯虚函数永远不会被调用,它们主要用来统一管理子类对象
20、Linux开机顺序
  BIOS 上电自检(POST)
  引导装载程序 (GRUB2)
  内核初始化
  启动 systemd,其是所有进程之父
21、linux硬链接和软连接
  硬链接就是同一个文件使用了多个别名(他们有共同的 inode)
  1)硬链接的所有文件必须在一个硬盘上,如test在磁盘/dev/sda1上面,那么test1和test2也必须在/dev/sda1上面。软链接的所有文件可以保存在不同的磁盘上。如test在磁盘/dev/sda1上面,test3和test4可以保存在/dev/sda2上面
  2)由于硬链接是有着相同 inode 号仅文件名不同的文件,因此,删除一个硬链接文件并不影响其他有相同 inode 号的文件,硬链接不能对目录进行创建,只可对文件创建;软链接(也叫符号链接)与硬链接不同,文件用户数据块中存放的内容是另一文件的路径名的指向。软链接就是一个普通文件,只是数据块内容有点特殊。软链接可对文件或目录创建
  3)删除软链接并不影响被指向的文件,但若被指向的原文件被删除,则相关软连接就变成了死链接
  然后第二天面试,说实话内心是很紧张的,但是运气真的好,由于28号推免系统开启,很多学校都需要抢占好学生,因此大部分学校都需要你凌晨的时候进行确认,因此很多人可能就不愿意冒险去参加北航了,因为万一没有通过就不能被录取了,所以有一些人没有来,当时我迟到了,所以老师把我安排到了最后一个面试,所以感觉有点尴尬。当时进去以后老师先让我用英文进行自我介绍,由于之前准备的比较充分了,所以还算流利,接着老师开始选了一道政治问题让我回答,就作为一个大学生你认为创新有什么用,然后根据自己的了解回答就可以了,然后老师让你选一道英语题目进行翻译,题目还算简单,我抽到的是software development,但是当时居然翻译成了软件发展,现在想想有点搞笑,应该是软件开发,然后不会的句子我直接跳过去了,我本以为我会抽到那种很复杂的例如机器学习人工智能的题目,所以还是运气好,接着老师开始问我数学问题,在开始跟他们聊天的过程中发现老师什么数学知识都会问,所以想要数学拿高分一定需要认真复习,他们离散数学概率论都有被问到的,而且老师会只问一个科目,所以就看运气了,老师问我的是高数问题,一个函数的单调性是什么?什么是拐点?我当时不能够很好的表达出来,只能模糊的说,老师又问我函数的凹凸性,我回答出来了,然后还有一些问题我就没答上来,接着另一个老师问我数据结构,这门课是基础课程,所以想要学好的话就需要很仔细的看了,老师会问到排序,快速排序是重点,时间复杂度挺重要的,然后堆排序,哈希表,但是我当时回答的是哈希表是解决冲突的问题,老师不可置否,觉得我答的不怎么样,而且有一位很厉害的女老师,总是一针见血点出我的缺点,让我很尴尬,有一点不知所措,但是我也不怯场,把能说的都说出来就可以了,B+树,勉强回答一下,然后老师会问项目问题,这个我回答的就非常不好了,我选择错了我的项目,选了一个并没有完成的项目来讲,也是我最近才开始做的一个研究项目,所以当时那个老师就说你讲的这个没有结果也不知道能不能研究出来是吧?我当时真的也不知道说什么只能说是,但是纵观整个面试,相对来说我觉得有自信心非常重要,老师可能更多的去注重你的思维能力、表达能力、言行举止什么的,都会加分,我后来虽然是很险的进去了,但是我的机试成绩不好,只拿了一半的分数,由于面试成绩相差的分数不多,所以可能我就是靠着面试比较高的成绩进去的,所以还是感谢自己的运气和准备,能够回答出来老师大部分的问题。
  同伴被问到的问题有很多,包括概率里的一些基本概念和数据结构的一些问题,比如排序算法的稳定性之类。 还问了一个概率的计算题:一副扑克牌平均分成三堆,大小王同时在一堆的概率。 除此之外我打听到的问题还拉格朗日定理(离散里的)、矩阵的秩、模拟退火算法(这个是因为学过那门课),线性无关,高斯分布是什么,基本上涵盖了所有基础科目,准备时要准备所有学过的课,也有同学的分享:在一个小会议室,4~5个老师面你,不同的小组之间形式以及考察内容会有所不同。一般来说先是英语测试,一种是做英语自我介绍,一种是抽一张小字条,朗读并翻译上面写的一小段计算机相关的英文段落。然后是抽一张政治问题的字条谈一谈自己的看法,这个不计分的,只要态度正确就行…之后就开始了…我那组问的是离散数学,上来就让我讲一下马尔科夫,然后问怎么判断两个无穷集合的大小,单射满射和双射的概念,之后还有一些相关的问题。其他也有问高数,线性代数,概率论,C++语言基础的。比如问什么是线性相关,阐述c++多态性,泰勒展开和傅立叶变换的概念以及他们在计算机领域中的应用。反正实在不会不要慌,被老师怼了也不要怕,因为大家好像差不多惨…之后老师主要问了我论文相关的事情,也顺便怼了怼。最后,一个老师问了我分布式系统相关的问题,让我谈一谈怎么实现分布式系统中的时钟统一,各种逻辑时钟得到的结果是偏序还是全序。
  下午出成绩,看到自己过了内心特别激动,因为北航是我非常想去的一个学校,离家比较近,所以自己的付出获得了回报内心是非常激动的,然后重点是后来我也特别的幸运,因为我在九推之前就联系了一个导师了,他回我邮件也很慢的那种,但是他说欢迎报考,所以我就觉得他那里肯定有名额,然后机试玩当天我就给他发邮件问可不可以去找他面谈一下,结果当天没回我,然后我同学也给我推荐了导师,看成绩的时候也碰到了一个有名额的导师,还有一个是面试我的导师给我打电话,当天晚上正在纠结突然发现我联系的那个导师给我回邮件了,但是隔了两三个小时了,但是第二天就必须要填意向表了,如果找不到导师就会随机分配,这样子很可能不能选择你喜欢的方向,然后我就去找导师同办公室的那个导师联系,居然要到了电话号码,导师也正好第二天到学校,所以一路的转机就这样让我选择了自己喜欢的学校和自己心仪的导师,想想真的是交了好运了。

小结:机试完以后会淘汰一小部分人,然后只要他们允许你用CSP成绩代替了就一定不会被淘汰。不过最后是会做一个成绩的归一化的,就是会去取与CSP排名相同的当天的考试分做你的机试分,所以自行决定要不要用CSP代替。最后面试分数也会做一个归一化,最后将最终总分排名后依次录取。出完优秀营员以后,还要自己去联系老师去前签意向表,只有大半天时间…很多比较火的实验室以及老师一下就签完了,如果没有找到心仪的,可以赌一把。因为有不少老师的名额是分批给的,那个时候很容易没名额了,多跟老师联系联系或许会有专机。当然啦,要是志在北航的还是提前做好准备和老师联系,这样不至于当天四处乱转不知道去找哪个老师。
  真的很庆幸,自己做出的努力都没有白费,最后也得到了想要的结果——我这几个月都一直在担心是否努力会白费,也真的经历了好多努力却失望的事,我并不奢求能天上掉馅饼,但只要能付出有收获,这我觉得已经算是特别幸运和幸福了。
  要是有什么不明白的可以问我呀!希望学弟学妹们都能上自己理想的学校!

你可能感兴趣的:(保研)