记2019年信工所六室预推免面试

2019年信工所夏令营于7月14日开营,非夏令营成员面试定于7月18日。因为信工所每年招收学生较多,所以信工所各室会在那些没有被选上参加夏令营的同学中再选一批参加各室自己的面试。比如今年夏令营只收了150人,我没选上,但是在接下来的一周陆续收到了信安国重、二室和六室的电话以及某位老师的邮件,都是问我18号有没有意愿去面试的。我最终选择报六室。 某室的老师曾解释过这批非夏令营学生是怎么筛选出来的,夏令营名单公布后,那些没被选上夏令营的同学的简历会被发到各个室的各个老师,如果老师对你的简历感兴趣就会为你的简历投一票,最终得票多的同学有机会参加18号的面试。这些非夏令营的同学除了中午管一顿饭,其余费用自理,时间是一天。上午安排体检,如果提前一天去的话晚上住在体检医院附近的宾馆是最好的。

在面试的前几天,六室会把面试需要准备的材料通过邮件或短信发给各同学,(很多人报名的邮箱填的是谷歌邮箱,但谷歌邮箱会默认把信工所的邮件视为垃圾邮件,导致很多人错过了邮件通知)。

18号上午体检完信工所安排班车接我们去六室所在的益园园区,位于北京五环,位置有点偏,园区内部和IT公司的陈设很相像。到了园区后各室会有一位老师领着学生到各自的办公地点参加考核,考核包括心理测试、笔试、机试和面试

心理测试就和学校每学期组织的心理调查问卷一样,提前准备好2B铅笔。

笔试是一张卷子45分钟,题目倒是有点新颖,和平时考的专业课完全不一样,更像是知识竞赛的题。比如给你一个数让你拆成几个连续的数的和,有多少种拆法?智能手机九宫格锁屏有多少种密码手势?最后还有一题给你函数让你写逆函数,总之和算法、逆向、编译原理等有一点关系,。虽然可以使用手机,但是在45分钟内确实做不了多少题(何况这种烧脑的题网上也不好搜),出题的学长直接就明说了这张卷子你们应该做不到30分。最后也是连蒙带猜地做出来几题。做完已经是1点多了,热心的学长学姐直接把午饭送到了笔试的机房。

面试下午2:00左右开始,很多人都是先做机试然后参加面试,或者机试做了一半去参加面试。我不想因为面试影响机试思路,所以决定先参加面试再回来做机试。面试分三轮:英语面、技术面、综合面,分别安排在三个办公室,没有固定的顺序。

  • 技术面:负责技术面试的是两位学长,开始是自我介绍,2-3分钟左右,然后学长会针对你的项目经历提问题。我在简历中写了做过工控安全网关和网络攻击工具集,学长问我这个网关的流量速度如何?对原工控设备是否有影响?什么是Land攻击(因为我项目经历里面写了land攻击)等等,可能学长对我的项目不太了解,问的问题不具有很强的技术性。但是两位学长人很友好,也没有问我专业课的问题,最后听说我做过内核学长还帮他的实验室打了一波广告。
  • 英语面:负责英语面试的是一位女老师,开始是英文自我介绍,也是2-3分钟,然后老师会根据你本科的经历用英语提一些问题,比如,学CTF多久了?有没有自己的CTF团队?团队有多少人?团队成员来自哪些学院等等,一般人都能应付。
  • 综合面:综合面试应该是最重要的一个环节了,被安排在一个大会议室里。正中央坐着六室的主任刘宝旭老师,两边各坐着两位老师,应该也是硕导博导级别的人物。开场是5分钟自我介绍(需提前准备PPT),然后是各个老师提问,老师问我做的网络攻击工具集有没有利用别的工具?攻击过程是怎样的?攻击效果怎么样?然后还有一些别的技术细节问题,因为项目都是自己做的所以回答起来并不困难。最后刘老师还问了我家庭的情况、每周是否运动、每次运动多长时间、有什么兴趣爱好、本科期间是否担任过什么职务等。以上问题都没有涉及专业课,整个面试流程还算流畅。

