您的位置:首页 > 职场人生

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

2015-01-15 09:28 549 查看
很早就在系统上投递了简历,但是好几周厚才由回复,首先是电话联系确认了一个面试时间,之后就是简单的笔试加面试,由于之后就要回家,所以他们在时间上安排的很紧凑。笔试+1面+2面两个小时全部搞定。第一次这么短时间高强度有点儿紧张,一些问题回答的不是很好,特此做一个总结。整体上比较偏向简历中的项目的细节,以及实践中可能出现的问题。由于我选择的是服务器平台的开发,所以所问的问题也都比较偏向这方面。

首先笔试题只有两题一页,都是写一个简单的算法。

第一题是把字符串中的空格替换为%2B,这个很简单,我的方法是重新生成一个新的字符串,然后再返回。

第二题是让写一个算法判断一个二叉树是否是平衡的,我的方法是计算每一个叶子结点的深度,然后求最小和最大深度,看是否超过一,我用了一个容器保存了所有的叶子结点的深度,而且还不小心写错了,把所有的结点的深度都保存了,其实只需要实时的保存最小深度和最大深度两个量就可以了。

笔试共30分钟,整体上不难。可能也和自己半年来进行了不少训练有关。

接下来是1面,应该是3个懂技术的HR,都有拿个笔记本电脑在记录我的回答,大多数问题都是由简历上的项目引发的。

首先是自我介绍,还有问了我那个语言更熟悉一点。这点我觉得,首先自我介绍要自己实现准备好,针对职位有目的性的回答,我每次都是即兴发挥,说不了几句话就没了,编程语言哪里也是类似。

一 由于我使用过MongoDB和Mysql,所以问了我这两个数据库的区别。我主要是从mongodb不支持事物上来说的,并且诚实的说到,在自己的项目中体现不出来太多两者效率上的差别,事后,我从网上找了一些资料。①弱一致性(最终一致),更能保证用户的访问速度:②文档结构的存储方式,能够更便捷的获取数据。③内置GridFS,支持大容量的存储。⑤第三方支持丰富。(这是与其他的NoSQL相比,MongoDB也具有的优势)⑥性能优越:缺点是①mongodb不支持事务操作。②mongodb占用空间过大。③MongoDB没有如MySQL那样成熟的维护工具,这对于开发和IT运营都是个值得注意的地方总体上自己还是处于道听途说的水平,对于一些问题也不能只是看看就完事儿,要自己理解,用自己的话把意思阐述出来,认真挖掘细节。

一.五 问到我项目中的数据库是怎么设计的,自己大致说了下,毕竟是最近做的,还比较熟悉,但给以后提了个醒对于简历上的项目,要自己充分准备好。接下里对于我一个实现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中怎么判断,我说在java里面可以用equal也可以用==,对于字符串刚进行了试验也确实可以用==,不过c++中我说到不可以,原因是==比较的是地址。这个对于String简单来说就是比较两字符串的Unicode序列是否相当,如果相等返回true;而==是比较两字符串的地址是否相同,也就是是否是同一个字符串的引用。对于为什么有时候==也可以判断,我理解是对于这个字符串,其实是只在内存中存了一份的,所以两个变量指向的是同一个对象,所以就相等了。

五 linux的权限问题,问我目录下要创建文件要有什么权限,还有为什么。答案是除了要有写权限外要有x权限,x表示可以进入的意思,这一点我没有讲明白,只是死记住了要有x。

六 写一个shell命令,读出一个目录下的c文件代码一共有多少行。要结合管道的只是,我简单说了下自己平时使用管道的情节。但具体这个功能自己不是很会,事后百度统计一个文件的行数可以用

系统命令:wc -l filename

grep方法:grep -c "" filename

sed方法:sed -n '$=' filename


awk方法:awk 'END{print
NR}' filename

自己需要再详细了解下。

七 一个坐标平面,给定一个圆心坐标,和其半径,还有一个边平行于坐标轴的矩形,用什么方法判断其是否有重合部分。

现在回想起来,这个问题我想的简单了,要分多种情况去考虑。要考虑是否包含,四个顶点是否在圆内等。具体可以参考这篇文章/article/2513005.html 反思,以后再想问题时别那么着急回答,先想想清楚,别人也不会问那么白痴的问题。

