【实习面试】阿里&腾讯offer的点点滴滴(内附干货)2016

前言

4月8号下午6点,突然接到腾讯hr的电话,本来已经不抱希望的我一脸懵逼,差点连自我介绍都不会说了。

之所以不抱希望,是因为距离上次面试已经9天了,然而正式的实习生面试将近(4月10号),想着如果8号(周五)再无消息,也便不用再等了。于是那些天又把《剑指offer》和一些复习资料刷了一遍,然后就开始放弃复习了。

前前后后,近1个月的面试战线,其实总共就面了阿里和腾讯两家。 
(网易互联网笔试被拒。。。)

最后两家都顺利提前拿到了实习offer:一个顺风顺水,一个一波三折。

现在回头看,两者都得来不易,想想是有多么幸运,才让我碰上一次又一次的机会。

一个月来,饱受煎熬,但也收获很多。在此记录两三心得,并在后半部分给出自己备战面试的干货,希望能够对正在找工作或者即将找工作的你们有帮助。

准备

打一场有准备的战

前两天,有同学问,你为了这次的面试准备了多久?

——从有明确的计划开始,大约是4个月。

最近发现很多同学去面试都是临阵磨枪——有好结果的当然不多。

常言道:“知己知彼,百战不殆。”

然而真正践行的人并不多,因为这并不是一件易事——要定下方向、做好规划并执行下去。

对于我来说,定方向、做规划并不是一天两天的事,而是经历了一系列的迷茫。

迷茫的时期

其实大学以来并不止一次迷茫,虽然迷茫起来很痛苦,但是痛苦说明你正在寻求进步。

大二下学期之前,绩点还过得去,稳居中上游。后来慢慢意识到,自己除了会用C/C++写点算法题之外,做不了很多其他事情,没有做个真正意义上的开发项目,甚至连自己以后有哪些方向可以做都不知道——当时还傻傻的分不清啥是前端啥是后台。

偶然的机会,班里一个同学邀请我一起去创一个技术类的俱乐部社团,当时因为有机会跟着老师做项目,于是“有所图”地答应了。

于是开始为了项目学习数据库、java web、html、js等等,每天课余时间都在实验室看书学新知识。

后来虽然是跟着研究生师兄打打杂,写一些非核心代码,但是至少明白了如何去搭建一个网站,而且前端后端都有所接触,之前的疑惑解了不少。

然而项目最后只做了一个比较粗糙的demo出来——跟公司谈妥之后才会开始正式、规范地把项目做起来。后来因为个人兴趣,没有继续做下去——

通过对java web的接触,我对java并没有很大的好感,并且对windows下IDE环境各种缓慢感到十分绝望。而前端页面的开发,做了一些,并不感冒。

于是我慢慢坚定了后面的路:

  1. 深入学习C++,了解其他语言,但是不三心二意。
  2. 学一学linux,把linux作为自己的开发环境。
  3. 应该不会选择前端方向。

后来,又因为一个比赛的原因,接触了python,很喜欢它的轻巧简洁,于是大二结束的那个暑假学习了python和它的一个web框架(django),希望以后将它作为辅助语言。

路开始清晰了一些,但是方向仍然很多,不知道如何入手。

2015年9月到11月,课内按部就班,课外则使用django搭建了一个个人博客(后来还很无聊的去阿里云买了台服务器,注册了域名),啃下了《鸟哥的linux私房菜》两本大块头书。期间开始写博客——大部分是从书上摘录下来的读书笔记。

2015年11月26号,我想这一天是我计划的开始。那天在微信群里偶然看到腾讯后台开发的补录信息:

腾讯后台开发岗位要求: 
熟悉Unix/Linux操作系统,熟悉shell脚本或python,及后台服务程序开发调试; 
精通C++,熟悉面向对象开发方法,对设计模式有一定了解; 
熟悉TCP/IP协议相关知识,熟悉网络编程,熟悉HTTP等网络应用协议,熟悉多线程多进程开发; 
熟悉MYSQL数据库,熟悉其他NoSQL存储; 
对OpenCV和图像算法有相关开发经验优先。 
对Hadoop有了解者优先。

其中大部分符合我的兴趣,于是当天晚上写下博文:

2015.11.26 接下来学习方向的一些想法——尝试学习后台开发

从博文的发表日期可以看到,第二天我就开始了漫长的入门修炼之路,开始了有针对性的学习,打定了腾讯的C++后台开发岗的主意。

当时的书桌,每一本都是大块头:

这里写图片描述

要选择读哪些书,怎么去读,着实不容易,为此我查了好些时间。

后来的日子可想而知——每天除了睡觉的时间在宿舍,不是在教室就是在图书馆,那么多大块头的书,啃下了不容易,看到后面,前面也大概忘了,所以当然也要有选择性地来学习了,相应的实践也要有,这是后话。

初次面试的打击与收获

