首页 > 编程语言 >python面试题收集

python面试题收集

时间:2023-11-12 17:11:20浏览次数:57  
标签:__ 面试题 收集 python self Python 线程 连接 cls

1.Python是如何进行内存管理的?

答: 从三个方面来说,一对象的引用计数机制,二垃圾回收机制,三内存池机制

一、对象的引用计数机制

Python内部使用引用计数,来保持追踪内存中的对象,所有对象都有引用计数。

引用计数增加的情况:

1,一个对象分配一个新名称

2,将其放入一个容器中(如列表、元组或字典)

引用计数减少的情况:

1,使用del语句对对象别名显示的销毁

2,引用超出作用域或被重新赋值

sys.getrefcount( )函数可以获得对象的当前引用计数

多数情况下,引用计数比你猜测得要大得多。对于不可变数据(如数字和字符串),解释器会在程序的不同部分共享内存,以便节约内存。

2. 垃圾回收

1,当一个对象的引用计数归零时,它将被垃圾收集机制处理掉。

2,当两个对象a和b相互引用时,del语句可以减少a和b的引用计数,并销毁用于引用底层对象的名称。
然而由于每个对象都包含一个对其他对象的应用,因此引用计数不会归零,对象也不会销毁。
(从而导致内存泄露)。
为解决这一问题,解释器会定期执行一个循环检测器,搜索不可访问对象的循环并删除它们。

3. 内存池机制

Python提供了对内存的垃圾收集机制,但是它将不用的内存放到内存池而不是返回给操作系统。

1,Pymalloc机制。为了加速Python的执行效率,Python引入了一个内存池机制,用于管理对小块内存的申请和释放。

2,Python中所有小于256个字节的对象都使用pymalloc实现的分配器,而大的对象则使用系统的malloc。

3,对于Python对象,如整数,浮点数和List,都有其独立的私有内存池,对象间不共享他们的内存池。也就是说如果你分配又释放了大量的整数,用于缓存这些整数的内存就不能再分配给浮点数。

4. 什么是lambda函数?它有什么好处?

答:lambda 表达式,通常是在需要一个函数,但是又不想费神去命名一个函数的场合下使用,也就是指匿名函数

lambda函数:首要用途是指点短小的回调函数
lambda [arguments]:expression
>>> a=lambdax,y:x+y
>>> a(3,11)

5. Python里面如何实现tuple和list的转换?

答:直接使用tuple和list函数就行了,type()可以判断对象的类型

6. 请写出一段Python代码实现删除一个list里面的重复元素

答:

1,使用set函数,set(list)

2,使用字典函数,

>>>a=[1,2,4,2,4,5,6,5,7,8,9,0]
>>> b={}
>>>b=b.fromkeys(a)
>>>c=list(b.keys())
>>> c

7. 编程用sort进行排序,然后从最后一个元素开始判断

a=[1,2,4,2,4,5,7,10,5,5,7,8,9,0,3]
a.sort()
last=a[-1]
for i inrange(len(a)-2,-1,-1):
if last==a[i]:
del a[i]
else:last=a[i]
print(a)

8. Python里面如何拷贝一个对象?(赋值,浅拷贝,深拷贝的区别)

答:赋值(=),就是创建了对象的一个新的引用,修改其中任意一个变量都会影响到另一个。

浅拷贝:创建一个新的对象,但它包含的是对原始对象中包含项的引用(如果用引用的方式修改其中一个对象,另外一个也会修改改变){1,完全切片方法;2,工厂函数,如list();3,copy模块的copy()函数}

深拷贝:创建一个新的对象,并且递归的复制它所包含的对象(修改其中一个,另外一个不会改变){copy模块的deep.deepcopy()函数}

9. 介绍一下except的用法和作用?

答:try…except…except…[else…][finally…]

执行try下的语句,如果引发异常,则执行过程会跳到except语句。对每个except分支顺序尝试执行,如果引发的异常与except中的异常组匹配,执行相应的语句。如果所有的except都不匹配,则异常会传递到下一个调用本代码的最高层try代码中。

try下的语句正常执行,则执行else块代码。如果发生异常,就不会执行

如果存在finally语句,最后总是会执行。

10. Python中pass语句的作用是什么?

答:pass语句不会执行任何操作,一般作为占位符或者创建占位程序,whileFalse:pass

11. 介绍一下Python下range()函数的用法?

答:列出一组数据,经常用在for in range()循环中

12. 如何用Python来进行查询和替换一个文本字符串?

答:可以使用re模块中的sub()函数或者subn()函数来进行查询和替换,

格式:sub(replacement, string[,count=0])(replacement是被替换成的文本,string是需要被替换的文本,count是一个可选参数,指最大被替换的数量)
>>> import re
>>>p=re.compile(‘blue|white|red’)
>>>print(p.sub(‘colour’,'blue socks and red shoes’))
colour socks and colourshoes
>>>print(p.sub(‘colour’,'blue socks and red shoes’,count=1))
colour socks and redshoes
subn()方法执行的效果跟sub()一样,不过它会返回一个二维数组,包括替换后的新的字符串和总共替换的数量

13. Python里面match()和search()的区别?

答:re模块中match(pattern,string[,flags]),检查string的开头是否与pattern匹配。

re模块中research(pattern,string[,flags]),在string搜索pattern的第一个匹配值。
>>>print(re.match(‘super’, ‘superstition’).span())
(0, 5)
>>>print(re.match(‘super’, ‘insuperable’))
None
>>>print(re.search(‘super’, ‘superstition’).span())
(0, 5)
>>>print(re.search(‘super’, ‘insuperable’).span())
(2, 7)

14. Python里面如何生成随机数?

答:random模块

随机整数:random.randint(a,b):返回随机整数x,a<=x<=b

random.randrange(start,stop,[,step]):返回一个范围在(start,stop,step)之间的随机整数,不包括结束值。

随机实数:random.random( ):返回0到1之间的浮点数

random.uniform(a,b):返回指定范围内的浮点数。

15. 有没有一个工具可以帮助查找python的bug和进行静态的代码分析?

答:PyChecker是一个python代码的静态分析工具,它可以帮助查找python代码的bug, 会对代码的复杂度和格式提出警告

Pylint是另外一个工具可以进行codingstandard检查

16. 如何在一个function里面设置一个全局的变量?

答:解决方法是在function的开始插入一个global声明:
def f()
global x

17. http 和 https 的区别?

 1. http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议
 2. http适合于对传输速度、安全性要求不是很高,且需要快速开发的应用。如web应用,小的手机游戏等等。而https适用于任何场景。

18. 爬虫使用多线程好?还是多进程好?为什么?

对于IO密集型代码(文件处理,网络爬虫),多线程能够有效的提升效率
(单线程下有IO操作会进行IO等待,会造成不必要的时间等待,而开启多线程后,
A线程等待时,会自动切换到线路B,可以不会浪费CPU的资源,从而提升程序的执行和效率)。
在实际的采集过程中,既考虑网速和相应的问题,也需要考虑自身的机器硬件的情况,来设置多进程或者多线程

对于爬虫采用多线程还是多进程,都需要根据具体的环境分析的

1.多线程爬虫的优缺点:
  优点:
      有效利用CPU时间,极大减小下载出错、阻塞对抓取速度的影响,整体上提高下载的速度,对于没有反爬虫限制的网站,下载速度可以多倍增加。
  缺点:
      对于有反爬的网站,速度提升有限的,提高了复杂度,对编码要求更高,线程越多,每个线程获得的时间就越少,
      同时线程切换更频繁也带来额外开销,线程之间资源竞争更激烈
  
2.多进程爬虫的优缺点
    **相对于多线程,多进程爬虫更重,更慢,但也可靠**
    多进程爬虫可以认为是分布式爬虫的基础,在单机上也可以用。
    因为一般大型的网站的服务器都是采用分布式部署的,可以采用多进程同时在不同的服务器器上进行爬取

3.爬虫采用多线程还是多进程好
    进程与线程是明显不同的,因为python本身由于GIL的关系,也就是它本质一个python进程只可能有一个线程,
    不管说的是多少线程都是模拟出来的多线程,所以,你真要快速,这个要用多进程来处理
    在python环境下,多进程稍稍比多线程好实现好理解一点
    因为爬虫大多数都是运行在linux内核的服务器上面,而在linux操作系统下,多进程要比多线程更加合适,
    因为调度开销和多线程差不多,但是进程性能更好。
    如果在windows系统下跑爬虫的话,建议使用框架或者使用多线程。

19. 简述 with 方法打开处理文件帮我们做了什么?

whit 语句适用于对资源进行访问的场合,确保不管使用过程中是否发生异常都睡执行必要的"清理"操作,释放资源,
比如:文件使用后自动关闭线程中 锁的自动获取和释放等
with 语句即:"上下文管理器":在程序中用来表示代码执行过程中所处的前后环境
上下文管理器:含有 enter 和 exit 方法的对象
enter():语句执行之前执行该方法,通常返回一个实例对象,如果with语句有as目标,则把对象赋值给as目标
exit():执行语句结束后,自动调用exit()方法,用户释放资源,若此方法返回True,程序会忽略异常
使用环境:文件读写,线程锁的自动释放等

20. 函数装饰器有什么作用?请列举说明?

1,引入日志 
2,函数执行时间统计
3,执行函数前预备处理
4,执行函数后清理功能
5,权限校验等场景
6,缓存
7,事务处理

21. Python中递归的最大次数1000 ?怎么改?

import sys
sys.setrecursionlimit(1500) # set the maximum depth as 1500

22. w、a+、wb 文件写入模式的区别

r : 读取文件,若文件不存在则会报错
w: 写入文件,若文件不存在则会先创建再写入,会覆盖原文件
a : 写入文件,若文件不存在则会先创建再写入,但不会覆盖原文件,而是追加在文件末尾
rb,wb:分别于r,w类似,用于读写二进制文件
r+ : 可读、可写,文件不存在也会报错,写操作时会覆盖
w+ : 可读,可写,文件不存在先创建,会覆盖
a+ :可读、可写,文件不存在先创建,不会覆盖,追加在末尾

23. Python 是一种非常流行的编程语言,因此有许多不同的 Web 开发框架可供选择。以下是几个流行的 Python Web 框架的优缺点:

Django
	优点:
		全功能性:Django 是一个全功能性的 Web 框架,它包含了许多常见的 Web 开发任务所需的功能,如认证、路由、ORM 等等。
		社区支持:Django 有一个庞大的开发者社区,可以提供各种支持和解决问题。
		安全性:Django 在设计上考虑了很多安全性问题,并提供了许多内置的安全功能。
	缺点:
		学习曲线较陡峭:Django 是一个功能强大的框架,学习曲线相对较陡峭。
		一些开发者认为 Django 的 ORM(Object-Relational Mapping)有点过于复杂。
		
Flask
	优点:
		轻量级:Flask 是一个轻量级的 Web 框架,代码简洁易懂,可以快速开发。
		灵活性:Flask 具有很高的灵活性,开发者可以根据需要选择所需的功能。
		易于扩展:Flask 通过使用 Flask 插件可以轻松扩展其功能。
	缺点:
		Flask 框架本身缺乏一些常用的功能,需要使用插件或库进行补充。
		缺少强制性的文件组织规范,导致项目结构比较随意,可能需要开发者进行额外的组织和管理。

FastAPI
	优点:
		高性能:FastAPI 基于 Starlette 和 Pydantic 实现,具有异步、高性能的特点。
		简单易用:FastAPI 的 API 设计非常简单,使用起来非常方便。
		文档生成:FastAPI 内置了文档生成器,可以自动生成 API 文档。
	缺点:
		对于新手来说,学习曲线可能相对较陡峭。
		由于是比较新的框架,社区可能相对较小,可能无法解决所有问题

Pyramid
	优点:
		灵活性:Pyramid 框架允许开发者根据项目需要进行灵活配置,可以进行微调和自定义。
		易于扩展:类似 Flask,Pyramid 也可以通过使用插件轻松扩展其功能。
		支持多种数据库:Pyramid 支持多种数据库,包括 PostgreSQL、MySQL 等等。
	缺点:
		在某些方面可能过于灵活,需要开发者在项目中进行额外的配置和设置。
		需要开发者拥有一定的 Python 和 Web 开发经验才能熟练掌握。
		
Bottle
	优点:
		轻量级:Bottle 是一个非常轻量级的框架,仅有一个 Python 文件,易于上手。
		简洁性:Bottle 的 API 简单易用,可以快速编写简单的 Web 应用。
	缺点:
		功能相对较少,不适用于大型复杂项目。
		缺乏内置的 ORM,需要使用第三方库进行数据库操作。
		
CherryPy
	优点:
		高性能:CherryPy 的性能比其他框架要快,因为它是基于 Python 标准库构建的。
		可扩展性:CherryPy 可以通过插件和扩展进行功能扩展。
	缺点:
		较少的社区支持和文档资料。
		对于初学者来说,学习曲线相对较陡峭。
		
Tornado
	优点:
		高性能:Tornado 是一个高性能的框架,可处理大量并发请求。
		可扩展性:Tornado 可以轻松地与异步 IO 库集成。
	缺点:
		学习曲线较陡峭,需要了解异步编程的概念。
		缺少一些常用的功能,需要使用第三方库进行补充。

Web2Py
	优点:
		全功能性:Web2Py 是一个全功能性的 Web 框架,内置了很多功能,如表单处理、国际化支持等等。
		易于使用:Web2Py 的 API 设计比较友好,使用起来非常方便。
		安全性:Web2Py 在设计上考虑了很多安全性问题,并提供了一些内置的安全功能。
	缺点:
		对于一些高级用法需要更高的技能水平,比如自定义组件和插件。
		在一些方面,Web2Py 比其他框架更加保守,可能不能满足一些特定的需求。
		
TurboGears
	优点:
		多种数据库支持:TurboGears 支持多种数据库,包括 SQLAlchemy 和 Ming。
		易于扩展:TurboGears 通过使用 TurboGears 插件可以轻松扩展其功能。
		可定制性:TurboGears 允许开发者自定义组件和插件。
	缺点:
		学习曲线相对较陡峭,需要了解一些先进的概念。
		由于可定制性较高,可能需要开发者在项目中进行额外的配置和设置。

24. TCP 和 UDP 协议的区别是什么, 分别优缺点又是什么

    TCP 和 UDP 是两种常见的传输层协议他们的区别有:
        连接方式:TCP是面向连接的协议,UDP是无连接的协议,TCP在传输数据之前需要建立连接,二UDP不需要
        可 靠 性:TCP是一种可靠的协议,它保证数据的传输是无差错,无丢失,有序的;
                 UDP是不可靠的协议,它不能保证数据传输的可靠性
        传输效率:UDP比TCP更加高效,因为它不需要创建连接和维护状态信息,但是UDP的传输效率是以可靠性为代价的
        应用场景:TCP适用于数据可靠性比较高的应用场景,例如:文件传输,电子邮件等
                 UDP适用于对数据效率要求高的应用场景,例如:实时音视频传输,在线游戏等
     总的来说,TCP和UDP各有优缺点,可以根据具体应用场景选择合适的传输协议

25. 长连接 和 短连接 协议 的区别

    长连接和短连接都是指TCP协议中的连接,是指客户端和服务器之间的连接。
    在HTTP协议中,长连接和短连接的实现方式是通过HTTP头中的Connection字段来控制的。
    如果Connection字段的值为keep-alive,则表示使用长连接;如果Connection字段的值为close,则表示使用短连接。
    TCP的keep-alive机制是指在一定时间内没有数据传输时,客户端或服务器会发送一个探测包,以确认对方是否还存活。
    如果对方没有响应,则认为对方已经断开连接,此时连接也会断开。
    TCP的keep-alive机制可以避免长时间的空闲连接占用系统资源,提高系统的可靠性

    短连接的操作步骤是:
         建立连接——数据传输——关闭连接…建立连接——数据传输——关闭连接
         每次传输数据时都要重新建立一个连接和关闭连接
    长连接的操作步骤是:
         建立连接——数据传输…(保持连接)…数据传输——关闭连接
         建立一次连接 可以无限传输数据,即使没有数据传输,连接也不会断开
    优缺点:
         长连接可以减少连接的建立和断开的次数,从而减少网络开销,提高效率
         短连接会增加连接的建立和断开的次数,从而增加网络开销,降低效率      

26. Python面向对象三大特性?

1、封装隐藏对象的属性和实现细节,仅对外提供公共访问方式。在python中用双下划线开头的方式将属性设置成私有的 。好处:1. 将变化隔离;2. 便于使用;3. 提高复用性;4. 提高安全性。

2、继承继承是一种创建新类的方式,在python中,新建的类可以继承一个或多个父类,父类又可称为基类或超类,新建的类称为派生类或子类。即一个派生类继承基类的字段和方法。

3、多态一种事物的多种体现形式,函数的重写其实就是多态的一种体现 。Python中,多态指的是父类的引用指向子类的对象 。

27. Python可变与不可变数据类型的区别?

答:Python中看可变与不可变数据类型,主要是看变量所指向的内存地址处的值是否会改变 。 Python 的六种标准数据类型:数字、字符串、列表、元组、字典、集合。

不可变数据(3个):Number(数字)、String(字符串)、Tuple(元组)。

可变数据(3个):List(列表)、Dictionary(字典)、Set(集合)。

28. Python中迭代器和生成器的区别?

Python中生成器能做到迭代器能做的所有事,而且因为自动创建了__iter__()和next()方法,生成器显得特别简洁,而且生成器也是高效的,使用生成器表达式取代列表解析,同时节省内存。除了创建和保持程序状态的自动生成,当发生器终结时,还会自动跑出StopIterration异常。
列表、元组、字典、字符串都是可迭代对象。
数字、布尔值都是不可迭代的。

29. Python中猴子补丁是什么?

在Ruby、Python等动态编程语言中,猴子补丁仅指在运行时动态改变类或模块,为的是将第三方代码打补丁在不按预期运行的bug或者feature上 。
在运行时动态修改模块、类或函数,通常是添加功能或修正缺陷。
猴子补丁在代码运行时内存中发挥作用,不会修改源码,因此只对当前运行的程序实例有效。

30. Python中的单例模式有几种实现方式?

1、用__new__特殊方法实现

class Singleton:
    def __new__(cls, *args, **kwargs):
        if not hasattr(cls, '_instance'):
            cls._instance = super(Singleton, cls).__new__(cls)
        return cls._instance
    def __init__(self, name):
        self.name = name
s1 = Singleton('IT圈')
s2= Singleton('程序IT圈')
print(s1 == s2) # True

2、使用装饰器实现

def singleton(cls):
    _instance = {}
    def inner(*args, **kwargs):
        if cls not in _instance:
            _instance[cls] = cls(*args, **kwargs)
        return _instance[cls]
    return inner
@singleton
class Singleton:
    def __init__(self, name):
        self.name = name
s1 = Singleton('IT圈')
s2= Singleton('程序IT圈')
print(s1 == s2) # True


3、类装饰器实现

class Singleton:
    def __init__(self, cls):
        self._cls = cls
        self._instance = {}

    def __call__(self, *args):
        if self._cls not in self._instance:
            self._instance[self._cls] = self._cls(*args)
        return self._instance[self._cls]
@Singleton
class Singleton:
    def __init__(self, name):
        self.name = name
s1 = Singleton('IT圈')
s2= Singleton('程序IT圈')
print(s1 == s2) # True


4、使用元类实现方式

class Singleton1(type):
    def __init__(self, *args, **kwargs):
        self.__instance = None
        super(Singleton1, self).__init__(*args, **kwargs)

    def __call__(self, *args, **kwargs):
        if self.__instance is None:
            self.__instance = super(Singleton1, self).__call__(*args, **kwargs)
        return self.__instance

class Singleton(metaclass=Singleton1):
    def __init__(self, name):
        self.name = name
s1 = Singleton('IT圈')
s2= Singleton('程序IT圈')
print(s1 == s2) # True

31. 简述 OSI 七层协议

是网络传输协议,人为的把网络传输的不同阶段划分成不同的层次

七层划分为:应用层、表示层、会话层、传输层、网络层、数据链路层、物理层

五层划分为:应用层、传输层、网络层、数据链路层、物理层

物理层:网线,电缆等物理设备

数据链路层:Mac 地址

网络层:IP 地址

传输层:TCP,UDP 协议

应用层:FTP 协议,Email,WWW 等

32. 三次握手、四次挥手的流程

都发生在传输层

三次握手:

TCP 协议是主机对主机层的传输控制协议,提供可靠的连接服务,采用三次握手确认建立一个连接。TCP 标志位(位码),有6种标示:SYN(synchronous建立联机) ACK(acknowledgement 确认) PSH(push传送) FIN(finish结束) RST(reset重置) URG(urgent紧急) Sequence number(顺序号码) Acknowledge number(确认号码) 第一次握手:主机 A 发送位码为 syn=1,随机产生 seq number=1234567 的数据包到服务器,并进入 SYN_SEND 状态,主机 B 由 SYN=1 知道,A 要求建立联机

第二次握手:主机 B 收到请求后要确认联机信息,向 A 发送 ack number=(主机 A 的 seq+1),syn=1,ack=1,随机产生 seq=7654321 的包,并进入 SYN_RECV 状态

第三次握手:主机 A 收到后检查 ack number 是否正确,即第一次发送的 seq number+1,以及位码 ack 是否为 1,若正确,主机 A 会再发送 ack number=(主机 B 的 seq+1),ack=1,主机 B 收到后确认 seq 值与 ack=1 则连接建立成功,两个主机均进入 ESTABLISHED 状态

以上完成三次握手,主机 A 与主机 B 开始传送数据

四次挥手:

因为 TCP 连接是全双工的,因此每个方向都必须单独进行关闭。这个原则是当一方完成它的数据发送任务后就能发送一个 FIN 来终止这个方向的连接。收到一个 FIN 只意味着这一方向上没有数据流动,一个 TCP 连接在收到一个 FIN 后仍能发送数据。首先进行关闭的一方将执行主动关闭,而另一方执行被动关闭

服务器 A 发送一个 FIN,用来关闭 A 到服务器 B 的数据传送。服务器 B 收到这个 FIN,它发回一个 ACK,确认序号为收到的序号加1。和 SYN 一样,一个 FIN 将占用一个序号

服务器 B 关闭与服务器 A 的连接,发送一个 FIN 给服务器 A

服务器 A 发回 ACK 报文确认,并将确认序号设置为收到序号加1

33. 什么是 C/S 和 B/S 架构

B/S 又称为浏览器/服务器模式。比如各种网站,jupyter notebook 等。优点:零安装,维护简单,共享性好。缺点:安全性较差,个性化不足

C/S 又称为客户端/服务器模式。比如微信客户端,Oracle 客户端等。优点:安全性好,数据传输较快,稳定。缺点:对 PC 机操作系统等有要求,当客户端较多时,服务器端负载较大

34. 数据库设计三大范式

建立科学的,规范的的数据库是需要满足一些规范的,以此来优化数据数据存储方式,在关系型数据库中这些规范就可以称为范式

第一范式:当关系模式 R 的所有属性都不能在分解为更基本的数据单位时,称 R 是满足第一范式的,简记为 1NF

关系模式R的所有属性不能再分解

第二范式:如果关系模式 R 满足第一范式,并且 R 的所有非主属性都完全依赖于 R 的每一个候选关键属性,称 R 满足第二范式,简记为 2NF

非主属性都要依赖于每一个关键属性

三范式:设 R 是一个满足第一范式条件的关系模式,X 是 R 的任意属性集,如果 X 非传递依赖于 R 的任意一个候选关键字,称 R 满足第三范式,简记为 3NF

数据不能存在传递关系,即每个属性都跟主键有直接关系而不是间接关系

35. 列举一些 django 的内置组件

Admin 组件:是对 model 中对应的数据表进行增删改查提供的组件

model 组件:负责操作数据库

form 组件:生成 HTML 代码;数据有效性校验;校验信息返回并展示

ModelForm 组件:用于数据库操作,也可用于用户请求的验证

36. uwsgi,uWSGI 和 WSGI 的区别

WSGI:全称是 Web Server Gateway Interface,是一种描述 web server 如何与 web application 通信的规范。django,flask 等都遵循该协议

uwsgi:是服务器和服务端应用程序的一种协议,规定了怎么把请求转发给应用程序和返回; uwsgi 是一种线路协议而不是通信协议,在此常用于在 uWSGI 服务器与其他网络服务器的数据通信

uWSGI:是一个 Web 服务器,它实现了 WSGI 协议、uwsgi、http 等协议。Nginx 中 HttpUwsgiModule 的作用是与 uWSGI 服务器进行交换

37. 面向对象深度优先和广度优先是什么?

Python的类可以继承多个类,那么其寻找类方法的方式有两种:
    当类是经典类时(主要在python2版本中的没有主动继承object的类),多继承情况下,会按照深度优先方式查找
    当类是新式类时(python3版本中的所有类和python2中主动继承object的类),多继承情况下,会按照广度优先方式查找
    简单点说就是:经典类是纵向查找,新式类是横向查找

38. 什么是异步非阻塞

同步异步指的是调用者与被调用者之间的关系

所谓同步,就是在发出一个功能调用时,在没有得到结果之前,该调用就不会返回,一旦调用返回,就得到了返回值

异步的概念和同步相对,调用在发出之后,这个调用就直接返回了,所以没有返回结果。当该异步功能完成后,被调用者可以通过状态、通知或回调来通知调用者

阻塞非阻塞是线程或进程之间的关系

阻塞调用是指调用结果返回之前,当前线程会被挂起(如遇到io操作)。调用线程只有在得到结果之后才会返回。函数只有在得到结果之后才会将阻塞的线程激活

非阻塞和阻塞的概念相对应,非阻塞调用指在不能立刻得到结果之前也会立刻返回,同时该函数不会阻塞当前线程

39. 简述 logging 模块

logging 模块是 Python 内置的标准模块,主要用于输出运行日志,可以设置输出日志的等级、日志保存路径、日志文件回滚等;相比 print,具备如下优点:

可以通过设置不同的日志等级,在 release 版本中只输出重要信息,而不必显示大量的调试信息

print 将所有信息都输出到标准输出中,严重影响开发者从标准输出中查看其它数据;logging 则可以由开发者决定将信息输出到什么地方,以及怎么输出

简单配置:

import logging
logging.debug("debug log")
logging.info("info log")
logging.warning("warning log")
logging.error("error log")
logging.critical("critica log")
output

WARNING:root:warning log
ERROR:root:error log
CRITICAL:root:critica log
默认情况下,只显示了大于等于WARNING级别的日志。logging.basicConfig()函数调整日志级别、输出格式等

40. 你的项目中uwsgi部署的时候配置的进程是多少?你们在设计的时候考虑多少并发量?

答:uwsgi配置32进程,800线程,考虑1000并发量以上。

标签:__,面试题,收集,python,self,Python,线程,连接,cls
From: https://www.cnblogs.com/huangchunfang/p/17827417.html

相关文章

  • python字符串操作
    python执行python脚本第一行#!/usr/bin/python 只对Linux/Unix用户适用,用来指定本脚本用什么解释器来执行。有这句时,加上执行权限后,可以直接用 ./ 执行,不然会出错,因为找不到python解释器。#!/usr/bin/python是告诉操作系统执行这个脚本的时候,调用/usr/bin下的python......
  • vscode python remote debug极速入门
    本文适用范围主要适用于debugpython程序,尤其是深度学习刚入门需要使用remote连接到linux进行程序运行,想调试一下的同学。当然非深度学习也可以参考食用本文哈哈哈。极速入门版提前准备:代码仓库已经拉取到linux上面,且已经知道运行的方式。比如:项目的启动命令为:pythonpret......
  • python 循环语句应用举例
    Python中的循环语句主要包括for循环和while循环。下面是两个例子,展示如何使用这两种循环。for循环应用:遍历列表中的元素并进行操作。python复制代码#创建一个列表fruits=['apple','banana','cherry','date','elderberry']#使用for循环遍历列表并打印每......
  • python随机抽取数字的方法和代码
    在Python中,我们可以使用内置的random模块来随机抽取数字。下面是一些示例。从一个列表中随机抽取数字如果你有一个数字列表,并且你想从中随机选择一个数字,你可以使用random.choice函数。pythonimportrandomnumbers=[1,2,3,4,5,6,7,8,9,10]chosen_number=rando......
  • Java 面试题之 Logback 打印日志是如何获取当前方法名称的?
    在Java中,有四种方法可以获取当前正在执行方法体的方法名称,分别是:使用Thread.currentThread().getStackTrace()方法使用异常对象的getStackTrace()方法使用匿名内部类的getClass().getEnclosingMethod()方法Java9的Stack-WalkingAPI本文将根据以上四种方法来给......
  • python学习记录
    np.random.seed是NumPy库中用于设置随机数生成器种子的函数。种子是一个整数,用于初始化随机数生成器的内部状态。通过设置相同的种子,可以确保在相同的条件下生成相同的随机数序列,这对于实验的可重复性和调试是非常有用的。在深度学习和机器学习中,随机初始化是一个常见的操作,例......
  • 自己觉得重要的话(可当面试题的话)
    JavaBean在IOC容器中的声明周期:大体上就是先:实例化然后注入属性,然后初始化,然后就创建完成了,完成之后:就可以通过:classPathxmlApplicationContext的getBean()id或name作为参数,然后获取这个Bean!......
  • 【Python编程】深入理解条件语句:if、else、elif详解
    在Python编程中,条件语句是一种非常重要的控制结构,可以用于根据特定条件执行不同的代码块。本文将深入探讨if、else和elif条件语句的用法,并通过详细的代码案例来帮助您更好地理解它们。一、if语句if语句用于根据特定条件执行代码块。如果条件为真,则执行if语句下面的代码块;如果条件为......
  • Python标准库中隐藏的利器
    Python安装之后,其标准库中有的模块,不一定要通过代码来引用,还可以直接在命令行中使用的。在命令行中直接使用Python标准库的模块,最大的好处就是就是不用写代码,就能使用其中的功能,当临时需要一些某些功能的时候,用这种方式会快捷,方便很多。1.命令行中使用模块命令行中使用python......
  • Python 潮流周刊#26:requests3 的现状
    你好,我是猫哥。这里每周分享优质的Python、AI及通用技术内容,大部分为英文。本周刊开源,欢迎投稿。另有电报频道作为副刊,补充发布更加丰富的资讯。......