记2019南京大学计算机系开放日

因为没有找到曾经参加南大计算机系夏令营的学长学姐(好像也没有去找过),参加夏令营前的准备基本都是靠着网上搜到的各种资料,通过看他人的经历与记录,了解夏令营相关考核的内容和侧重点,从而作出针对性的准备。说实话,从前人的博客记录中,我感到获益良多,在参加夏令营时,就想着也要记录一下,留作后人参考,这也可算是一种传承吧。

前期准备

因为早早抱着保研的想法,在学期中段就有这复习专业课的计划了,大致复习了如下内容:

  • 数据结构(非常重要
  • 离散数学
  • 线性代数
  • 概率论
  • 操作系统
  • 计组

对于南大计算机系夏令营的准备,其实开始得比较晚,因为之前海投了挺多夏令营,而计算机系的开放日时间刚好夹在一堆夏令营之间,时间相冲,一开始是抱着放弃南大计算机系的夏令营的想法,然而其它夏令营要么没进,要么出得很晚,最终还是选择了南大计科。

南大的准备主要还是准备算法方面的机试,在六月份的时候把刘汝佳的紫书过了一遍,并且在voj上把部分的题刷了一下(时间太短刷的其实不多),题单可以看此。另外,在看完书后,每天都上voj找一两道题练练手感,主要是 dp 和 dfs 的题。根据往年的题目来看,题目难度大概在 LeetCode 中等,当然也有直接 POJ 的原题,如果时间充足找个题单把 POJ 刷刷还是不错的。

面试的准备,则是参营前几天随便准备了自我介绍,项目经历,兴趣爱好等面试常问话题,当时时间紧,其实都还没准备完,还想着机试完后再准备。

流程

开放日活动共三天

  1. 上午报到,下午机试
  2. 面试。分成上下午两批,每批大概十个组,每组十多人
  3. 介绍参观+与老师交流

其实就主要三个活动:机试,面试,找导师签字。

机试

机试的形式是 OJ 形式,两个小时,三道题,三百分,每道题十个测试样例,每个十分。机试非常重要! 这个在我从网上看到任何一个博客/经验帖里都这样说,甚至还有说面试只是走一个过场。我联系的导师也是这样对我说的,面试给的分都差不多,而机试可能拉上百分。

可选择语言为 C/C++ , Java,提供的 ide 有 Visual Studio 和 Eclipse。

第一道题

给一个不超过 m(m<=100) 位的整数,从中移除 k(k<=m) 位,使得剩下的整数最小。

当时的思路是每次移除最大的数字,然后有 60 分,但这个在后来做完其它题目回来重新想的时候已经发现有问题了,如对于 1032,去掉3 后显然没有去掉 1 小。当时考虑用dp重写,dp(i,j)=min(10*dp(i-1,j)+num[i],dp(i-1,j-1)),但没时间调试了。

现在搜索看到一个贪心的方法:每一步总是选择一个使剩下的数最小的数字删去,即按高位到低位的顺序搜索,若各位数字递增,则删除最后一个数字,否则删除第一个递减区间的首字符。具体链接为C++贪心算法之最小新整数

第二道题

B 个男孩,G 个女孩,要求所有男孩女孩排成一队,连续的男孩个数不可以超过 K 个,有多少种排队方式

直接就 DFS 了,dfs(b,g,k)

  • b==B&&g==G时,成功,计数
  • b>B||g>G||k>K时,失败,返回
  • 否则两种递归
    • dfs(b+1,g,k+1)
    • dfs(b,g+1,0)

最后超时,70 分。当时已经很满意了,直接跳过放弃优化。

第三道题

给出一个二叉树的前序遍历序列和后序遍历序列,问可能的二叉树有多少种

也是 dfs 解决 dfs(preorder,postorder),直接 AC 了

  • 如果是叶子,返回 1
  • 找子树
    • 如果有两个子树,则返回子树的 dfs 乘积
    • 如果只有一个子树,则返回 2* 子树的 dfs

面试

因为机试考得比较不错,加上前一晚准备时差不多是跟同房的同学吹了一晚水,面试准备得比较一般,晚上看了看英文 wiki 准备一下计算机学科相关话题,以及完善一下自我介绍与项目经历。

面试当天,探听到每个人的面试的形式基本一样,基本是自我介绍+专业/算法/项目问题+性格测试,而内容与难度则根据不同的组别可以有很大的差别,但感觉总体面试都不会为难学生,不会的问题老实说不会,也不会继续追问。本人的面试内容如下:

  • 中文自我介绍,没说时间
  • 专业问题
    • 数据挖掘是统计还是概率
    • 买桃问题:一个桃多少钱,三个桃核换一个桃,给定钱能有多少桃
    • 立方体不借助工具怎么倒出一半水
    • 最小生成树算法
    • 单链表怎样在常数空间复杂度查有没有环
  • 项目相关
    • 聚类算法的结果是什么(第一个问题就踩雷,然后就没有后续了
  • 英语提问
    • 大学期间最感兴趣/擅长的课程
  • 性格相关
    • 喜欢跟什么样的人相处
    • 遇到不好相处的人怎么办
    • 遇到压力/挫折怎么办

面试时间规定是在十分钟内,但是这个基本都是由面试的老师来控制,我面试的时候没吃午餐 + 等了太久 + 有点紧张,我觉得发挥得挺一般的,有些能答出来的题都没答出来(那个单链表的题我还在 LeetCode 刷过,也没答出来,勉强给了个线性空间复杂度的解法),实在可惜。不过好像从最后的结果来看好像影响也不大?

导师

在挺早的时候,我院的一个老师帮忙宣传一个实验室时,我就发了简历给我联系的导师的实验室,然后在参加开放日之前几天,我又发了一封邮件联系,沟通得也不错。面试之后就找他聊一聊,顺带签字了。联系导师其实也不算难,我觉得不提前联系其实也是没什么问题,除去那些很热门的实验室和导师外,导师都还是很乐意为你签字。跟我一起去的同学,面试当天才联系导师签字,一气呵成。

其它

  • 住:本次学生的住宿分成两批,一个是就在计算机系楼旁的国际会议中心,另一个是步行三十分钟左右的中公汇悦酒店。两者规格差不多,远的就麻烦一点,有行李可以坐公车。
  • 食:看往年的帖子都说是发饭卡,还可以到超市买东西,而今年则只有指定饭堂的五张饭票,每张饭票当15元使用,只能单次使用,有点麻烦。