程序媛

并发部分的面试题

进程

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、请分别用多进程、多线程、协程实现生产者消费者模型?

posted @ 2019-04-19 18:55  Eva_J  阅读(492)  评论(1编辑  收藏  举报