-
Python锁相关:什么是递归锁?
在 Python 中为了支持同一个线程中多次请求同一资源,Python 提供了可重入锁。这个 RLock 内部维护着一个 Lock 和一个 counter 变量,counter 记录了 acquire 的次数,从而使得资源可以被多次 require。直到一个线程所有的 acquire 都被 release,其他的线程才能获得资源。递归锁分为可递归锁与非递归锁。
-
Python中的元组tuple和列表lists之间的区别是什么?
列表属于可变序列,我们可以随意地增加、删减或者改变列表中的元素,长度大小不固定。由于列表可变,所以列表不能作为字典中的键key。
元组属于不可变序列,长度大小不固定,不能增加、删减或者改变元素,除非整体替换,因此,可以作为字典中的键key。
-
Django中间件的使用场景是什么?
中间件常用于权限校验、限制用户请求、打印日志、改变输出内容等多种应用场景,比如: 禁止特定IP地址的用户或未登录的用户访问我们的View视图函数
-
Python中生成器和迭代器的区别是什么?
1.迭代器是访问容器的一种方式,也就是说容器已经出现。我们是从已有元素拓印出一份副本,只为我们此次迭代使用。而生成器则是,而生成器则是自己生成元素的。
2.在用法上生成器只需要简单函数写法,配合yield就能实现。而迭代器真正开发中很难使用到。我们可以把生成器看做,python给我们提供的特殊接口实现的迭代器。
3.生成器是只能遍历一次的。 -
Python装饰器的原理和应用?
装饰器(decorator)是一种高级Python语法。装饰器可以对一个函数、方法或者类进行加工。在Python中,我们有多种方法对函数和类进行加工,比如在Python闭包中,我们见到函数对象作为某一个函数的返回结果。相对于其它方式,装饰器语法简单,代码可读性高。因此,装饰器在Python项目中有广泛的应用。
装饰器是设计模式的一种,被用于有切面需求的场景,较为经典的有插入日志、性能测试、事务处理等。 -
GIL的限制有哪些?
全局解释器锁限制了cPython进程中的多个线程,同一时间只有一个线程能够占用这个锁,防止一块内存区域同时被多个线程访问修改
-
解决 GIL 的方法?
- 使用多进程
多个Python进程有各自独立的GIL锁,互不影响。 - 使用其他 Python 解释器
换其他的 Python 解释器,比如 pypy - 仍然使用多线程
因为在 IO 密集型任务中,多线程的『鸡肋』影响不大 - 使用 C 扩展模块
还有一种就是调用C语言的链接库
- 使用多进程
-
Python实现多进程的几种方式是什么
1. os.fork()
2. 使用multiprocessing模块: 创建Process的实例,传入任务执行函数作为参数
3. 使用multiprocessing模块: 派生Process的子类,重写run方法
4. 使用进程池Pool -
什么是序列化和反序列化?
序列化:将内存中的不可持久化和传输对象转换为可方便持久化和传输对象的过程。 反序列化:将可持久化和传输对象转换为不可持久化和传输对象的过程。 Python中提供pickle和json两个模块来实现序列化与反序列化,pickle模块和json模块dumps()、dump()、loads()、load()这是个函数,其中dumps()、dump()用于实现序列化,loads()、load()用于实现反序列化。
2023年Python面试题(真题)【进阶】
最新推荐文章于 2024-04-28 23:59:32 发布