“我相信一万小时定律。”
人物介绍
叶*豪
拼客学院-CCIE第10期学员 广东工业大学14届学生
2015年1月参加拼客学院CCIE魔鬼训练营
2017年4月11日拿到网易游戏实习offer
前言
我在2月20号左右开始参加春招,到4月11号拿到网易游戏实习offer,这短短的一个月过得却是无比的揪心,但最后还是告一段落了。我自己的学习方向,与网易游戏的运维岗达到了90%以上的匹配,加之本身也非常喜欢网易游戏开放的工作环境,所以在春招中第一个便面试了网易,印象深刻可想而知。下面就来分享一下这次的面试经历,希望给正在参加春招的以及未来备战秋招的小伙伴们带来一定的帮助。
内推
从网易游戏开始招聘,杰哥就把我的简历内推了过去。很快,身边的小伙伴陆续收到了面试通知,而我却迟迟未收到音讯,我就知道自己被刷了下来。心有不甘,网易游戏因其开放的环境和雄厚的实力深深吸引着我,我知道是时候要主动出击了。于是,在听完京东宣讲会的那个晚上,我厚着脸皮拨通了HR的电话,晓之以理动之以情地说了一大堆,希望能够争取一个面试机会。回到宿舍,又往招聘邮箱发去了自己的项目资料,同样不漏动情的话语。做好了这些铺垫,准备跟着小伙伴去面试(霸面)的时候,网易十分及时地给我打了面试电话,我第一步算是成功了!那会也的确感受到了一个有人情味的网易。
一面
3月29号的一面,可以说是一个很讲究技术的面试,两个面试官,持续了一个小时左右的面试过程,问的几乎都是技术问题,没有一丁点的题外话。
1、你能介绍下你这个《交换机统一认证与管理系统》吗?
(PS.这是简历上的项目资料,一上来就问项目了。)
因为我提前准备好了这个项目的资料,所以我马上把打印好的资料给两位面试官递了过去,然后再详细介绍。随后,面试官追问了很多认证上的问题,比如认证的过程。由于整个系统依赖于Radius协议的实现,面试官最后的问我,你熟悉这个协议吗?我说,过了太久不熟悉了(两年前的项目),但是我会配置,然后就pass了。
2、你这个《交换机监控系统gdutNMS》是怎么实现的,能介绍下吗?
(PS.还是问项目,不过这个就比较久远了,其中的技术面试官好像比较感兴趣。)
虽然gdutNMS是在去年开发的,但由于印象深刻,于是我就按照「为什么要开发这个系统-开发的流程-用到哪些技术-实际意义」的思路给面试官讲了一下。因为监控数据的获取通过SNMP协议来获取的,所以也介绍了SNMP和OID。
3、你这个系统是用什么数据库来储存数据的?
MongoDB。
4、为什么会用MongoDB?
主要是出于数据处理的方便,它是NoSQL,基于key-value,跟Python使用起来一样方便。
5、那你在Python中使用了什么库来对接MongoDB?
用了pymongo和mongoengin,前者比较原生,后者orm就会Python一些。
6、那你的数据是怎么处理的呢?
我是把一台交换机的数据保存在一个Python字典里,然后再写入MongoDB,因为Python对MongoDB的操作跟字典类似。
7、也就是每台交换机一条数据?
每台交换机都有CPU、内存、温度等不同的数据,因此每台交换机都会有多条数据。
8、你的数据多久取一次?
每台交换机都是60秒定时去取上面说的这些数据。
9、那你600台交换机,就是百万级别的数据了。
有这么夸张吗?(我还没计算过)
10、不是吗?
额……
11、那你的MongoDB有没有做索引呢?
没有做索引的。
12、百万级别的数据你不做索引,那你的查询很慢啊。
但是我的交换机数据是每台交换机一个collection的,不是所有交换机数据都放在一个collection里的。(延伸的问题:数据库是不是做了单实例等。)
13、噢!原来是这样。那你每台交换机的数据用什么区分呢?
MongoDB本身有ObjectID来区别,但我为了数据处理的方便,用了一个date的key。
14、那如果因为网络问题你某一分钟拿不到数据,你怎么处理?
那这样的话数据库里就没有这一分钟的数据了。
15、但是你做数据展示的时候怎么处理呢?
这也是我当初最纠结的,最后我的解决方案是,从现在这一分钟开始,取往前60分钟的数据,因为数据展示就是一小时的,如果某一分钟没有数据,就用0值取代,但是时间还是要加上去。
16、你的web框架是什么?
(PS.前面问了监控系统的后端程序,接下来问web框架)
我用的是flask来实现的。
17、那你知道MTV框架吗?给我说说MTV的含义。
M:models,数据库处理 T:Templates,前端模板 V:views,视图函数
因为自己做Python Web差不多两年了,所以还是挺熟悉的,接下来便举了个例子,用户有请求时,各个模块之间是怎样协同处理完成工作的。(面试官挺满意这个回答的。)
18、你的前端都用了哪些框架?
JavaScript用了Jquery的库,模式一块用了Bootstrap,出图用了Highcharts。
19、为啥?
主要是为了节省前端开发的时间,因为我也不是专业做前端开发的。
20、也就是说前端你也还是挺熟的?
JavaScript/Jquery/HTML/CSS/Bootstrap/Highcharts都可以使用的。
(PS.因为2015年就接触了前端开发了,所以使用上还是挺熟悉的,回答也是挺有底气的,对于这些知识的细分,面试官也就没有再问了。)
21、那你知道Angular JS吗?
(PS.Angular JS属于比较前沿的技术了,这个我真的不知道)
曾经听过,但是不了解使用。
22、你知道RestFul API吗?
(PS.RestFul API在2016年第一次做Flask的项目的时候就接触过了,最近完成的Spyinux也有使用)
嗯,传统一个http请求给你返回一整个html页面,但是RestFul可以给你返回一些资源数据,比如用Json封装的数据。
23、那你知道http请求方法吗?
(PS.我愣了一会没反应过来,没想到这个也问,所以重新确认了一下这个问题。)
嗯,常用的是get和post,比如post,我自己在做提交表单功能时就用到了,因为post可以携带用户的数据。
24、你怎么回去学习Openstack呢?
曾经参加比赛有接触过,自己也比较感兴趣。
25、那有动手搭过吗?
有的,为此我还买了一台性能比较好的服务器,最近也把compute节点搭建出来了。(可能听了我自己有搭建过Openstack,所以也没有继续往下追问了。)
26、你对网络很熟悉吧,跟我讲一下OSPF。
我是从OSPF的应用部署的角度去回答这个问题的,因为广工校园网的三成交换机以上用的路由协议都是OSPF,所以就直接拿这个案例跟面试官说了一下,也没有继续追问。
27、你能跟我说一下OSPF和BGP的区别吗?
我举了广工和华工两个学校的网络例子,两个AS,他们内部可能就需要用OSPF实现网络互通了,但假设两个网络的路由条目要分别传给对方,就需要使用BGP了,因为BGP可以承载非常多的路由条目,所以一般可以看到BGP用于运营商之间。
28、为什么BGP可以传递非常多的路由条目呢?
这个跟BGP本身的设计有关,因为BGP最初就是设计用来在AS之间传递数量非常大的路由条目的,而OSPF本身的数据包格式就决定了它没有办法实现。
29、你确定是这样子的吗?
我说我们没有去查过,但是我猜是这样子的,就像你开发一些软件一样,你的软件架构决定了你可以处理多大的数据。
30、MPLS跨域知道吗?
(PS. 前面讲BGP的时候有讲过MPLS有可能用在运营商中,所以又问了这个,不过我已经忘记了。)
不记得了。
31、那OSPF和BGP的选路有什么不同?
OSPF是SPF算法,讲了一下SPF的过程;BGP是13条选路原则,但是我表示具体的已不记得了,面试官就说这个没关系。
32、前面提到你的gdutNMS服务器,如果服务器挂了你有办法知道吗?
我的前端页面打不开了。
33、那你有办法查出是哪里出了问题吗?
正常情况下其他软件是可以查日志的,但是我这个没有做日志的记录。
34、那就是说出问题没办法查明原因了?(面试官当时是说历史问题)
我表明这是我系统是的不足。
35、你这个gdutNMS的资源占用情况会不会很多,在Linux服务器怎么查看?
不会很多,如果资源多的话,我用top命令就可以看到它在前面了。
36、你shell脚本应该挺熟的吧?
(PS.其实并不是很熟,因为实际上我很少写shell脚本。)
还行吧,基本的逻辑判断还是可以写的。
37、你有什么问题要问的吗?
我就问了一下网易游戏这边自动化平台的情况,然后得知也是在用Python Flask做开发,还自己写了MongoDB的一套RestFul API。
以上大概就是一面的内容了,可以看出,网易游戏的面试官比较喜欢问项目,而且喜欢深究其中的技术和问一些前沿的问题,例如MongoDB/RestFul API等。另外,其中的一位面试官在整个过程中不停地看笔记本上的内容,估计当时是在证实我简历上的东西,比如博客、Github等。
面试完后,面试官告诉我,如果有消息,5天内会有通知,出了面试的地方后,其中一个面试官又对我重复了一遍,不过他是这样说的:5天内会有人通知你的。我知道我一面是稳了。
二面
二面安排在清明节后,4月7号。
我是4号回到学校的,原本6号可以好好准备一下,谁知那天早上却发现自己发烧了,加上嗓子疼,7号那天的面试状态可以说是很糟糕的。幸好二面更多的是聊自己的情况,技术问题不多,而且只有一个面试官。后来得知,那位面试官在网易工作了十几年了。
1、自我介绍
2、问项目上的问题:用了什么数据库?
我说用了MongoDB,接下来就是一堆与MongoDB有关的问题,由此我就体会到网易很喜欢MongoDB。除此之外,还问了安全性的问题,比如有什么方法可以加固MongoDB服务器的安全性,我主要从以下几点回答:
(1)服务器本身,最小化安装
(2)如果只是做MongoDB的服务器,除了SSH等常用服务,其他全部关掉
(3)禁止Root用户远程登录
(4)可以把MongoDB的默认端口号改了
(5)把SSH的端口号也改了
1234