欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

python面试之结尾篇

程序员文章站 2024-02-12 17:50:40
...

1.多线程,多进程和协程

进程:一个运行的程序,进程是系统调度和分配的最小单位,拥有自己独立的空间内存,进程之间不共享资源。
线程:调度执行的最小单位,依赖于进程,一个进程至少有一个线程,并且同一个进程内的线程之间共享资源,大大提升了程序运行速度,切换由系统调度。
协程:一种用户态的轻量级线程,切换由用户调度,拥有自己的上下文和栈,切换时将寄存器上下文和栈保存在别的地方,切换回来时,恢复先前的寄存器上下文和栈,直接操作栈基本没有内核的消耗,
所以切换速度较快。

2.什么是GIL

全局解释器所,每个线程在执行时候都需要先获取GIL,保证同一时刻只有一个线程可以执行代码,即同一时刻只有一个线程使用CPU,也就是说多线程并不是真正意义上的同时执行。

3.并发和并行

并发:交替处理多个任务的能力; 
并行:同时处理多个任务的能力;

4.一个线程让另一个线程去调用一个函数

import threading

def func1(t2):
    print('正在执行函数func1')
    t2.start()


def func2():
    print('正在执行函数func2')


if __name__ == '__main__':
    t2 = threading.Thread(target=func2)
    t1 = threading.Thread(target=func1, args=(t2,))
    t1.start()

5.同/异步和阻塞非阻塞

同步异步是针对调用者来说的,调用者发起一个请求后,一直干等被调用者的反馈就是同步,不必等去做别的事就是异步。

阻塞非阻塞是针对被调用者来说的,被调用者收到一个请求后,做完请求任务后才给出反馈就是阻塞,收到请求直接给出反馈再去做任务就是非阻塞。

6.threading.local()函数

from threading import get_ident,Thread

#字典存储
storage = {}

def set(k,v):  # 来给storage设置值
    ident = get_ident()  # get_ident()能获取唯一标识,是一组数字
    if ident in storage:
        storage[ident][k] = v
    else:
        storage[ident] = {k:v}
    print(storage)
    return ident


#每个线程取值都必须带上自己的唯一标识
def get(k,ident):  # 来取storage的值
    print(ident)
    return storage[ident][k]


def task(arg):
    ident = set('val',arg)
    v = get('val',ident)
    print(v)


#threading.local()的作用就是为每个线程开辟一个独立的空间进行数据存储
#为了防止线程切换导致别的线程进入函数导致数据紊乱
for i in range(10):
    t = Thread(target=task,args=(i,))
    t.start()

7.列举工作中常用的git 命令

查看分支:git branch

创建分支:git branch name

切换分支:git checkout name

创建+切换分支:git checkout –b name

合并某分支到当前分支:git merge name

删除分支:git branch -d name

git fetch 取代码

git rebase 合代码

等等等...
相关标签: python相关