2015年12月下旬,啃了也接近一个月的书了,在微信上看到utips的招聘信息,于是投了简历,希望去体验一把面试,也看看有没有机会先去创业公司学习两三个月。

面试被虐的很惨,即便如此,作为直系师兄的面试官,给我带来了很多的思考。

当天晚上就写下了博文: utips面试小记

原文如下:


前阵子看到utips团队在招新,最近看了很多书,可是苦于不知道如何投入实践,没有实践看完之后很快就忘了,也不能有深入的理解。于是投了简历,希望能有机会去实践一下(招聘分为兼职和全职,全职包括实习生和正职),投的是兼职岗,因为还有一些课程(而且盘算着明年春招去试一试腾讯等大公司的实习生招聘)。

很快投了简历一两天就接到面试的通知。

突然有点慌了,算法/数据结构/操作系统/计算机网络,虽然之前都学的还行,但是这学期没怎么接触,大多数概念都是模模糊糊的,而应聘的linux后台开发,对于linux仍然处于入门阶段,所以可以预想到面试应该会很惨了。

面试我的是团队创始人之一的周师兄。果然被虐惨了,好几个问题都答不上来,甚至被说“还是不问了,怕问了等下你又答不上来……”。

看得出师兄对我这直系师弟很照顾,所以其实即使被批评的比较惨,还是很感激师兄。

“已经大三了,你这个发展速度有点慢了,按这个发展速度走下去,怕你明年找不到工作。”

说实话,打击挺大的,虽然说不至于找不到工作,但是我自己也清楚,自己离目标还差很远。大一大二拿了两年的奖学金,绩点不是特别高,但是也挺不错,现在才发现课内的完全只是基础,对于工作是远远不够的。

一直以来,自认为自己在身边的人中,算是中上水平,目前有一个发展方向(身边的同学,保研,考研的挺多的,就业的走技术路线估计不多,而且其实挺多人现在还没有自己的发展方向),想想要是我找不到工作,那这些人不是更惨?

不过还是自己的视野太局限了,单单省内,中大的软院,移动信息工程,华工的计科,广工的计科,其实都是满满的竞争力。可能自己的眼光只看到了自己身边,没有看的更远。更何况,在这个行业的竞争中,总要往前进,中考淘汰一批,高考淘汰一批,到了就业找工作,又是大洗牌,在哪一个阶段一个不小心就有可能被淘汰了。

自己一直以来不是很崇尚精英主义吗,怎么过着过着自己也在追求优秀的过程中走向平庸吗?

所以我的关注点需要转变,更多的去关注那些优秀的人在做什么,而不是去关注那些整天碌碌无为的人在做什么以此来麻痹自己觉得自己已经很努力了。

最近会经常逛别人的博客,真的很佩服他们,勤勤恳恳耕耘。何时自己才能渐入这种境界?

这学期几近一半的时间呆在了图书馆,其他很多事情都开始屏蔽,力求专注。最近又开始浮躁,始终做不到“沉潜,缓图”。急切想要看到成果,也急切想要得到别人的认可。心情也时常失落,半年以来,少不了很多期待,只是仔细想一想,好像所有期待都落空了,各方面,诸事不顺。

面试那天晚上,跟着计科的同学们在专业群里大大吐槽了一顿,即使于事无补,愿今后的师弟师妹们少走弯路。

说回来,师兄很nice,虽然面试很不理想,他还是表示愿意拉我一把,并把我推荐给后台开发部的老大,至于那边愿不愿意带我,就得看那边意思了。

临近年末,这也许是今年的最后一个期待吧。虽然知道,创业公司很辛苦,但是如果有机会,还是愿意逼自己一把,不逼自己,想明年进BAT,就想都不要想了。

愿好。


面试虽然很不理想,但是鉴于我课内比较优秀的成绩,那边表示愿意让我去实习,带一带我。不过后来由于实习方向、实习时间(考虑到影响备战腾讯招聘的进度),我最终没有过去。

此刻拿到了阿里巴巴和腾讯的offer,回想起那一天师兄的话,感慨万千。

寒假不停车

寒假之前,报名了“世界超级计算机大赛”,寒假之后处于校队选拔阶段。那个时候已经是1月份了,眼看3,4月份在即,自己仍然没有一个可以写上简历的项目,而且该比赛如果入选将花费大量的时间,于是在经历了一段挣扎之后,放弃了继续参加该比赛。

本来寒假计划留在学校直到美赛结束,后来计划有变,于是提前了几天回到家,之后便经历了4天痛苦的美赛生活。

美赛结束之后,开始谋划写一个能写上简历的项目,整个寒假的大部分时间花了在 项目 + 《C++primer》+ 《算法导论》上面。学习的大部分动力都来自于写博客——总结的乐趣、自己写的东西被阅读的乐趣。

SNG-QQ音乐:一败糊涂

回到学校也已经是2月中旬了,得知3月份腾讯开始内推,心里开始焦虑。

