Python面试题分享(九)

5. django 中间件的使用?

Django 在中间件中预置了六个方法,这六个方法的区别在于不同的阶段执行,对输入或输出进行干 预,方法如下 :

6. 谈一下你对 uWSGI nginx 的理解?

WSGI

它不是服务器、python模块、框架、API或者任何软件,只是一种描述web服务器 如何与web应用程序(如用Django、Flask框架写的程序)通信的规范、协议。

uWSGI

uWSGI是一个全功能的HTTP服务器,实现了WSGI协议、uwsgi协议、http协议等。它要做的就是把HTTP协议转化成语言支持的网络协议。比如把HTTP协议转化成WSGI协议,让Python可以直接使用。

uwsgi

WSGI一样,是uWSGI服务器的独占通信协议,用于定义传输信息的类型。每一个uwsgi packet4byte为传输信息类型的描述,与WSGI协议是两种东西

Nginx

Nginx是一个Web服务器其中的HTTP服务器功能和uWSGI功能很类似,但是Nginx还可以用作更多用途,比如最常用的反向代理功能。

nginx的作用:

1. 反向代理,可以拦截一些web攻击,保护后端的web服务器

2. 负载均衡,根据轮询算法,分配请求到多节点web服务器

3. 缓存静态资源,加快访问速度,释放web服务器的内存占用,专项专用

uWSGI的适用:

1. 单节点服务器的简易部署

2. 轻量级,好部署

7. 说说 nginx uWISG 服务器之间如何配合工作的?

1. 浏览器发起 http 请求到 nginx 服务器2

2. Nginx 根据接收到请求包,进行 url 分析,判断访问的 资源类型,

如果是静态资源,直接读取静态资源返回给浏览器,

如果请求的是动态资源就转交给 uwsgi 服务器,

3. uwsgi 服务器根据自身的 uwsgi WSGI 协议,找到对应的 Django 框架,Django 框架下的 应用进行逻辑处理后,将返回值发送到 uwsgi 服务器

4. 然后 uwsgi 服务器再返回给 nginx

5. 最后 nginx 将返回值返回给浏览器进行渲染显示给用户。

8. django 开发中数据库做过什么优化?

1. 使用标准的数据库优化技术:

比如给字段加索引,通过使用 django.db.models.Field.db_index 来给一个Django模型类的字段加索引,设置这个属性字段的 Field.db_index=True

注:djangomodel中的fkunique = True的字段将自动创建索引。

2. 理解DjangoQuerySet的工作机制对数据库访问优化至关重要:

QuerySet是懒加载的,它只有在需要的时候才会被执行,并且会将执行的结果保存在内存中。

3. 理解DjangoQuerySet的缓存机制:

QuerySet对调用方法是不执行缓存的。比如下面的两端代码,其中一个会被缓存,另一个不会:

4. 使用模板语言中的with标签:

在视图模板中,针对QuerySet对象使用with标签,可以让数据被缓存起来使用。

5. 使用iterator()方法:

对于缓存的QuerySet使用iterator()方法。

6. 将查询计算操作放在数据库中完成,不要在Python代码中完成。

 

1. 使用fifilter,exclude完成查询过滤;

2. F()查询表达式;

3. 使用聚合函数来完成数据库聚合操作。

7. 使用QuerySet.extra()明确的指出要查询的字段。

8. 对于复杂的数据库查询操作,使用原生SQL实现。

9. 尽量一次查询出所有需要的信息。

10. 只查询需要的数据:

1. 某些情况下,只使用 QuerySet.values() values_list()方法,查询出符合条件的结果集而不是完整的对象结果集;

2. 某些情况下,只使用 QuerySet.defer() only()过滤数据。

11. 如果只是查询集合的数量,使用QuerySet.count()函数,而不是len(QuerySet)

12. 如果想知道某个记录是否包含在某个结果集中,使用 QuerySet.exists()函数;

13. 避免过多的使用 count() exists() 函数;

14. 对于批量更新和删除操作使用 QuerySet.update() QuerySet.delete()

9. 验证码过期时间怎么设置?

将验证码保存到数据库或 session,设置过期时间为 1 分钟,然后页面设置一个倒计时(一般是前端 js 实现 这个计时)的展示,一分钟过后再次点击获取新的信息。

10. Python 中三大框架各自的应用场景?

1. Django

Django是一个开放源代码的Web应用框架,由Python写成。采用了MVT的框架模式,即模型M,模板T和视图V。主要是用来搞快速开发的,他的亮点就是快速开发,节约成本

2. Flask

轻量级,主要是用来写接口的一个框架,实现前后端分离,提升开发效率,Flask 本身相当于一 个内核,其他几乎所有的功能都要用到扩展(邮件扩展 Flask-Mail,用户认证 Flask-Login),都需要 用第三方的扩展来实现。比如可以用 Flask-extension 加入 ORM、窗体验证工具,文件上传、身份验 证等。Flask 没有默认使用的数据库,你可以选择 MySQL,也可以用 NoSQL

3. Tornado

Tornado是一种 Web 服务器软件的开源版本。Tornado 和现在的主流 Web 服务器框架(包括大多数Python 的框架)有着明显的区别:它是非阻塞式服务器,而且速度相当快。得利于其 非阻塞的方式和对epoll的运用,Tornado 每秒可以处理数以千计的连接,因此 Tornado 是实时 Web 服务的一个 理想框架。

11django 如何提升性能(高并发)?

> 对一个后端开发程序员来说,提升性能指标主要有两个一个是并发数,另一个是响应时间网站性能 的优化一般包括 web 前端性能优化,应用服务器性能优化,存储服务器优化。

