一、系统相关
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、进程之间的通信方式?
- 管道:半双工通信,只在父子进程中使用,存放数据少
- 消息队列:解耦,存放数据量比管道多
- 信号量:计数器,主要作为同一进程不同线程的同步手段
- 信号:用于通知/接收进程某个事件发生
- 共享内存:最快的通信方式,共享内存由一个进程创建,多个进程可以访问,与信号量配合使用
- 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进程调度中有哪些常见的算法及策略?
- 先来先服务和短作业优先调度算法
- 高优先权优先调度算法
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的区别?
- HTTP需要申请证书
- HTTP是超文本传输协议,属于应用层传输,HTTPS是具有SSL加密安全性传输协议,可以对数据加密
- 完全不同的连接方式,HTTP端口是80,HTTPS是443
- 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哪些情况下索引会失效?
- 条件中有or
- like查询以%开头
- 多列索引的情况不是第一列
【待更新】
到此这篇Python后端开发面试题汇总_python后端开发找工作难吗的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!版权声明:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权、违法违规、事实不符,请将相关资料发送至xkadmin@xkablog.com进行投诉反馈,一经查实,立即处理!
转载请注明出处,原文链接:https://www.xkablog.com/hd-python/3987.html