1.一个http请求到相应都做了什么?
过程:1)浏览器查询 DNS,获取域名对应的IP地址;具体过程包括浏览器搜索自身的DNS缓存、搜索操作系统的DNS缓存、读取本地的Host文件和向本地DNS服务器进行查询等。对于向本地DNS服务器进行查询,如果要查询的域名包含在本地配置区域资源中,则返回解析结果给客户机,完成域名解析(此解析具有权威性);如果要查询的域名不由本地DNS服务器区域解析,但该服务器已缓存了此网址映射关系,则调用这个IP地址映射,完成域名解析(此解析不具有权威性)。如果本地域名服务器并未缓存该网址映射关系,那么将根据其设置发起递归查询或者迭代查询;
2)浏览器获得域名对应的IP地址以后,浏览器向服务器请求建立链接,发起三次握手;
3)TCP/IP链接建立起来后,浏览器向服务器发送HTTP请求;
4)服务器接收到这个请求,并根据路径参数映射到特定的请求处理器进行处理,并将处理结果及相应的视图返回给浏览器;
5)浏览器解析并渲染视图,若遇到对js文件、css文件及图片等静态资源的引用,则重复上述步骤并向服务器请求这些资源;
6) 浏览器根据其请求到的资源、数据渲染页面,最终向用户呈现一个完整的页面
7)web服务器向浏览器发送了应答数据之后,就要关闭tcp链接(tcp四次握手关闭链接),如果添加了connection:keep-alive,那么就还会保持链接状态
2.为什么说python的多线程不是多线程
在于 GIL ,在 Cpython 解释器(Python语言的主流解释器)中,有一把全局解释锁(Global Interpreter Lock),在解释器解释执行 Python 代码时,先要得到这把锁,意味着,任何时候只可能有一个线程在执行代码,其它线程要想获得 CPU 执行代码指令,就必须先获得这把锁,如果锁被其它线程占用了,那么该线程就只能等待,直到占有该锁的线程释放锁才有执行代码指令的可能。
3.协程、线程、进程
4.dict的key有什么要注意的:
一个对象能不能作为字典的key,就取决于其有没有__hash__方法。所以所有python自带类型中,除了list、dict、set和内部至少带有上述三种类型之一的tuple之外,其余的对象都能当key。
5.单例模式,重写__new__方法,增加_inst属性判断
class Singnleton(object):
def __new__(cls,*args,**kwargs):
if not hasattr(cls,'_inst'):
cls._inst=super(Singnleton,cls).__new__(cls,*args,**kwargs)
return cls._inst
class A(Singnleton):
def __init__(self, s):
self.s = s
a=A('QWEWQ')
b=B('123213')
结果是'123213'和'123213'
引用
1.https://www.jianshu.com/p/67f7df8119fc
2. https://blog.csdn.net/B9Q8e64lO6mm/article/details/81031283