zoukankan      html  css  js  c++  java
  • 易错易忘点

    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就回收内存
    

    8、进制转换

    bin()  # 将十进制转换成二进制
    oct()  # 将十进制转换成八进制
    hex()  # 将十进制进制转换成十六进制
    int(value,num)  # 将num进制的value转换成十进制
    

    9、eval与exec的区别

    ''''
    相同点:将字符串的引号去掉,执行里面的代码
    不同点:eval不能识别逻辑代码
    '''
    # 例如:
    code1 = "print('hello')"
    code2 = "for i in range(10):print(i)"
    eval(code1)
    exec(code2)
    '''
    hello
    hello
    '''
    
    eval(code2)  # 报错
    exec(code2)
    
    
  • 相关阅读:
    changing a pointer rather than erasing memory cells
    验证码识别 edge enhancement 轮廓增强 region finding 区域查找
    Manipulating Data Structures
    passing parameters by value is inefficient when the parameters represent large blocks of data
    Aliasing 走样
    Artificial Intelligence Research Methodologies 人工智能研究方法
    Thread safety
    include pointers as a primitive data type
    flat file
    functional cohesion
  • 原文地址:https://www.cnblogs.com/WM2019/p/11872947.html
Copyright © 2011-2022 走看看