时光飞逝,不知不觉间,2016年已经快要走到尾声,而我的研究生生涯也即将走到尽头。从今年3月份找实习开始,到10月份签了三方,这中间也经历了起起伏伏各种波折。现在总结一下找工作的这些事情。
先说一下我的基本情况:中科大本硕,所学的专业是电子信息工程,班级排名常年中游,研究方向勉强算是计算机视觉。本科时候计算机方面就学过C语言和数据结构。读研时候做过的项目比较杂,嵌入式视频监控系统开发、数据挖掘比赛、图像处理都接触过一些。不过都做得比较浅,缺乏自己的核心竞争力, 这在找实习/工作的过程中吃了不少亏。下面按照时间顺序回顾一下整个求职的历程。
2015.10月份以前
没有准备求职的概念,都是上课和做一些实验室的项目。当时实验室的项目是视频监控系统开发,所以这段时间对嵌入式linux和C/C++还算积累了一些经验。
2015.10月-2016.12月
阅读《统计学习方法》这本书,对机器学习的常见算法基本上是看了一篇,并且参照《机器学习实战》,用python将这些算法实现了一篇。然后参加了阿里的数据挖掘比赛(广东公共交通客流量预测比赛),最后的名次大致是前6%的样子。这时候一门心思要找数据挖掘的工作,有迷之自信。
2016.3月-2016.4月
各个大厂的实习招聘相继开始,于是各种找师兄内推。内推的有阿里、腾讯、网易,百度是自己投了简历,都是数据挖掘方向。
阿里:3月十几号的时候接到了阿里的电话一面,这是第一次求职面试,最后是跪的很惨。其实当时问的问题也不是很难,大部分都是算法(RF、GBDT、K-means、CNN)有什么缺点、如何优化之类的。由于自己基础不怎么好,就看了看《统计学习方法》,能知道各个算法的基本模型,但是并没有想过算法的优缺点和优化问题。所以这次面试表现非常之差,意料之中的一面挂,说实话当时对自己打击还蛮大。。
网易:3.22号 参加网易数据挖掘的笔试,这同样是求职阶段第一次在线笔试。网易的笔试题偏难,前面选择题考了各种知识:C/C++、JAVA、Hadoop、Spark、算法等等,做的一般吧。然后后面有五道大题,三道编程,两道推公式的题。编程题一个是二叉树中和为某一个值的路径、一个是要编程实现朴素贝叶斯算法,还有一个不记得了。最后三道编程题基本写了出来,推公式的题就完全懵逼了。最后笔试也挂了。当时实验室就我一个投的数据挖掘,其他同学投的都是JAVA、C++、前端这些开发的工作,然后他们笔试也都过了。
百度、腾讯:内推没有用,压根就木有给我面试,需要走后续的笔试实习招聘流程。。
美图:当时美图还来学校宣讲招实习生,做了线下数据挖掘笔试,结果也挂了。。那时我就发现了问题的严重性,感觉数据挖掘这条路不好走。实验室的同学和师兄也没有做这方面的。总之就是很迷茫。。
3月底的时候仔细想了想,感觉数据挖掘这条路很难走下去,或者说风险有点大。最终在3.22这天决心换方向,转向到Linux c/c++后台开发这个方向。
2016.4月-2016.5月
这一个月前期是各种看书恶补知识的过程,因为那时候我连C++里面的虚函数是啥都不知道。Linux C/C++后台开发这个方向大体上需要 编程语言(C/C++)、数据结构与算法、计算机网络、操作系统这四个方面的知识,我就上网看了看别人的准备经验,然后主要看了这些书:《C++ primer plus》《STL源码剖析》《程序员面试宝典》《剑指offer》《UNIX网络编程》《UNIX环境高级编程》《TCP/IP详解 卷一》(TCP相关部分)《操作系统概念》(重点看看进程、线程、死锁这些基础知识)。现在想想这段时光真是艰难,每天从早到晚都是看书学习。
4月初的时候做了腾讯的实习生笔试,4月下旬做了阿里和百度的实习生笔试。最后貌似是因为腾讯笔试不怎么刷人,所以在4月底的时候收到了腾讯的面试通知,而百度、阿里不出意料的都挂了。
腾讯一面:首先是介绍项目,我的主要项目就是一个视频监控系统的开发,涉及到的知识点是linux环境编程、线程同步、进程间通信(使用FIFO),这个项目讲的还好。然后面试官就问了一个语法问题:static关键字在c/c++里面的用法,这个自然知道。最后就是算法题,要求将一个字符串数字比如“666”转换成数字666,这个也很简单,就在纸上写了代码。一面感觉挺简单的。
腾讯二面:也许是运气好,我的二面面试官有事没能来合肥,于是二面是电话面试。面试官好像很急的样子,就问了一个智力题,两个算法题。智力题我不会做,两个算法题都是《剑指offer》的原题,所以都知道思路。
腾讯三面:三面就是hr面了,这就比较轻松了。
4月份还参加了华为的实习生笔试和面试,华为因为比较看重学校,所以主要都是让我讲项目,没有问什么具体技术问题。在5.1前收到华为的实习offer,也算是给自己一个鼓励。
2016.5-2016.7
五一回来之后的一个周五,收到了深圳打来的电话,是拿到了腾讯的实习生offer。对于我这样一个临时转行的彩笔而言,实在是难得,运气因素也起了很大作用。5月之后,找实习就结束了,得到了喘息的机会。这时候正好之前投的期刊结果出了,是拒稿重投。于是这段时间一方面就是改论文,另一方面就是看了看nginx,加深对epoll、网络编程这些知识的理解,还有就是每天一般会做一道leetcode的题目,以及巩固STL等知识。
6.24号,到达深圳,于是开始了腾讯的实习经历,一开始,我的心里是充满期待的。可是生活往往不会尽如人意。
2016.7-2016.9
《阿甘正传》里面有这样一句话: 生活就像一盒巧克力,你永远不知道下一秒会发生什么。在腾讯实习的两个月,怎么说呢,有好有坏。
腾讯实习经历:
我实习的部门是广点通,实习的小组是做公共组件开发的。组里面是有在维护一些很有意思的开源工具库,比如RPC库、ZooKeeper等等。然后遗憾的是,这些库的开发维护工作跟我半毛钱关系都没有。安排给我的工作主要有两个:一个是基于jenkins搭建和二次开发持续集成的环境、一个是仿照cpplint开发一个protolint工具来检测.proto文件是不是符合公司的代码规范。
先说jenkins,一开始是让我搭建php的持续集成环境。于是噩梦开始了,php的项目是其他组在做的,他们有自己定制的php代码、有自己定制的公司各种后台服务,各种配置等等。而我每天的工作就是跟那边的一个高级工程师扯皮,每次都是我问10句,他回一句,最后他直接不回了。为什么呢?因为我做的这个环境是要把他们组的项目拉过来进行管理,然后统计他们代码的单元测试覆盖率等等直接汇报给质量控制部门(QA)的。他们当然不愿意受到QA的管理,,而且我还是个小小的实习生。
可是我又不得不问,因为我根本不知道他们代码用了公司内网的什么服务,做了什么配置。而大公司的各种代码权限、服务权限等等是非常非常繁琐,我一个实习生是各种没有权限、各种访问策略不通,于是又需要各种沟通....我花了整整三周时间才能跑起来他们组里面的代码,这三周真是痛苦不堪。而更痛苦的是,你花了大量时间,做的却是对自己没有收获的工作,整整三周没有写一行代码。。。到7月20号左右终于是完成了这个工作。
再说说protolint,这个工作好歹是写代码的工作,虽然是用python开发的。这个工作主要就是检查.proto文件的定义是不是符合公司的规范,比如空格啊、间距啊、变量命名啊等等。比较枯燥,但是能让我写写代码,我也知足了。这个工作大概在8月初的时候就基本完成了。
8月份的主要工作是基于jenkins的二次开发,主要是用python写一些脚本, 比如发发邮件啊、整合一下单侧覆盖率数据啊等等,这些都还好办。到8月中旬的时候,组里面又让我搭建gcc-4.9.4的持续集成环境。那个时候组里面刚刚能用gcc-4.9.4去编译部门的代码,但是跑单元测试时候会各种出错。于是就让我去找问题。这些问题呢,都是编译器升级带来的,不是代码的逻辑问题。于是我需要查看出问题的代码是谁负责的,然后再跟对方各种沟通。。可能我能力有限吧,说实话我真得不知道怎么解决这些问题,所以又是各种折腾。而且当时找工作内推已经开始了,我还天天在那边折腾,心中很是苦闷。
到8月20号,我已经萌生退意了。因为我发现实习做的这些事情真得不是我想做的事情,我只想好好地读代码、写代码,可是每天做的都是在折腾,都是在费劲的沟通。而且这些折腾的事情对我正式找工作又能有什么帮助呢?当时我们部门实习生还要答辩,但是我没答辩就回去了,我已经下定决心放弃鹅厂的光环,去追寻自己喜欢的生活。后来了解到实习时候的导师和组长给我的意见都是建议留用,要是参加答辩还是有很大机会拿到offer的。其实他们人都很好,只是怎么说呢,我觉得对我实习任务的安排还可以做的更好。也容易理解,人都是站在自己的角度考虑问题,又有谁会真正考虑一个实习生的发展。
虽然腾讯实习的项目没太多价值,但是腾讯内部有很多很好的资源。我利用周末和晚上的时间读了组里面RPC库的网络部分代码,对于异步非阻塞这样的高并发网络编程有了较深的理解。我还在实习期间抽空阅读了《Linux多线程服务端编程:使用muduo网络库》,并且自己写了一个简易版的muduo。我把这个自己做的小项目说成是腾讯实习生的mini项目,事实证明,后来整个找工作期间,这个项目被问了很多次,而jenkins那些几乎就没有人关心过。。
腾讯公司的氛围很好,环境很好,确实是一家很好的公司,只是不是很适合我吧。现在回过头想想,那段实习的时光,让我印象最深的:是每天晚上回到租的隔断间刷leetcode的冥思苦想、是每个周末自己看代码时候的豁然开朗。也许每个人都会经历这样一段努力而艰难的时光,回过头来想想,往往会感动自己。
内推面试:
校招内推在8月就正式开始了,我也海投了一波简历。最后电话面试的是这样几家公司:阿里、微店、百度。
阿里:一面主要问项目,把异步非阻塞高并发这些扯了一通,面试官就说我过了,准备下一面。二面问的很深,问了不少TCP/IP协议优化的事情,当时准备的不充分,就挂了。。阿里内推挂了,其实隐约知道校招其实也没有机会了。
微店、百度:一面都是问项目、C/C++、算法、STL等。我感觉都面的不错,然而一面之后都没有下文了。。
网易:又一次笔试挂了。。
2016.9-2016.10
9月份,大规模的校园招聘开始了,我是想去杭州工作,所以杭州的公司投的多一些。这也是至关重要的一个月,我这个月经历了大大小小各种公司,主要如下:
搜狐:搜狐9月十几号来学校搞了一个提前批,线下笔试,第二天面试。不知道是我笔试做的好还是啥,第二天面试就问了我一个智力题,我不大会,但是面试回来之后hr就给我说面试过了。就这样稀里糊涂的拿到第一个校招offer-搜狐。
地平线机器人:做过CV的应该都知道余凯自己创业开了这样一家做人工智能的公司。这家公司是来学校线下笔试,第二天直接面试。笔试很简单。第二天一共三轮技术面,一轮hr面。一面的面试官是做图像的,因为我的毕设是基于深度学习的车牌检测,所以一面主要问论文的思路、CNN的基础知识,不难,所以直接进入二面。地平线的面试是当天全部完成,所以马上进入二面。二面面试官全程板着个脸,除了项目之外,主要问了这些问题: