- 请简要概述 MVC 和 MTV
MVC 是一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组
织代码;M 模型,数据存取;V 视图,数据展示; C 控制器,业务逻辑处理。
MTV 本质上 MTV 与 MVC 模式没有什么区别,也是各组件之间为了保持松
耦合关系,只是定义上有些不同;M 模型,数据存取; T 模板,数据展示; V
视图,业务逻辑处理。 - Django 请求的生命周期
客户端发起请求 > nginx > uwsgi > 中间件 > url 路由 > view 视图 >
ORM 获取数据 > 模板渲染 > 服务器返回响应 > 中间件 > uwsgi > nginx >
客户端显示 - 简述 FBV,CBV
FBV: 用户发送 url 请求,Django 会依次遍历路由映射表中的所有记录,一
旦路由映射表其中的一条匹配成功,就执行视图函数中对应的函数名;
CBV: 用户发起 url 请求,Django 会通过路由映射表匹配成功后会自动去找
dispatch 方法,接着 Django 会通过 dispatch 反射的方式找到类中对应的方法并
执行类中的方法,执行完毕之后,会把客户端想要的数据返回给 dispatch 方法,
由 dispatch 方法把数据返回给客户端。 - Django 中间件的作用和应用场景
作用: 中间件是介于 request 与 response 处理之间的一道处理过程,能在全
局上改变 django 的输入与输出。 应用场景: 用户认证系统、CSRF 保护、IP 限
制、URL 访问限制、缓存… - Django 重定向是如何实现的?301 和 302 有什么区别
重定向: HttpResponseRedirect、redirect、reverse; 301 是永久重定
向,搜索引擎在抓取新的内容的同时也将旧的网址替换为了重定向之后的网址;
而 302 是临时重定向,搜索引擎会抓取新的内容而保留旧的地址; - Django 中 csrf 实现机制
在客户端页面上添加 csrf_token,服务器端进行验证,服务器端验证的工作通
过'django.middleware.csrf.CsrfViewMiddleware'这个中间层来完成,若验证失
败则 403 错误。在 django 当中防御 csrf 攻击的方式有两种:在表单当中附加
csrf_token、通过 request 请求中添加 X-CSRFToken 请求头。 - 什么是 wsgi,uwsgi,uWSGI
wsgi: 用在 python web 框架编写的应用程序与后端服务器之间的规范;
uwsgi: uWSGI 服务器实现的独有的协议; uWSGI: 一个 Web 服务器,它实现
了 WSGI 协议、uwsgi、http 等协议,用于接收前端服务器转发的动态请求并处
理后发给 web 应用程序; - Django 本身提供了 runserver,为什么不能用来部署?
Django 本身提供的 runserver 是属于开发服务器,这个开发服务器是没有经
过安全测试的,另外 runserver 起来的其实是 HTTPServer 就是 Python 自带的
simple_server,而标准 Python 只能是是单线程,无法并发。对于一个成熟的站
点提供服务,需要 Web 服务器 [静态数据] 和 App 服务器[动态数据],还需要
多线程并发处理能力。 - 什么是会话技术,cookie,session 的区别, token 呢
会话技术,其实也就是为了状态的保持,延长请求的生命周期,因为 http 协
议是无状态的,每次请求都是一次新的请求,不会保持之前的请求状态。Cookie
所有数据存储在客户端,支持数据过期,但是不能跨浏览器,不能跨域名,数据不
安全,session 所有数据存储在服务端,相对数据安全,支持过期设置,但是要依
赖于 cookie。
10.debug-toolbar 的作用
是一组可配置的面板集合,用来显示 Django Web 应用当前请求/响应的各种
调试信息,进行性能调优,与系统调试
11.orm 中 db first 和 code first 的含义
db first 是基于已存在的数据库,之后再创建实体类,数据库对象与实体类的
匹配关系等,也就是从一个数据库开始,然后生成实体框架和相应代码。
code first,根据需要,为你一个领域的对象创建类集合,而不是首先来设计
数据库,然后来根据数据库设计你的类,Code-First APis 将会基于你的类和配
置,为你创建数据库。
12.简述 ORM,ORM 的优缺点
ORM 是通过使用描述对象和数据库之间映射的元数据,将程序中的对象自动
持久化到关系数据库中
优点:
1 不需要再动手写 SQL 语句
2 对不同数据库管理系统的连接以及操作进行了抽象,程序员完全可以不
考虑使用的是什么数据库以及数据库的版本
缺点:
1 ORM 的缺点是会牺牲程序的执行效率和会固定思维模式
2 对于复杂的 SQL 有心无力
3 无法完全屏蔽数据库底层细节
4 关系-对象映射的实现是以性能为代价,方便了开发,牺牲了效率。
13.谈谈你对前后端的理解.
14.谈谈你对 RESTful 规范的认识
REST 是所有 Web 应用都应该遵守的架构设计指导原则。面向资源是 REST 最
明显的特征。将对资源的操作与 HTTP 方法在对应
15.Django REST Framework 框架中有哪些组件
视图、序列化、解析器、认证与权限、分页、throttle(访问频率)组件
16.Django 和 Flask 的区别
Flask
1 Flask 自由、灵活,可扩展性强,第三方库的选择面广,开发时可以结
合自己最喜欢用的轮子,也能结合最流行最强大的 Python 库
2 入门简单,即便没有多少 web 开发经验,也能很快做出网站
3 非常适用于小型网站
4 非常适用于开发 web 服务的 API, 开发大型网站无压力,但代码架构需
要自己设计,开发成本取决于开发者的能力和经验
5 各方面性能均等于或优于 Django
Django:
1 Django 的自带 ORM 非常优秀,综合评价略高于 SQLAlchemy
2 自带的模板引擎简单好用
3 ORM 也使 Django 与关系型数据库耦合度过高
4 非常适合企业级网站的开发:快速、靠谱、稳定
5 Django 成熟、稳定、完善,但相比于 Flask
6 Django 的整体生态相对封闭
7 Python web 框架的先驱,用户多,第三方库最丰富 Flask 自由、灵
活,可扩展性强,第三方库的选择面广,开发时可以结合自己最喜欢用的轮
子,也能结合最流行最强大的 Python 库
17.列举 Http 请求中常见的请求方式以及应用场景
GET: 向特定资源发出请求(获取数据)
POST: 创建资资源(提交数据)
DELETE: 删除资源
PUT: 向指定资源位置上上传其最新内容
18.列举一下 Http 中常见状态码
200: 请求已成功。
302:临时重定向,HTTP1.0 的状态码
400: Bad Request, 语法错误,服务器无法理解
403: Forbidden 权限不够
404:网络资源不存
405, Method Not Allowed 请求方式不被允许
500, Internal Server Error 服务器出错
502, Bad Gateway, 作为网关或代理工作的服务器尝试执行请求时,从上
游服务器接受到无效的响应
19.列举 Http 请求中常见的请求头
refer,location,user-agent,accept,accept-encoding,cookie,
cache-control
20.Flask 框架的核心依赖组件
jinja2,Werkzeug 两个核心组件,Jinja2 是一个现代的,设计师友好的
Python 模板语言,模仿 Django 的模板。使用可选的沙盒模板执行环境,它
具有快速,广泛使用和安全性,Werkzeug 不是一个框架,它是一个带有实
用程序的库,可以创建自己的框架或应用程序,因此非常灵活。
21.Flask 的默认 session 处理机制
Flask 的默认 session 利用了 Werkzeug 的 SecureCookie,把信息做序
列化(pickle)后编码(base64),放到 cookie 里了。过期时间是通过 cookie 的
过期时间实现的。为了防止 cookie 内容被篡改,session 会自动打上一个叫
session 的 hash 串,这个串是经过 session 内容、SECRET_KEY 计算出来
的,看得出,这种设计虽然不能保证 session 里的内容不泄露,但至少防止了
不被篡改。
22.flask 中的钩子函数有哪些?可以做什么
app.before_request:共享 session 的鉴权函数、请求黑白名单过滤、根
据 endpoint 进行请求 j 等。蓝图场景包含 api 的请求必填字段校验,是否
json 请求校验,请求的 token 校验等。
app.errorhandler:可以用 redis 进行错误请求计数,超过一定量则进行告
警。可以重定向到一个定制的错误代码页面等
app.context_processor:将一些常量按字典的格式返回,则可以在 jinja2
的模版中引用 场景:在 html 中,如果{'yao','jidan'}直接用{{jidan}}就会在页
面显示 yao
app.after_request 场景:一般用于格式化响应结果,包括响应请求头,响
应的格式等。
23.flask 中的四大内置对象,各有什么作用
request 请求对象,封装了客户端发送的 HTTP 请求的内容
session 用户会话,用来记住请求
g 变量 :充当者中间媒介的作用,我们可以通过它传递一些数据
current_app 代表当前的 flask 程序实例,使用时需要 flask 的程序上下文激活
24.什么是负载均衡?常见负载均衡算法
1、轮询法:将请求按顺序轮流地分配到后端服务器上,它均衡地对待后端的
每一台服务器,而不关心服务器实际的连接数和当前的系统负载。
2、随机法:通过系统的随机算法,根据后端服务器的列表大小值来随机选取
其中的一台服务器进行访问。由概率统计理论可以得知,随着客户端调用服务
端的次数增多
3、源地址散列:根据获取客户端的 IP 地址,通过哈希函数计算得到的一个
数值,用该数值对服务器列表的大小进行取模运算,得到的结果便是客服端要
访问服务器的序号
4、加权轮询法:给配置高、负载低的机器配置更高的权重,让其处理更多的
请;而配置低、负载高的机器,给其分配较低的权重,降低其系统负载
5 加权随机法:与加权轮询法一样,加权随机法也根据后端机器的配置,系统
的负载分配不同的权重
6、最小连接数法:根据后端服务器当前的连接情况,动态地选取其中当前积
压连接数最少的一台服务器来处理当前的请求,尽可能地提高后端服务的利用
效率,将负责合理地分流到每一台服务器
25.Celery 是什么?常用应用场景
Celery 是一个 基于 python 开发的分布式异步消息任务队列,通过它可以轻
松的实现任务的异步处理 使用场景:异步调用:那些用户不关心的但是又存在在
我们 API 里面的操作 我们就可以用异步调用的方式来优化(发送邮件 或者上传
头像)定时任务:定期去统计日志,数据备份,或者其他的统计任务
26.什么是 RPC,常用场景有哪些?
RPC:远程过程调用 让构建分布式计算(应用)更容易,在提供强大的远程
调用能力时不损失本地调用的语义简洁性 场景:不允许较大的延迟的应用 ERP 系
统回仓 2 在垂直应用中将核心和公共业务抽取出来,作为独立的服务,实现前后
台逻辑分离
思考下面问题: - Django, Flask 和 Tornado 的区别
- 你的后端工作职责有哪些, 如何编写项目 API 接口
- 在公司如何与前端工程师联调
- 后端如何反爬
网友评论