对前端的优化主要有:

1. 减少 http 请求,减少数据库的访问量,比如使用雪碧图。

2. 使用浏览器缓存,将一些常用的 cssjslogo 图标,这些静态资源缓存到本地浏览器,通过设 置 http 头中的 cache-control expires 的属性,可设定浏览器缓存,缓存时间可以自定义。

3. htmlcssjavascript 文件进行压缩,减少网络的通信量。

对我个人而言,我做的优化主要是以下三个方面:

1. 合理的使用缓存技术,对一些常用到的动态数据,比如首页做一个缓存,或者某些常用的数据做 个缓存,设置一定得过期时间,这样减少了对数据库的压力,提升网站性能。

2. 使用 celery 消息队列,将耗时的操作扔到队列里,让 worker 去监听队列里的任务,实现异步操 作,比如发邮件,发短信。

3. 就是代码上的一些优化,补充:nginx 部署项目也是项目优化,可以配置合适的配置参数,提升 效率,增加并发量。

4. 如果太多考虑安全因素,服务器磁盘用固态硬盘读写,远远大于机械硬盘,这个技术现在没有普 及,主要是固态硬盘技术上还不是完全成熟, 相信以后会大量普及。

5. 另外还可以搭建服务器集群,将并发访问请求,分散到多台服务器上处理。

6. 最后就是运维工作人员的一些性能优化技术了

12、什么是 restful api,谈谈你的理解?

REST:Representational State Transfer 的缩写,翻译:具象状态传输。一般解释为表现层 状态转换

REST 是设计风格而不是标准。是指客户端和服务器的交互形式。我们需要关注的重点是如何设计 REST 风格的网络接口。

REST 的特点:

1. 具象的。一般指表现层,要表现的对象就是资源。比如,客户端访问服务器,获取的数据就是资 源。比如文字、图片、音视频等。

2. 表现:资源的表现形式。txt 格式、html 格式、json 格式、jpg 格式等。浏览器通过 URL 确定资 源的位置,但是需要在 HTTP 请求头中,用 Accept Content-Type 字段指定,这两个字段是对资源 表现的描述。

3. 状态转换:客户端和服务器交互的过程。在这个过程中,一定会有数据和状态的转化,这种转化 叫做状态转换。其中,GET 表示获取资源,POST 表示新建资源,PUT 表示更新资源,DELETE 表示删 除资源。HTTP 协议中最常用的就是这四种操作方式。

RESTful 架构:

1. 每个 URL 代表一种资源;

2. 客户端和服务器之间,传递这种资源的某种表现层;

3. 客户端通过四个 http 动词,对服务器资源进行操作,实现表现层状态转换。

13. 如何设计符合 RESTful 风格的 API

1. 域名:

api 部署在专用域名下: http://api.example.com

或者将 api 放在主域名下: http://www.example.com/api/

2. 版本:

API 的版本号放在 url 中。

http://www.example.com/app/1.0/info

http://www.example.com/app/1.2/info

3. 路径:

路径表示 API 的具体网址。每个网址代表一种资源。 资源作为网址,网址中不能有动词只能有 名词,一般名

词要与数据库的表名对应。而且名词要使用复数。

错误示例:

http://www.example.com/getGoods

http://www.example.com/listOrders

正确示例:

获取单个商品 `http://www.example.com/app/goods/1`

获取所有商品 `http://www.example.com/app/goods`

4. 使用标准的 HTTP 方法:

对于资源的具体操作类型,由 HTTP 动词表示。 常用的 HTTP 动词有四个。

GET SELECT :从服务器获取资源。

POST CREATE :在服务器新建资源。

PUT UPDATE :在服务器更新资源。

DELETE DELETE :从服务器删除资源。

示例:

获取指定商品的信息 GET http://www.example.com/goods/ID

新建商品的信息 POST http://www.example.com/goods

更新指定商品的信息 PUT http://www.example.com/goods/ID

删除指定商品的信息 DELETE http://www.example.com/goods/ID

5. 过滤信息:

如果资源数据较多,服务器不能将所有数据一次全部返回给客户端。API 应该提供参数,过滤返 回结果。 实 例:

指定返回数据的数量 http://www.example.com/goods?limit=10

指定返回数据的开始位置 http://www.example.com/goods?offset=10

指定第几页,以及每页数据的数量 http://www.example.com/goods?page=2&per_page=20

6. 状态码:

服务器向用户返回的状态码和提示信息,常用的有:

200 OK :服务器成功返回用户请求的数据

201 CREATED :用户新建或修改数据成功。

202 Accepted:表示请求已进入后台排队。

400 INVALID REQUEST :用户发出的请求有错误。

401 Unauthorized :用户没有权限。

403 Forbidden :访问被禁止。

404 NOT FOUND :请求针对的是不存在的记录。

406 Not Acceptable :用户请求的的格式不正确。

500 INTERNAL SERVER ERROR :服务器发生错误。

7. 错误信息:

一般来说,服务器返回的错误信息,以键值对的形式返回 { error: 'Invalid API KEY' }

8. 响应结果: data

 

针对不同结果,服务器向客户端返回的结果应符合以下规范

返回商品列表 GET http://www.example.com/goods

返回单个商品 GET http://www.example.com/goods/cup

返回新生成的商品 POST http://www.example.com/goods

返回一个空文档 DELETE http://www.example.com/goods

9. 使用链接关联相关的资源:

在返回响应结果时提供链接其他 API 的方法,使客户端很方便的获取相关联的信息。

10. 其他:

服务器返回的数据格式,应该尽量使用 JSON,避免使用 XML

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值