校园招聘面试总结

     一直想写一篇文章来总结一下今年的校园招聘面试,工作这么多年了,还是第一次参加校园招聘,很有

纪念意义,当年作为学生参加校园招聘的场景还是历历在目,没想到转眼间好几年就这样过去了,废话少说

转入正题。

      这次校园招聘我参与了其中三个城市的,武汉,北京,南京,一路马不停歇,是连着跑了三个城市。

公司这次面试给技术面试官的自由度比较大,自己出题考察面试者,所以出发前还好好准备了一翻,看了

历年各个公司的面试题,心中了大概的思路,决定从以下几个方面考察面试者。

      1)考察项目经历,在项目中所承担的角色,以及主要的贡献。

      2) 考察计算机基础知识,操作系统,网络,语言基础等。

      3)考察算法以及手写代码能力。

      4)考察一些简单的智力题,这部分是可选的,看时间是否允许,主要看看应试者思维是否敏捷。

   一轮面试大概半个小时到四十五分钟,如果实在不能确定的,可能会延长到一个小时左右,但是原则上要在45

分钟内解决,面试者太多,过分拖延会打乱面试安排,接下来讲讲应试者在面试中各个环节所出现的问题。

      首先项目经历方面,应试者最容易犯的错误:

      1)滔滔不绝的讲述项目细节问题,抓住一个细节点淘淘不决,听的我都想睡觉,最后只有打断他,把他

重新引入到正轨。

      2)有些应试者还是准备不足,没能把事情说到点子上,通常情况我都会问说说你最得意的是哪个项目,

结果有些研究生应试者居然拿本科的毕设来讲,搞定我心理瞬间不爽。

      在说说好的应试者的表现:

       1) 这类童鞋一般项目经历丰富,有些项目还有些亮点,能够围绕这些展开描述,让人感觉这个童鞋动手

能力较强。特别是对于一些对自己以前从来接触过的东西,表现出很强的学习能力,这点就让面试官感觉很爽。

      2)准备充分,即使不是自己的模块,也会去熟悉了解,能够与自己东西很好的衔接起来,这就展现了这个人

的协作能力,而且能够不守着自己的那一亩三分地,多关注和向别人学习。这样就能让面试官感觉此人有潜力。

     其实说说基础知识方面,这次面试的主要是JAVA程序员和C++程序员,所以语言基础一定要掌握好,这个

是可以好好准备的,因为在短短的时间也不会很深入的问题。

    1)语言方面,主要是一些编程中的细节,一些常见的面试宝典之类的都有提到过的。

     2)操作系统,进程与线程,死锁,进程间通信等,linux常用命令等。

     3)网络编程,tcp/ip协议,socket编程,epoll/select模型等。

     4)其他诸如设计模式,一些常见的开源软件如apache旗下的有没有了解。

     接下来是算法和手写代码能力,这个也是重点考察的项目,这个是所有环节里重头戏,我一般会出两道算法题,

一道简单的,一道稍微难一点的,为什么这样出呢,受到面试时间的限制,但是这一项比较花时间的,首先简单的

算法题必须写出代码,稍微难点的写出代码最好,其次是写出伪代码,最次点起码要能够把算法实现能够较为准确

的描述出来,如果不是最优解,还需要提出优化方案(这个看情况面试官都会给予一定的提示)。

      这个还是举个简单的例子来更好描述一些,对于简单题,以二分查找为例吧,这个大部分人还是能写出来,但

是能完全写对的寥寥无几。大部分人的是这样子的:

 1 int binarysearch(int *a,int n,int k) 
 2 { 
 3     int low=0,high=n,mid; 
 4     while(low<=high&&i==0) 
 5     { 
 6         mid=(int)((low+high)/2); 
 7         if(k==a[mid]) 
 8              return mid; 
 9         else if(k>a[mid]) 
10             low=mid+1; 
11         else
12            high=mid-1; 
13      } 
14 return -1; 
15 }  
View Code

     可能有些童鞋会认为这个代码没有什么问题啊,自己也是这样的写的。当我们写完一个函数的时候,接下来最

重要的一步是什么?是单元测试,这个函数如果要你单元测试你就会发现,其实还有两个很重要的问题没有解决

     1)参数检测,这是所有的防御性编程都是做的。

     2)数值范围越界,整数加法会出现越界的情形,所以这个算法用加法是会有问题的,如果数据量很大的情形。

    所以正确的代码应该是这样子的:

 1 int binarysearch(int *a,int n,int k) 
 2 { 
 3     if( a == null || n == 0) //参数检测
 4           return -1;
 5     int low=0,high=n,mid; 
 6     while(low<=high&&i==0) 
 7     { 
 8         mid= low + (high - low)/2; //改为减法实现
 9         if(k==a[mid]) 
10              return mid; 
11         else if(k>a[mid]) 
12             low=mid+1; 
13         else
14            high=mid-1; 
15      } 
16 return -1; 
17 }
View Code

     对于最后的智力题,也都是一些比较简单的,还是举个例子说明吧,比如有一个三升水的容器和一个五升水的

容器,怎么倒出四升水来。这个三升和五升的容器都是没有刻度的,只知道它们分别是三升和五升。

     这个其实可以抽象为一个简单的数学题,3+1 = 4 或者 5-1 = 4,关键是这个一升水怎么给弄出来。

     3+1方式:先把三升容器水倒满,然后倒入五升容器,再把三升容器倒满,倒入五升容器2升,五升容器满了,这样

三升容器就剩下一升,五升容器的全部倒掉,把三升容器中的一升倒入五升容器,再三升容器倒满,倒入五升容器,五升

容器中就是四升了。

      5-1方式:把五升容器倒满,倒入三升容器,三升容器满后倒掉,五升容器中的剩下来的两升倒入三升容器,再把五

升容器倒满,五升容器再往三升容器倒,三升容器满了后,五升容器就剩下四升了。   

      最后总结一下,说到底就是考察计算机基础掌握程度,动手能力,学习能力,表达能力,以及思维是否敏捷等。

       

posted @ 2013-12-22 11:06  cstar(小乐)  阅读(535)  评论(0编辑  收藏  举报