python 常见面试题总结

请简述概要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的区别?

会话技术,其实也就是为了状态的保持,延长请求的生命周期,因为http协议是无状态的,每次请求都是一次新的请求,不会保持之前的请求状态。Cookie所有数据存储在客户端,session所有数据存储在服务端。

orm中db first和code first的含义?

db first是基于已存在的数据库,之后再创建实体类,数据库对象与实体类的匹配关系等,也就是从一个数据库开始,然后生成实体框架和相应代码。 code first,根据需要,为你一个领域的对象创建类集合,而不是首先来设计数据库,然后来根据数据库设计你的类,Code-First APis将会基于你的类和配置,为你创建数据库。

简述ORM ORM的优缺点?

ORM是通过使用描述对象和数据库之间映射的元数据,将程序中的对象自动持久化到关系数据库中 优点:1不需要再动手写SQL语句 2对不同数据库管理系统的连接以及操作进行了抽象,程序员完全可以不考虑使用的是什么数据库以及数据库的版本 缺点:1 ORM的缺点是会牺牲程序的执行效率和会固定思维模式 2、对于复杂的SQL有心无力 3、无法完全屏蔽数据库底层细节 4关系-对象映射的实现是以性能为代价,方便了开发,牺牲了效率。

谈谈你对RESTful规范的认识?

REST是所有Web应用都应该遵守的架构设计指导原则。 面向资源是REST最明显的特征。将对资源的操作与HTTP方法在对应。

Django REST Framework框架中有哪些组件?

视图、序列化、解析器、认证与权限、分页、hrottle(访问频率)组件

Django和Flask的区别?

1 、Flask自由、灵活,可扩展性强,第三方库的选择面广,开发时可以结合自己最喜欢用的轮子,也能结合最流行最强大的Python库
2、入门简单,即便没有多少web开发经验,也能很快做出网站
3 、非常适用于小型网站
4、非常适用于开发web服务的API开发大型网站无压力,但代码架构需要自己设计,开发成本取决于开发者的能力和经验 4、各方面性能均等于或优于Django

Django:1 、Django的自带ORM非常优秀,综合评价略高于SQLAlchemy 2、自带的模板引擎简单好用 3、ORM也使Django与关系型数据库耦合度过高 4、非常适合企业级网站的开发:快速、靠谱、稳定 5、Django成熟、稳定、完善,相比于Flask 5、Django的整体生态相对封闭
Flask:Python web框架的先驱,用户多,第三方库最丰富Flask自由、灵活,可扩展性强,第三方库的选择面广,开发时可以结合自己最喜欢用的轮子,也能结合最流行最强大的Python库

列举Http请求中常见的请求方式及应用场景?

GET: 向特定资源发出请求(获取数据) POST: 创建资资源(提交数据) DELETE: 删除资源 PUT: 向指定资源位置上上传其最新内容

请列举Http中常见的状态码?

200: 请求已成功。302:临时重定向,HTTP1.0的状态码 400: Bad Request, 语法错误,服务器无法理解 403: Forbidden 权限不够 404:网络资源不存 405, Method Not Allowed 请求方式不被允许 500, Internal Server Error服务器出错 502, Bad Gateway, 作为网关或代理工作的服务器尝试执行请求时,从上游服务器接受到无效的响应

列举Http请求中常见的请求头?

refer,location,user-agent,accept,accept-encoding,cookie,cache-control

Flask框架的核心依赖组件?

jinja2,Werkzeug两个核心组件,Jinja2是一个现代的,设计师友好的Python模板语言,模仿Django的模板。使用可选的沙盒模板执行环境,它具有快速,广泛使用和安全性,Werkzeug不是一个框架,它是一个带有实用程序的库,可以创建自己的框架或应用程序,因此非常灵活。

Flask的默认session处理机制?

Flask的默认session利用了Werkzeug的SecureCookie,把信息做序列化(pickle)后编码(base64),放到cookie里了。过期时间是通过cookie的过期时间实现的。为了防止cookie内容被篡改,session会自动打上一个叫session的hash串,这个串是经过session内容、SECRET_KEY计算出来的,看得出,这种设计虽然不能保证session里的内容不泄露,但至少防止了不被篡改。

Flaks中的钩子函数有哪些?可以做什么?

app.before_request:共享session的鉴权函数、请求黑白名单过滤、根据endpoint进行请求j等。蓝图场景包含api的请求必填字段校验,是否json请求校验,请求的token校验等。 app.errorhandler:可以用redis进行错误请求计数,超过一定量则进行告警。可以重定向到一个定制的错误代码页面等app.context_processor:将一些常量按字典的格式返回,则可以在jinja2的模版中引用 场景:在html中,如果{‘yao’,’jidan’}直接用{{jidan}}就会在页面显示yao app.after_request 场景:一般用于格式化响应结果,包括响应请求头,响应的格式等。

Flask中的四大内置对象、各有什么作用?

request 请求对象,封装了客户端发送的HTTP请求的内容 session 用户会话,用来记住请求 g变量 :充当者中间媒介的作用,我们可以通过它传递一些数据 current_app代表当前的flask程序实例,使用时需要flask的程序上下文激活

Celery是什么?常用应用场景?

Celery 是一个 基于python开发的分布式异步消息任务队列,通过它可以轻松的实现任务的异步处理 使用场景:异步调用:那些用户不关心的但是又存在在我们API里面的操作 我们就可以用异步调用的方式来优化(发送邮件 或者上传头像)定时任务:定期去统计日志,数据备份,或者其他的统计任务

debug-toolbar的作用?

是一组可配置的面板集合,用来显示Django Web应用当前请求/响应的各种调试信息,进行性能调优,与系统调试

留下评论