赞
踩
Python 综合面试题
第一部分 Python 基础
def outer(functionName):
def inner(*args, **kwargs):
print("-----添加功能-----")
ret = functionName(*args, **kwargs)
print("-----添加功能-----")
return ret
return inner
25.请说说线程什么情况下需要加锁, 及其优缺点
加锁原因: 如果有多个线程同时操作一个对象,如果没有很好地保护该对
象,会造成程序结果的不可预期
比如:我们在每个线程的 run 方法中加入一个 time.sleep(1),并同时输出
线程名称,则我们会发现,输出会乱七八糟。
因为可能我们的一个 print 语句只打印出一半的字符,这个线程就被暂
停,执行另一个去了,所以我们看到的结果很乱,这种现象叫做“线程不安
全”
解决:
Threading 模块为我们提供了一个类 Threading.Lock 锁。我们创
建一个该类对象,在线程函数执行前,“抢占”该锁,执行完成后,“释放”
该锁, 则我们确保了每次只有一个线程占有该锁。这时候对一个公共的对象
进行操作,则不会发生线程不安全的现象了。
锁的优点: 使得数据能安全的进行操作
锁的缺点:
1.如果多个线程要调用多个对象,而 A 线程调用 A 锁占用了 A 对
象,B 线程调用了 B 锁占用了 B 对象,A 线程不能调用 B 对象,B 线程不
能调用 A 对象,于是一直等待。这就造成了线程“死锁”
2.如果多个线程要调用同一个对象,A 线程调用 A 锁占用了 A 对
象,B 线程也需要使用 A 对象,A 线程不释放 A 对象,B 线程就不能调用 A 对 象,B 线程会等待 A 线程释放后才能使用,所以效率低下
26.请谈谈 python 中的协程的运用
1.协程就是进程和线程的升级版,进程和线程都面临着内核态和用户态的切换问
题而耗费许多切换时间, 而协程就是用户自己控制切换的时机,不再需要陷入系统
的内核态。
2.协程的执行效率非常高。因为子程序切换不是线程切换,而是由程序自身控
制,因此,没有线程切换的开销.和多线程相比, 线程数量越多相同数量的协程体
现出的优势越明显
3.协程不需要多线程的锁机制。由于只有一个线程,也不存在同时写变量的冲
突,在协程中控制共享资源不需要加锁,只需要判断数据的状态, 所以执行效率
远高于线程,对于多核 CPU 可以使用多进程+协程来尽可能高效率地利用 CPU
27.请说说计算机中使用缓存的好处
从系统的层面说,CPU 的速度远远高于磁盘 IO 的速度;所以要想提高响
应速度,必须减少磁盘 IO 的操作,但是有很多信息又是存在数据库当中的,每
次查询数据库就是一次 IO 操作;要想提高系统的性能,尽量减少 IO 的操作,
特别是磁盘 IO 的操作;使用缓存可以有效的避免这种情况;所以在架构设计过
程中,涉及到查询数据库的时候,应该考虑一下是不是考虑使用缓存技术来提
高系统的性能,并且降低数据库的负载。
28.请说说冒泡,选择,插入,快速排序
需要掌握这几个排序算法
思考下面问题:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。