易错易忘点
Posted wm2019
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了易错易忘点相关的知识,希望对你有一定的参考价值。
1、python2与python3的区别
1、默认字符编码
python2:ascii
python3: utf-8
2、print
python2:
1、打印时可加括号,也可不加
2、打印一个值,输出无括号
3、打印多个值,若打印时加了括号,输出也有括号,并且有逗号分隔,即元组形式
4、打印多个值,若打印时没加括号,输出也没括号,并且没有逗号分隔,与python3一致
5、python3中,打印时必须要加括号
3、input
1、python2中有两种打印语句:input和rawinput
2、python2中input接收用户输入时,需要指定数据类型,input接收的就是该类型的数据
3、python2中rawinput接收用户输入时,不需要指定类型,全部接收为字符串
4、python3中只有input,不需要指定类型,全部接收为字符串
4、字符串
1、py2中:unicode类型表示字符串序列,str表示字节序列
2、py3中str表示字符串序列,byte类型表示字节序列
5、global与nonlocal
1、py3中新增了关键字nonlocal,声明变量为多层嵌套函数整个局部
2、装饰器
1、本质是闭包函数
2、使用闭包的思想,生成一个新的同名函数,不同的名称空间
3、不改变源代码,不改变调用方式
4、新的名称空间中,在执行真正的原函数代码之前,必须执行添加额代码块,可以是判断,可以是新增的功能
4、使用新的同名函数,不会改变调用方式,并且真正的函数代码没有改变
3、多线程、多进程
IO密集型使用多线程编程
计算密集型使用多进程编程
使用线程池、进程池设定最大线程、进程数量
使用互斥锁保证数据安全,即数据完整和数据同步
4、GIL
1、全局解释器锁,本质是线程互斥锁
2、每个进程内都有一把
3、由于进程内线程共享全局资源,为了保证共享数据的完整性和状态同步,GIL使得同一时间只有一个线程能够访问共享数据
5、OSI七层协议
应用层 HTTP,FTP,NFS
表示层 Telnet,SNMP
会话层 SMTP,DNS
传输层 TCP,UDP
网络层 IP,ICMP,ARP
数据链路层 Ethernet,PPP,SLIP,FDDI
物理层 IEEE 802.1A,IEEE 8O2.11
6、HTTP协议
作用
超文本传输协议,规定了传输数据的数据格式
四大特征
1、基于TCP/IP作用于应用层之上的协议
2、基于请求响应
3、无状态:服务器不保留客户端的任何状态,降低服务器的记忆负担,提高响应速度
4、无连接:每次连接只处理一个请求,响应完成,即断开连接,大大降低了www服务器的执行效率
(长连接:可以保持连接,连续发送多个数据包,当没有数据时,需要双方发送链路检测包)
数据格式
1、请求格式
请求首行(请求方式,协议版本)
请求头
请求体
2、响应格式
响应首行
响应头
响应体
数字编码
将文字信息对应成数字编号,便于传输和编程,自定义对应关系
1**:服务端成功受到请求,正在处理,客户端可以继续提交其他数据
2**:服务端成功响应了数据
3**:重定向
4**:客户端错误,如404请求资源不存在,403当前不符合某一些条件,拒绝访问
5**:服务器内部错误
7、垃圾回收机制
存储机制:
栈区:存储变量名和变量值内存地址关联关系
堆区:存储变量值
内存管理回收的是堆区的内容
1、引用计数
变量值引用计数为0,变量值所占的内存会被释放
2、标记清除
循环引用:
1、容器对象包含其他对象,存储的只是其他对象的内存地址,添加引用而已
2、循环引用指的就是容器对象互相包含,即互相引用了,那么当栈区变量名与内存关联被删除后,它们的值存储了对方的引用,即引用计数不为0,然后又跟其他的任何对象不产生关联。
3、容器对象,如列表,字典,元组,集合,类等都可以包含其他对象的引用,都可能产生循环引用问题
标记清除:
1、使用GC算法
2、标记:遍历所有的GC Roots对象(栈区中的所有内容或者线程),将所有GC Roots对象能直接或者间接访问到的d对象标记为存活状态,其余的均为非存活状态,应该被清除
3、清除:遍历堆中所有的对象,将没有标记的对象全部清除
2、分代回收
背景:基于引用计数的回收机制,每次回收内存,都需要把所有对象的引用计数都遍历一遍,非常耗时
分代:指的是根据变量在多次扫描后,都没有被回收的变量,gc机制将其扫描频率降低,这样多次分级之后,大大减少了遍历的变量个数,节省了时间
回收:依然是,引用计数为0就回收内存
以上是关于易错易忘点的主要内容,如果未能解决你的问题,请参考以下文章