您当前位置:网站首页 > 面试经验 >

网易游戏面试经验

前言

最近一直没有写博客,在忙着准备申请各大公司的实习,现在基本已经定下来了,特将这段时间面试中遇到的问题进行总结和解答,主要包括一些网络、算法、操作系统、python的问题,这些问题并不是以往比较常见的题目,更多的都是更加细节的或者以往没有见到的题目。文章更多的是面向技术,而不是面经,同时关于问题的解答都是自己一家之言,如有问题,还望大家指正。本文的知识点是关于python中的可变对象与不可变对象,面试官问我在python中是如何实现的。

正文

我最开始想到的是这个问题要考察的是python的内部实现机制,所以先简述下python的可变对象和不可变对象,再从python内部实现的角度分析下这个题目。

众所周知,python在堆中分配的对象按照是否可变分为两类:可变对象和不可变对象。关于他们各自的定义我想大家比较熟悉,特复制一段官方解释如下:In general, data types in Python can be distinguished based on whether objects of the type are mutable or immutable. The content of objects of immutable types cannot be changed after they are created. Only mutable objects support methods that change the object in place, such as reassignment of a sequence slice下面列举出一些常见的可变对象和不可变对象。

可变对象:list, dictionary, set, byte array

不可变对象:int,long, complex, string, float, tuple, frozen set

我们用一个很简单的例子来看看可变对象和不可变对象。

# code

a = [1, 2, 3]

a[1] = 4

print a

b = “123”

b[1] = ‘4’

print b

# output

[1, 4, 3]

Traceback (most recent call last):

File “test.py”, line 5, in

b[1] = ‘4’

TypeError: ‘str’ object does not support item assignment

在上述例子中,list中的第二个元素可以被改变,但是如果试图改变string中的第二个元素,就会报错。但是有人可能有如下疑惑,比如下面的代码:

# code

a = 1

print a

a = 2

print a

# output

1

2

有些人觉得上面的代码中a为一个int型的对象,但是他的值发生了变化,而解释器也没有报错。这里有必要提一下python的赋值语句,在python中,赋值语句其实是建立对对象的引用值,而不是复制对象,即更像是指针。所以在语句a=1执行后,只是建立了一个引用值a来指向int对象1,所以当再执行a=2这个语句的时候,是将这个引用值指向了int对象2,所以这里并没有改变int对象。

既然现在明白了python中的可变对象和不可变对象,那么在python中他们分别是如何实现的呢?

这个问题的答案我觉得很简单,如果对象中定义了修改对象的成员方法,则这个对象是可变的,否则是不可变对象,所以我们可以通过修改python的源码让String也变成一个可变对象。这个可以从python源码中得到证实,比如下面的python代码:a = [1,2] a[0]=3就调用了下面的函数:

int

PyList_SetItem(PyObject *op, Py_ssize_t i,

PyObject *newitem)

{

PyObject **p;

if (!PyList_Check(op)) {

Py_XDECREF(newitem);

PyErr_BadInternalCall();

return -1;

}

if (i < 0 || i >= Py_SIZE(op)) {

Py_XDECREF(newitem);

PyErr_SetString(PyExc_IndexError,

“list assignment index out of range”);

return -1;

}

p = ((PyListObject *)op) -> ob_item + i;

Py_SETREF(*p, newitem);

return 0;

}

在上面的代码中,首先会进行类型检查,随后进行索引的有效性检查,当类型检查和索引有效性检查通过之后,将待加入的指针放到指定的位置。这是设置元素,常用的还有插入元素,代码如下:

static PyObject *

listinsert(PyListObject *self, PyObject *args)

{

Py_ssize_t i;

PyObject *v;

if (!PyArg_ParseTuple(args, “nO:insert”, &i, &v))

return NULL;

if (ins1(self, i, v) == 0)

Py_RETURN_NONE;

return NULL;

}

关于list中的成员属性,都可以在源代码中看到,下面只列举出在python中的方法名和python源码中的实现函数的对象关系:

static PyMethodDef list_methods[] = {

{“__getitem__”, (PyCFunction)list_subscript, METH_O|METH_COEXIST, getitem_doc},

{“__reversed__”,(PyCFunction)list_reversed, METH_NOARGS, reversed_doc},

{“__sizeof__”, (PyCFunction)list_sizeof, METH_NOARGS, sizeof_doc},

{“clear”, (PyCFunction)listclear, METH_NOARGS, clear_doc},

{“copy”, (PyCFunction)listcopy, METH_NOARGS, copy_doc},

{“append”, (PyCFunction)listappend, METH_O, append_doc},

{“insert”, (PyCFunction)listinsert, METH_VARARGS, insert_doc},

{“extend”, (PyCFunction)listextend, METH_O, extend_doc},

{“pop”, (PyCFunction)listpop, METH_VARARGS, pop_doc},

{“remove”, (PyCFunction)listremove, METH_O, remove_doc},

{“index”, (PyCFunction)listindex, METH_VARARGS, index_doc},

{“count”, (PyCFunction)listcount, METH_O, count_doc},

{“reverse”, (PyCFunction)listreverse, METH_NOARGS, reverse_doc},

{“sort”, (PyCFunction)listsort, METH_VARARGS | METH_KEYWORDS, sort_doc},

{NULL, NULL} /* sentinel */

};

总结

我也想过,这个题目可能更想考察的是python的内存管理机制和对象机制,这部门的内容也曾经被单独问到过,所以以后会专门写一篇博客来讲述python的内存管理机制。

python的实现包含了很多智慧,用自己粗浅的理解来加深对python的认识和理解。

不向静中参妙理,纵然颖悟也虚浮 立乎其大 和而不同 古之成大事者,不惟有超世之才,亦必有坚韧不拔之志

相关文章
华为面试的教训 华赛面试经验 东软面试经验 爱立信机考 华为boss

这次华为的笔试和面试搞的我很烦,这两天都有点神经衰弱了。 细节不愿意多说,主要就是阴差阳错的被面了一个不是第一志愿的职位,面试官还给我了些打击。 最后听说我报的第一志愿人很缺,差不多…[阅读]

幼升小面试经验

1、孩子大班下学期,有家长就讨论给孩子准备简历 2、怕错过面试机会。4月初就把3个学校2009和2010年的招生简章研究了一下,面试安排 3、常刷新学校的网站,3个学校的招生简章都是在拿预约单前一…[阅读]

安徽移动面试经验

今天是5.7,安徽移动终面刚两天。现在总结下面试经验,希望对您有所帮助。 本人参加的是春季校园招聘-市场营销类,一面4.9在老家面试的。9点开始,提前十分钟审核材料,建议把自己本科研究生期…[阅读]

陕国投、长安信托、西部信托哪个好?陕西信托行业面试经验

作为一个985院校的金融小硕,在信托业发展飞速的时代,一直想加入其中。陕西有三家信托公司:陕西省国际信托股份有限公司(简称“陕国投”)、长安信托有限公司(简称“长安信托”)、西部信托…[阅读]

国泰君安投行面试经验

面试经历: 上午接到电话问有没有时间,我说有,然后下午就去面试了,一个人资主管和一个区域经理一起来面试的,两个人面试我一个人,开始让我简单介绍了一下自已和之前的工作经历,那个区域经…[阅读]

《网易游戏面试经验》一文由长大导航助学网免费提供,来源于网络。本文著作权归作者所有,如果侵犯了您的权益,请及时与我们联系,我们会立即删除!

原文链接:http://www.chddh.com/mianshijingyan/34023.html

最新文章
热门文章
长大导航(www.chddh.com)旗下长大导航助学网|陕ICP备11001928号 站长邮箱:admin#chddh.com|

《网易游戏面试经验》|友情链接:长大导航 应用 电脑 文字 作文 范文 演讲稿 网页游戏 游戏 手机 news 合同 学生 职场