python面试内容

发布时间 2023-12-19 20:17:21作者: tan_ai_kang

多任务:

  多进程、进程池(重复利用固定数量的进程,减少关闭、开启的开销资源和节约内存)

    进程: 进程是操作系统资源分配的最小单位

    进程独立的空间,直接可以使用队列进行通信,也可以使用文件、内存、redis等进行共享通信

    比较稳定、可利用多核、开销大

  多线程、线程池(重复利用固定数量的进程,减少关闭、开启的开销资源和节约内存)

    线程:是CPU调度的基本单位,程序 执行最小单元,一个进程至少一个主线程,可以多线程

    线程共享内存空间,会出现资源竞争问题,有GIL锁导致无法利用多核并行(无法真正意义上的并发),代码资源紧张可以通过加互斥锁防止

    死锁原因:两个程序互相等待对方释放锁,双方都没有释放导致程序僵持无法继续往下运行

    死锁解决:给锁加上合适的过期时间

    没有进程稳定,但比进程轻量级,切换开销小,占用资源少,共享资源方便

  协程:

    相当于单线程中,可以挂起的函数。函数遇到IO自动挂起(底层可能是函数有yield关键字,挂起),切换到别的任务继续运行,实现任务交替运行,开销极小

  进程包含线程 线程包含协程

 

  

迭代器和生成器:

  可迭代对象实现了可迭代协议即 实现 __iter__魔法方法的对象,可以使用for进行遍历

  https://www.bilibili.com/video/BV1ME411r7Yi?p=45&spm_id_from=pageDriver&vd_source=49946cc787bbea39e6937c5a2fb0eb8b

   迭代器:用于节省内存空间,可以生产数据的一个对象

   生成器: 特殊的迭代器,特殊的实现迭代器功能的方式

    1.把列表推导式改为元组,它就是生成器

    2.一个函数里使用yield关键字,就是生成器

 

 

深浅拷贝:

  浅拷贝 是指将对象第一层进行拷贝,其元素的地址引用仍然是指向被拷贝的 拷贝对象元素的修改会相当于被拷贝的数据

  深拷贝 是指将对象的所有层级都重新拷贝出来,其地址指向不再指向被拷贝对象 数据隔离,修改不受影响
  https://www.bilibili.com/video/BV1jT4y1G7AN/?spm_id_from=333.337.search-card.all.click

udp :不可靠的,不建立连接,直接发,不在乎对方是否已收到

tcp:面向连接的,可靠的,超时重发