软件版从本周开始进行话题讨论,欢迎大家提出话题,更欢迎大家参与讨论,我们共同分享。
 
12日午时,强烈推荐WINDam的找工作经验帖《一个计算机本科生的求职之路【by WINDam】》
http://forum.byr.edu.cn/wForum/disparticle.php?boardName=SoftDesign&ID=26595&pos=5
 
系列第二篇:【第二弹】寻找实习的思考【 by amiao】 http://forum.byr.edu.cn/wForum/disparticle.php?boardName=SoftDesign&ID=26677&pos=5
 
 
本周的一个话题是关于实习的准备,寻找,经历,经验等,主要面向技术方向的人士,也欢迎非技术的人们来分享。
小生不才,撰文一篇,抛砖引玉了。
由于文章比较长,话比较多,这篇文章关注实习,下面我还会有一篇文章,关注工作,出国,读研这三条路的选择。希望能看到更多技术人员来分享实习的经验和思考。
 
Ok, 言归正传,这篇文章分为两大部分
第一部分是我这几个月来寻找实习的一个过程和经历。
第二部分是我的一些思考和总结。

 
阅读指南:
一不小心写多了...快成流水账了....
能看完的人,我佩服你的耐心。
第二部分的一些总结,明天再写了
红色的部分是关键句
蓝色部分是主要提纲
绿色的部分是一些比较冗长的细节,没有耐心直接略过
 
这部分的提纲如下:
1.情况介绍,去向
2.找实习的准备过程
3.找实习的过程
4.笔面经历
5.笔面总结

 
金三银四找实习
 
首先,把我的情况和找实习的结果总结一下
情况:

计科大三,在大二的时候我已经决定要找工作,并且出去做开发,这个思考有一个比较长期的过程,大一萌芽,大二思考,大三确定,具体我会在后一篇文章中说明。
主要方向是Linux/C/C++,坦白的说,我一开始的目标是baidu,但是现在的情况有变化。
现任软件版主,大家都多支持罢。
 
结果:
offer有两个,CA的研发和腾讯的后台研发,在这两边,据公司方面说,我都是唯一的一个本科生。其中腾讯由于北京研究院不接受本科研发,我只能选择深圳。
微软,种种原因,和我擦肩而过,昨天刚刚在CA入职,接到微软的电话,婉言谢绝了。
IBM,研发,当时已经拿到CA的offer,于是据掉了面试通知。
百度,新产品部的研发,笔试过后有消息说我的简历被锁定了,但是到现在为止一直没有通知,估计是被当备胎了T_T
NOKIA:个人不是很想去,CA的offer拿到后就再没考虑过了。
Google:研发,清华笔试后,一面挂掉,第一次面试,认了。当然,我自己实力还不够是主要因素。
 
 
 
过程:
 
1.    前期准备
a)    就像我前面提到的,找工作这个目的很早就明确了,基于自身的职业规划,我于去年十月开始着手准备寻找实习。
    实习的目标很明确,能转正,能积累经验,公司条件不错,外企最好。如同前面提到的,我的核心目标是baidu,这个很奇怪,之前的我对baidu有一种憧憬,没有特别的原因,大概是baidu给我的印象非常好罢。
c)    于是,
    1.我收集了一些信息,包括查看baidu的招聘信息,另外请教了下牛人,和baicool聊聊天^_^。了解到baidu这边需要三个方面的能力:
i.    1.Linux 编程。
ii.    2.算法和数据结构
iii.    3.C++。
 
    2.明确路线和学习方式。明确了目标以后,在软件群里和大家请教了一番,基本摸索出一条路线,大三上学期的半年,踏上了每天自习的道路。可以说,那个学期的自习,无论从时间,效率还是效果上,都是大一大二两年加起来都无法比拟的。原因很简单,我有一个明确的目标,所以也就有了明确的路线和有来源的动力。
    再加上计科院大三的课程非常精彩,操作系统,汇编,计算机网络,计算机组成,这些基础课程,使得我对计算机科学和Programming的理解得到了一个质的飞跃。同时也对我Unix/Linux编程的学习起到了非常大的作用。在这里,我必须强调,对于一个技术人员来说,基础是非常重要的,具体我会在后面谈到。  
    那段时间,主要思考的问题是怎么学习,怎么安排时间,怎么提高效率,怎么实践。
 
