Python常考面试题

1、 多进程、多线程?

出现概率较高, 但是实际用处特别少

先将两个概念阐述一遍,再来找不同。

进程:一个程序的执行实例就是一个进程。 每一个进程提供执行程序的所有资源(进程的本质是所有资源的集合),一个进程有一个虚拟的地址空间、可执行的代码、操作系统的接口、安全的上下文(记录启动该进程的用户和权限等)、唯一的进程ID、环境变量、优先级别、最小和最大的工作空间(内存空间),还要有至少一个线程。每一个进程启动时候都会最下产生一个进程,即主线程 然后主线程会再创建其他的子线程。

线程:线程是操作系统能够进行运算调度的最小单位。他被包含在进程之中,是进程中的实际工作单位。一条线程指的是进程中的一个单一顺序的控制流,一个进程就可以并发多个线程,每条线程并行执行不同的任务,一个线程是一个execution context(执行上下文),即一个cpu执行时需要的一串指令。

找不同阶段:

  1. 同一个进程中的线程共享同一内存空间、数据,但是进程之间是独立的。
  2. 对主线程的修改可能会影响其他线程的行为, 但是父进程的修改(除了删除)不会影响其他子进程
  3. 线程是一个上下文的执行指令,而进程则是与运算相关的一簇资源
  4. 同一个进程的线程之间可以直接通信, 但是进程之间的交流需要借助于中间代理来实现
  5. 创建新的线程很容易,但是创建新的进程需要对父进程做一次复制
  6. 一个线程可以操作同一进程中的其他线程, 但是进程只能操邹其子进程
  7. 线程启动速度快, 进程启动速度慢(但是两者的运行速度没有可比性)
  8. 可以参考 这个 博客介绍的非常详细

2、闭包相关概念

面试了一些公司发现闭包概念考的频率比较高

什么是闭包】:在一个函数中,定义了一个内函数,内函数运用了外函数的临时变量,并且外函数返回的值是内函数的引用,就是一个闭包

闭包作用】:通俗来讲就是实现变量的重复使用,正常来说,当一个函数结束的时候,函数内部的局部变量都会被释放,但是闭包比较特殊,如果在释放时候发现外函数的临时变量将来可能在内函数中使用,将会把这个临时变量绑定给内函数,然后自己再结束

由闭包又可以联系到装饰器

【什么是装饰器、作用】:用于扩展原来函数功能的一种函数,目的是不改变原函数(或类)的情况下扩展原函数

【python内置的三个装饰器】:

以下三个都是类装饰器

staticmethod:类静态方法,其跟成员方法的区别是没有 self 参数,并且可以在类不进行实例化的情况下调用

classmethod:与成员方法的区别在于所接收的第一个参数不是 self (类实例的指针),而是cls(当前类的具体类型)

property:是属性的意思,表示可以通过属性的方式访问函数

【装饰器使用场景】:

3、新式类和经典类

【区别】:

  1. 继承搜索顺序:新式类采用的是广度,经典类采用的是深度优先
  2.  新式类增加了__slots__内置属性, 可以把实例属性的种类锁定到__slots__规定的范围之中。
  3.  新式类增加了__getattribute__方法
  4. 新式类内置有__new__方法而经典类没有__new__方法而只有__init__方法
  5. Python 2.x中默认都是经典类,只有显式继承了object才是新式类,Python 3.x中默认都是新式类

4.GIL(全局解释器锁)

【概念】:GIL并不是python的特性,他是在实现python解释器时引用的一个概念。GIL只在CPython解释器上存在。

不过,在Python的解释器中,使用最多的都是CPython解释器,所以我们不可避免的会遇到GIL

【作用】GIL的作用与互斥锁的作用相似,是为了解决解释器中多个线程资源竞争的问题。

【GIL和互斥锁的区别】:

线程互斥锁是Python代码层面的锁,解决我们自己写的Python程序中多线程共享资源的问题。

GIL是Python解释器层面的锁,解决解释器中多个线程的竞争资源问题。

【影响】:

  • 因为GIL的存在,在Python中同一时刻有且只有一个线程会执行,Python中的多线程被称为“伪多线程”
  • GIL在程序中有IO操作时才切换到其他线程,所以Python中的多线程不适合计算密集型的程序,只适合IO密集型的程序

5、数据类型对比

【链表和list】:

链表:申请内存时候可以不是连续的, 删除和插入快,不需要移动大量的节点,只需要修改节点“指针”

列表:内存必须连续,每次执行 insert 的时候都需要移动插入点右边的所有元素

set和list:set无重复,set存储根据哈希值来排序查询速度比list快得多

dict和list:查询速度比list快, dict的键与set相同

 

 

 

  

 

 

 

posted @ 2020-06-03 17:53  Musl  阅读(188)  评论(0编辑  收藏  举报