注:貌似不少童鞋看到这篇东西觉得我是牛人……其实不是stO,以下的内容都是对自己找工作过程的一个记录总结,不少同学比我找的厉害,所以这篇博文就算是我的一个自言自语吧!如果大家觉得有些帮助,那我也很开心!
注2:博文最后更新了一些内容,仅供参考
原本想把标题写成“4399、小米、UC、百度面经”,后来想了一下,其实这次校园招聘可以写的远远不止那么少。从一开始的情况急转直下,到最后逐渐恢复状态拿到offer,2个月来人都愁得头发胡子疯长,从中真的学到太多太多了,也深感找工作不容易……当然最后的结果还是不错的,目前有幸拿到UC、百度、小米、4399的offer。这次校园招聘虽然还没结束,但是我大概已经决定后最终的去向了,所以也在这里写篇日记纪念下大学这纪念来最忧心忡忡的2个月。
——————准备的内容——————
要说校园招聘我自己学到什么重要的东西,最重要的有2点——第一个是不要抱死一家公司不放:有个目标是很好的事,但是如果抱着一种“非这家公司不去”的心态,忽略了准备其它公司的笔试、面试,那么一旦真的有闪失,后果会非常严重,我自己在校招初期就是这样遭到很大打击的;第二个是笔试成绩非常重要,一定要重视:以前总有一种错觉,就是觉得只要笔试通过了一个门槛,进入面试那就基本只看面试表现了,后来经过多次经历能明显发现笔试成绩在面试过程中也占着非常重要的地位。
先从大处基本的方面说,如果我重新准备笔试面试,会怎么准备?我现在看来,从大二的最后一次假期开始准备,也不为早。尽早确定自己到底是要读研还是要找工作,尽早有个目标,我心里其实一早就是想直接找工作的,但是奈何一开始父母比较倾向于走保研的路,而我自己当时也觉得其实没有那么不想读研,因此也没有太过准备找工作的事,后来越到临近找工季,越是感受到心里对于直接工作的向往,于是不但放弃直博,连保研也放弃了,可以说是直接把自己推到一条没法后退的道路上。这几个月我看资料、看书的效率实在是大学任何一个时期都比不上的,很辛苦,但是不得不这样!
在准备找工作开始到现在,下面列出的材料大概是在3个月时间内阅读、完成的(我是偏后台开发的):
《Effective C++》,看了之后绝对获益匪浅;
《C++ Primer》,其实我个人不觉得这本书有多么震撼(起码没有Effective C++给我的那种感觉),但是确实是对C++一些细节查漏补缺的好书;
《编程之美》、《剑指OFFER》、《编程珠玑》、《Cracking the Coding Interview》,其中《编程之美》和《Cracking the Coding Interview》看得差不多,《剑指OFFER》和《编程珠玑》大概看了一半。这四本书是准备面试(甚至一部分涉及写代码的笔试题)的非常好的材料,其实很多公司的题目都能在里面找到踪影,看了后要着重记住解题的思路;
leetcode,直接搜索,上面有非常多很赞的题目,既是基础,但是又是十分考验功底的题目,我到现在还十分后悔没有早一点开始刷这个oj,因此只能挑我觉得大部分公司着重考到的题目——所有和链表、树、数组有关的题目。我到目前也就做了50多题,很惭愧,如果全部做完,那么能力肯定会提升一个level(20151208注:目前已经做完150题了,算是暂时刷完这个OJ,还是那句,帮助很大……)。另外,leetcode里面的题目和《Cracking the Coding Interview》里面的风格比较类似,都是非常考验基本功的;
《UNIX环境高级编程》《UNIX网络编程-第2卷》,这两本书是我应聘所有与Linux或者后台相关岗位时觉得很有用的,两本合起来大概用了20天看完,而且《UNIX环境高级编程》的代码全部由手敲并运行过,而且写了一个小程序,里面运用了锁、多线程等技术点,可以对操作系统有个更好的理解,个人感觉是很值得的;
《构建高性能WEB站点》,其实这本书的用途没有想象那么大,当时是为了准备面试中可能碰到的系统设计题而看的,但是看了也很难回忆起比较深刻的东西,主要是没有接触过,理解起来也困难。不过面试过程中也基本没有到那么多,但是还是能作为开开眼界的一本书;
手写插入、冒泡、选择、快速、归并、堆排序,同时敲入了实际代码,其中快排和归并排序练习了几次,已经做到信手拈来,可惜面试中还没碰到直接写排序的,当然了各种排序算法的时空复杂度以及特点都是要理解好的;
编写链表、队列、栈、堆、哈希表数据结构,一开始没有写总是觉得思路比较简单,到实际去实现就会发现没那么简单了,后来面试中确实要直接手写一个栈的实现代码,有所准备了;
当然还有July的博客中的关于海量数据处理的题目,以及他所提供的各类笔试面试题,精品!我时常在想如果没有了这个博客那么这些有价值的内容会封闭到什么时候?当然有人觉得这些都是题目,看了有什么意思呢?但是看了的人确实更有竞争力了,要找工作的你看还是不看?我笔试面试中有几题就是在July的博客中有的。
包括www.ahathinking.com中关于lcs等一系列题目的讲解,以及网上各种有用的资料,别人的面经,包括我的博客中的某些内容,例如C++类、结构对象内存布局浅析,找出带环单向链表的环入口(交点),等内容,尤其是第一篇,几乎所有的笔试题都会考。
其实还有很多很多的内容,我这里根本就列不完,所以越早准备校园招聘越好。另外我也深深感觉到一份相关的实习工作经历也是很重要的……
——————笔试面试——————
下面就是大概说一下笔试、面试的经历以及我个人觉得不同公司的偏好内容,当然我不会说具体的笔试、面试题目,因为这些东西公司都要求保密
阿里巴巴:当时没有准备校招的多少东西,因此笔试一塌糊涂,直接负分滚粗,面试机会都没有
腾讯:最开始希望加入的公司,面试内容也是专门为之准备,孤注一掷但是最终被刷,才悟出不要抱死一家公司的教训。从面试情况以及同学的一些分享,感觉腾讯十分喜欢笔试分数高的人,而且项目经历中,那些十分接近一款产品的项目是很受青睐的,例如一款微博分析工具、安卓手机软件之类的”产品“。至于比较偏重理论的项目,例如某个算法的实现、改进,或者其它一些完成理论的demo(但是没有实际产品)的项目可能就会不那么抓住眼球。同时我个人感觉,腾讯十分看重你项目的深入程度,越是做得深入,越是完整,越好,不然很有可能面试官觉得你的项目”很水“。当然腾讯的一面还是基础知识,常见的函数知道怎么实现,例如和字符串操作相关的,或是其它基本的面试题,具体的其实看了JULY的博客,或者其它一些面经,吃透了,就差不多了。另外是对于自己的项目,想好自己项目的难点、克服难点的做法是什么等。
网易游戏:很多岗位号称只招研究生,其实不然,优秀本科生也是可以去竞争的。笔试分数很重要!而且对语言的细节要比较了解,今年的笔试题还有和图相关的内容。网易的笔试题涵盖的范围很广,有些也是很基础的但是大家可能会忽略的知识,至于后面,难度适中。要应对网易游戏的面试(C/C++),那么一定要对C++的了解比较深入,怎么个深入呢,例如大家可以去注意C++中比较标准的拷贝构造函数的写法,当你重新看C++的书的时候,不断问为什么书中要那么去写,然后包括类型转换、多态、虚表这些也丝毫不能含糊,面试官问的问题,我当时实在么有招架住。网易的二面就比较考察个人的除编程语言外的应用、分析能力。在网上多多找面经吧。
工商银行软件开发中心:软件开发中心应该是直接在宣讲会投递简历的,工行的待遇还是不错的,同时平时上班的时间也比较不像大型互联网公司那样早上很迟开始,晚上很迟走,不过我只是在面试的时候看到这些皮毛,不知道实际情况。工行软件开发中心是要经过群面、单独面的过程的(后续可能还有笔试)。群面就是给出一个实际问题,然后大家分析发表看法,然后组成一个组讨论并达成一致意见。整个过程面试官都会知道听你们讨论的内容。但是我不知道面试官倾向什么样的应聘者。
4399:4399的笔试题还是比较平均,个人感觉出得比较中规中矩,难度也设计的比较好。当时的第一轮面试,可能因为笔试分数高,所以面试官问的内容不多,也不难,答对了面试官不会问太多,再次印证笔试分数很重要。接下来的面试就包括一些性格测试之类的,如果有进一步的面试,估计就是直接去见游戏开发组的组长,面试的时候我被问到了很多开放式的问题,例如“大学期间最...”,“你自己觉得最...”,“你认为...”之类的问题。这些是我答得非常不好的。
UCweb:我很感谢UCWEB给我的机会。总体来说UC的笔试题不难,因此尽量做到最好,我当时应聘的是浏览器开发工程师。其实UC在广州的办公环境非常、非常地好,薪酬福利也很给力,加上目前UC的发展势头也好,因此我个人其实非常喜欢UC。我进入面试后,面试官直接就问简历上的项目,让我非常吃惊的是,面试官的水平真的很厉害,我目前还没遇到哪位面试官能把项目问得这么——深入、命中要害……所以我的初步结论是好好准备项目。问完项目后,会问些比较基础的东西,当然那些就要看你对语言的了解程度以及一些比较平常的数据处理问题,海量数据见July的博客。
小米:我这次笔试小米,发现题目其实不多,都是直接手写代码。因此手写代码的能力还是十分必要锻炼的,直接对着《Cracking the Coding Interview》来手写代码吧。至于笔试题的难度适中,做完leetcode里面链表、树的题目,应该问题不大。当然,对于leetcode里面和链表有关的题目,多点使用二级指针去解题,不要总是用一级指针。用二级指针不但代码更短更简洁,而且更加高端,必须要练习一下。至于小米的面试,其实我发挥得不是很好,两道实际的手写程序题,第一题有一个小BUG,第二题经过提示才写出了最优解法。但是还是那句吧,笔试做好一点,面试的时候,如果你也能很好完成,那么就离成功很近了。最终我面了一个BOSS,MIUI那边的,BOSS问了一下项目的情况,还有之前我的应聘情况,问我为什么阿里、腾讯会没有比较好的结果之类的。其实很多面试官都会问你手头目前几个offer之类的,诚实点也可以了,不过对于那些拿到太多offer的人来说……你们有自己的做法了……反正我自己是诚实回答,但是回答的时候就不要说是自己的能力不够之类的,毕竟我到现在真的是觉得不同公司招聘有不同标准,在一家公司结果不太好,不代表你能力有问题,真的。
百度:百度的面试给人感觉很舒服。比较传奇的是,我一面是霸面的,一直到拿到offer,我都觉得是很传奇的事情。后来才知道我没有必要霸面,因为我笔试是通过了……只是暂时没接到通知的我以为自己被刷了,就匆匆忙忙去霸面……好吧,反正最终结果是OK的。百度无论笔试还是面试,很明显的感觉就是个人分析解题能力以及算法能力还是比其它公司要求高的。应聘百度,leetcode之类oj要多做一下,图的题也会涉及,字符串处理也是,但是有的题目,不是一下子能反应过来的,这个时候就要慢慢着手解决,当然你也要相信面试官不会出一些很tricky的题目,主要是做题的时候有正确的方法。像剑指offer以及编程之美这些书,解题的时候会有一个思路演变的过程,就是这种过程对解题还是比较重要的(个人感觉)。
——————后记——————
写了这么多,大概也就告一段落了。在找工作的期间经历过很多难过、焦虑的时候,主要是太多的资料要去看,边看书边应用边准备,在某一天身心俱疲了,但是第二天必须卯足劲继续加油,难不成想去考研?不可能啊!校招也就这么一次了,等春季补招这种给自己留退路的想法最好还是收一收,在当下就做到最好吧,各位加油了,在短短的时间里面,你就会明显感觉到自己的进步,就像我校招前完全不觉得自己能通过百度的面试,但是伴随着资料的阅读,以及各大笔试面试题的拷打锻炼,越到后面反倒是越有自信,也越沉得住气。
再退一万步,你心里向着好处发展,最终结果也会是好的,所以你可以成功,现在不成功,相信春季补招也会发光发热。校招季就做一只打不死的小强吧!
以下内容为一些补充,因为发了这篇博文后,有些童鞋可能问到:
1. ACM经历重要不重要?可以说ACM牛的话,肯定是有帮助的,很多ACM的同学都很牛出路很好,在面试时可能也会问一些较难的算法题。ACM不厉害的同学(例如我),但是具有一定的算法能力,也OK,面试官不会用很难的算法题去考察,而是着手其它方面,例如你做过的项目,你掌握的一些编程知识等
2. 项目重要不重要?很重要,你做过的项目,最好列在简历上面,但是你要保证自己对自己做过的项目烂熟于心,这是非常重要的,很多面试官都会问你做过的项目,然后从你做过的项目里面集中问你某些知识点(例如我曾经面试腾讯就针对我项目中的网络编程的部分问得很多)。有些你自己觉得可以改进的项目,改进之,善于利用git(github),关于git的教程,在google中搜“git教程”,第一条,2天就可以全部看完(百度搜不到的)。
3. 简历重不重要?非常重要,除非,你本身技术真的非常牛,或者ACM非常牛,那么简历的设计就可以相对不那么上心。但是我觉得看到这篇日志的同学应该都是普通人……所以简历要好好弄,主观评价之类的例如“我觉得自己...”,“我工作认真负责...”之类的尽量不要,但是可以在一个小地方简略介绍自己的话,可以考虑加一下自己的性格爱好,以及其它一些课余活动(非专业活动或比赛)取得的成绩(例如我说自己得到毽球比赛校级冠军),但是这部分关于你个人特点的描述绝对不是重点!重点的内容是你掌握什么技术,做过哪些项目,在哪里实习过之类的专业相关内容。
暂时这么多,如果有补充的话我会继续加。