h)    学习方法方面,这部分写得比较冗长,没有兴趣的人直接跳过罢。
i)    1.学校的课程,得益于xxx同学的帮助xxx同学,你看到了要笑一笑,我请你吃饭^_^),基本都在课堂时间搞定。概括一下就是:不用听老师jjyy,找本好书,拟好自己的计划,狂看就是了,绝对比跟老师的进度效率高,效果好,而且能够自己把握时间和重点,结合自己的情况,关注自己感兴趣的,有实用价值的知识点,至于作业之类,下课后15分钟就可以搞定,不要急着去挤食堂。操作系统,计网的教材都是国外经典书籍,相当的棒,计科的同学,不要一味盲目的抱怨教材不好,踏踏实实的学习才是正道。当然,教材不要的时候,也要果然放弃,自己寻找一本合适的书籍,学习只能靠自己负责,学校只能给我们指出一条大概的路线,剩下的,靠自己了。这一学期的课程,是我学的最扎实的,也是受益最大的。
 
j)    2.有了前面的基础,课程都在课堂时间解决。腾出来的课余时间的精力,就可以全部投入到自己的学习中去。那个学期,主要看了三本书,C++ Primer Plus,Assembly Language on intel-based computers,Advanced Programming on Unix Environment(APUE),其中APUE花了我最长的时间,也是我的重点,大概有3个月罢。我看书的习惯比较奇怪,我不仅会看这个东西是什么,同时,我会思考,这个东西为什么是这样,为什么被设计成这样,它会起到什么样的作用,它存在的目的是为了什么。所以一般我的看书速度是非常慢的,但是相应之下,收获非常大。也正因为如此,更需要谨慎的选择一本好书,否则这么大的投入就白费了。当然,看书的方式,也要针对不同的书籍,不同的情况,有的书就应该浏览,有的书就值得细嚼慢咽。都是大学生了,大家应该学会怎样学习,怎样看书。
 
k)    这里有个插曲,我一直以为我看的primer plus就是primer,结果后来郁闷了。不过得益于我看书的方式,我个人感觉,我的C++基础不会比看primer的人差。同样的原因,在看APUE时,正好在学习操作系统课程,两边一结合,使得我对Unix系统也有了一个初步的了解。

 
 
 
2.    金三银四找实习
 
a)    时间到了大三下,按照我的计划,应该是四月份开始寻找实习。但是08年的3月份,刚来到学校,关注了一下Hiall和各大实习信息发布站点,发现3月份才是实习的井喷,几乎每天都有海量的实习信息发布,后来思考了一下,应该是因为年后离职的人员较多,各个地方都比较缺人。
b)    于是,我花了两天的时间制作了第一版简历,这份简历后来到了第三版。同时找了一些师兄师姐老师,帮我修改简历。
 
c)    之后,就是一个月的海投,同时,我加快了准备实习的知识积累,借着ACM校内赛的机会,着手算法和数据结构的准备,依靠的是两本书:INTRODUCTION TO THE DESIGN AND ANALYSIS OF ALGORITHMS 和 CLRS(算法导论),同时在OJ上刷了一些题目。由于我的目标是做开发,所以我认为没有必要像ACM那样极端的,过于重视算法。
 
d)    3月份大概投了30份简历,几乎全部石沉大海,后来总结了一下,这一阶段公司都是希望有实际经验,过来就能用的实习生,而这些条件,我还不能满足,我还非常缺乏开发经验,这于是导致了我的下一个决定:写一个FTP Server。具体后面再说。
 
e)    3月份有唯一的一个例外,敬业的微软ATC,给了我一个电面,我的简历没有被淹没掉。电面的过程非常顺利,因为是我对口的Linux Programming,刚刚又参加完ACM,算法非常熟悉。电面后写了一份代码发过去,对方也非常满意。然而,我made a mistake,在面试官询问我是否能全职时,我犹豫了一下,保守的选择了一周三天。结果后来杳无音信,最后得到消息,那边的评价很高,但是就是因为这个原因,虽然已经安排了HR面,但可能最后寻找到了时间更合适的人,我的简历被挂起来,推荐到其他部门去了。后来又参加MS的笔试,直到昨天,才再次收到MS的电话。这个事情,直接导致了我3月实习寻找的失败,4,5月份实习完全空白,让我郁闷了好一阵,后来想通了,我和Sigmal的缘分还不够罢。
 
