实现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的整体封闭性比较好,适合做企业级网站的开发。python web框架的先驱,第三方库丰富

2、 Flask 是轻量级的框架,自由,灵活,可扩展性强,核心基于Werkzeug WSGI工具 和jinja2 模板引擎

适用于做小网站以及web服务的API,开发大型网站无压力,但架构需要自己设计

与关系型数据库的结合不弱于Django,而与非关系型数据库的结合远远优于Django

3、 Tornado走的是少而精的方向,性能优越,它最出名的异步非阻塞的设计方式

Tornado的两大核心模块:

iostraem:对非阻塞的socket进行简单的封装

ioloop: 对I/O 多路复用的封装,它实现一个单例

144.CORS 和 CSRF的区别?

什么是CORS?

CORS是一个W3C标准,全称是“跨域资源共享"(Cross-origin resoure sharing). 它允许浏览器向跨源服务器,发出XMLHttpRequest请求,从而客服了AJAX只能同源使用的限制。

什么是CSRF?

CSRF主流防御方式是在后端生成表单的时候生成一串随机token,内置到表单里成为一个字段,同时,将此串token置入session中。每次表单提交到后端时都会检查这两个值是否一致,以此来判断此次表单提交是否是可信的,提交过一次之后,如果这个页面没有生成CSRF token,那么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.session

3.路由匹配 根据浏览器发送的不同url去匹配不同的视图函数

4.视图函数,在视图函数中进行业务逻辑的处理,可能涉及到:orm,templates

5.中间件,对响应的数据进行处理

6.wsgi,将响应的内容发送给浏览器

147.用的restframework完成api发送时间时区

当前的问题是用django的rest framework模块做一个get请求的发送时间以及时区信息的api

class getCurrenttime(APIView):

def get(self,request):

local_time = time.localtime()

time_zone =settings.TIME_ZONE

temp = {‘localtime’:local_time,‘timezone’:time_zone}

return Response(temp)

148.nginx,tomcat,apach到都是什么?

Nginx(engine x)是一个高性能的HTTP和反向代理服务器,也是 一个IMAP/POP3/SMTP服务器,工作在OSI七层,负载的实现方式:轮询,IP_HASH,fair,session_sticky. Apache HTTP Server是一个模块化的服务器,源于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.软件开发人员可以向他们的代码中调用日志记录相关的方法来表明发生了某些事情

3.一个事件可以用一个包含可选变量数据的消息来描述

4.此外,事件也有重要性的概念,这个重要性也可以被成为严重性级别(level)

二、日志的作用

1.通过log的分析,可以方便用户了解系统或软件、应用的运行情况;

2.如果你的应用log足够丰富,可以分析以往用户的操作行为、类型喜好,地域分布或其他更多信息;

3.如果一个应用的log同时也分了多个级别,那么可以很轻易地分析得到该应用的健康状况,及时发现问题并快速定位、解决问题,补救损失。

4.简单来讲就是我们通过记录和分析日志可以了解一个系统或软件程序运行情况是否正常,也可以在应用程序出现故障时快速定位问题。不仅在开发中,在运维中日志也很重要,日志的作用也可以简单。总结为以下几点:

1.程序调试

2.了解软件程序运行情况,是否正常

3,软件程序运行故障分析与问题定位

4,如果应用的日志信息足够详细和丰富,还可以用来做用户行为分析

153.django中间件的使用?

Django在中间件中预置了六个方法,这六个方法的区别在于不同的阶段执行,对输入或输出进行干预,方法如下:

1.初始化:无需任何参数,服务器响应第一个请求的时候调用一次,用于确定是否启用当前中间件

def init():

pass

2.处理请求前:在每个请求上调用,返回None或HttpResponse对象。

def process_request(request):

pass

3.处理视图前:在每个请求上调用,返回None或HttpResponse对象。

def process_view(request,view_func,view_args,view_kwargs):

pass

4.处理模板响应前:在每个请求上调用,返回实现了render方法的响应对象。

def process_template_response(request,response):

pass

5.处理响应后:所有响应返回浏览器之前被调用,在每个请求上调用,返回HttpResponse对象。

def process_response(request,response):

pass

6.异常处理:当视图抛出异常时调用,在每个请求上调用,返回一个HttpResponse对象。

def process_exception(request,exception):

pass

154.谈一下你对uWSGI和nginx的理解?

1.uWSGI是一个Web服务器,它实现了WSGI协议、uwsgi、http等协议。Nginx中HttpUwsgiModule的作用是与uWSGI服务器进行交换。WSGI是一种Web服务器网关接口。它是一个Web服务器(如nginx,uWSGI等服务器)与web应用(如用Flask框架写的程序)通信的一种规范。

要注意WSGI/uwsgi/uWSGI这三个概念的区分。

WSGI是一种通信协议。

uwsgi是一种线路协议而不是通信协议,在此常用于在uWSGI服务器与其他网络服务器的数据通信。

