——谨以此文献给自己庸庸碌碌的秋招,同时希望能够对机械电子方向转IT行业的童鞋有所帮助
忙碌的秋招已经结束,回想起辛酸的求职之路颇有感慨,于是写下本文作为留念。
1.简介
我本科和硕士都在机械领域非常好的学校就读。大一自学了C语言,之后又上了C++课,之后就喜欢上了编程,之后又学习了QT编程、嵌入式linux系统搭建、linux操作系统、UNIX环境高级编程、设计模式等等。在大三的时候参加了一个机器人团队,在里面做嵌入式linux系统的搭建与运维以及基于网络通信的上下位机程序的开发。后来读研的时候主要做的是利用机床的机器视觉系统,结合图像处理算法和机器学习算法来做实时监测。总的来说,我对C++程序开发有比较多的经验,对数字电路模拟电路也比较熟悉。
在考虑自己的职业规划的时候,结合师兄们的经验以及自己的喜好,我决定转行做IT,具体点就是互联网行业的软件研发。于是乎在网上找了些面试经验,其中
http://blog.csdn.net/xiajun07061225/article/details/12844801
http://blog.csdn.net/hevc_cjl/article/details/13193595
这两篇博客非常实用,建议想要应聘互联网公司的多看看。只有基础知识还是不够的,还得偏一个方向,由于研究生的项目经历,我对机器学习算法比较熟,之后又学习了Hadoop生态系统,所以朦朦胧胧的就定位为大数据开发,然而真正招聘大数据开发的公司非常少,所以最后也只能做其他方向了。
2. 基础知识
众所周知,程序员面试的时候跟考试差不多,所以基础知识一定要牢固。程序员的基础知识大致包括编程语言、数据结构与算法、操作系统原理、网络知识、数据库原理、设计模式、Linux脚本以及一个方向的专业知识,由于我比较喜欢做大数据相关的,所以我学的是Hadoop生态系统包括Spark。
编程语言我之前一直在用的是C++,先是把《C++ premier》看了一遍,尤其是C++11部分。之后又看了《深入探索C++对象模型》了解虚函数的处理方式、多态在编译时的处理方式,还有《Effective C++》系列,主要看些经验性的编码,比如重载‘=’号时的一些处理,new和delete相关的细节,还是挺有用的,在一些面试中也会遇到个别这上面的知识点。最后还扫了一遍《STL源码剖析》,主要看下STL中的数据结构以及里面的Allocator的实现。后来又学习的Java,因为在面试的时候时常遇到Java相关的问题,所以恶补了一下Java的基础知识。包括《疯狂Java讲义》讲解Java的基础语法,《深入理解JVM虚拟机:JVM高级特性与最佳实践》讲JVM的原理,以及J2EE相关的一些书讲的是Java
Web。另外我还学了Scala和Python。
学习数据结构与算法和操作系统原理我觉得最有效的方法是在coursera上找北大的公开课,听公开课的效率挺高的,听完后再看看相关的教材就基本上没问题了。数据库原理、设计模式、Linux脚本都有相关教材,一般仔细地看一本经典教材就行了。机器学习方面推荐《统计学习方法》《机器学习实战》然后在网上找找每个算法的博客,对每个算法的流程和应用都要十分熟悉。至于Hadoop生态系统,主要是Hadoop框架、Hive使用、Sqoop工具、Flume日志采集、ZooKeeper分布一致性和Spark框架Storm流式计算框架等等。由于面试的时候很少有面试官问我这些的,所以这方面我也只是分别看了一下市面上介绍的书看看。有一个面试官倒是建议我进一步去看每个工具产生时的论文,这样会更深入一点。最后就是多刷leetcode,刷完leetcode基本上写代码题都没什么问题,刷完leetcode再看《编程之美》、《剑指offer》、《程序员面试宝典》会非常快,因为内容在leetcode上大多有体现。
3. 求职之路
我的求职之路并不顺利,权当负面教材了。究其原因一方面是我之前定位有很大问题,互联网公司在招聘的时候招大数据方面的还是很少的,而我本身背景不是很强又投的这种HC很少的岗位。另一方面是上海经常是互联网公司的最后一批面试的,今年很多公司要么高调缩招要么低调缩招,很多公司都是到上海这样最后一批缩招的,并且本身上海的互联网公司就比较少。最后一个很大的因素是自己错过了暑期实习和内推,研二上学期还在忙实验室的事,一心想搞出一篇SCI,没太多时间强化基础知识,暑期实习之前面过百度意识到差距太大,所以暑期实习的时候没投岗位,开始复习基础知识,后来证明这是我最失误的地方。
校招的第一家是阿里,8月中旬左右就开始笔试了,当时投的是数据研发,因为是第一次笔试我特别看重,在牛客网上刷题,又大概看了下组合数学。加上本身学习能力挺好、数学基础也还行,笔试轻松过了。但是刚接到面试通知的第二天就网上就有了拥抱变化的通知了,真是哭晕在厕所,一轮游后就没有然后了。一面主要问的是项目经历、Java基础知识和Hash相关的知识,然后就是数据库相关的知识了。当时还不会Java,虽然面试官说语言不是问题还是在那问java相关的,我只能根据自己的理解来回答了,数据库方面问的是B+树索引。总体感觉还行,面试官最后还问如果上海没有合适岗位愿意到杭州吗,我说当然可以。然后就没有面试了。
第二家是华为,华为投的岗位是云计算,华为的招聘风格跟网上的经验差不多,笔试包括性格测试和机试,机试非常简单三道全AC。之后去面试一面面试官一直在跟我聊我的机器人项目和实习项目,二面面试官也是简单的问项目,总体来说还是非常轻松。之后又去面了所谓的高管面,问问职业规划、对华为的理解、对云计算的理解,因为毕竟不是CS出身,也没学过云计算,这次面试就是最后一面了,听说有牛人面了五面。等到十月中旬就拿到offer了。
第三家是京东软件开发,不知道为什么京东的面经比较少,由于今年京东上海这里刚成立没多长时间,所以面试的时候相对来说比较容易,没有特别的地方,这里就不赘述了。最后拿到安卓开发的岗位。
第四家是百度的软件开发,之所以没投大数据是因为加上实习生总共的HC只有10个,没那个信心能够拿到offer,所以投了保险点的软件开发。笔试跟阿里的笔试模式比较像,也是轻松通过了。一面应该是工作没多长时间的工程师,先是介绍项目,然后问的是比较基本的操纵系统原理、手写代码、数据库相关的知识。二面面试官是做脚本开发的,同样先是介绍项目,然后问了一些shell命令,然后让写脚本实现一个文本处理,这个确实不会,跳过了,然后又问了一个算法题,给了一个不是很理想的解法,最后面试官还是让我通过了。三面面试官像是总监级别的,先是让我说说对大数据的理解,我就根据我的理解花了一个简单的框图,然后他嘿嘿一笑说,这是你自己设计的框图吧,那我们来一个环节一个环节来看吧,先是问机器学习算法,之后问hadoop和spark相关的,最后又问了nosql相关的知识包括哪几类,cap指的是什么。问完技术问题就开始问发散的问题,问美团和大众点评合并后对百度的影响,有什么应对措施。三面面的挺心虚的,不过这种在技术上被碾压的感觉真爽……然后在等了一星期后百度也拥抱变化了,身边面到终面的几个同学里面没一个拿到offer的。
第五家是360,笔试一个月后,突然通知笔试过了去面试。因为360上海还比较小,只有一个大办公室,直接就是先后两个team leader来面试,一面面试官也是对我的项目比较感兴趣,然后问了写linux相关的知识,二面面试官上来就说对转行做开发的不怎么有信心,并且想要做过安全的。之后让回去等消息,不出意外的挂了。
加上比较晚面试的思科,总共就面过这几家,网易和亚马逊把我简历刷了,挂了蘑菇街和腾讯的笔试,由于中间去米国参加学术会议错过了SAP的面试以及其他一些公司的笔试和投简历的机会。
4.总结
整个校招给我最大的感触是一定要把握好3月底暑期实习的招聘,今年阿里的实习生虽然拥抱变化了,但是很多公司有阿里宝宝的绿 {MOD}通道,直接进终面,所以最后拥抱变化的还是参加校招的人。上海这边的互联网公司真的是非常少,大多是分公司,二分公司招聘名额都挺少的,而上海这边却有交大、复旦、同济以及其他学校,竞争还是挺大的,错过暑期实习在校招阶段找工作真是心累。对于纯软件公司,很少有公司在意你是机械的还是计算机的,只要你基础好、项目经历丰富都可以的,不会专门区分是不是科班,所以下定决心转互联网的好好在这两方面准备就好了,不用有心理负担。一定要有实习经历,因为基本上所有的面试官最开始都是让你介绍项目,如果有相关项目经历能够引起面试官的兴趣,会有很大的优势。另外,互联网公司招的最多还是前端、java后台、安卓客户端、IOS客户端开发,所以想做大数据或者云计算的一定要有心理准备,因为这两块技术本身十分复杂,校招名额挺少的。
以上就是本人的校招经历,最后根据自己的兴趣选了菊厂的云计算,以后要专研云计算领域了,争取成为云计算方面的专家。由于本人不是计算机专业出身,很多事情的理解难免有点片面,有疏漏的地方欢迎指出。