并发部分的面试题
进程
1、进程间内存是否共享?如何实现通讯?
2、请聊聊进程队列的特点和实现原理?
3、请画出进程的三状态转换图
4、你了解生产者模型消费者模型么?如何实现?
5、从你的角度说说进程在计算机中扮演什么角色?
线程
1、GIL锁是怎么回事?
2、在python中是否线程安全?
3、什么叫死锁?
4、logging模块是否是线程安全的?
5、threading.local的作用?
6、程序从flag a执行到falg b的时间大致是多少秒?
import threading
import time
def _wait():
time.sleep(60)
# flag a
t = threading.Thread(target=_wait,daemon = False)
t.start()
# flag b
7、程序从flag a执行到falg b的时间大致是多少秒?
import threading
import time
def _wait():
time.sleep(60)
# flag a
t = threading.Thread(target=_wait,daemon = True)
t.start()
# flag b
8、程序从flag a执行到falg b的时间大致是多少秒?
import threading
import time
def _wait():
time.sleep(60)
# flag a
t = threading.Thread(target=_wait,daemon = True)
t.start()
t.join()
# flag b
9、读程序,请确认执行到最后number是否一定为0
import threading
loop = int(1E7)
def _add(loop:int = 1):
global number
for _ in range(loop):
number += 1
def _sub(loop:int = 1):
global number
for _ in range(loop):
number -= 1
number = 0
ta = threading.Thread(target=_add,args=(loop,))
ts = threading.Thread(target=_sub,args=(loop,))
ta.start()
ts.start()
ta.join()
ts.join()
10、读程序,请确认执行到最后number是否一定为0
import threading
loop = int(1E7)
def _add(loop:int = 1):
global number
for _ in range(loop):
number += 1
def _sub(loop:int = 1):
global number
for _ in range(loop):
number -= 1
number = 0
ta = threading.Thread(target=_add,args=(loop,))
ts = threading.Thread(target=_sub,args=(loop,))
ta.start()
ta.join()
ts.start()
ts.join()
11、读程序,请确认执行到最后number的长度是否一定为1
import threading
loop = int(1E7)
def _add(loop:int = 1):
global numbers
for _ in range(loop):
numbers.append(0)
def _sub(loop:int = 1):
global number
while not numbers:
time.sleep(1E-8)
numbers.pop()
number = [0]
ta = threading.Thread(target=_add,args=(loop,))
ts = threading.Thread(target=_sub,args=(loop,))
ta.start()
ta.join()
ts.start()
ts.join()
12、读程序,请确认执行到最后number的长度是否一定为1
import threading
loop = int(1E7)
def _add(loop:int = 1):
global numbers
for _ in range(loop):
numbers.append(0)
def _sub(loop:int = 1):
global number
while not numbers:
time.sleep(1E-8)
numbers.pop()
number = [0]
ta = threading.Thread(target=_add,args=(loop,))
ts = threading.Thread(target=_sub,args=(loop,))
ta.start()
ts.start()
ta.join()
ts.join()
协程
1、什么是协程?常用的协程模块有哪些?
2、协程中的join是用来做什么用的?它是如何发挥作用的?
3、使用协程实现并发的tcp server端
4、在一个列表中有多个url,请使用协程访问所有url,将对应的网页内容写入文件保存
综合
1、进程和线程的区别
2、进程池、线程池的优势和特点
3、线程和协程的异同?
4、请简述一下互斥锁和递归锁的异同?
5、请列举一个python中数据安全的数据类型?
6、Python中如何使用线程池和进程池
7、简述 进程、线程、协程的区别 以及应用场景?
8、什么是并行,什么是并发?
9、请解释同步和异步这两个概念?
10、请谈谈对异步非阻塞的了解?
11、简述信号量的实现原理
12、程序中的阻塞有哪些?给程序带来了哪些影响?
13、请分别用多进程、多线程、协程实现生产者消费者模型?