本人今年研二,参加的是2016年暑期实习生的招聘。因为有网易的师兄提供的内推机会,所以没有笔试,电话面试了两轮就拿到了offer。
一面一面主要是聊技术,我在北京所以是电话面试。面试官一上来先让我自我介绍,包括自己的学校年级专业,还有做过什么项目之类的。我说我做过的项目主要是当数据结构助教的时候写了一个在线OJ,还有去年实验室与企业合作的人脸识别系统。
聊项目经验面试官首先说我不懂人脸识别,你能讲一下原理吗,我就大概说了一下整个系统的流程是什么样的。面试官接着问你在这里面做了多少,我说算法部分基本都是我负责的,产品化的工作交给公司,又大概讲了一下自己写的几个模块具体有什么用。面试官又问了一些细节,但他确实不是很懂模式识别,我也就随便讲了一下。
我面的是运维开发,所以面试官对我开发的在线OJ比较感兴趣。他首先问你们的网站架构1是怎么样的,又问你们在设计网站功能的时候是怎么考虑的。我说这是面向学生的系统,功能肯定是围绕学生设计的,包括如何提交代码、如何打分、如何返回结果、如何查询自己的成绩等等,此外还有题目展示、成绩展示等等略显次要的功能。面试官接着问学生提交代码以后我们怎么处理,我大概说了一下流程:保存代码、编译、输入测试样例并收集程序的输出、根据答案打分、将成绩写入数据库,这中间任何一步出错就终止然后在前端返回错误信息。他又问学生提交代码之后是马上返回结果吗。我说因为测试时间可能较长,让页面一直等待会降低用户体验,所以学生提交代码之后马上被重定向到另一个页面,如果用户执意查看还未完成的测试结果,我们会让网页定期刷新。
面试官问你们的用户登录和会话管理是如何做的。我说用的现成的Flask框架,login模块解决了所有问题,我并没有读过Flask的代码。面试官不太满意,说如果让你来做,你会如何做。我努力猜了一下,但靠不靠谱就不知道了,面试官也没说什么。
面试官最后问你觉得这个项目还有什么不足的地方吗,这是我很早就思考过的问题,主要讲了三点:
面试官听了貌似感觉比较满意。
编程技能随后考察的是编程技能。面试官问我会用什么语言,我说会写C/C++,不过Python更顺手。面试官表示他们开发用的正好也是Python,就问了一些Python相关的问题。
第一个问题是问Python里的mutable对象和immutable对象是什么,我没了解过这两个概念,就猜mutable就是list这样可以修改内容的,immutable就是tuple这样不能修改的,面试官说差不多吧,然后给我科普了一下。面试官又问问如果a = 1; b = 2; a = b发生了什么,我说a会指向2这个对象,2这个对象的引用数+1,1这个对象的引用数降为0被回收。面试官接着问如果a = '123'; a = '456'发生了什么,我说会首先创建一个’456’对象,a指向’456’同时’123’被回收。面试官然后问你知道弱引用weakref吗,我说不知道。他说弱引用就是引用了一个对象但这个对象的引用数不会+1,问我这个东西可能有什么用。我没答出来2。
第二个问题是import是什么原理,我说就是把被import模块里的代码执行一遍。面试官问如果模块里有一句print 123,import的时候会打印123吗,我说会。又问如果我再import一遍还会打印123吗,我说不会。面试官又问两次有什么区别呢,仅仅是执行一遍这么简单吗,我想了想又说应该还牵扯到Python的命名空间,模块里定义的对象应该都在模块对应的命名空间里,import已经存在的模块是不会做任何事的,除非调用reload()。
后来貌似还问了一些简单的问题,时间太久不记得了。
算法对算法的考察很简单,毕竟是电话面试,没办法让我手写代码什么的。面试官问了一下你知道红黑树吗,我说用过但是没写过,背了一下红黑树的五条特性。面试官问红黑树跟一般的二叉树有什么区别,有何优点?我说红黑树要求不如平衡二叉树那么严格所以每次更新的开销更低。面试官问你在什么场合用的红黑树,我说是操作系统大作业,要求把Linux内核里的红黑树移植到Windows里。
第二个问题更简单,如何判断一个单链表有环。我说一个快指针一个慢指针就搞定了。面试官没有接着往下问。
提问最后一个阶段是由我提问,对于网易有什么想了解的地方。我首先问运维开发跟游戏研发都是开发侧重有何不同,又问这两个职位未来的发展路径如何。面试官的意思是游戏研发可能需要在某一个方向上钻研得比较深,运维开发要接触的知识面更广一点,将来可能发展成架构师什么的。我第二个问题是运维开发跟运维有何不同。面试官说运维可能需要跟客户打交道,运维开发还是侧重开发。之后问了一些不太相关的东西,不记得了。
因为之前在阿里吃过亏,我问如果我只能实习两个月会对结果有影响吗,面试官说不会。我又问面试官面试之后多久会得到反馈。面试官说3-5个工作日,实在不行可以联系HR。
当天晚上接到HR电话,一面过了,第二天二面。
二面知识面和学习习惯考察?相比一面,二面主要是扯闲篇。一上来面试官还是让我做自我介绍,不过要求介绍简历上没有的东西。我就扯了一些有的没的,强调了一下自己虽然经验上可能有所不足,但学习能力比较强。
第二个问题我记得不是很清楚,大致是你平常有没有对别的技术感兴趣之类的。我随口说了一下前一段看的缓冲区溢出攻击的文章和实验。面试官让我讲了一下原理,又问你觉得这个技术可以用在哪。我猜了半天没猜对,最后面试官说利用网页Flash给用户挂木马就是这个套路。我当时有点不爽,心想我面的是后台开发你问什么前端,不按套路出牌啊。
第三个问题是问我开发的OJ,问我们在安全上做了哪些措施。我就说禁止一些危险的系统调用,同时不给用户返回与题目无关的信息(如服务器上的系统路径等)以免受到攻击。面试官又问如果有一个进程占了很多资源怎么办,我说我们发现资源占用超出限制就会杀掉进程。面试官又问如果一个进程一直循环不退出怎么办,会不会占着CPU不放拖垮服务器。他应该是想问进程调度相关的问题,我当时没想到这一点,只是说我们发现进程运行过久就会直接杀掉。面试官又问你们统计进程运行时间是CPU时间,那么CPU时间的基本单位是什么?我不太确定地猜是时间片,面试官没接着往下问。
面试官又说了一下我的劣势,大概是与职位相关的学习/实战经验不够丰富,问我怎么看。我说我承认这个确实是我的劣势,但工作之后碰到的问题恰好是在学校里学到的可能性也不大吧,作为一个硕士重要的不一定是读研期间学了什么知识,而是独立负责一个项目、分析问题、解决问题的能力,blablablabla。面试官听了也没什么表示,不知道是赞同还是不赞同。
面试官问我为什么选网易运维开发,我大概说了一下。又问我有没有投其他公司,我就吐槽了一下阿里。估计这个时候面试官已经想好要不要我了,问我为什么要7-8月实习,5-6月份在干什么,估计还是希望我能早点过去。我说毕业开题比较忙,面试官也表示理解。
提问我首先还是问了一面问过的两个问题,得到的回答差不多。我又问听说网易的面试是多轮面试算总分,是这样吗。面试官说有时候许多面试是并行的所以要算总分,但这次不是。我问面试之后多久可以得到反馈,面试官说5-7个工作日,不管过不过都会有通知。
总体感觉二面的这位面试官更严厉一点,考察问题的角度也跟第一位不太一样,我聊天过程中感觉不如一面那么好。二面结束后一周都没有得到反馈还以为挂了,第八天傍晚突然收到网易用邮件发来的offer,随后接到了HR的电话确认,接到电话的时候感觉HR姐姐的声音比下课铃都好听。
总结之前一直瞒着老板找实习,学术工作也没怎么上心,拿着offer去找老板商量被骂的狗血淋头。从老板的角度出发,要对我的学术生涯(还有毕业)负责,所以要求我安心搞科研是有道理的。但是从我个人的角度,找实习也是很重要的一件事,我实在不想放弃网易这边这么好的机会。鼓起勇气又找了一次老板,诚恳地解释了一下我的想法,老板终于松口。接下来要抓紧写论文了。