f)    教训是,兄弟姐妹们以后一定要说:我太TMD能全职了。
g)    关于具体笔试面试的内容,准备和注意事项,我会在后面专门总结。
 
h)    回到FTP Server的话题。没有项目经验的时候,自己写一个东西,也是非常抢眼的。这是总结自cool的成功范例,哈哈,GMoto告诉我的,感谢moto。好处是,1.自己感兴趣,有动力。2.熟练技能,提高自己。3.简历好看,证明自己的能力。由于这学期过于忙碌,现在,这个miaoftpd也还没有到beta版本,虽然我本来的期望是尽早放出测试。希望暑假实习之余能够完成罢。
i)    miaoftpd对我的帮助是巨大的,后来面试腾讯,CA,大部分的项目经验相关话题,都在聊它,可以说是这学期的前期准备中,最成功的地方。
 
j)    4月份,各大公司的Summer Intern开始,我被迫开始落后于自己计划的,选择Summer Intern。需要说明的是,我之前的规划,是找到一份能在4月份就开始干的实习。于是我投了MS,Google,IBM,NOKIA,百度,腾讯,CA。
k)    这个月先后笔试了Google,百度和微软。面试了Google,结局非常惨,一面被刷掉,当时有些过于兴奋了,毕竟是第一个面试,结果把非递归的中序遍历二叉树给理解成层次遍历了,写了个完全错误的程序,于是sb了…..
 
l)    5月份的第一个星期,无比郁闷,没有baidu,微软速度太慢。在baidu新产品质量部实习的同学要推荐我过去,结果说研发部那边盯上我了,不方便,我FT,当备胎真惨。雪上加霜的是,腾讯把我简历给bs掉了,可能是因为我投的时候腾讯的简历系统还不完善,后来又一直没有修改,这是个教训了:要注意调整自己的简历。Anyway,我一怒之下去霸王笔了,之后非常顺利的一路三面。巧合的是,面试腾讯的同一天,我参加了CA的笔试,一个礼拜后面试。
 
m)    5月中下旬是收获的季节,先后拿到了腾讯和CA的offer,我陷入一种两难的境地,最终我选择了CA,非常非常内疚,非常违心的拒了QQ,其中的原因我会在后面细说。第二天,我的电脑就彻底挂掉了,RP爆减。事实证明,拿多了offer不是好事,因为必然要据掉n-1个。本身我,是比较守信,非常的反感违约的。
 
n)    我经常这样想,其实找实习也好,找工作也好,就像谈一场恋爱,一切随缘,顺其自然。这个比喻会贯穿我后面的文章。在这里,情况就像,你有了两个非常喜欢的女孩,必须选择其中一个,无论如何,这个选择都是痛苦的。
 
o)    当然,我不希望有更多的女孩掺和进来,让事情变得更麻烦,我是个比较专一的人(炫耀一下)。之后我陆续据掉了MS和IBM的面试。不得不感叹,我和MS暂时还缺乏一点缘法,擦肩而过。
p)    最后,就是昨天刚刚CA入职,也有不少收获,我会在关于工作,读研,出国的文章里说明。
 
 
3.    笔试和面试经历的总结,过于具体的东西,不便透露,毕竟签了保密协定。
 
a)    MS,我投的是测试部门的Linux职位
i.    电面问一些Linux多线程,网络编程相关的问题。包括同步互斥机制,异步IO等。另外,还有例行的项目经验的介绍。也问了一些基本算法,包括时空复杂度的分析。最后让写一段字符串处理相关的代码,发到邮箱里。
ii.    笔试三个小时,200分,题目有选择题,编程题,分析题,设计题,难度我感觉是最大的,涵盖编程语言,算法,数据库,正则表达式,软件工程,操作系统,计算机网络等等。由于不同的部门关注不同的题目,所以总分不决定一切。貌似没有120分及格的…我深刻的体会了自己的弱小…
后面的都是研发职位了
 