几本大块头的经典书籍啃下来了,项目也有了,接下来要做的事情有两件:

  1. 做一份好的简历;
  2. 把书读薄——提取关键的知识点,精炼出属于自己的“面试宝典”。

关于第二点,十分关键,在此暂不作为重点,后面将在“干货篇”中详述。

3月份,开始有同学通过内推开始进行腾讯的面试了。

虽然师兄叫我不用着急,等准备充分了再找他,但是看到别人在面试了,我还是坐不住,让师兄帮忙内推,简历给了QQ音乐。

3月3号早上发的简历,师兄说面试官下午会打电话,于是那天下午一直在宿舍守着电话——然而一整个下午都是寂静的。

那天晚上仍然在等,因为有一个同学是晚上8点多接到的面试电话。晚上8点50分的时候,我以为不用再等了,准备开始安心做自己的事情,电话却响起来了,一看是深圳的固话,十分!紧张!

整个面试就20多分钟,第一次面试完全没经验,跟面试官聊不来,中间N多次冷场,最后以失败告终——面试官叫我再准备准备,等准备好了再通过内推的师兄联系他——也就是这一次面试挂了。

辛辛苦苦准备了那么久,第一次出征败得一塌糊涂。

但是现在回头看,也就是这一次失败的面试,让我思考和学会了很多——

  1. 同一个问题可以有不同的答法(语言组织方式、回答的详略程度、侧重点),如何才能给出让面试官满意的答案呢?

  2. 面试跟笔试最大的不同是,不同面试官有不同的喜好,问的问题不一样,而且遇上健谈的面试官和遇上不健谈的面试官差别也非常大,那么如何才能解决这个棘手的问题呢?

  3. 面试虽然变幻莫测,但是有一些问题提前准备好套路,总有能派上用场的时候,那么都有哪些套路呢?

当然,这些问题是我回过头来总结的,当时并没有像那么多,但是确实是从这几个方面去做了改进。具体的干货,后面再详述。

SNG-腾讯云:辛苦的通关战

经历了第一次失败,我花了一个星期的时间来反思,并进一步改进、准备——期间大幅度修改了简历、对面试的常见知识点进行了精炼和全面的再次复习、提前准备好一些台词(其实提前准备的作用就是让自己面试的时候更加自信,不因为紧张而出现“这个我明明会的,但是面试的时候就是紧张得想不起来了”的情况)。

3月11号,再次麻烦师兄把简历推荐给了腾讯云金融组的组长。

一面 基础知识

11号当天下午就进行了面试,有了上一次的教训,这一次行云流水,面了40多分钟,几乎所有问题都对答如流。放下电话那一刻,我心里100%的自信这一次一定能通过。事实也是如此,一面面试官评价很高,组长准备安排第二次面试,但是我的简历当时被微信锁定了,需要等到那边解锁才能进行下一步面试(面试前还征询了我的意愿,因为我工作志愿地点选择的是广州,怕我不愿意去深圳)。

二面 岗位匹配度&逻辑、产品思维

3月15号第二次面试,跟我想象中的完全不一样。一开始问了跟云服务有关的内容(幸好我面试前专门去腾讯云和阿里云的网站看了一下,也了解了金融云相关的东西)。 
后面我就开始懵逼了——现在要设计一个40亿用户的电商系统,该系统向用户投放广告,对同一用户,同一类广告只能推送一次,请问这个系统要怎么设计,需要注意哪些点? 
……然后是一大波 技术+产品 的问题,全过程处于懵逼状态(网上的面经、同学都说二面是一面的深入版!但是我这一次的面试内容完全是没有接触过没有预料到的!) 
后来想了一想,觉得这一次面试,前半部分主要考察你跟应聘的部门、岗位合不合适,后半部分其实很多问题都是开放性的,主要看你的逻辑思维以及产品思维(腾讯的技术人员是要有产品思维的!)

虽然二面全程懵逼地答过去了,但是我坚信这一次不会被刷掉!(也不知道哪来的自信哈哈)

三面 视频面试 项目&代码

果然,3月16号晚上就收到了腾讯云的短信,预约18号下午进行视频面试。

视频面试传说中要写代码,而且是手写代码,于是那两天把《剑指offer》来来回回刷了两边,把快速排序,堆排序,vector,string以及各种常考的库函数实现都来来回回写和看。

不过最后再次出乎意料——只给了一道算法题,打印三角螺旋数组(常见的螺旋数组的变形),限时20分钟。

打印螺旋数组其实在《剑指offer》里有,但是我并没有仔细去看那道题。一开始比较紧张,思路没打开,过了5,6分钟之后,终于有了思路,时间比较紧,最后代码没写完(后来发现自己的代码实现复杂了,剑指offer上面的代码也就20多行),时间结束后跟面试官讲了思路,然后就结束了。

一次不知道对与错的决定

三面之后,心里十分忐忑,三面的表现不算很差,但也不是很好(题目思路出来了,但是代码实现没表现好,而且前几分钟关于项目的回答不是很好)。