八 关于并发模型,这点我不是很懂,但是告诉hr之前看过c10k问题,于是就把这个问题转换为了c10k问题,我提到,可以利用多线程,操作系统级别的多线程,单线程异步调用等形式,无非就是充分利用服务器的CPU能力和IO能力。事后了解,应该再讲一下关于数据安全,以及并发可能带来的一些不同步,数据损坏等问题,这方面自己还要再深刻了解。

一面结束后,立马就是二面,目测二面是几个做开发的技术人员,这些面试中面试官提问后不管我回答什么其表情都不会变化的,导致自己也不知道是不是答对了,心里很没底,然后就越往后心里越虚,还是对自己缺乏自信,也是平时想的不够细致。二面除了也有个自我介绍外有以下问题。

九 详细描述输入一个网址后发生的事情。

这里其要求说的很细,大体上首先是IP地址的解析,通过本机,缓存,DNS等找到目标服务器的IP地址,然后发送请求到服务器,这里需要了解HTTP头包含的大致内容,地址,相应类型,cookie等。然后sever会转发重定向,client访问新地址,服务器在处理这个请求时又有很多细节,我说到了服务器可能对于每个连接单独建立一个tcp连接,进行三次握手协议,不过自己不是很清楚,还需要再了解。处理完请求后,服务器就发送一个响应,决定要传输数据的格式等,然后传递信息。解下来浏览器进行渲染。这里应该就以HTTP协议为描述层次了,自己不该说到tcp,因为这是更底层的,两个揉在一起就会说的很乱,关于Apache服务器响应请求的具体细节我也要再了解,还有HTTP协议的相关内容。

一些参考: http://blog.csdn.net/hguisu/article/details/7395181

http://qing.blog.sina.com.cn/tj/69004f5933000xlt.html

细节,认真再次强调,要多留心,多想,探究本质,不能一知半解。

十 一个递增的数组,但是作了几轮置换如{9 10 1 2 3 4 5 6 7 8},给出一个logn复杂度的查找算法,这个总体上还是二分查找,只不过多了边界条件的判断,可以参考 http://hawstein.com/posts/9.3.html ,其实很简单,我表达的不是很清楚,而且自己没思考清楚就立即开始讲,面试官步步追问,虽然我自己知道可以这么做,但是他每次一问,总让我觉得自己是想错了,最后越来越囧,甚至有点儿着急上火了。感想就是自己还是太年轻,想要让别人对自己的每一个回答都能给个肯定或者否定的态度,而他们往往不给态度,只听,只提问,我想需要自己有自信一步步把自己的想法说出来,自己太在意别人的看法了,以后要多锻炼才行。

十一 一个4G的文件,2G内存,怎么排序。每次读入内存中两G,快排,然后归并,我中间由于刚才状态不好,想多了,怀疑说内存只有2g怎么读4g的文件呢。还是状态不太好,越往后越不自信,怀疑自己了。

十二 在前一问的基础上,问道,说我选择快排,而且实践中快排一般也比堆排序快,问为什么,虽然最优的复杂度是一样的,但是既然说实践中快排更快,那我想肯定和内存有关,一开始说到数据结构的问题,考官说堆也可以数组实现。后来考官问我i的节点在数组数据结构中其子节点是什么,答2i 2i+1,其实这就是一个提醒,但是我没发现,最后说不知道为什么。其实答案是堆排序时,i 2i都是非常大的,要经常跨越长内存,甚至跨越缓存影响效率,而快排始终是在一个小范围内,而且越来越小。由于平时的项目和书本知识很少涉及实践,所以在内存,缓存,大数据量时会引发的问题上总是考虑的不够周全。但是自己应该学聪明点儿,别人的问题往往都是有关联的,能在提示下回答出问题也是很好的。

总结一下,两个小时的面试把人搞的非常疲惫,真的是不容易,平时准备的东西到时候很多都发挥不出来,整体上对自己不是很满意,可以发挥的更好。但是另一方面,自己这一个学年来,看得大量的书籍没有白费,不过似乎我太关注语言,算法了,接下来要多看些操作系统,数据库这类系统设计方面的书籍。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: