2014网易游戏平台开发实习面试总结

首先是自我介绍,还有问了我那个语言更熟悉一点。这点我觉得,首先自我介绍要自己实现准备好,针对职位有目的性的回答,我每次都是即兴发挥,说不了几句话就没了,编程语言哪里也是类似。       
(一) 由于我使用过MongoDB和Mysql,所以问了我这两个数据库的区别。我主要是从mongodb不支持事物上来说的,并且诚实的说到,在自己的项目中体现不出来太多两者效率上的差别。

事后,我从网上找了一些资料。

1.弱一致性(最终一致),更能保证用户的访问速度:

2.文档结构的存储方式,能够更便捷的获取数据。

3.内置GridFS,支持大容量的存储。

4.第三方支持丰富。(这是与其他的NoSQL相比,MongoDB也具有的优势)

5.性能优越。 
缺点 
①mongodb不支持事务操作。
②mongodb占用空间过大。
③MongoDB没有如MySQL那样成熟的维护工具,

这对于开发和IT运营都是个值得注意的地方总体上自己还是处于道听途说的水平,对于一些问题也不能只是看看就完事儿,要自己理解,用自己的话把意思阐述出来,认真挖掘细节。  
  
1、项目中的数据库是怎么设计的,

2、对于简历上的项目,要自己充分准备好。

3、接下来对于我一个实现linux文件系统的项目他们也都很感兴趣,1,2面的时候都提到, 
(二) 项目 他们也问了我php和JavaScript的效率问题,在我的实践中我依然感觉不到太大的差别,我主要说了下nodejs的异步调用,说js的效率更高些,但是为什么就不是很懂了。网上检索了下,nodejs是事件驱动和IO异步的,而事件驱动对于内存消耗更少,非阻塞和连接池的加入让node对I/O操作更上一层楼。
 (三)接下来有一个简单的JavaScript的题
       var a="hello"
       function f(b){b="word"}
        调用f(a)后,问a 的值是什么, 
答案:a依然是hello.原因是字符串,数组,对象等引用类型也是按值传递的,只不过这个值是指变量地址的值,也就是说,a传递到f中的时候b所拥有的是a的地址的副本,给b赋值后改变了这个指针的指向这时候就指向了一个新的对象。所以原来的依然没有变。“我们调用函数传入值类型参数时,我们传入的就是值,传入引用类型的值时,我们传入的,就是他们的地址.”  (四)判断 两个字符串相等在java中怎么判断?
lz:在java里面可以用equal也可以用==,对于字符串刚进行了试验也确实可以用==,不过c++中我说到不可以,原因是==比较的是地址。这个对于String简单来说就是比较两字符串的Unicode序列是否相当,如果相等返回true;而==是比较两字符串的地址是否相同,也就是是否是同一个字符串的引用。对于为什么有时候==也可以判断,我理解是对于这个字符串,其实是只在内存中存了一份的,所以两个变量指向的是同一个对象,所以就相等了。    
(五)linux的权限问题,问我目录下要创建文件要有什么权限,还有为什么。
答案:是除了要有写权限外要有x权限,x表示可以进入的意思,这一点我没有讲明白,只是死记住了要有x。     
(六)写一个shell命令,读出一个目录下的c文件代码一共有多少行。要结合管道的只是,我简单说了下自己平时使用管道的情节。但具体这个功能自己不是很会,事后百度统计一个文件的行数可以用系统命令:wc -l filename grep方法:grep -c "" filenamesed方法:sed -n '$=' filename        awk方法:awk 'END{print NR}' filename 自己需要再详细了解下。 (七) 一个坐标平面,给定一个圆心坐标,和其半径,还有一个边平行于坐标轴的矩形,用什么方法判断其是否有重合部分。反思,以后再想问题时别那么着急回答,先想想清楚,别人也不会问那么白痴的问题。       
(八) 关于并发模型,这点我不是很懂,但是告诉hr之前看过c10k问题,于是就把这个问题转换为了c10k问题,我提到,可以利用多线程,操作系统级别的多线程,单线程异步调用等形式,无非就是充分利用服务器的CPU能力和IO能力。