b)    Google
i.    笔试也是一些基础的东西,算法,离散数学,比较简单。
ii.    一面基本算法+开放设计题。
 
c)    百度
i.    笔试三题基础选择,然后两题程序设计,最后一题系统设计,难度适中吧。
ii.    面试比较正规,一面基础,二面项目,三面HR,可惜没有机会去体验下。
 
d)    腾讯
i.    非常平易近人,笔试题目就像学校考试。半个小时交卷闪人……
ii.    面试也是传统的三面,面试官和HR都非常的Nice,一面之后就开始聊天了,呵呵,很赞。非常喜欢和他们聊天~ 一面主要在聊miaoftpd,问了一些具体实现的问题。二面在聊看过的书籍,学习的方法和方式,一些职业规划。三面和HR gg继续聊。那天聊的真的很high。另外非常感谢他们给我的一些建议,非常的中肯。
 
e)    CA
i.    笔试题也非常博杂,我除了C++,Linux和DB以外,Win32,.Net,MFC,com基本上都不会….
ii.    面试只有一面,是team member + team leader二人一起面,先是在墙上画图讲解一个自己的项目,然后问一些C++,C#,Window的细节问题。C#和Windows我都不熟悉,细节都不清楚,于是我就讲了一些我对Windows机制的推测和理解,以及对C#的委托,反射等机制的理解。最后问了一些开放性的问题,包括团队的理念等。其中有个问题很有趣“你做过的最创新的事是什么”,我思考了一会,和他们聊起大二下在学生会发起,策划,实施宏福科技节的事情。挺有意思。
 
iii.    这个面试是我面的难度最大的一个面试,感觉是完全问出你有多少水平的那种,很多问题我都答不上来。最后我询问面试官的建议,其中一个帅哥说:不能说,说了你就知道结果了。让我直接晕掉了,惴惴不安的等了一个多星期….
iv.    关于CA的面试,我所在的那个部门做的事情比较繁杂,而且一直追着最新的技术跑(过去要写WPF,真赞..),据他们说是比较注重的学习能力。我想可能是这个原因罢。
 
 
4.    笔试和面试的总结
 
a)    前期准备:我基本都完全不做任何准备,因为很多东西不是短时间能准备来的,我一直的观点是,实力和平时的积累是最重要的,临场突击没有什么意义。腾讯面试的时候,有个哥们捧着本C++ PRIMER看在基本类型和运算符,让我汗的不行。当然,做一些往年的题目,看看笔面经,熟悉一下风格,还是有必要的。
 
b)    笔试的内容:笔试主要考察基础知识,一般会包括C++这样的语言细节,计算机组成,操作系统,计算机网络,算法与数据结构,数据库,软件工程,设计模式,Linux/Windows相关机制(同步和互斥),网络编程等等。所以可以看到,这么广泛的内容,我觉得准备没有什么意义。当然,做题型的人也是有的,那不是我的风格了。实在需要临时磨枪,我的建议是:熟悉一下基本算法和数据结构(排序,查找,二叉树,动态规划,贪婪,图论),基本网络知识(TCP/UDP,OSI分层),系统知识(进程,线程,调度,地址空间,虚拟内存,同步互斥机制),数据库知识(MS的笔试中出了一个BCNF,印象深刻),正则表达式,计算机组成(补码反码,大端小端)等
 
c)    面试:我的建议,以及我和面试官聊天的共识是:Just be yourself。因为1.如前面所说,就像谈恋爱,顺其自然,合适的话自然会在一起。撒谎没有什么意思,只能维持一时,即便勉强成功,终究会露底,在不合适的,能力不到的地方,自己过的也很郁闷,知道强颜欢笑的感觉么?2.这样能够最自然,最淋漓尽致的发挥自己3.面试官,HR,大都是久经沙场,而且技术面试,你那点底子很容易就能问出来,人家也许不明说,但是作假只能降低好感度。
 
一不小心写多了,最近期末比较忙,还有一些总结,明天再写,提纲大概如下:
1.    为什么要找实习
2.    寻找实习的关键因素
3.    为什么选择CA,关于公司和方向的选择
4.    对技术人员的建议:不要浮躁,踏实基础