3月22号晚上,收到腾讯云的短信通知:

恭喜你通过了腾讯云校招实习生提前面试并获得报备资格,后续请留意腾讯校招实习生面试流程并准时参加。

一开始十分兴奋——面试通过了!

通过了3轮技术面试,后面就只剩下hr面试了,可以说最艰难的时期过去了,于是第二天很愉快地准备hr面试的内容。

然而看了看短信,越来越觉得不对劲——报备、留意校招实习生面试流程并准时参加。

看起来好像意思是仍然要参加4月份正式的实习生招聘面试?

于是问了hr,得到的回复:

内推面试有三种结果:提前录用,报备和释放,我属于报备,需要参加4月份校招的笔试面试,然后如果4月份招聘通过,就会定向到腾讯云实习。

又是大写的懵逼了……第一次听到面试通过了但是没法提前录用。

后面经历了复杂的心理过程以及跟面试官的周旋——结果是放弃了报备资格。

之后心灰意冷,只寄希望于4月份的正式实习生招聘了(意愿事业群填的是微信,感觉压力很大)。

阿里巴巴:顺风顺水的背后

上面腾讯的面试已经经历了一波两折,期间每天都在等待面试结果和准备下一次面试中焦虑地度过。

相对来说,阿里巴巴的面试显示十分顺利。

事实上,这次的顺利是建立在前面的经验教训和充足的准备之上的。

阿里巴巴总体的面试体验非常好——每次面试的前一天hr都会打电话过来预约,而且面试官都特别nice。

在面试之前,还有一些小插曲:

  1. 当初学院的师兄帮忙内推的时候说推的是阿里巴巴国际事业部,岗位只有java,没有c++的。但是看到阿里巴巴招聘信息上写着“也许你不会java,但是你熟悉C++…”于是我就傻傻投了java岗的简历。后来10多天没有消息,班里好几个同学都已经一面了(听到有人也是一样不懂java投了java岗,结果面试的时候根本hold不住,想想自己还是很幸运的),于是自己跑去阿里巴巴招聘网站上自己网申了,填了C++研发工程师。没想到第二天就收到了师兄的内推邀请链接,点进去,发现岗位也是C++研发工程师,而不是java岗的!

  2. 完善简历信息的时候,最后有几道开放问答题,其中一个询问了感兴趣的事业部,由于在广州读书,实习方便一点,而广州只有UC,于是就写了UC(神马搜索和九游)以及共享业务事业部(杭州)。后来面试的时候才发现神马搜索团队在杭州和北京!

一面 基础知识

3月16号早上进行了阿里巴巴的一面,有了前面的经验,一面依旧行云流水,总共面了35分钟,涉及面非常广,考到的大数据题、算法题都在之前接触过(算法题出自《剑指offer》)。

面完心里觉得铁定能通过。

二面 逻辑思维&再次懵逼

3月23号下午进行第二次面试,套路竟然跟上次腾讯云的极其相似。 
一开始问了项目,然后就开始设圈套了: 
你在广州读书对吧? 
广州珠江那边有很多桥吧? 
桥有多长啊? 
桥上限速多少啊? 
广州塞不塞车? 
…… 
假定广州有足够多的车,且假定你说的桥长,限速是正确的,这座桥一天能通过多少辆车…… 
这座桥一天最多能通过多少辆车呢?(也就是不考虑高峰期) 
长的桥一天内通过的车多,还是短的桥通过的车多? 
建这座桥要考虑哪些因素? 
…… 
反正同样是一脸懵逼地答完了,期间各种跟面试官打太极(论说话艺术的重要性啊) 
这一轮总共面了1个多小时!!

面完之后,跟腾讯云的一样,虽然是一脸懵逼地答完了,但是不知道哪来的自信,觉得不会被刷掉。

三面 交叉面试 编程

3月24号晚上6点,收到杭州的固话,但是当时在外面吃饭,没有听到。因为不是之前的号码,所以我猜测是传说中的“部门交叉面试”,或者是hr面试。

因为没有接电话,所以第二天开始等那边再次打电话过来,然而第二天和第三天都没有电话。

第四天是周六,下午4点多的时候收到北京来的电话,结果真的是部门交叉面试,预约了5点半面试。

5点半,面试官一上来给了3道编程题,3选2的话给30分钟,全做的话给40分钟。 
1. 链表翻转——经典的题目,秒掉无压力; 
2. 编辑距离——算法课学过,动态规划,不过写出正确的代码还是需要一定时间; 
3. 左旋or右旋数组——要求至少给出两种做法,在《剑指offer》上看到其中一种做法。

最后权衡了下,觉得选择前两道,而且第三道有部分思路,如果后面问到的话可以好好表现一下。

挂了电话之后开始敲代码,敲完发到他指定的邮箱,然后继续电话,解释思路和代码——沟通真的很重要,如果把自己写的代码解释给别人听。

