您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 招聘面试 > 2020年python的面试题整理Web篇
2020年python的面试题整理Web篇Flask140.对Flask蓝图(Blueprint)的理解?蓝图的定义蓝图/Blueprint是Flask应用程序组件化的方法,可以在一个应用内或跨越多个项目共用蓝图。使用蓝图可以极大简化大型应用的开发难度,也为Flask扩展提供了一种在应用中注册服务的集中式机制。蓝图的应用场景:把一个应用分解为一个蓝图的集合。这对大型应用是理想的。一个项目可以实例化一个应用对象,初始化几个扩展,并注册一集合的蓝图。以URL前缀和/或子域名,在应用上注册一个蓝图。URL前缀/子域名中的参数即成为这个蓝图下的所有视图函数的共同的视图参数(默认情况下)在一个应用中用不同的URL规则多次注册一个蓝图。通过蓝图提供模板过滤器、静态文件、模板和其他功能。一个蓝图不一定要实现应用或视图函数。初始化一个Flask扩展时,在这些情况中注册一个蓝图。蓝图的缺点:不能在应用创建后撤销注册一个蓝图而不销毁整个应用对象。使用蓝图的三个步骤1.创建一个蓝图对象blue=Blueprint(blue,__name__)2.在这个蓝图对象上进行操作,例如注册路由、指定静态文件夹、注册模板过滤器...@blue.route('/')defblue_index():returnWelcometomyblueprint3.在应用对象上注册这个蓝图对象app.register_blueprint(blue,url_prefix=/blue)141.Flask和Django路由映射的区别?在django中,路由是浏览器访问服务器时,先访问的项目中的url,再由项目中的url找到应用中url,这些url是放在一个列表里,遵从从前往后匹配的规则。在flask中,路由是通过装饰器给每个视图函数提供的,而且根据请求方式的不同可以一个url用于不同的作用。Django142.什么是wsgi,uwsgi,uWSGI?WSGI:web服务器网关接口,是一套协议。用于接收用户请求并将请求进行初次封装,然后将请求交给web框架。实现wsgi协议的模块:wsgiref,本质上就是编写一socket服务端,用于接收用户请求(django)werkzeug,本质上就是编写一个socket服务端,用于接收用户请求(flask)uwsgi:与WSGI一样是一种通信协议,它是uWSGI服务器的独占协议,用于定义传输信息的类型。uWSGI:是一个web服务器,实现了WSGI的协议,uWSGI协议,http协议143.Django、Flask、Tornado的对比?1、Django走的大而全的方向,开发效率高。它的MTV框架,自带的ORM,admin后台管理,自带的sqlite数据库和开发测试用的服务器,给开发者提高了超高的开发效率。重量级web框架,功能齐全,提供一站式解决的思路,能让开发者不用在选择上花费大量时间。自带ORM和模板引擎,支持jinja等非官方模板引擎。自带ORM使Django和关系型数据库耦合度高,如果要使用非关系型数据库,需要使用第三方库自带数据库管理app成熟,稳定,开发效率高,相对于Flask,Django的整体封闭性比较好,适合做企业级网站的开发。pythonweb框架的先驱,第三方库丰富2、Flask是轻量级的框架,自由,灵活,可扩展性强,核心基于WerkzeugWSGI工具和jinja2模板引擎适用于做小网站以及web服务的API,开发大型网站无压力,但架构需要自己设计与关系型数据库的结合不弱于Django,而与非关系型数据库的结合远远优于Django3、Tornado走的是少而精的方向,性能优越,它最出名的异步非阻塞的设计方式Tornado的两大核心模块:iostraem:对非阻塞的socket进行简单的封装ioloop:对I/O多路复用的封装,它实现一个单例144.CORS和CSRF的区别?什么是CORS?CORS是一个W3C标准,全称是“跨域资源共享(Cross-originresouresharing).它允许浏览器向跨源服务器,发出XMLHttpRequest请求,从而客服了AJAX只能同源使用的限制。什么是CSRF?CSRF主流防御方式是在后端生成表单的时候生成一串随机token,内置到表单里成为一个字段,同时,将此串token置入session中。每次表单提交到后端时都会检查这两个值是否一致,以此来判断此次表单提交是否是可信的,提交过一次之后,如果这个页面没有生成CSRFtoken,那么token将会被清空,如果有新的需求,那么token会被更新。攻击者可以伪造POST表单提交,但是他没有后端生成的内置于表单的token,session中没有token都无济于事。145.Session,Cookie,JWT的理解为什么要使用会话管理众所周知,HTTP协议是一个无状态的协议,也就是说每个请求都是一个独立的请求,请求与请求之间并无关系。但在实际的应用场景,这种方式并不能满足我们的需求。举个大家都喜欢用的例子,把商品加入购物车,单独考虑这个请求,服务端并不知道这个商品是谁的,应该加入谁的购物车?因此这个请求的上下文环境实际上应该包含用户的相关信息,在每次用户发出请求时把这一小部分额外信息,也做为请求的一部分,这样服务端就可以根据上下文中的信息,针对具体的用户进行操作。所以这几种技术的出现都是对HTTP协议的一个补充,使得我们可以用HTTP协议+状态管理构建一个的面向用户的WEB应用。Session和Cookie的区别这里我想先谈谈session与cookies,因为这两个技术是做为开发最为常见的。那么session与cookies的区别是什么?个人认为session与cookies最核心区别在于额外信息由谁来维护。利用cookies来实现会话管理时,用户的相关信息或者其他我们想要保持在每个请求中的信息,都是放在cookies中,而cookies是由客户端来保存,每当客户端发出新请求时,就会稍带上cookies,服务端会根据其中的信息进行操作。当利用session来进行会话管理时,客户端实际上只存了一个由服务端发送的session_id,而由这个session_id,可以在服务端还原出所需要的所有状态信息,从这里可以看出这部分信息是由服务端来维护的。除此以外,session与cookies都有一些自己的缺点:cookies的安全性不好,攻击者可以通过获取本地cookies进行欺骗或者利用cookies进行CSRF攻击。使用cookies时,在多个域名下,会存在跨域问题。session在一定的时间里,需要存放在服务端,因此当拥有大量用户时,也会大幅度降低服务端的性能,当有多台机器时,如何共享session也会是一个问题.(redis集群)也就是说,用户第一个访问的时候是服务器A,而第二个请求被转发给了服务器B,那服务器B如何得知其状态。实际上,session与cookies是有联系的,比如我们可以把session_id存放在cookies中的。JWT是如何工作的首先用户发出登录请求,服务端根据用户的登录请求进行匹配,如果匹配成功,将相关的信息放入payload中,利用算法,加上服务端的密钥生成token,这里需要注意的是secret_key很重要,如果这个泄露的话,客户端就可以随机篡改发送的额外信息,它是信息完整性的保证。生成token后服务端将其返回给客户端,客户端可以在下次请求时,将token一起交给服务端,一般是说我们可以将其放在Authorization首部中,这样也就可以避免跨域问题。146.简述Django请求生命周期一般是用户通过浏览器向我们的服务器发起一个请求(request),这个请求会去访问视图函数,如果不涉及到数据调用,那么这个时候视图函数返回一个模板也就是一个网页给用户)视图函数调用模型毛模型去数据库查找数据,然后逐级返回,视图函数把返回的数据填充到模板中空格中,最后返回网页给用户。1.wsgi,请求封装后交给web框架(Flask,Django)2.中间件,对请求进行校验或在请求对象中添加其他相关数据,例如:csrf,request.session3.路由匹配根据浏览器发送的不同url去匹配不同的视图函数4.视图函数,在视图函数中进行业务逻辑的处理,可能涉及到:orm,templates5.中间件,对响应的数据进行处理6.wsgi,将响应的内容发送给浏览器147.用的restframework完成api发送时间时区当前的问题是用django的restframework模块做一个get请求的发送时间以及时区信息的apiclassgetCurrenttime(APIView):defget(self,request):local_time=time.localtime()time_zone=settings.TIME_ZONEtemp={'localtime':local_time,'timezone':time_zone}returnResponse(temp)148.nginx,tomcat,apach到都是什么?Nginx(enginex)是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器,工作在OSI七层,负载的实现方式:轮询,IP_HASH,fair,session_sticky.ApacheHTTPServer是一个模块化的服务器,源于NCSAhttpd服务器Tomcat服务器是一个免费的开放源代码的Web应用服务器,属于轻量级应用服务器,是开发和调试JSP程序的首选。149.请给出你熟悉关系数据库范式有哪些,有什么作用?在进行数据库的设计时,所遵循的一些规范,只要按照设计规范进行设计,就能设计出没有数据冗余和数据维护异常的数据库结构。数据库的设计的规范有很多,通常来说我们在设是数据库时只要达到其中一些规范就可以了,这些规范又称之为数据库的三范式,一共有三条,也存在着其他范式,我们只要做到满足前三个范式的要求,就能设陈出符合我们的数据库了,我们也不能全部来按照范式的要求来做,还要考虑实际的业务使用情况,所以有时候也需要做一些违反范式的要求。1.数据库设计的第一范式(最基本),基本上所有数据库的范式都是符合第一范式的,符合第一范式的表具有以下几个特点:数据库表中的所有字段都只具有单一属性,单一属性的列是由基本的数据类型(整型,浮点型,字符型等)所构成的设计出来的表都是简单的二比表2.数据库设计的第二范式(是在第一范式的基础上设计的),要求一个表中只具有一个业务主键,也就是说符合第二范式的表中不能存在非主键列对只对部分主键的依赖关系3.数据库设计的第三范式,指每一个非主属性既不部分依赖与也不传递依赖于业务主键,也就是第二范式的基础上消除了非主属性对主键的传递依赖150.简述QQ登陆过程qq登录,在我们的项目中分为了三个接口,第一个接口是请求qq服务器返回一个qq登录的界面;第二个接口是通过扫码或账号登陆进行验证,qq服务器返回给浏览器一个code和state,利用这个code通过本地服务器去向qq服务器获取access_token覆返回给本地服务器,凭借access_token再向qq服务器获取用户的openid(openid用户的唯一标识)第三个接口是判断用户是否是第一次qq登录,如果不是的话直接登录返回的jwt-token给用户,对没有绑定过本网站的用户,对openid进行加密生成token进行绑定151.post和get的区别?1.GET是从服务器上获取数据,POST是向服务器传送数据2.在客户端,GET方式在通过URL提交数据,数据在URL中可以看到,POST方式,数据放置在HTML——HEADER内提交3.对于GET方式,服务器端用Request.QueryString获取变量的值,对于POST方式,服务器端用Request.Form获取提交的数据152.项目中日志的作用一、日志相关概念1.日志是一种可以追踪某些软件运行时所发生事件的方法2.软件
本文标题:2020年python的面试题整理Web篇
链接地址:https://www.777doc.com/doc-4641305 .html