事后了解,应该再讲一下关于数据安全,以及并发可能带来的一些不同步,数据损坏等问题,这方面自己还要再深刻了解。


二面

1、 详细描述输入一个网址后发生的事情。     
 lz:这里其要求说的很细,大体上首先是IP地址的解析,通过本机,缓存,DNS等找到目标服务器的IP地址,然后发送请求到服务器,这里需要了解HTTP头包含的大致内容,地址,相应类型,cookie等。然后sever会转发重定向,client访问新地址,服务器在处理这个请求时又有很多细节,我说到了服务器可能对于每个连接单独建立一个tcp连接,进行三次握手协议,不过自己不是很清楚,还需要再了解。处理完请求后,服务器就发送一个响应,决定要传输数据的格式等,然后传递信息。解下来浏览器进行渲染。这里应该就以HTTP协议为描述层次了,自己不该说到tcp,因为这是更底层的,两个揉在一起就会说的很乱,关于Apache服务器响应请求的具体细节我也要再了解,还有HTTP协议的相关内容。 细节,认真再次强调,要多留心,多想,探究本质,不能一知半解。
2、一个递增的数组,但是作了几轮置换如{9 10 1 2 3 4 5 6 7 8},给出一个logn复杂度的查找算法。
lz:这个总体上还是二分查找,只不过多了边界条件的判断,其实很简单,我表达的不是很清楚,而且自己没思考清楚就立即开始讲,面试官步步追问,虽然我自己知道可以这么做,但是他每次一问,总让我觉得自己是想错了,最后越来越囧,甚至有点儿着急上火了。感想就是自己还是太年轻,想要让别人对自己的每一个回答都能给个肯定或者否定的态度,而他们往往不给态度,只听,只提问,我想需要自己有自信一步步把自己的想法说出来,自己太在意别人的看法了,以后要多锻炼才行。
3、一个4G的文件,2G内存,怎么排序。 
lz:每次读入内存中两G,快排,然后归并,我中间由于刚才状态不好,想多了,怀疑说内存只有2g怎么读4g的文件呢。还是状态不太好,越往后越不自信,怀疑自己了。      
4、 在前一问的基础上,问道,说我选择快排,而且实践中快排一般也比堆排序快,问为什么? 
lz:虽然最优的复杂度是一样的,但是既然说实践中快排更快,那我想肯定和内存有关,一开始说到数据结构的问题,考官说堆也可以数组实现。 
5、后来考官问我i的节点在数组数据结构中其子节点是什么? 
lz:2i 2i+1,其实这就是一个提醒,但是我没发现,最后说不知道为什么。其实答案是堆排序时,i 2i都是非常大的,要经常跨越长内存,甚至跨越缓存影响效率,而快排始终是在一个小范围内,而且越来越小。由于平时的项目和书本知识很少涉及实践,所以在内存,缓存,大数据量时会引发的问题上总是考虑的不够周全。但是自己应该学聪明点儿,别人的问题往往都是有关联的,能在提示下回答出问题也是很好的。       
总结 两个小时的面试把人搞的非常疲惫,真的是不容易,平时准备的东西到时候很多都发挥不出来,整体上对自己不是很满意,可以发挥的更好。但是另一方面,自己这一个学年来,看得大量的书籍没有白费,不过似乎我太关注语言,算法了,接下来要多看些操作系统,数据库这类系统设计方面的书籍。


个人资料
onemore
等级:8
文章:133篇
访问:11.8w
排名: 4
上一篇: 网易2014校招-虚拟世界架构师:面经+题目
下一篇:2014网易校招雷火游戏:面经分享
猜你感兴趣的圈子:
网易笔试面试圈
标签: lz、mongodb、2i、事后、filename、面试题
隐藏