python

1.协程的意义及缺点

协程,又称微线程,纤程;协程是一种用户态的轻量级线程,线程的切换会保存到CPU的栈里,协程拥有自己的寄存器上下文和栈。

优点:执行效率要比PY具有GIL锁的多线程更高,不需要损耗性能在线程的切换开销上

缺点:无法利用多核资源,协程的本质是个单线程

2.关于yield的理解

本身就是一种在单线程下可以保存任务运行状态的方法。yield可以保存状态,yield的状态保存与操作系统的保存线程状态很像,但是yield是代码级别控制的,更轻量级,还可以暂停函数的执行,也可以重新执行函数的特殊性,所以能模拟实现协程

3.线程池和进程池的意义

池的概念在于,预先创建好一定数量的线程,可以不需要多次重复创建,避免频繁的生产和释放线程资源导致的系统资源浪费,

实现进程池:from multiprocessing import Pool

实现线程池:from nultiprocessing.pool import ThreadPool

4.什么是C/S、B/S架构

C/S:客户机服务器模式  架构界面和操作可以很丰富(客户端操作界面可以随意排序,满足客户的需要),你们欢耍的英雄联盟就是典型的C/S架构、界面样式丰富,本地响应速度快,在硬件和网络环境不好的情况下用C/S能提高效率

B/S:客户端无需安装,有Web浏览器即可

B/S架构可以直接放在广域网上,通过一定的权限控制实现多客户访问的目的,交互性较强B/S架构无需升级多个客户端,升级服务器即可,可以随时更新版本,而无需用户重新下载什么的,就刷新个浏览器。

5.什么是hosts文件

hosts是一个没有扩展名的系统文件,能将一些常用的网址域名与其对应的IP建立一个相关联的数据库;hosts文件配置的映射是静态的,如果网络上的计算机更改了,请及时更新IP地址,否则将不能过问

6.TCP与UDP的区别

TCP协议:是一种面向链接的,可靠的,基于字节流的传输层通信协议

有序性:数据包具有数据包编号,可以保证接受及发送时数据包的正确次序

正确性:会使用checksum函数检查数据包是否损坏,发送接受时都会计算校验

可靠性:发送端有超时重发,并由确认机制识别错误和数据的丢失

可控性:具备滑动窗口协议与拥塞控制算法控制数据包的发送频率

UDP协议:用户数据协议,是一种无连接的传输层协议,相对于TCP传输不可靠

无连接:所以数据可能丢失或损坏

报文小:UDP是8字节的报文,而TCP是20字节,传输速度更快

吞吐量大:可以在一定程度上承受数据丢失(视频,直播),使用UDP效率更高,避免了连接建立和释放的性能浪费

7.什么是TCP黏包

TCP黏包就是指发送方发送的若干包数据到达接收方时黏成了一包从接受缓冲区来看,后一包数据的头黏着前一包数据的尾,比如发送文化时,发送的文件名与文件内容被合并在了一起,那么接受放就不太懂究竟哪个才是文件名 出现黏包的原因是多方面的,也可能是接收方,也可能是发送方

8.什么是socket

Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口,在设计模式中,Socket是一个门面模式,它把复杂的TCP/IP协议组隐在Socket接口后面,对用户来说,一组简单的接口接收全部

9.生产者消费者模式

生产者消费者模式就是通过一个容器来解决生产者和消费者的强耦合问题,生产者和消费者彼此之间不直接通信,而通过阻塞队列来进行通讯,所以生成者消费者生产完数据之后不用等待消费者处理,直接扔给阻塞队列,消费者不找生产者要数据,而是直接从阻塞队列里取,阻塞队列就相当于一个缓冲区,平衡了生产者消费者的处理能力,这个阻塞队列就是用来给生产者和消费者解耦的

10.Innodb存储引擎的特点

Innodb是事物型数据库的默认引擎,也是普遍首选引擎,支持事物i,行锁定,外键,具有提交、回滚和崩溃恢复能力,Innodb为处理巨大数据量的最大性能设计,所以Innodb也经常被用在众多需要性能的大型数据库站点上

11.如何实现Websocket

websocket主要通过这两种办法实现,一个是channles,一个是dwebsocket

dwebsocket非常简单,安装dwebsocket后在API下的视图装饰一下即可使用

channles由一个队列实现,支持消息过期,还支持异步扩展,要比dwebsocket更强大

12.什么是WSGI、uwsgi、uWSGI

WSGI:web服务器网关接口,是一种套协议,是为python语言定义的web服务器和web应用程序或框架之间的一种简单而通用的接口

uwsgi:是一种线路协议,用来服务器与uWsgi服务器与其他网络服务器的数据通信,比如部署uwsig服务器与Nginx服务器的通信链接

uWSGI:是一个web服务器,实现了WSGI协议,uWSGI协议,htto协议

13.如何实现IP限流

使用redis存储当前登录用户cookit,放入redis,过期时间极为访问间隔频次,中间件判断即可,redis中如果有这个cookie,那么就代表这次不能访问了,redis中没有,接口正常返回,这样就可以把用户操作限制在一定间隔数秒内

14.如何实现唯一登录呢

增加用户和session都关联表,每次登录后保存用户的sessionid到关联表中,下次登录时,先从关联表查找旧的sessionid,再根据sessionid从session表中删除旧的session,这样就可以使session实效,之前登录的用户状态保存就没有了

15.Redis有哪些适合的场景

热点数据的缓存,由于Redis访问速度过快,支持的数据类型丰富,所以Redis很适合用来存储热点数据,另外结合expire,我们可以设置过期时间然后再进行缓存更新操作,这个功能最为常见,我们几乎所有的项目都有所运用

16.什么是持久化

持久化是指将数据或对象在持续使用的过程中保存下来,以便在稍后的时间或重新启动后能够恢复和访问它们的过程。在计算机编程和计算机科学领域,持久化是将数据存储在非易失性存储介质(如硬盘、数据库等)上的过程。通常,这种存储是为了保证数据在计算机关闭或程序终止后仍然存在

17.说说文件缓冲区

当我们向文件写入数据时,操作系统通常不会立即将数据写入磁盘,而是先将数据暂存在文件缓冲区中。这样可以减少对磁盘的频繁访问,提高写入效率,因为磁盘写入操作相对较慢。当文件缓冲区被填满,或者出现显式的刷新操作(如调用缓冲区刷新函数),操作系统会将缓冲区中的数据一次性写入磁盘

18.csv文件是什么

CSV(Comma-Separated Values)是一种常见的文本文件格式,用于存储和交换以逗号分隔的数据。CSV文件中的每一行都表示一条记录,而每一条记录又由多个字段组成,字段之间使用逗号进行分隔。

CSV文件的优势在于其简单、通用和易于读写的特性。它可以被许多不同的应用程序和编程语言支持和处理,例如电子表格软件(如Microsoft Excel、Google Sheets)、数据库系统和编程语言中的文件输入/输出操作。在数据交换和数据导入导出的场景中,CSV文件经常被用作一种常见的格式选择

19.常见的压缩格式

ZIP:ZIP是一种广泛使用的压缩格式,它可以将多个文件或文件夹压缩成单个ZIP文件。ZIP文件可以节省存储空间,并且可以通过解压缩工具轻松解压缩。

GZIP:GZIP是一种常见的压缩格式,通常用于在Unix和Linux系统上进行文件压缩。GZIP压缩算法可以显著减小文件大小,并且在网络传输中常用于压缩HTML、CSS和JavaScript等文本文件。

TAR:TAR(Tape Archive)是一种未压缩的文件归档格式,通常与其他压缩算法(如GZIP)一起使用。TAR可以将多个文件打包成一个单独的文件,常用于在Unix和Linux系统上进行文件归档和备份。

RAR:RAR是一种流行的压缩格式,它在文件压缩方面的效果通常比ZIP更好。RAR支持多个压缩算法,并且可以创建密码保护的压缩文件。

7Z:7Z是一种高压缩比的开源压缩格式,它基于7-Zip压缩算法。7Z文件通常具有比其他压缩格式更小的文件大小,但解压缩速度可能会较慢。

BZIP2:BZIP2是一种数据压缩算法,用于创建BZIP2压缩格式。它通常用于压缩大型文件,提供更高的压缩比和较好的解压缩速度。

20.super方法是干啥的

调用父类的方法:当子类重写了父类的方法时,子类可以使用super关键字调用父类的同名方法。这样可以在子类中添加额外的功能,同时保留父类方法的行为

21.类中装饰器property是什么

在Python中,property是一种装饰器,它可以将类的方法转换为属性,实现属性的访问、设置和删除。通过使用property装饰器,我们可以定义特定的方法,使其在访问类的属性时进行自定义的操作。它允许我们在访问属性时执行一些逻辑或进行数据验证,而不需要直接访问属性的底层数据

22.什么是断言

断言(Assertion)是一种用于在代码中检查特定条件的机制。它用于在代码中指定一个条件表达式,如果该表达式的结果为真(True),则程序继续正常执行;如果表达式的结果为假(False),则会抛出一个异常。

23.什么是单列模式

单例模式(Singleton Pattern)是一种创建型设计模式,用于确保类只有一个实例,并提供一个全局的访问点来获取该实例

单例模式常用于以下情景:

资源共享:当多个对象需要共享同一资源(如数据库连接、文件、日志等)时,单例模式可以确保只有一个实例被创建和管理,避免资源的重复创建和浪费。

对象控制:当需要限制某个类的实例只能有一个时,单例模式可以控制对象的创建和数量,并确保全局只有一个实例存在。

24.啥是脏页

脏页(Dirty Page),也称为修改页(Modified Page),指的是在计算机操作系统中,位于内存中的页面(页表中的一页)已被修改但尚未被写回到磁盘或其他持久存储介质的状态。在操作系统中,为了提高磁盘IO的效率,常采用了页面换入换出的机制,即将内存中不常用的页面(页)置换到磁盘上,以便为新的页面腾出空间。当页面被修改后,如果不及时写回磁盘,就会导致内存中的数据和磁盘中的数据不一致,这个被修改但未写回的页面就被视为脏页

25.什么是哈希索引

哈希索引(Hash Index)是一种常用的索引数据结构,用于在数据库或其他数据结构中快速定位数据。它基于哈希函数(Hash Function)将值与索引位置关联起来。在哈希索引中,每个数据项都会通过哈希函数转换为一个索引值或所谓的哈希码(Hash Code)。这个哈希码通常会映射到一个固定大小的数组,称为哈希表(Hash Table)。哈希表的每个槽位存储着一个指向对应数据项的指针

26.事物的四大特性

原子性(Atomicity):原子性要求事务中的所有操作要么全部成功执行,要么全部回滚到初始状态,不存在部分生效的情况。当事务执行过程中发生故障或错误时,系统会撤销已经执行成功的操作,回滚到事务开始前的状态。

一致性(Consistency):一致性要求事务在执行前和执行后都必须保持数据库的一致性状态。在事务执行期间,数据库的完整性约束应得到保持,包括唯一性、外键关系等约束。如果事务执行完成后,数据库的状态不符合预期,则事务会被回滚。

隔离性(Isolation):隔离性要求在并发执行事务的情况下,每个事务对其他事务的操作都应该相互隔离,使得每个事务在执行过程中感觉不到其他事务的存在。隔离性通过特定的并发控制机制(如锁、并发隔离级别等)来实现,防止事务之间产生相互干扰,保证数据的正确性。

持久性(Durability):持久性要求一旦事务成功提交,所做的修改将永久保存在数据库中,不会被回滚。即使在发生系统故障或重启后,事务的提交结果也能够保持。为了保证持久性,数据库通常使用日志(Log)或其他持久化的机制,将事务的操作记录下来,以便于故障恢复。

27.事物的隔离级别有哪些

读未提交(Read Uncommitted):最低的隔离级别,允许事务读取其他事务尚未提交的数据。在这个级别下,事务可以看到其他事务的脏读(Dirty Read)。脏读指的是读取到了其他事务尚未提交的数据,如果那个事务回滚了,读取到的数据就是无效的。读未提交级别可能会导致数据不一致。

读已提交(Read Committed):允许事务读取其他事务已经提交的数据。在这个级别下,事务只能读取到已经提交的数据,避免了脏读的问题。然而,在并发环境下,可能会出现幻读(Phantom Read),即同一个事务在不同时间点读取同一结果集时,发现结果不一致。这是因为并发事务在读取时可能有新增或删除操作,导致结果集产生变化。

可重复读(Repeatable Read):保证在同一事务中多次读取同一结果集时,结果保持一致。在这个级别下,事务读取的数据将保持一致性,不会受到其他并发事务的修改所影响。为了实现可重复读,数据库系统使用了读锁(Shared Lock),阻止其他事务对数据进行修改。可重复读级别避免了脏读和幻读的问题。

序列化(Serializable):最高的隔离级别,保证并发事务的隔离性最大化。在这个级别下,事务串行执行,不会有并发冲突和并发问题。每个事务需要依次执行,避免了脏读、幻读和不可重复读的问题。虽然序列化级别解决了并发问题,但对系统性能和并发性产生较大的影响。

28.什么是三方组件

三方组件(Third-party component)指的是由第三方开发而不是系统提供者开发的软件模块或库。它们是为了满足特定需求而被第三方开发者创建的,并且通常被其他开发者用于加速应用程序或项目的开发。这些组件可以是独立的软件包、类库、插件、模块或其他形式的可重用代码块。

29.什么是标记清除

标记清除(Mark and Sweep)是一种用于垃圾回收的算法,用于自动回收不再被引用的内存资源。在编程语言中,当程序中的对象无法被访问到时,它们就成为了垃圾,而标记清除算法就是用来找到并回收这些垃圾。

标记清除算法的工作分为两个阶段:

标记阶段(Marking):从根节点开始,通过可达性分析,遍历整个对象图,将所有可以访问到的对象进行标记。根节点可以是全局变量、活动线程的栈、静态变量等。被标记的对象会被认为是存活的。

清除阶段(Sweeping):在标记阶段后,未被标记的对象即被认为是垃圾。在清除阶段,垃圾回收器会遍历整个堆内存,回收所有未被标记的对象所占用的内存空间,将其释放回可用内存池,以供其他对象使用

30.什么是元类

在Python中,元类(metaclass)是用于创建类的类。可以将元类视为类的模板,它定义了类的创建过程和行为,并可以根据需要定制类的属性和方法。在Python中,使用class关键字来定义一个类,而元类则可以控制这个类的创建。元类在类定义时会被调用,并接收类名、基类、属性和方法等信息作为参数,然后通过这些信息来创建类对象。就像类是创建对象的模板一样,元类是创建类的模板。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值