Python后端开发面试题汇总

一、系统相关

1、并发编程?

  • 为什么需要并发编程?

提高程序的运行速度

  • Python对并发编程的支持?

多进程(multiprocessing):利用多核cpu的能力并行执行任务

多线程(threading):利用cpu和io同时执行的原理,让cpu不会干巴巴的等待io完成

异步io(asyncio):在单线程利用cpu和io同时执行的原理实现函数异步执行

  • 多进程、多线程、多协程的应用场景?

多进程:cpu密集型计算

优点:利用多核cpu并行计算

缺点:占用资源最多,可启动数目少

多线程:io密集型计算,同时执行的任务不多

优点:相比进程更轻量级,占用资源少

缺点:相比进程,多线程只能并发执行,不能利用多cpu

           相比协程,启动数目有限,占用内存资源

多协程:io密集型,需要超多任务执行

优点:内存开销最少,启动数量最多

缺点:支持的库有限(支持aiohttp,不支持requests),代码实现复杂

2、GIL(全局解释锁)?

只允许同一时间一个线程执行,保证数据的完整性

3、线程安全问题?

使用Lock锁

4、进程切换开销为什么比线程大?

进程切换时需要将当前执行的程序保存到寄存器,包括cpu的切换

5、进程之间的通信方式?

  1. 管道:半双工通信,只在父子进程中使用,存放数据少
  2. 消息队列:解耦,存放数据量比管道多
  3. 信号量:计数器,主要作为同一进程不同线程的同步手段
  4. 信号:用于通知/接收进程某个事件发生
  5. 共享内存:最快的通信方式,共享内存由一个进程创建,多个进程可以访问,与信号量配合使用
  6. socket:可用于不同机器的进程通信

6、简述socket中的select、poll和epoll的使用场景以及区别?

都是io多路复用的

  • select需要不断轮询数据,时间复杂度低,文件描述符有限制(1024),常见的服务器软件Apache用的就是select
  • select和poll的区别在于文件描述符,poll无限制
  • epoll只会注册一个监听事件,当数据有变化时才通知,Nginx底层用的epoll,能处理高并发

在连接数少的情况下,select和poll的性能可能比epoll好,毕竟epoll的通知机制需要很多函数回调

7、epoll中水平触发和边缘触发的区别?

当监听事件的文件描述符有发生可读写事件,但是这一次没有把数据读取完,水平触发下次调用时还会通知你,如果一直没有操作完,它会一直通知直到完成操作,而边缘触发只会通知一次 

8、Linux进程调度中有哪些常见的算法及策略?

  1. 先来先服务和短作业优先调度算法
  2. 高优先权优先调度算法

9、进程的状态有哪几种?

  • 就绪状态:可以运行,但其他进程正在运行而暂时停止
  • 阻塞状态:不可运行,除非某种外部事件的发送
  • 运行状态:该进程实际占用cpu

10、简述LRU算法及实现方式?

一种缓存淘汰机制,从内存中找到最久未使用的数据置换出来,衡量指标是使用时间和次数,合理性在于优先筛选最近使用最多的数据

利用双向链表实现

11、线程间的通信方式?

共享变量、共享内存、共享数据库、消息队列

12、简述同步与异步,阻塞与非阻塞的区别?

  • 同步:执行一个操作后等待结果,收到结果才继续执行
  • 异步:执行一个操作后可以去执行其他操作,然后等待通知再回来执行
  • 阻塞:进程给cpu传达一个任务后,一直等待cpu处理完,再执行后面操作
  • 非阻塞:进程给cpu传达一个任务后,继续处理后续操作,隔一段时间在询问其操作是否完成,也叫轮询

同步异步关注的“方式”,阻塞非阻塞关注的“结果”

13、简述Linux的io模型?

同步io、异步io、阻塞io、非阻塞io、多路复用io

二、网络协议相关

1、简述tcp的三次握手和四次挥手的流程及为什么需要?

三次握手:建立连接

四次挥手:断开连接,释放内存

2、RestFul与RPC的区别及RestFul的优点?

RPC:远程过程调用(在本地调的函数可能存在远端)

RPC是面向过程,RestFul是面向资源,并且使用了http动词

RestFul风格的URL在表述的精简性和可读性更好

3、HTTP和HTTPS的区别?

  1. HTTP需要申请证书
  2. HTTP是超文本传输协议,属于应用层传输,HTTPS是具有SSL加密安全性传输协议,可以对数据加密
  3. 完全不同的连接方式,HTTP端口是80,HTTPS是443
  4. HTTP连接是无状态的,HTTPS是由SSL+HTTP构建,可进行加密传输,身份认证的网络协议相对于说更安全

4、一次HTTP请求过程发生了什么?

输入网址,回车—>域名解析—>发起tcp的三次握手—>建立连接后发起HTTP请求—>服务器响应HTTP请求—>浏览器得到HTML代码—>浏览器解析HTML代码并请求HTML中的资源—>浏览器对页面进行渲染呈现给用户

5、tcp和udp在网络协议中的哪一层,有什么区别?

传输层

tcp面向连接,udp无连接

6、tcp中常见的拥塞算法?

慢开始

发送一段时间后调整cwnd的值,翻倍,此时是网络拥塞

7、tcp怎么保证可靠性?

应答机制、超时重传、连接管理、序列号

8、HTTP1.0、1.1、2.0的主要区别?

HTTP1.0:无状态、无连接

HTTP1.1:支持长连接,缓存处理,断点传输

HTTP2.0:二进制分帧,多路复用,头部压缩,服务器推送

三、数据库相关

1、数据库的事务隔离级别有哪些?及其优缺点?

Read uncommitted(读,未提交):脏读,不可重复读,幻读

Read committed(读,提交):不可重复读,幻读

Repeatable read(可重复读):幻读     MySQL默认

Serializable(序列化)

脏读:事务B查看了事务A未提交的事务

不可重复读:第一次和第二次看到的数据不一致

2、悲观锁和乐观锁?

读取频繁使用乐观锁,写入频繁使用悲观锁

3、MySQL哪些情况下索引会失效?

  1. 条件中有or
  2. like查询以%开头
  3. 多列索引的情况不是第一列

【待更新】

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值