做机试的时候已经3点了,今年的机试和往年不一样。往年是CTF/编程二选一,今年编程是必做,1个小时3道题,CTF是选做,只有pwn、web、reverse(因为赶火车没来得及做……)。编程题3道:两道基础题一道附加题。基础题1是在一个二维数组保存的矩阵中找一个数,找到返回true,没找到返回false,这个矩阵的数从左到右依次增大,从上到下依次增大;基础题2是计算一个数转成二进制后包含多少个1;附加题是给一个数组,把数组的数拼接在一起,求怎么拼接得到的数最小, 例如输入数组{3,32,321},则拼接起来的最小数为321323 。前面的基础题就不用说了,附加题就是一道简单的ACM题。机试只能用C\C++\java,不能用python。因为在使用vs的时候遇到了一点小问题(没想到卡了20分钟),时间紧急也没来得及细想就转用java(况且eclipse带了自动补全)。

//基础题1:对每行进行二分查找
public static boolean find(int [][] matrix, int number){
	int row=matrix.length,column=matrix[0].length;
	for(int i=0;i<row;i++){
		if(number<matrix[i][0])
			break;
		else if(number>matrix[i][column-1])
			continue;
		else{
			//采用二分查找
			int min=0,max=column-1;
			if(number==matrix[i][min] || number==matrix[i][max])
				return true;
			int middle=(min+max)/2;
			while(middle !=min){
				if(number<matrix[i][middle])
					max=middle;
				else if(number>matrix[i][middle])
					min=middle;
				else
					return true;
				middle=(min+max)/2;
			}
		}
	}
	return false;
}
public static void main(String[] args) {
	// TODO Auto-generated method stub
	int [][] matrix={
			{0 ,1 ,2 ,3 ,9 ,11,14},
			{5 ,7 ,12,13,15,18,20},
			{8 ,9 ,19,20,21,40,60},
			{10,11,31,32,70,80,81},
	};
	System.out.println(find(matrix,19));
}
//基础题2:每次向右移一位,判断最低位是不是1
public static int binary(int num) {
	int count=0,r=0;
	while(num!=0){
		r=num&1;
		if(r==1)
			count++;
		num=num>>1;
	}
	return count;
}
public static void main(String[] args) {
	// TODO Auto-generated method stub
	System.out.println(binary(17));
}
//先对数组中的数进行排序,如果mn<nm,则视m<n,比如m=32,n=3,323<332,所以32<3
//这种大小比较仅是为了给数组排序,m<n意思是在拼接数字时m要排在n前面
package algorithm;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

public class Test3 {
	public static String find_min(int [] array) {
		List<String> num_list=new ArrayList<String>();
		//数字转字符串为了防止数字太大发生溢出
		for(int i:array){
			num_list.add(String.valueOf(i));
		}
		Collections.sort(num_list, new Comparator<String>(){
			public int compare(String a,String b){
				String r1=a+b;
				String r2=b+a;
				return r1.compareTo(r2);
			}
		});
		String result=new String();
		for(String num:num_list){
			result+=num;
		}
		return result;
	}
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int [] a={321,30,321};
		System.out.println(find_min(a));
	}
}

experience:
1、信工所看重本科项目经历,面试也都是基于项目经历来问,所以本科期间在实验室做开发还是有一些帮助。但是在实验室尽量要负责一些有技术含量的模块,很多模块虽然代码量大但是没有什么难度,对于日后推免没有什么实际益处;
2、如果有编程题机试,一定要提前做题练习。虽然此次机试题不难,但是如果长期不做题,在真正机试的时候还是会有些不适应,毕竟换了个环境而且有时间限制,对做题人来说有一定的心理压力。

Leave a Reply

Your email address will not be published. Required fields are marked *