Python 常用面试题

python:3.5
欢迎加入学习交流QQ群:657341423


1.可变类型 Vs 不可变类型
可变类型(mutable):列表,字典,集合
不可变类型(unmutable):数字,字符串,元组
这里的可变不可变,是指内存中的那块内容(value)是否可以被改变
参考资料:http://www.cnblogs.com/huamingao/p/5809936.html


2.并发编程——全局解释锁(GIL)
Python作为一种解释型语言,由于使用了全局解释锁(GIL)的原因,其代码不能同时在多核CPU上并发的运行。这也导致在Python中使用多线程编程并不能实现并发,我们得使用其他的方法在Python中实现并发编程。

Python并不支持真正意义上的多线程。Python中提供了多线程包,但是如果你想通过多线程提高代码的速度,使用多线程包并不是个好主意。Python中有一个被称为Global Interpreter Lock(GIL)的东西,它会确保任何时候你的多个线程中,只有一个被执行。线程的执行速度非常之快,会让你误以为线程是并行执行的,但是实际上都是轮流执行。经过GIL这一道关卡处理,会增加执行的开销。这意味着,如果你想提高代码的运行速度,使用threading包并不是一个很好的方法。
参考资料:
http://www.cnblogs.com/vipchenwei/p/7221851.html?utm_source=itdadao&utm_medium=referral


3.数据结构和算法
不管任何开发语言,数据结构和算法都是必须具备的,不然只能算是个码农,算不上真正的程序员。
参考资料:http://www.cnblogs.com/hanahimi/p/4692225.html


4.@staticmethod和@classmethod和@property
@classmethod, @staticmethod和@property这三个装饰器的使用对象是在类中定义的函数
参考资料:
http://blog.csdn.net/u010571844/article/details/50728991
http://www.cnblogs.com/wangyongsong/p/6750454.html


5.类变量和实例变量
参考资料:http://www.cnblogs.com/sherylwang/p/5537778.html


6.这两个参数是什么意思:*args,**kwargs
如果我们不确定要往函数中传入多少个参数,或者我们想往函数中以列表和元组的形式传参数时,那就使要用*args;如果我们不知道要往函数中传入多少个关键词参数,或者想传入字典的值作为关键词参数时,那就要使用**kwargs。args和kwargs这两个标识符是约定俗成的用法,你当然还可以用*bob和**billy,但是这样就并不太妥。

下面是具体的示例:

def f(*args,**kwargs): print args, kwargs

l = [1,2,3]
t = (4,5,6)
d = {'a':7,'b':8,'c':9}

f()
f(1,2,3)                    # (1, 2, 3) {}
f(1,2,3,"groovy")           # (1, 2, 3, 'groovy') {}
f(a=1,b=2,c=3)              # () {'a': 1, 'c': 3, 'b': 2}
f(a=1,b=2,c=3,zzz="hi")     # () {'a': 1, 'c': 3, 'b': 2, 'zzz': 'hi'}
f(1,2,3,a=1,b=2,c=3)        # (1, 2, 3) {'a': 1, 'c': 3, 'b': 2}

f(*l,**d)                   # (1, 2, 3) {'a': 7, 'c': 9, 'b': 8}
f(*t,**d)                   # (4, 5, 6) {'a': 7, 'c': 9, 'b': 8}
f(1,2,*t)                   # (1, 2, 4, 5, 6) {}
f(q="winning",**d)          # () {'a': 7, 'q': 'winning', 'c': 9, 'b': 8}
f(1,2,*t,q="winning",**d)   # (1, 2, 4, 5, 6) {'a': 7, 'q': 'winning', 'c': 9, 'b': 8}

def f2(arg1,arg2,*args,**kwargs): print arg1,arg2, args, kwargs

f2(1,2,3)                       # 1 2 (3,) {}
f2(1,2,3,"groovy")              # 1 2 (3, 'groovy') {}
f2(arg1=1,arg2=2,c=3)           # 1 2 () {'c': 3}
f2(arg1=1,arg2=2,c=3,zzz="hi")  # 1 2 () {'c': 3, 'zzz': 'hi'}
f2(1,2,3,a=1,b=2,c=3)           # 1 2 (3,) {'a': 1, 'c': 3, 'b': 2}

f2(*l,**d)                   # 1 2 (3,) {'a': 7, 'c': 9, 'b': 8}
f2(*t,**d)                   # 4 5 (6,) {'a': 7, 'c': 9, 'b': 8}
f2(1,2,*t)                   # 1 2 (4, 5, 6) {}
f2(1,1,q="winning",**d)      # 1 1 () {'a': 7, 'q': 'winning', 'c': 9, 'b': 8}
f2(1,2,*t,q="winning",**d)   # 1 2 (4, 5, 6) {'a': 7, 'q': 'winning', 'c': 9, 'b': 8}

7.Python垃圾回收机制
参考资料:http://www.jb51.net/article/79306.htm


8.如何写出高效的代码
可以使用import cProfile 程序分析包分析程序运行时间
参考资料:http://blog.csdn.net/asukasmallriver/article/details/74356771
http://blog.csdn.net/xiemanr/article/details/72763234


9.PEP8规范
参考资料:http://blog.sae.sina.com.cn/archives/4781
Python之禅
参考资料:http://blog.csdn.net/zhoudaxia/article/details/23605263


WSGI
参考资料:http://blog.csdn.net/li_101357/article/details/52748686
参考资料:
http://python.jobbole.com/88653/

猜你喜欢

转载自blog.csdn.net/huangzhang_123/article/details/78430563