uWSGI是实现了uwsgi和WSGI两种协议的Web服务器。

nginx 是一个开源的高性能的HTTP服务器和反向代理:

1.作为web服务器,它处理静态文件和索引文件效果非常高

2.它的设计非常注重效率,最大支持5万个并发连接,但只占用很少的内存空间

3.稳定性高,配置简洁。

4.强大的反向代理和负载均衡功能,平衡集群中各个服务器的负载压力应用

155.Python中三大框架各自的应用场景?

django:主要是用来搞快速开发的,他的亮点就是快速开发,节约成本,,如果要实现高并发的话,就要对django进行二次开发,比如把整个笨重的框架给拆掉自己写socket实现http的通信,底层用纯c,c++写提升效率,ORM框架给干掉,自己编写封装与数据库交互的框架,ORM虽然面向对象来操作数据库,但是它的效率很低,使用外键来联系表与表之间的查询; flask: 轻量级,主要是用来写接口的一个框架,实现前后端分离,提考开发效率,Flask本身相当于一个内核,其他几乎所有的功能都要用到扩展(邮件扩展Flask-Mail,用户认证Flask-Login),都需要用第三方的扩展来实现。比如可以用Flask-extension加入ORM、文件上传、身份验证等。Flask没有默认使用的数据库,你可以选择MySQL,也可以用NoSQL。

其WSGI工具箱用Werkzeug(路由模块),模板引擎则使用Jinja2,这两个也是Flask框架的核心。

Tornado: Tornado是一种Web服务器软件的开源版本。Tornado和现在的主流Web服务器框架(包括大多数Python的框架)有着明显的区别:它是非阻塞式服务器,而且速度相当快。得利于其非阻塞的方式和对epoll的运用,Tornado每秒可以处理数以千计的连接因此Tornado是实时Web服务的一个理想框架

156.Django中哪里用到了线程?哪里用到了协程?哪里用到了进程?

1.Django中耗时的任务用一个进程或者线程来执行,比如发邮件,使用celery.

2.部署django项目是时候,配置文件中设置了进程和协程的相关配置。

157.有用过Django REST framework吗?

Django REST framework是一个强大而灵活的Web API工具。使用RESTframework的理由有:

Web browsable API对开发者有极大的好处

包括OAuth1a和OAuth2的认证策略

支持ORM和非ORM数据资源的序列化

全程自定义开发–如果不想使用更加强大的功能,可仅仅使用常规的function-based views额外的文档和强大的社区支持

158.对cookies与session的了解?他们能单独用吗?

Session采用的是在服务器端保持状态的方案,而Cookie采用的是在客户端保持状态的方案。但是禁用Cookie就不能得到Session。因为Session是用Session ID来确定当前对话所对应的服务器Session,而Session ID是通过Cookie来传递的,禁用Cookie相当于SessionID,也就得不到Session。

爬虫

159.试列出至少三种目前流行的大型数据库

160.列举您使用过的Python网络爬虫所用到的网络数据包?

requests, urllib,urllib2, httplib2

161.爬取数据后使用哪个数据库存储数据的,为什么?

162.你用过的爬虫框架或者模块有哪些?优缺点?

Python自带:urllib,urllib2

第三方:requests

框架: Scrapy

urllib 和urllib2模块都做与请求URL相关的操作,但他们提供不同的功能。

urllib2: urllib2.urlopen可以接受一个Request对象或者url,(在接受Request对象时,并以此可以来设置一个URL的headers),urllib.urlopen只接收一个url。

urllib 有urlencode,urllib2没 《大厂前端面试题解析+Web核心总结学习笔记+企业项目实战源码+最新高清讲解视频》无偿开源 徽信搜索公众号【编程进阶路】 有,因此总是urllib, urllib2常会一起使用的原因

scrapy是封装起来的框架,他包含了下载器,解析器,日志及异常处理,基于多线程,twisted的方式处理,对于固定单个网站的爬取开发,有优势,但是对于多网站爬取100个网站,并发及分布式处理不够灵活,不便调整与扩展

requests是一个HTTP库,它只是用来请求,它是一个强大的库,下载,解析全部自己处理,灵活性高

Scrapy优点:异步,xpath,强大的统计和log系统,支持不同url。shell方便独立调试。写middleware方便过滤。通过管道存入数据库

163.写爬虫是用多进程好?还是多线程好?

164.常见的反爬虫和应对方法?

165.解析网页的解析器使用最多的是哪几个?

166.需要登录的网页,如何解决同时限制ip,cookie,session

167.验证码的解决?

168.使用最多的数据库,对他们的理解?

169.编写过哪些爬虫中间件?

170.“极验”滑动验证码如何破解?

171.爬虫多久爬一次,爬下来的数据是怎么存储?

172.cookie过期的处理问题?

173.动态加载又对及时性要求很高怎么处理?

