面试题
- Flask框架依赖那些组件?
- Route(路由)
- template(模板)
- models(模型)
- blieprint(蓝图)
- Jianja2(模板引擎)
- Django的常用中间件
- AuthenticationMiddleware 用户身份认证
- SessionMiddleward 提供对会话的支持,允许你在应用程序中存储和访问会话数据
- CSRFviewmiddleward:这个中间件提供CSRF保护。在请求和响应处理流程中验证CSRF令牌
- MessageMiddleware这个中间件提供了像用户显示消息的功能,比如成功消息,错误消息
- 简述同源策略
- 协议一样
- 域名一样
- 端口一样
- 只要以上三种不同,则不同源
- 分别从前端后端数据库阐述web项目性能优化
- 前端优化
- 减少http请求
- html和css放在页面商密,js放在页面下面,因为js加载要比html和css加载的慢,所以要优先加载html和css,以防页面展示不全性能差影响用户体验
- 后端优化
- 缓存存储读写次数高变化少的数据,比如网站的首页信息,商品信息等。应用程序读取数据时,一般先从缓存中读取,如果读取不到或者数据已失效,在访问磁盘数据库,并将数据再次写入缓存
- 异步方式,如果有耗时操作,可以采用异步,比如celery
- 代码优化,避免循环和判断次数太多,如果多个ifelse判断,优先判断最有可能的情况
- 数据库优化:
- 如果有条件,数据可以存放redis,读取速度块
- 简历索引,外键等
- 前端优化
- 简述django的ORM
- 实现了数据模型与数据库的解耦,通过简单的配置就可以轻松更换数据库,而不需要修改代码只需要面面相对象编程,ORM操作本质上会根据对接的数据引擎,翻译成对应的sql语句,所有使用django开发的项目无需关心底层使用的是什么数据库,如果数据库迁移,只需要更换django的数据库引擎就可以
- 简述cookie和session的区别
- Cooke
- 实现方式:cookie是服务器发送给客户端浏览器的小型文本文件,通常存储在客户端的浏览器中。每当浏览器像服务器发送请求的时候,他都会将相应的cookie一同发送给浏览器
- 存储位置:cookie存储在客户端,通常以键值对的形式存储在浏览器的cookie存储区域当中
- 用途:主要用于在客户端保持状态信息,比如用户的登录状态,网站首选项等,cookie可以设置国旗时间,在过期时间之前一直保存在客户端,即使关闭了浏览器也能保存装状态
- 安全性:由于存储在客户端,cookie荣毅收到跨站脚本xss和跨站请求CSRF的影响,为了提高安全性,额可以使用httponly和secure等属性来限制cookie的访问性
- session
- 实现方式: session是在服务器端维护的关于用户会话的信息。当用户首次访问网站时,服务器会为其分配一个唯一会话的标识符session id,并将该标识符存储在服务器上。客户端通常会在cooke中存储该会话的标识符,以便在后续请求中发送给服务器
- 存储位置:session数据存储在服务器端的内存,数据库或者其他持久化存储中
- 用途:用于存储用户的临时会话的数据,比如用户的状态,购物车的内容等,session数据在用户关闭浏览器或者一定时间内不活动是会过期并清除
- 安全性,由于存储在服务器端,session相对于cookie更安全,不容易受到客户端的攻击,但是,在共享sessionid的情况下任然可能存在会话劫持的风险
- Cooke
- 请简述TCP/UDP的区别
- tcp和udp是两种网络传输协议,他们在数据传输的方式,特点和适用场景上有很大的区别
- 连接性:
- TCP是以中面向连接的协议,他在数据传输前需要先建立连接,然后进行数据传输,最后在选择释放连接
- UDP是一种无连接的协议,每个数据包都是独立的,发送端发送数据后,不需要等待确认,也不需要维护连接状态
- 可靠性:
- TCP提高可靠的数据传输,它使用序列表,确认和重传机制来确保数据的可靠性和顺序型,确保数据不丢失不重复按序到达。
- UDP不保证数据的可好行,他只是简单的将数据从一段发送到另外一端,不进行任何或者重传操作,因此可能会导致数据丢失,重复或者无序到达
- 数据量:
- TCP适用于大量数据的传输,他对数据包的大小没有限制,并在传输过程中会进行拥塞控制和流量控制,以确保网络的稳定性和公平性
- UDP是适用于少量数据的传输,他对数据包的大小由一定的限制,通常建议在网络良好的情况下使用,不适合大数据的传输
- 延迟和效率
- TCP在数据传输前需要建立连接,这会增加一定的延迟,但由于提供了了可靠性保证,适用于对传输延迟要求比较高的场景
- UDP在无连接的情况下传输数据,不需要建立连接,因此具有较低的延迟,但由于不提供可靠性的保证,适用于对传输效率要求高, 可以容忍数据丢失的场景
- 使用场景:
- TCP适用于需要可靠传输 ,数据顺序到达,传输延迟相对较低的场景,比如网页浏览,文件下载,电子邮件等
- UDP适用于对传输延迟和效率要求较高,可以容忍数据丢失的场景,比如音频流媒体,在线游戏,等
- 对应的协议
- FTP,telnet,smtp,pop3,http
- DNS,SNMP,TFTP
- 说一下tcp的三次握手四次挥手
- 三次握手
- 客户端发送请求:客户端发送一个syn包给服务器,并进入syn_sent状态
- 服务器响应:服务器接收到syn后,发送一个ack给客户端作为应答,同时也发送一个syn包给客户端,进入syn_recv状态
- 客户端确认:客户端收到服务器的ack和syn包之后,发送一个ack给服务器确定,确认建立连接,双方进入established状态
- 四次挥手
- 客户端发送关闭请求:客户端发送一个fin包给服务器,请求关闭连接,进入fin_wait状态
- 服务端确认:服务器收到fin包之后,发送一个ack包作为应答,进入close_wait状态
- 服务端发送关闭请求:服务端发送一个fin包给客户端,请求关闭连接,进入last_ack状态
- 客户端确认关闭客户端收到服务的fin包之后,发送一个ack包给服务器,确认关闭连接,进入time_wait状态,当客户端的time_wait时间结束后,关闭连接
- 三次握手
- 在浏览器中输入url地址到显示主页的过程
- 解析URL,当你在浏览器的地址栏中输入url时候,浏览器会首先对该url进行解析,分解出协议,主机口,域名端口号,路径等信息
- DNS解析:浏览器需要知道服务器的IP地址才能像其发送请求,因此会进行DNS解析,将主机名解析为对应的IP地址。如果浏览器缓存中由对应的ip地址,则直接使用缓存;否则,像本地DNS服务器发送请求,并获取IP地址
- 建立TCP连接:浏览器使用http或者https协议像服务器发送连接请求。如果URL中指定了端口号,则直接使用该端口号;否则http默认使用80端口,https默认使用443端口,此时就会经理TCP的三次握手的过程,确立客户端和服务端之间的连接
- 发送http请求:当TCP建立成功之后,浏览器像服务器发送http请求,请求包括请求方法,请求头等,此时服务器会根据请求的内容进行处理,并返回相应的结果
- 服务器处理请求:服务器拿到http请求之后会根据请求内容执行相应的处理逻辑,例如查询数据库读取文件等,并声称http响应
- 返回http响应:服务器处理玩请求之后,将生成的http响应发送给客户端。http响应包括状态码等
- 接受响应并渲染页面:浏览器收到服务器返回的http响应后,会解析响应内容并渲染页面。如果响应的是html文档,则浏览器会根据html内容构建dom树,并加载其中的样式表,js脚本等资源
- 显示页面 ,当DOM树构架完成之后,浏览器会根据css央视都i页面进行排版,并将排版好的页面内容显示在浏览器窗口中。此时,页面中的图像,文本等都会显示出来
- 连接关闭,等待页面显示完成之后,浏览器和服务器之间的TCP连接可能会被关闭,释放资源并结束通信
- 对flask蓝图的理解
- . FLask蓝图是flask框架中的以中组织代码的方式,用于将应用程序拆分为更小的可重用的模块。他提供了以中将视图,模板,静态文件等相关代码组织在一起的方式,使得大型应用程序更易于管理和维护
- 蓝图的主要优势在于他可以将应用拆分为多个模块,并允许每个模块具有自己的路由,视图函数,模板灯光等,从而实现了代码的模块化和重用型,通过蓝图我们可以将不同功能的代码分开,使得代码更具可读性可维护性和可扩展性
- Flask 和 Django 路由映射的区别?
- 在django中,路由时浏览器访问服务器时,先访问项目中的url在由项目中的url找到应用中的url,这些url时放在一个列表里的,遵从从前往后批评日的规则。在flask中,路由时通过装饰器给每个试图函数提供的,而且根据请求方式的不同可以一个url用作不同的作用