web面试题

1, Django的MVT模式(MVC:M相当于model,V相当于template,C相当于view)
M: Model, 模型 与MVC中的M相同,负责对数据的处理
V: View, 视图 与MVC中的C类似,负责处理用户请求,调用M和T,响应请求
T: Template, 模板 与MVC中的V类似,负责如何显示数据(产生html界面)

2, get/post
GET在浏览器回退时是无害的,而POST会再次提交请求。

GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留。

GET请求在URL中传送的参数是有长度限制的,而POST没有。

GET参数通过URL传递,POST放在Request body中。

3,csrf

跨站请求伪造: 主要用于在html中设计token访问令牌

4,FBV/CBV

FBV:基于函数视图

CBV:基于类视图

5, django请求周期

(1)用户输入网址,浏览器发起请求
(2)WSGI(服务器网关接口)创建socket服务端,接受请求
(3)中间件处理请求
(4)url路由,根据当前请求的url找到相应的视图函数
(5)进入view,进行业务处理,执行类或者函数,返回字符串
(6)再次通过中间件处理相应
(7)WSGI返回响应
(8)浏览器渲染

6,uwsgi

web服务器(应用服务器),用于连接Web服务器和Web应用框架

7,中间件

是一个轻量低级别的插件系统,在全局变量改变django的输入与输出,在settings中注册,,例如csrf跨站请求伪造

8,内置组件

Admin: 对model中对应的数据表进行增删改查提供的组件
model:负责操作数据库
form:1.生成HTML代码 2.数据有效性校验 3校验信息返回并展示
ModelForm: 即用于数据库操作,也可用于用户请求的验证

10, JWT

第一次认证通过用户名密码,服务端签发一个json格式的token。后续客户端的请求都携带这个token,服务端仅需要解析这个token,来判别客户端的身份和合法性

11,cookie和session
1.cookie:
cookie是保存在浏览器端的键值对,可以用来做用户认证
2.session:
将用户的会话信息保存在服务端,key值是随机产生的自符串,value值时session的内容
依赖于cookie将每个用户的随机字符串保存到用户浏览器上
Django中session默认保存在数据库中:django_session表flask,session默认将加密的数据写在用户的cookie中

12, 如何实现用户的登陆认证
1.cookie session
2.token 登陆成功后生成加密字符串
3.JWT:json wed token缩写 它将用户信息加密到token中,服务器不保存任何用户信息
服务器通过使用保存的密钥来验证token的正确性

13, restful风格
restful其实就是一套编写接口的协议,协议规定如何编写以及如何设置返回值、状态码等信息。

7,TCP/UDP/HTTP/HTTPS的区别?
TCP协议:是一种面向连接,可靠的,基于字节流的传输层协议,在正式通信前必须和对方建立连接,一个tcp必须经过三次对话才能建立连接,在经历4次对话结束(即三握四挥),传输可靠,速度慢,应用,传输大量数据,对可靠性要求高

UDP协议:用于www浏览的协议,特点是客户端发送的请求都需要服务器回送响应,在请求结束后会主动释放连接,从建立连接到关闭连接的过程成为”一次连接” 注: 1)在http1.0中客户端的每次请求都要求建立一次单独的连接,在处理完本次请求后就自动释放连接 2)在http1.1中,则可以在一次连接中处理多次请求,并可重叠进行,不需要等一个请求结束后再发下一个请求

HTTP/HTTPS协议 HTTP协议:超文本传输协议,是一个基于请求与响应,无状态的,应用层的协议,常基于TCP/IP协议传输数据,互联网上应用最为广泛的一种网络协议,所有的WWW文件都必须遵守这个标准。设计HTTP的初衷是为了提供一种 发布和接收HTML页面的方法。
HTTPS协议: HTTPS是一种通过计算机网络进行安全通信的传输协议,经由HTTP进行通信,利用SSL/TLS建立全信道,加密数据包。HTTPS使用的主要目的是提供对网站服务器的身份认证,同时保护交换数据的隐私与完整性。
HTTP 明文传输,数据都是未加密的,安全性较差,HTTPS(SSL+HTTP) 数据传输过程是加密的,安全性较好。

8, http1.0与2.0,3.0的区别
http1.0存在连接无法复用问题,导致每发送一次请求都需要进行三次握手的过程,重新建立连接,效率太低,存在堵塞问题 ,http1.0是下一次请求的发送必须等到上一个请求返回后才会进行,如果上一个请求没有返回,name后面的请求就会全部堵塞,最后就是安全问题,http1.0所传输的内容都是明文的,无法保证数据的安全性.
http2.0比较专注性能,它采用二进制格式传输数据,http2.0也采用了多路复用的技术,他可以只通过一个TCP连接传输所有的请求数据,还有就是采用了头部压缩技术,这也解决了http1.0的header里携带的内容过大的问题,在一定程度上减轻了传输的成本,不过它也存在一定的问题,如果在传输的过程中存在丢包的情况的话,那么整个tcp就得重新传输,后面资源就会被堵塞.
http3.0放弃了tcp协议,改用了QUIC协议,此协议基于传输层UDP协议,UDP协议无需三次连接四次挥手,所以传输速率更高,如果出现丢包,只需要重发丢掉的包就可以.

20, Django 、Flask、Tornado的对比
1.Django走的是大而全的方向,开发效率高。它的MTV框架,自带的ORM,admin后台管理,自带的sqlite数据库和开发测试用的服务器 给开发者提高了超高的开发效率
2.Flask是轻量级的框架,自由,灵活,可扩展性很强,核心基于Werkzeug WSGI工具和jinja2模板引擎
3.Tornado走的是少而精的方向,性能优越。它最出名的是异步非阻塞的设计方式
Tornado的两大核心模块:
1.iostraem:对非阻塞式的socket进行简单的封装
2.ioloop:对I/O多路复用的封装,它实现了一个单例

17,分别从前端,后端,数据库阐述web项目的性能优化
前端优化:
①,减少http请求,例如制作精灵图
②,html和CSS放在页面上部,javascript放在页面下部

后端优化:
①,缓存存储读写次数高,变化少的数据,
②,异步方式,如果有耗时操作,可采用异步,如celery
③,代码优化,避免循环和判断次数太多,如果多个if else判断,优先判断最有可能发生的情况

数据库优化:
①,如有条件,数据可以存放于redis,读取速度快,
②,建立索引,外键等

32,当后端任务执行完成后如何通知前端
1,前端定时发送请求询问后端有无消息,
2.django:
channels: 依赖于redis, twisted
dwebsocket:
3.在celery的tasks.py之中,当后端完成数据库读写后,往当前request所在的群组之中发送消息,随后channels会调用chat_message函数,通过self.send()方法将消息发送给前端

-------------本文结束感谢您的阅读-------------