174.HTTPS有什么优点和缺点?

175.HTTPS是如何实现安全传输数据的?

176.TTL,MSL,RTT各是什么?

177.谈一谈你对Selenium和PhantomJS了解

178.平常怎么使用代理的 ?

179.存放在数据库(redis、mysql等)。

180.怎么监控爬虫的状态?

181.描述下scrapy框架运行的机制?

Python面试题大全(三)相关推荐

  1. python公司面试题集锦 python面试题大全

    问题一:以下的代码的输出将是什么? 说出你的答案并解释. class Parent(object): x = 1 class Child1(Parent): pass class Child2(Par ...

  2. Python入门习题大全——三家餐馆

    Python入门习题大全--索引 根据你为完成上一个练习"餐馆"而编写的类创建三个实例,并对每个实例调用方法describe_restaurant() . # 三家餐馆 impor ...

  3. 2022年python面试题大全(50题附答案)

    前言: 哈喽,哈喽,都说即将到来的金三银四是一年中找工作的高峰期.在这里小编先祝大家都能找到自己心仪的工作! 正文: 这里呢小编整理了一份Python面试题,还有一些招聘信息,今天就分享给大家,希望能 ...

  4. Python面试题大全(三):Web开发(Flask、爬虫)

    目录 Web Flask 140.对Flask蓝图(Blueprint)的理解? 141.Flask 和 Django 路由映射的区别? Django 142.什么是wsgi,uwsgi,uWSGI? ...

  5. Python面试题大全(一):基础知识学习

    目录 Python基础 文件操作 1.有一个jsonline格式的文件file.txt大小约为10K 2.补充缺失的代码 模块与包 3.输入日期, 判断这一天是这一年的第几天? 4.打乱一个排好序的l ...

  6. Python面试题大全总结

    一.前言 有很多时候,你可能python使用的很熟练,但在面试的时候可能就过不了, 毕竟常说的面试造火箭,入职拧螺丝的情况是真实存在的.所以背八股文也是极其重要的! 这里分享一些常见和高频的面试题(3 ...

  7. python面试题大全 以及 vue面试题(必看!!!)

    1.列出5个python标准库 os:提供了不少与操作系统相关联的函数 sys: 通常用于命令行参数 re: 正则匹配 math: 数学运算 datetime:处理日期时间 2.谈下python的GI ...

  8. python面试题大全

    一.python基础面试题 1.Python的特点 Python是一种解释性语言[开发过程中没有了编译这个环节,类似于PHP或者Perl语言] Python是交互式语言[可以在一个Python提示符, ...

  9. Python面试题大全(二):python高级语法

    目录 Python高级 元类 42.Python中类方法.类实例方法.静态方法有何区别? 43.遍历一个object的所有属性,并print每一个属性名? 44.写一个类,并让它尽可能多的支持操作符? ...

最新文章

  1. JDBC连接Oracle数据库测试
  2. pythontcp服务器框架_tcp服务器简单框架-python客户端
  3. 包含用法 includeFilters
  4. Maven Assembly Plugin - 如何将Maven工程打成一个可执行jar包
  5. mac/centos下添加永久alias
  6. C++文件读写 ifstream ofstream 完成复制文件功能
  7. selenium.common.exceptions.WebDriverException: Message: Failed to start browser:搞哭了
  8. python比较两个文件内容是否一样_python判断两个json文件是否相等
  9. IIR滤波器与FIR滤波器的对比
  10. ImportError: cannot import name 'imrotate'
  11. 原型工具摹客Mockplus快速入门一工具介绍
  12. [FAQ10781]如何开启与关闭adb 的认证机制(google adb secure) (adb RSA 指纹认证)
  13. 30. 人类将如何变革--走出金字塔模型(下)
  14. python获取命令行输出_python获取命令行输出结果
  15. This may cause NPE so Data Binding will safely unbox it.
  16. php提取邮箱并返回,PHP 利用Mail_MimeDecode类提取邮件信息示例
  17. HTML自定义滚动条附效果图和完整源码
  18. 安全帽检测系统工地测试分析
  19. 模拟/数字混合信号的电路板布局布线注意事项
  20. android到底要多少内存,手机内存究竟要多大才够用?

热门文章

  1. PS3111+ASM235CM双头板子体验,DIY固态U盘小记
  2. 超级有意思且非常实用的心理学小窍门
  3. win oracle trc文件怎么打开,trc文件打开工具
  4. 从雷军8.16全员信看小米的下一个10年
  5. WebService 通俗解释,看它到底是什么技术
  6. 文本文件转换成Excel
  7. 女生勿扰,男孩子python爬取了别把飞机打下来了?
  8. element-ui远程搜索框,没有查询条件时显示历史搜索,有查询条件显示符合条件的数据(配合后端)
  9. js判断生效时间不得大于失效时间
  10. 苏宁易购关键字搜索 API