解释完前面两道,果然面试官问了第三道思路,于是我讲了思路。 
然后面试官说有另一种思路,但是该思路需要做进一步的约束改进才能正确——让我想出改进的方法。 
后来没想出来,但是把自己思考的过程一边讲给他听了。 
面试官很nice,看我没想出来,把答案给我说了,但是又挖了一个坑——让我证明算法的正确性。 
之后又是无穷无尽的证明,所幸面试官很好,一直引导着我去思考。 
全程代码+解释面了近两个小时,虽然没有完全证明出来,但是面试官表示已经很晚了,同时在这么短的时间内可以做到这样已经很不错了——冲着这句话,我就知道这一面的通关卡我拿定了。

总的来说,这一次的表现很好——得益于之前算法题的准备已经算法课的学习。说实话,如果之前完全没有接触到这些题目,30分钟内写出正确的算法是很有挑战性的。

4面 hr面

3月29号下午,正在上课,接到杭州的固话,很高兴地跑了出去。

在此之前,看了知乎上阿里巴巴hr的各种负面消息,十分担心。而实际上,hr面还是挺愉快的,诸如实习城市的选择,为什么不读研,对前面面试的总结,跟谁比较好……

其中有一个问题很神奇:

你觉得你舍友会用哪3个词来形容你?

我回答了:规律,活力,高效,并一一给出了理由。

事后我问了舍友,他回答了两个:活跃,高效。

hr是男的,很友善,最后我问了他杭州的衣食住行,他很详细地跟我介绍了一番。

最后他说面试结果会在4月中旬出来——天呐,又是漫长的等待!

阿里巴巴offer

说好的4月中旬给结果,然而当天晚上我就收到了录取的短信和邮件,官网上的状态也变成了“待跟进offer”!

后来跟hr和部门主管都通过了电话,至此终于拿到了第一个实习offer。

整个过程总的来说很顺利,没有面腾讯时的焦虑和紧张,可能是对腾讯的面试比较看重,而对阿里则是抱着试一试的心态,于是反而不会那么煎熬。而且面阿里的时候,已经有了面腾讯的经验,一切都准备的特别充分,虽然自己准备了很多内容在面腾讯的时候没有派上用场,但是在面阿里的时候用上了。

MIG-应用宝:意外的收获

腾讯的内推是在25号就结束了,所以当29号下午5点半收到MIG-应用宝的电话时我是十分意外的——原来我放弃腾讯云的报备资格,简历被释放后,简历被MIG的hr看上了,于是安排了面试。

一面 轻松取胜

这一次面试非常轻松,大体内容跟之前的差不多,这一次是我的第四次基础知识面试了!大概简单面了不到20分钟就结束了,而且面试官当即表示我的表现很不错,他这里已经通过了,让我等待下一次面试。

二面 惊险过关

第二天早上,我上了一节课,觉得很无聊,于是跑到图书馆复习,准备第二次面试,没想到11点就收到了第二次面试的电话。 
这一次基本都是围绕着项目来问的,由于我在简历上附上了github源码,所以面试官一边看着我的代码。

这一次的感觉是,基础的我都答上来了,但是深入一点的没有答上来(不懂就是不懂,直接跟面试官表示没接触过)。

总共面了20分钟左右,最后为了探一探情况,我委婉地问面试官“假如我能通过面试并去到你们部门实习,您觉得我在哪方面需要进一步提升?”

然后面试官巴拉巴拉:“我看你自己看了挺多(跟这个岗位)相关的经典书籍,知识面也挺广,挺多东西都有所了解……” 
(简历书写的重要性——把自己看得书学的知识展现在简历上)

听到这里,我就放心多了!

可见,腾讯还是更加注重基础的~当然如果能够深入就更好了。

hr面 失望后的惊喜

二面是3月30号进行的,因为之前腾讯云和阿里都有一面是写代码的,所以一直苦苦等待三面的通知,然而一天天过去,一点消息都没有。

4月3号腾讯实习生招聘笔试,4月10号开始面试。所以也就是9号之前没有消息的话,应该就没有下文了。

所以我都已经做好了心里准备——正式招聘时再去尝试一次,失败了就去杭州阿里实习。

4月8号,周五,下午6点,正打算跟舍友去外面吃饭,突然接到腾讯总部的电话——紧张、兴奋。

hr的声音很好听,聊的话题也很轻松,聊完之后,她说下周会给我发正式offer——她说前面两次面试的面试官对我的评价都挺高的,而且他们部门4月份不来广州面试了,所以我接下来就不用再面试了!

一切来得都很意外。

挂了电话之后,我对着阳台外面大吼了几声,终于还是提前拿到腾讯的offer了!

后来想一想,如果当初没有放弃腾讯云的报备资格,也许现在也拿到offer了吧。

干货

前面写了那么多,其实更多的是心路历程,感觉写再多都写不完。

现在还是来点实实在在的干货吧!

