不要想有的没的

考研复习期间,我经常和一起复习的机油开“万一没我们都没考上,就去找工作吧”的玩笑。万万没想到一语成谶,在自己太蠢和今年考研形势不佳的情况下,我考研落榜了。

落榜之后对于我只有两种选择,一是调剂或者再考一年,继续上研究生,二就是找工作。家里人更倾向于前者,但是也并没有阻碍我去找工作。

相比于大三暑假实习后工作,或者大四秋招找工作来说,考研成绩出来后(也就是大四下)要去找工作要艰难的多。首先春天的工作职位本身就不多,其次你会发现大部分实习 / 全职职位都是面向你的学弟学妹的。所以对于像我一样技术一般,学习成绩一般,而选择了考研的少年,我的建议是好好考研,不要想有的没的,因为一边找工作,一边调剂,一边为考研二战做准备实在是太让消耗人的精力了。

请注意:

  • 本篇面试的具体内容仅对 后端工程师 的面试有所帮助,并且具有强时效性,如果你希望了解 2015 年 前端工程师 面试的相关信息,我推荐 Legendtang 的 「国内实习面试记」
  • 未经特殊说明,文中面试全部指代电话面试

面试准备

对于简历:

  • 精简自己的简历,建议缩到一页
  • Review 自己简历上的所有技能点,如果只是知道某个术语的话,建议不要写上去
  • Review 自己简历上的所有项目,先保证能有两个内容很充实的项目可说,保证所有项目都有话可讲

对于面试过程:

  • 回答问题时,如果不完全知道这个问题的答案,建议说出自己会的部分,不要说“不知道”或者什么都不说

关于语言或者算法方面的相关,基本在其他各种面试总结里都能找到非常全的信息,我就不再总结了。

面试过程

在得知成绩的当天我就开始疯狂地投简历了,幸运地获得了 CCP Games、豌豆荚、知乎、阿里巴巴、腾讯这五家公司的笔试 / 面试机会,以下会详细说明。

CCP Games

因为之前玩过一段时间的「EVE Online」,听闻这家公司每年都给 PSF 捐款,而且把 Python 作为主要开发语言之一,所以我对这家公司的印象不错。在 2 月在家等待成绩的期间,因为在 Twitter 上看到了推友发的招聘信息,就给 CCP Games 的 Shanghai Office 投了简历,所以准确来讲这家公司并不是我考研落榜之后面的。由于是国外的公司,基本整个招聘过程都是英文的。在投了简历之后,当天 HR 就联系到了我,然后让我参加了在线笔试。

笔试是三道程序题,非常有游戏公司的风格,前两道题都是非常标准的计算几何题目,第一道是线段关系,第二段是凸包,最后一道题是让你设计一个游戏,然后将胜利 / 失败概率设计到一个值。

提交之后,review 我代码的人提醒我“please strict on code quality”,不过还是通过了这一轮,HR 告诉我可以参加下一轮的现场面试。在和 HR 解释了我考研成绩没有出的情况之后,双方协定面试延期一个月。最后因为成绩出来太晚,这个机会就被白白浪费掉了。

豌豆荚

在投递简历后当天就收到了面试通知,第二天就安排了面试,自己的准备也是相当不充分。

一面时问了自己参与过的项目的详细信息,因为准备不够充分,所以自己各种项目经历也是讲得不是很清楚。下来主要是 Python 相关的问题,主要集中在两点:

  • Python 的适用场景
  • 什么是 pythonic
  • Python 的线程模型

最后一个问题问了“如何在数据库层面设计像 V2EX 那样的节点系统”这个问题,我的回答是一是可以模拟链表方式存储,第二是将 Python 的结构 pickle 下来。后来我在知乎上找到了更好的几个方案,见问题 「怎样在 MySQL 表中存储树形结构数据?」

面试快结束时,面试官给我讲豌豆荚的后台主要是 c++,偶尔会有 go,询问了我是否能写 c++。

整个面试感觉自己表现非常不好,最后不出所料,一个星期后收到了拒信。

阿里巴巴

在年级就业群里看到了阿里巴巴春季补招的信息,于是就投了一份简历过去,在简历投递后两周收到了面试通知。

面试的是阿里的航旅部门,赶巧的是收到一面时我只剩半个小时就要上飞机了,所以一面时也是非常地简略,在介绍了自己的项目经历后,面试官问了我非常基本的二叉树,堆,栈问题,最后询问了我是否能够去写 JAVA。

一面结束的第二天收到了二面通知,再次介绍自己的项目经历后,简单谈了谈进程/线程/协程、段表/页表,面试官看到我写过 Node.js 的相关项目,就询问了我异步/同步,回调地狱相关的问题。最后谈了谈人生。

二面结束的第二天受到了三面通知,因为坐火车拖了两天后进行了面试,依然介绍了自己的项目经历后,谈了谈参加 ACM-ICPC 去预赛中我的角色,简单问了问我测试程序的技巧后。最后谈了谈人生。

三面后很快就是 HR 面了,然后幸运地拿到了 Offer。

最后因为家里人无论如何都希望我能读个研,最后放弃了 Offer。

知乎

因为投简历恰逢节假日,所以面试晚了一段时间,不过反应依然是相当地快的。

一面时讲述了自己项目经历后,问的问题基本在以下几个方面:

  • Python 的适用场景
  • 什么是 pythonic
  • 进程/线程/协程
  • 段表/页表
  • GC 的设计

最后我问了一道判断图是否成环的问题。

在一周之后收到了第二面的通知,想起来问过的有:

  • 段表/页表/快表
  • 进程调度
  • 进程/线程/协程
  • 排序的时间复杂度
  • 快排的退化
  • 红黑树和堆
  • hash
  • Python 的 GIL

面完二面后,直接面了第三面,想起来问过的有:

  • mysql 的引擎
  • 数据库 ACID
  • 程序运行时堆栈的作用
  • Flask 的上下文
  • 函数闭包
  • 测试

四面是最后一面,因为这时我研究生调剂成功了,所以询问能否将工作换为实习,最后得到了肯定的回复,所以最后幸运地拿到了实习的 Offer。

腾讯

在投递简历后三周左右收到的面试通知,最后因为我在地铁上所以和面试官商量半个小时后面,不过最后不知为何等再次接到电话的时候就已经是一周多后了,因为这时候已经调剂成功了,所以并没有面。虽然没面试,但是我还是写了这个条目,意思是在提醒自己接到面试通知后最好就立即能进入面试,以免像这次一样拖的没掉了。

总结

总体来说,感觉面试能够较客观地评价人的知识体系,能让人意识到自己的不少薄弱点。

忙完了调剂、面试和毕业设计,也就快毕业了,希望自己各种方面能顺利,也希望各位能顺利吧。