面试题4.12

# 面试题:
 1 wsgi uwsgi uWSGI,cgi,fastcgi 分别是什么?
 2 如何自定制上下文管理器
 3 Python是值传递还是引用传递
wsgi uwsgi uWSGI,cgi,fastcgi 分别是什么?
中间件:介于a和b之间的东西都称为中间件
'''
服务器中间件:nginx,apache
数据库中间件:介于应用程序和数据库之间的:MyCat
消息队列中间件:kafka,rabbitmq,Rocketmq
'''
CGI:通用网关接口(Common Gateway Interface/CGI),CGI描述了服务器(Nginx,Apache)和请求处理程序(django,flask,web框架)之间传输数据的一种标准。
    
    '''
    所有的bs架构软件都是遵守CGI协议的
    总结:CGI是一个标准,定义了客户端服务器之间如何传数据的
    '''
    
FastCGI:快速通用网关接口(Fast Common Gateway Interface/FastCGI)是一种让交互程序与web服务器通信的协议。FastCGI是CGI的增强版。
    # FastCGI致力于减少网页服务器与CGI程序之间互动开销,从而是服务器可以同时处理更多的网页请求
    '''
    常见的FastCGI服务器:Apache ,Nginx,Microsoft IIS
    总结:FastCGI是CGI的增强版。
    '''
WSGI:Python Web Server Gateway Interface,缩写为WSGI,Python定义的web服务器和web应用程序或框架之间的一种通用的接口
    '''总结:为Python定义的web服务器和web框架之间的接口标准'''
uWSGI:符合wsgi协议的web服务器,用c语言写的,性能比较高,咱们通常用来部署django,flask
    '''总结:一个web server,即一个实现WSGI协议的服务器,处理发来的请求及返回响应'''
uwsgi:uWSGI服务器实现的独有的协议,用于定义传输信息的类型,是用于前端服务器与uwsgi的通信规范
    '''
    uwsgi是uWSGI自有的一个协议
    uWSGI:web服务器,等同于wsgiref
    uwsgi:uWSGI自有的一个协议
    '''
    
# nginx 是一个符合 fastcgi 协议的软件,处于浏览器和web程序之间,主要做请求转发和负载均衡,也可以称之为服务器中间件
web 服务器、服务器中间件到底是什么?
客户端(浏览器,APP)跟服务端(web框架)之间的东西,叫做服务器中间件,也叫web服务器。
web服务器有:
    # nginx,apache 是一类东西,就是做请求转发的
    # uWSGI,gunicorn 只针对于Python的web框架
    # tomacat,jboss,webloogic 只针对Java的web框架
符合WSGI协议的web服务器
# 符合WSGI协议的web服务器
    wsgiref,werkzeug(一个是符合wsgi协议的web服务器+工具包(封装了一些东西))
    uWSGI 用c语言写的,性能比较高
    gunicorn:python写的
    tornado:也可以部署django项目
如何自定制上下文管理器
上下文管理器的用处:程时经常要处理的路径问题,通常程序工作在一个目录,但是过程中要去另一个目录处理一些文件,处理完还要切换回原目录,这就需要不停的调用 os.chdir。为了更便捷就有了上下文管理器(contextlib)
# 一个对象如果实现了__enter__和__exit__方法,那么这个对象就支持上下文管理,即with语句
# 上下文管理协议适用于那些进入和退出之后执行一些代码的场景,比如文件、网络连接、数据库连接或使用锁,使用事务的编码场景等

# 如何使用
class ComonSession:
    def __enter__(self):
        print('进入with语句块时执行此方法,此方法如果有返回值会赋值给as声明的变量')
        self.session=session
        return self.session

    def __exit__(self, exc_type, exc_val, exc_tb):
        self.session.close()


with ComonSession() as session:
    session.filter()

print('上下文管理器结束了')
Python是值传递还是引用传递
严格意义上来说,Python既不是值传递也不是引用传递,Python有自己的传递方式,规则是:

'''
如果传递的是不可变类型,在函数中修改,就不会影响原来的变量
如果传递的是可变类型,在函数中修改,会影响原来的变量,对原来的值进行修改,而不是重新赋值
'''

# 什么是值?什么是引用?
值就是一个变量---->是一个具体的值(一块内存空间放着这个变量的值)
引用是一个变量---->内存地址(内存地址指向了值)

# 什么是值传递 什么是引用传递
	-如果是值传递,函数中修改了传递的值,不会影响原来的
    -如果是引用传递,函数中修改了传递的引用,就会影响原来的
posted @ 2023-04-13 15:46  小王应该在学习!  阅读(22)  评论(0编辑  收藏  举报