关于准备

  1. 明确应聘的岗位和方向——至少要确定自己应聘什么语言的岗位,前端还是后台。
  2. 找一家心仪的公司,看一看这家公司对该岗位的要求,同时参考其他公司类似岗位的要求。
  3. 针对岗位要求,分清技能要求的侧重点,然后有针对性地去学习(我觉得最基本的是把该方向的经典书籍啃下来)。
  4. 做一个拿得出手的项目(真的,一个就够了,应届生的项目经历不在多,而在于体现你在该方向上的学习)

以我自己为例,确定了C++后台开发岗,然后找了腾讯的岗位要求:

熟悉Unix/Linux操作系统,熟悉shell脚本或python,及后台服务程序开发调试; 
精通C++,熟悉面向对象开发方法,对设计模式有一定了解; 
熟悉TCP/IP协议相关知识,熟悉网络编程,熟悉HTTP等网络应用协议,熟悉多线程多进程开发; 
熟悉MYSQL数据库,熟悉其他NoSQL存储; 
对OpenCV和图像算法有相关开发经验优先。 
对Hadoop有了解者优先。

侧重点: 
熟悉 Unix/Linux操作系统,C++,TCP/IP协议相关知识,网络编程,多进程开发,数据库; 
了解 shell脚本或python,设计模式,多线程开发,Hadoop。

各个方面的学习书单:

Linux入门:《鸟哥的linux私房菜—基础篇》(必读),《鸟哥的linux私房菜—服务器架设篇》(选读)

Linux环境编程:《UNIX环境高级编程》、《Unix/Linux编程实践教程》 
(第一本简称apue,十分经典,但是内容也特别多,适合做工具书,里面的内容可以选择性地阅读;第二本的知识点安排跟apue挺吻合的,并且有大量实践教程,虽然书中有挺多错漏,但是仍然推荐作为配合apue一起学习的书籍。也就是说,我建议这两本书同步看)

C++:《C++ primer》(能够静心读下来不容易)、《Effective C++》(很有用的一些条款,针对面试可以选读)

TCP/IP协议和网络编程:《tcp/ip协议详解》(必读)、《unix网络编程卷1》(必读),《unix网络编程卷2》(主要讲进程间通信,可选读)

算法与数据结构:《算法导论》(从大一开始陆陆续续看,那时觉得很难,现在回过头来再看,惊叹万分,有醍醐灌顶的感觉)、《STL源码剖析》(绝对值得一看,前半部分必看,后半部分选读)

脚本:《python基础教程》

设计模式:《大话设计模式》,程杰 著(适合入门),《Design Patterns: Elements of Reusable Object-Oriented Software》(设计模式),作者: Erich Gamma、Richard Helm、Ralph Johnson 和 John Vlissides(经典书籍,但是比较难懂)

数据库:数据库原理要懂,之后可以了解mysql,memcached,redis等等。

刷题:《剑指offer》、leetcode(网站)

以上列出的书,大多是经典的书,口碑一流,但是“厚重”使得学起来有一定困难,所以一定要配合实践,并且根据自己的情况选择性阅读。

项目:跟应聘岗位有关,在精不在多。

另外,最宝贵的资源:源码 和 博客。

阅读优秀的源码能够学到很多东西,而阅读源码、书籍时可能会遇到困难,这个时候去看看相关博客会有很大帮助,当然,如果能够自己也写一写博客那就更好了。

我的学习方法是:

一边看书,一边写博客——这是一个把书读薄的过程,在后面的复习中,我就以自己博客的知识为主来复习了,然后原书作为参考。

一边看书,一边打代码——没有代码,大多数情况下看了就忘的。

关于简历

简历的重要性不言而喻,其作用有二:

  1. 给hr看,用于评级;
  2. 给面试官看,协助自己获得面试的主动权。

首先我们来看看第一点:

阿里和腾讯都会对简历进行评级的。

阿里:往年有A+,A,B+三档,而今年要求A类及以上实习生。

腾讯:TST内推基本要S级和A+级才有面试机会,少数A级和B级的也会有机会。

以下是网传的腾讯简历评价标准,仅供参考:

这里写图片描述

可以看到,要评到S级是比较困难的,而评到A+级,特别注意到一点:技术社区和个人技术blog。

这一个很重要,如果你能把自己做的东西放到github上面,在项目经验中附上项目源码,绝对是加分项,这是一个很好的展现机会:简历能放的东西有限,当你附上自己的github时,潜在的面试官就有可能会看到你其他的作品。而且优质的代码是检验一个程序员很好的标准,如果你能在github上提交优质的代码,而刚好被面试官看到了,那么拿offer也就不难了——也许你不擅长面试交谈,但是你有代码!

然后是个人技术blog,虽然不保证所有面试官都有兴趣去点开来看,但是至少又是另外一个平台,通过博客,你可以向面试官展现自己所学的所有知识,并且体现了你的分享精神。

以上是关于评级的,下面说一说第二点:

技术面试无疑是重头戏,而技术面试官一般都是做技术的,因此你的专业技能是他们的关注重点。在面试之前,如果面试官对你一无所知,那么他通常会问许多范围特别广的知识:linux,数据库,C++,网络,操作系统……这样子是很危险的,一方面,一个人的知识面不可能那么全面,因此极有可能会遇到自己不擅长的领域,从而导致面试失利,另一方面,遇上这种情况,面试的主动权就完全在面试官手里了,你只能被动地去回答。

因此,简历上的展现就显得十分重要:你的简历就是面试官的地图,如果简历上十分空泛杂乱,那么面试官只好大范围地试探,如果简历上很具体,有针对性,那么面试官只需要按着简历上的内容,并结合部门的岗位要求来提问——因此写上简历的内容你必!须!熟!悉!

下面我就抛砖引玉,以我准备简历的过程为例来谈一谈:

  1. 找一份简历的模板,简洁就好:

这里写图片描述 
这里写图片描述

  1. 在这份简历上进行修改:

可以看到,该简历模板上的内容有: 
基本信息,教育经历,实习经历,项目经历,个人技能,担任职务,自我评价。

对于技术岗的,担任职务这一项基本可以去掉——只有在担任XXX主席之类的才【考虑】写(前提是简历的空间够写)

几个要点:

  1. 不写对应聘该岗位没有太大帮助的内容(比如应聘后台开发,你写熟悉前端的东西就显得多余了)

  2. 力求简洁明了,简历不要超过一页!!

  3. 明确应聘岗位!

  4. 用数字or成果说话: 
    能够摆出自己写过的C++项目,列出自己看过的经典书籍,比干巴巴写上“熟悉C++编程”之类的好过100倍; 
    能够摆出自己项目的性能测压数据,比写“项目的性能很高”之类的强过100倍; 
    能够砸出自己的绩点,排名,拿过的奖学金,比写“我的成绩优异”之类的好过1000倍!

我根据个人的特点,最后的简历格式如下:

这里写图片描述

我所说的特点是什么呢?

  1. 平时经常写博客,于是把自己的博客摆在显眼的位置,附上超链接;
  2. 颜值还ok(请允许我臭美一下),附上帅气的简历照,显示自己的自信;
  3. 科班出身,且绩点排名还算不错;
  4. 没有实习经历,因此删去,把重点放在项目经历,并增加一个学习经历,避开自己的弱点,展现自己的优点;项目经历要调理很清晰->简述,主要工作(分点列出更加清晰),项目成果(需要有数字支撑),项目源码(让面试官看到你的代码能力,并证明代码是你自己写的!)
  5. 获奖情况只写奖学金(附上排名显示含金量)和跟专业有关的比赛(千万不要写参加什么摄影大赛啊,歌唱比赛啊,运动会奖项啊等等……只会浪费简历的空间)
  6. 个人技能中,一开始是按照模板的格式来写的,后来发现太占用空间,而且前面说过:个人技能你想怎么吹都行,但是空口无凭,所以我的建议是如我那样用两行就展现就好,然后用实际的东西来说明,比如我说“熟悉C/C++编程”->我的项目是用C++写的,我在学习经历中提到我阅读了《STL源码剖析》(当然也可以提一下自己阅读了《C++ primer》);我说“熟悉TCP/IP和网络编程”->我的项目内容跟网络编程有很大关系,而且我在学习经历中提到我阅读了相关书籍和源码。
  7. 最后纠结了很久,增加了“小作品”一栏。因为在学校没有做过大项目,只能通过一些小的作品来向面试官传达:我很喜欢动手写东西,并且有能力写代码。而且我选的两个作品,也是有意图的:我的操作系统学的不错,我会用python搭网站(呼应了上面“了解python,html,mysql”,并且会脚本语言python是一个加分项)。

这样子写简历的优点上面已经提到挺多了。

在这里强调一下学习经历:我下面列出了具体的一些知识点,于是面试就很容易掌控了,写上去的每一个点,我都需要非常熟悉,而面试官一般会按照简历上的内容来问(以确定你真的掌握了),这样子范围为“整个宇宙”的面试题,就被你简历缩小到自己熟悉的范围之内了。

总之,简历要做到:一切都是为面试该岗位服务,写上去的内容要跟岗位要求相关(当然也有例外,如果是不相关的,你也要有自己的目的,比如展现自己的学习能力等等),写上去的内容要熟悉(别想着忽悠面试官,会不会一问就知道了,写“精通”之类的,往往会引火烧身)。

简历上有的东西是改变不了的,比如成绩,学校,奖项,但是项目经历和学习经历是需要好好打磨的,写的好的话,事半功倍。关于这方面的内容,网上有很多教程(STAR写法)。

因此写完简历最好多找一些师兄师姐帮忙给出修改的建议,然后多修改。

关于面试

前面做了那么多准备,都是为了面试。在讨论面试之前,先提一下笔试:

内推一般是可以免笔试的(会在一面中考察)。

如果没有内推,那么一定要好好准备笔试!

虽然我通过内推拿到了阿里和腾讯的offer,但是网易笔试就被刷了!而身边也有很多同学一样面临笔试被刷的危险。

师兄也跟我说,他的一个大牛舍友,阿里笔试被刷,后来去了微软亚洲研究院。。。

所以笔试不容轻视。

下面再说说面试的心得:

我觉得并不像网上说的那样有那么多的技巧,我认为只有三个需要注意的点:

1.经典的问题提前打好腹稿:比如进程和线程的区别,C++虚函数的实现,TCP三次握手,快速排序,你还有什么问题要问我的…… 
提前打好腹稿是为了面试时不那么紧张,因为一紧张常常会答得毫无逻辑,而且不全面。而且这些出现概率接近80%的题目,你不提前准备,那就等着被虐吧。

2.争取面试中的主动权,力求主导整场面试——回答要深入,主动展现自己: 
这一点我深有体会,第一次面试QQ音乐,面试官问了vector的实现,于是我回答: vector是动态分配连续空间的线性数组,当空间不够时扩充为2倍之类的。。。当时其实我是学习过了vector底层的空间适配器的,但是我没有往深里答,而是简单的回答了表面的东西,以为面试官会深入追问下去。但是!没有!后面很多问题都是这样,我不主动深入说,面试官也不深入问,于是白白失去了展示自己的机会。

后面的面试,我吸取了教训,举几个例子。

说一说select和epoll的区别:

之前的话,我只会回答select的3个缺点和epoll的3个优点——但是这远远是不够的,并不能给面试官留下深刻地印象。

于是我开始醒目了:

我从select和epoll的运作原理来解释他们的区别吧……然后巴拉巴拉讲了select数据内核空间和用户空间的拷贝,讲了其套接字的遍历导致的效率问题……巴拉巴拉讲了epoll的红黑树,双向链表,回调机制。我相信如果你能从他们的运作原理来解释两者的区别,而不是干巴巴地给出背住的结论,一定会让面试官刮目相看。

另一个经典的例子:

说一说TCP的三次握手吧!

之前觉得,不就是三次握手吗,没有啥好讲的,于是几句话带过,后来师兄说,如果你说你熟悉TCP/IP,那么TCP三次握手和四次挥手的状态转换图要能熟练的画出来!

于是面试中遇到这个问题,我会从哪一方发起主动连接,发送了什么类型的包,发送完毕后进入什么状态等等来详细解答。

也正是因为这一点,每次面试完基础知识面,我都有95%的把握能通过面试。

以上说的是回答自己熟悉的内容,如果遇上不熟悉的内容,应该如何应对:

“不好意思,这方面我没有接触过(或者接触的不多)。”

是的,遇到不懂的知识,勇敢地承认自己不会,千万不要不懂装懂!

进一步的,可以引导面试官谈论自己熟悉的领域,比如面试官可能问B+树,你不是很熟悉,但是你对红黑树比较熟,那么你可以说:“B+树我不是很熟悉,不过我知道红黑树,不知道您有没有兴趣聊一聊。”这样子主动权就在你手上了!

又或者,把自己思考的过程告诉面试官:我经常遇到的情况是,面试官问了一个问题,我不可能短时间内给出答复,于是先说“麻烦给我2分钟的时间思考一下”,两分钟后如果还没有结果,千万不要让面试官等,这个时候我会先把自己目前想到的都告诉面试官——即使不是很完善。

3.表示出自己对加入他们很感兴趣:在面试之前,我都会去查找我应聘的部门的相关资料,当在面试的时候提到时,如果你表现出对他们部门有所了解,那么面试官会很高兴!最后一般面试官会问:“你还有什么要问的吗?”虽然面试官已经表示面试结束了,但是这个时候你们仍然在交谈,这也是表示自己对他们感兴趣的好时机,我一般会准备1到2个问题,不要太大太空,最好跟岗位或者部门有关。

总之,面试不是笔试,问什么问题,如何去评判回答的好坏,都是由面试官来决定,不同的面试官也许会截然不同,所以网络上的面经看看就好,最重要的是充分准备,学会沟通!

后记

不知不觉敲了那么多,仍然觉得有说不完的话,找工作确实是一件辛苦的事情,而要打一场有准备的战,而不是临阵磨枪靠运气,更加地需要投入时间和精力去好好规划。

感谢那些在博客上记录下点点滴滴经验和知识的博主,给予我方向和动力。

感谢师兄们的帮忙,这段时间没少麻烦你们。

感谢奋斗的自己。

接下来,继续坚持2件事:

  1. 读万卷书,并坚持写博客记录(可以作为知识库储备——我常常会回过头来翻看自己的博客,而不是到处重新查资料;还可以作为分享和交流的平台);
  2. 行万里路,坚持锻炼;

2016年4月11日 
张华键 
与君共勉

©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页