TA的每日心情 | 擦汗 昨天 09:05 |
---|
签到天数: 1048 天 连续签到: 1 天 [LV.10]测试总司令
|
Python是个非常受欢迎的编程语言,随着近些年机器学习、云计算等技术的发展,Python的职位需求越来越高,面试成为了搞定优质职位的快速方式。下面我收集了10个Python面试时经常问的问题,供参考。
1.简要描述Python的垃圾回收机制(garbage collection)。
答案:这里能说的很多。你应该提到下面几个主要的点:
Python在内存中存储了每个对象的引用计数(reference count)。如果计数值变成0,那么相应的对象就会小时,分配给该对象的内存就会释放出来用作他用。
偶尔也会出现引用循环(reference cycle)。垃圾回收器会定时寻找这个循环,并将其回收。举个例子,假设有两个对象o1和o2,而且符合o1.x == o2和o2.x == o1这两个条件。如果o1和o2没有其他代码引用,那么它们就不应该继续存在。但它们的引用计数都是1。
Python中使用了某些启发式算法(heuristics)来加速垃圾回收。例如,越晚创建的对象更有可能被回收。对象被创建之后,垃圾回收器会分配它们所属的代(generation)。每个对象都会被分配一个代,而被分配更年轻代的对象是优先被处理的。
2.什么是Python?使用Python有什么好处?(这个问题是最常见的开头问题,是最基础也是最重要的!)
答案:下面是一些关键点:
Python是一种解释型语言。这就是说,与C语言和C的衍生语言不同,Python代码在运行之前不需要编译。其他解释型语言还包括PHP和[url=]Ruby[/url]。
Python是动态类型语言,指的是你在声明变量时,不需要说明变量的类型。你可以直接编写类似x=111和x="I'm a string"这样的代码,程序不会报错。
Python用途非常广泛——网络应用,自动化,科学建模,大数据应用,等等。它也常被用作“胶水语言”,帮助其他语言和组件改善运行状况。
Python让困难的事情变得容易,因此程序员可以专注于算法和数据结构的设计,而不用处理底层的细节。
3.python中is和==的区别(总结了大部分人的面试,这道题出现的概率也很大。)
答案:
Python中对象包含的三个基本要素,分别是:id(身份标识) 、type(数据类型)和value(值)。
‘==’比较的是value值
‘is’比较的是id
4. Python是怎样管理内存的?
答案:
Python的内存管理是由私有heap空间管理的。所有的Python对象和数据结构都在一个私有heap中。程序员没有访问该heap的权限,只有解释器才能对它进行操作。
另外,Python有自带的垃圾回收系统,它回收并释放没有被使用的内存让它们能够被其他程序使用。
5.有哪些工具可以帮助debug或做静态分析?
答案:
PyChecker,一个静态分析工具,除了报告源代码中的错误,还能分析出错误的类型和复杂程度。另外,还有Pylint,用于检验模块是否达到代码标准的工具。
6.你如何管理不同版本的代码?
答案:
一点不属于专业的小技巧——被问到这个问题的时候,你应该要表现得很兴奋,甚至告诉他们你是如何使用Git(或是其他你最喜欢的工具)追踪自己和女票的书信往来。除了Git作为版本控制系统(VCS),你也可以选择subversion(SVN)。
7.什么是Python的命名空间?
答案:
python使用命名空间记录变量。python中的命名空间就像是一个dict,key是变量的名字,value是变量的值。
如果你记不住上面这段标准答案,也可以这么回答:
在Python 中,所有的名字都存在于一个空间中,它们在该空间中存在和被操作——这就是命名空间。每一个变量名字都尤其对应的一个对象,而命名空间可是把他们收纳起来的盒子,当查询变量的时候,会从该盒子里面寻找相应的对象。
8.Python中的pass是什么?
答案:
Pass是一个不可或缺但又毫无作用的语句。 pass就是什么也不做,只是为了防止语法错误,比如: if a>1: pass #我这里先不做任何处理,直接跳过,但是如果不写pass,就会语法错误。
9.在Python中如何拷贝一个对象?
答案:
一般来说可以使用copy.copy方法或者copy.deepcopy方法,几乎所有的对象都可以被拷贝,一些对象可以更容易的拷贝,Dictionaries有一个copy方法:newdict = olddict.copy
但并不是所有的对象都可以被拷贝。
10.“猴子补丁”(monkey patching)指的是什么?这种做法好吗?
答案:
“猴子补丁”就是指,在函数或对象已经定义之后,再去改变它们的行为。
举个例子:
import datetime
datetime.datetime.now = lambda: datetime.datetime(2012, 12, 12)
大部分情况下,这是种很不好的做法 - 因为函数在代码库中的行为最好是都保持一致。打“猴子补丁”的原因可能是为了测试。mock包对实现这个目的很有帮助。
自我介绍的时候,可以按照这个结构来:
个人基本信息 + 基本技术构成 + 项目经验(具体项目以及在项目中的负责部分)+ 自我评价,其中的原则就是紧紧围绕招聘岗位的需求做介绍。
|
|