python 部分面试题整理(4)

性能问题?

数据库io问题 :多线程,缓存
网络问题:压缩传输,服务器来解压,减少传输压力。

数据库已经最优,每次操作50万条数据,怎么提高API接口的速度?

第一种可以使用负载均衡,10台,就每台5W条数据
第二种每台机器。可以把添加任务队列。利用多线程解决IO密集型任务的特点。
第三种利用异步协程方式提高调度行为

Django REST framework优点?

1.提供了定义序列化器Serializer的方法,可以快速根据Django ORM 或者其他库自动序列化/反序列化
2.提供了丰富的类视图\MIXIN扩展类,简化视图的编写
3.丰富的定制层级:函数视图\类视图\试图结合到自动生成API,满足各种需要
4.多种身份认证和权限认证方式的支持
5.内置了限流系统
6.直观的API web界面
7.可扩展性 , 插件丰富

+和join的区别:

+ 每次进行相加都会开辟新的空间,回收旧的空间
join 一次性开辟好空间,一次性添加进去,一次性回收

__enter__,__exit__区别:

__enter__():在使用with语句时调用,会话管理器在代码块开始前调用,返回值与as后的参数绑定

__exit__():会话管理器在代码块执行完成好后调用,在with语句完成时,对象销毁之前调用

TCP协议怎么工作的?

三次握手过程:
1、首先客户端向服务端发送一个带有 SYN 标志,以及随机生成的序号 100(0 字节)的报文
2、服务端收到报文后返回一个报文(SYN200(0 字节),ACk1001(字节+1))给客户端
3、客户端再次发送带有 ACk 标志 201(字节+)序号的报文给服务端至此三次握手过程结束,客户端开始向服务端发送数据。

四次挥手过程,客户端和服务端都可以先开始断开连接
1、客户端发送带有 fin 标识的报文给服务端,请求通信关闭
2、服务端收到信息后,回复 ACK 答应关闭客户端通信(连接)请求
3、服务端发送带有 fin 标识的报文给客户端,也请求关闭通信
4、客户端回应 ack 给服务端,答应关闭服务端的通信(连接)请求

读取大文件的最后几行:

步骤:open打开日志文件。
移动文件读取指针到文件末尾。
从后往前移动指针直到合适的位置。
读取文件,提取指定行的数据
优点:时间相对固定,适合处理大文件

logFile = open('logFilePath.log', 'r')
logFile.seek(0,2)
logFile.seek(-1000000,2)
rowCount = 0
for row in logFile.readlines()[1:]:
     pass
		 
seek():移动文件读取指针到指定位置
tell():返回文件读取指针的位置

seek()的三种模式:

(1)f.seek(p,0)  移动当文件第p个字节处,绝对位置
(2)f.seek(p,1)  移动到相对于当前位置之后的p个字节
(3)f.seek(p,2)  移动到相对文章尾之后的p个字节

Django 查询表的几种方式

  • 通过filter过滤或者 all获取所有的值
models.User.objects.filter(id=1,name='root')
  • 通过values来实现。通过这种方式获取的QuerySet,里面的每一个元素都是一个字典
models.Business.objects.all().values('id','caption')
  • 通过value_list来实现,这种方式获取的QuerySet,里面的每一个元素都是一个元祖
models.Business.objects.all().values_list('id','caption')

正则中 match和search的区别

match()函数只检测RE是不是在string的开始位置匹配,search()会扫描整个string查找匹配;
也就是说match()只有在0位置匹配成功的话才有返回,如果不是开始位置匹配成功的话,match()就返回none。

search()会扫描整个字符串并返回第一个成功的匹配:

猜你喜欢

转载自blog.csdn.net/weixin_43958804/article/details/88305418
今日推荐