本文转自:http://www.cnblogs.com/wangjianzhou/archive/2011/11/24/2261506.html
找工作也快两月了,感受颇多,最近看了一篇《怎样花两年时间去面试一个人》的博客,很有感触,将自己的想法写出来。
在找工作的两月中,自己从四大门户:新浪、搜狐、网易、腾讯到业界领先的百度,搜狗、淘宝以及行业巨头的微软;从几个人创业的阿甘网到几十个人美丽说、友录、微游半创业公司;从做浏览器的opera到石油设备的哈里伯顿、斯伦贝谢到咨询的ThoughtWorks再到做游戏的金山网游,如果加上一些想不起的公司名,面试有二三十家,再加上一倍以上的笔试。北京带“网”字的公司几乎被过了一圈。
从这一圈的经验,通过现在互联网公司招聘的漏洞,总结出一些可以在两月的时间内得到一家顶级互联网公司的offer的经验。
简单来说,成功100分的话,得分组成比例可以如下:1、50分的算法和C语言,2、15分的项目分,3、15分的知识面和扯淡分,4、10分的开发语言细节分,5、5分的其他。
首先很赞同文首博客中的观点,在短短的几轮面试以及校园招聘意义不大的一轮笔试,想选取一个人是很困难的,而且还很容易漏掉一些有实力的人,我敢保证连IDE都没启动过而进入顶级互联网公司的同学不在少数,不是怀疑这些同学的能力,只是说招这些同学对公司来说是一个极大的风险,纸上的程序永远不能变成产品,而且纸上写程序发现不了真正的问题,我加入的一些技术群中,一些我仰慕公司的员工不懂得求助百度,只会一有问题就摆到群上,让人作答,甚至有些工作相当时间的人不懂得如何断点调试。好了,切入正题
50分的算法和C语言题:假入你这两个比较好(非超牛),那么你就有50%以上的机会进入心仪的互联网公司,现在的校园招聘笔试和面试,不分公司和部门都是一窝蜂的考这两项,其实对于应届生来说,没有履历,没有工作对口方向知识的积累,而用人单位为了省事,经常就一套题,所以有不少想做前端的同学去忍受C指针和算法的折磨。
假如您的C语言不好,问题不大,翻出谭浩强的那个工科生必修的C教材,看了两个礼拜足够。
假如您的算法不好,没关系,现在的校园招聘算法题都是照抄生搬,从我笔试和面试题的重复度来看,八成以上的算法题能被找到原题,大家只要翻翻某典和某美就够了,再做做百度上能搜出的算法笔试题的第一页题目就够用了。
个人对这种东西不感冒甚至有点抵触,一直鄙视中国应试教育的用人单位如今变成的应试招聘,本人在找工作极其不顺的10月,多人建议看某美和某典,但是我看完的三本书是《浪潮之巅》,《数据之美》和《RESTful入门》。这些算法题其实难度也不大,要是大家都没看过,也无所谓,但是在大多数人看过的时候,你就丧失了竞争公平性,好多这种题第一次想在很短时间内正确完成还是有困难。个人经验,这类题集中一下几个方面:
排序,知道各种排序的时间和复杂度,能写出快排,堆排以及计数排序的代码且知道什么时候用哪种即可。
链表:知道构建动态链表,删除节点,翻转链表,两两翻转,求环节点,求两链表交点足够。
字符串:知道高效翻转,回文足够,如果还能完整的写出KMP查找就基本完美。
树:知道二叉树的三种递归遍历,非递归遍历,查找,知道两种遍历求第三种,再深一点,知道如何分层遍历,如何求两节点距离,就通吃了。
其它:队列、栈、哈希表的特性,动态规划。
只要上边的只是准备的差不多,算法的笔试和面试题问题就不大了。本人的本科和研究生都是机械,没学过这些东西,从9月17的第一场微软笔试开始,边考边学,就靠这点东西闯笔试和过面试。
15分的项目分:如果你没有什么项目,但是你的1很好,那你这部分分基本拿到了,其实这部分很容易作假,一个项目你只是打酱油的,但是你做过了解,说出个大概就够了。
本人有10几个玩具似的小网站,有一页半简历,那些面试官一看就烦,除了百度问了一个感兴趣的项目,其它的都是说挑一个说,这就很简单,凭看的一些东西,我甚至可以说G公司的BigTable是我做的,面试官也不一定懂您的项目。
15分的知识面和扯淡分:这方面不太好提高,根据面试官和应聘职位可能不同,最好是事先取经。本人被问过:PageRank,搜索引擎倒正排索引,数据库优化,web性能优化,浏览器渲染,web安全,爬虫,设计模式,软件架构,推荐系统,加密算法,服务器推等等。一般来说公司不会根据这部分毙人,而且问的东西基本都能扯。但是有些公司会根据这部分毙人。
10分的开发语言细节分:根据个人擅长的语言,可能会问一些细节问题,来考察一个人对语言的掌握程度以及学习态度。比如C的指针函数、函数指针,高级语言的值类型,引用类型,值传参和引用传参,托管语言的GC等等。
5分的其他:主要是沟通能力,印象以及有些公司要求的英语。
个人认为如果上边说的你准备差不多了,那么你就有很大可能进入一个顶级互联网公司
举个人三个例子:
1 .碰巧你霸面被批准了,碰巧你看过搜索引擎中爬虫如何爬取和分析正文,碰巧你了解过AJAX,碰巧你知道MVC,那么你过一面了,碰巧你会堆排序,碰巧你会两个链表求交,那么你过二面了,碰巧你的C语言能写出程序,那么你会把这个不复杂但代码有点多程序写出来,碰巧你有一点重构的概念,把你丑陋的代码改的优雅漂亮些,那么你有一个17W的offer了。
2.碰巧笔试后备胎中的你得到了面试机会。碰巧你做的一个项目很合面试官的口味,碰巧你知道web常见的安全漏洞,碰巧你写过两个链表求教,那么你过一面了,碰巧你准备上述的2,碰巧你能写出堆排和知道ORM,碰巧你能做出简单的链表翻转,那么你过二面了。碰巧你准备上述的2,碰巧你了解过WEB服务,碰巧你知道ORM,碰巧你知道什么时候用堆排,而且碰巧会基数排序,那么你有一个19W的offer了。
3. 碰巧笔试后备胎中的你得到了面试机会。碰巧你知道MVC,碰巧你了解过一些CSS和JS基本知识,碰巧你了解过浏览器渲染而且用这个解释一个网站的加载顺序,碰巧你学过web性能扩充,那么你过一面了。碰巧你对web性能优化比较了解,知道pagerank,碰巧你看过大型站点的架构并能说出个大概,那么你有一个20W的offer了。
拿到许多互联网公司的offer后,我发现难度最大的是一个创业公司的。对于招聘如此不严谨的企业,我不仅有点担心,若企业招的少无所谓,招的多话,若不能和聘用者解除劳动关系,那么招聘上风险不亚于一个重大项目的风险,好的方面是招人多的企业总是有一些没技术含量的活需要大量的人来干。
以我个人观点,站在企业角度,如何避免那种鱼目混珠的碰巧学生进入重要岗位,还有如何保证一些优秀的学生不被校招的海选错过,我会选择一下招聘流程。
- 笔试。但是笔试题不会再抄什么宝典和什么之类。此外笔试题不在一锅端,招聘的部门和岗位都有差别,笔试为什么不能有差别,可以多花些时间可以根据公司用到的语言以及不同岗位多出几套题,对大多数研究生来说,由于项目或者兴趣会去钻研不同高级语言。分题到的话就不会出现PHP程序员做C++,前端程序员做算法的局面。
- 电面。笔试的通过分适当低些,让更多学生进入下轮,第二轮该是电面,这轮主要是了解学生的简历是不是注水,而不是考察能力,我有幸看过一些同学简历,上面的精通的部分让我再修炼10年也达不到,这类牛人确实存在,但对于绝大多数学生这样的写法是注水的,这轮电面毙掉注水的牛人。
- Hr面。个人认为hr面是应该的,这轮主要去毙掉练手没诚意的同学以及性格不符合公司的同学。大多公司会把这个放在最后,但是花费技术人员宝贵的时间后再让hr毙掉一个人确实代价太大。
- 大作业,hr面通过后,给出两天时间让通过学生完成一个大作业,主要是考验是否用过IDE和变知识为产品的能力,还有对待问题的态度。这个作业上交后,一定要让学生现场调试,优化,小改动后让学生现场改程序,从而揪出那些让他人代劳的同学以及判断debug的能力。
- 技术面,一般觉得三到四轮比较合适,若是一对一单面,杜绝一面定生死,最后综合给分。因为单面的话,面试成功的几率很容易受面试官的方向以及面试官情绪的影响。
本人面淘宝时,面试老师是一位小姑娘,从SQL语句到触发器,视图,游标,临时表、表变量、单索引、组合索引、聚集索引、非聚集索引、主从库、库引擎考了一圈后,开始问我B树和B+树的实现,区别,查找和写入时间复杂度,很显然我不是数据库专家想要的人。
此外,面试不要再全部是算法,有些公司几轮面试就做几道算法题,在各种宝典满天飞的今天,这种面试公平性不太好,而且不一定能要到适合岗位的人,可以有算法,思考问题的能力,知识面,学习能力和态度多方面考虑。我觉得面试过程问一个学生看过技术书籍是比较好的方法,能看出他是否热爱技术,学的技术对公司是否有帮助。
- 经理面,主要是看公司从各种情况,如氛围、岗位需求上要不要这个人。
总结下:如文首的牛人说的,IT公司招聘难,对于没有履历和经验的学生来说,校招更难。