zoukankan      html  css  js  c++  java
  • 月考二

    @2020.4.19

     

    基础题(60分)

    1.写代码是要避免循环导入,什么是循环导入?

    循环导入是指 在一个模块导入的过程中,导入另一个模块,且在另一个模块中又返回来导入第一个模块的名字,这种情况下会加载模块失败,抛出异常。

     

    2.模块的搜索顺序

    内存中已加载的模块------》内置的模块——》sys.path路径中的模块

     

    3.以下代码什么时候使用

    ```python

    if __name__ ==  "__main__":

    print("test")

    ```

    在主程序中用来控制 .py文件在不同的应用场景下,执行不同的逻辑处理。

     

    4.什么是面向过程编程思想?

    面向过程编程思想,核心是“过程”二字,即 解决问题的过程步骤,先干什么后干什么。

     

    5.有如下变量 请使用hashlib 为其加密 并 加盐

    import hashlib
    #  256
    hash = hashlib.sha256('898oaFs09f'.encode('utf8'))
    hash.update('ccat'.encode('utf8'))
    print(hash.hexdigest())
     

    6.判断一个对象是否属于str类型,判断一个类是否是另外一个类的子类?

    c = '1345'
    print(isinstance(c,str))
    print(issubclass(str,object))
    # 输出结果:
    True
    True

    7.定义一个老师类,定制打印对象的格式为‘<name:C_DSB age:18 sex:male>’

    class Teacher:
        def __init__(self, name, age, sex):
            self.name = name
            self.age = age
            self.sex = sex
    
        def __str__(self):
            return '<name: %s age:%s sex:%s >' % (self.name, self.age, self.sex)
    
    
    tea = Teacher('MILI', 27, 'male')
    print(tea)
     

    8.定义一个自己的open类,控制文件的读或写,在对象被删除时自动回收系统资源

    class MYopen:
        def __init__(self, file, io, encoding):
            self.file = file
            self.io = io
            self.encoding = encoding
            self.my_open = open(self.file, self.io, self.encoding)
    
        def __del__(self):
            self.my_open.close()
            print("close the file")
    
    
    my_open1 = MYopen(r'D:DOCUMENTSDUCUCourseSystemconfsettings.py', 'rt', 'utf-8')
    del my_open1

    9.什么是反射?反射的4个方法分别是什么?分别的作用是什么?

    (1)反射是指 在程序运行的状态中,对于任意一个类,都可以知道这个类的所有方法和属性;对于任意一个对象,都能够调用它的任意方法和属性。这种动态获取程序信息和动态调用对象的功能就是反射机制。

     

    (2)反射的四个方法:

    hasattr:判断对象是否有某种属性

    getattr :获取对象的某种属性,若无则返回None

    setattr :为对象赋值

    delattr:删除对象的某个属性

     

    10.property的作用是什么,简述内部实现原理

    property装饰器,可以将类中的函数伪装成对象的数据属性,对象在访问这个特殊的属性时,会触发该功能,执行并返回执行结果。

     

    11.__str__的作用是什么?

    __str__是内置方法,打印返回字符串格式的返回值

     

    12.学生类与,教师类同时拥有,姓名,性别,年龄三个属性,老师类比学生类多一个工资属性,请编写代码以减少重复代码!

    class People:
        def __init__(self,name,sex,age):
            self.name = name
            self.sex = sex
            self.age = age
            
    class Student(People):
        def __init__(self):
            print('<name: %s sex:%s age:%s >' % (self.name, self.sex, self.age))
            
    class Teacher(People):
        def __init__(self,salary):
            self.__getattribute__(People)
            self.salary = salary

    13.封装就等于隐藏这种说法是否正确,为什么?

    不正确。封装不是单纯的隐藏

    封装的目的是区分内外,封装后的属性可以直接在类的内部使用,但是不能在外部使用,若需要使用,则要定义接口,让外部通过接口来访问封装的属性。

    14.类中的 __getattr__ 方法什么时候被执行?

    __getattr__ 方法只有在使用“点调用属性且属性不存在时,才会被触发

    15.什么是抽象类?

    抽象类是一种特殊的类,特殊之处在于它只能被继承,不能被实例化

     

    16.OSI七层网路协议分别是哪些 ?

    应用层,表示层,会话层,传输层,网络层,数据链路层,物理层

     

    17.以太协议,IP协议,TCP/UDP协议,分别工作在哪些层

    以太协议——数据链路层

    IP协议——网络层

    TCP/UDP协议——传输层

     

    18.端口号用于标识什么?

    端口用于表示应用程序的入口

     

    19.简述三次握手与四次挥手的经历

    (1)三次握手——建立连接协议

    =第一次握手:客户端发送syn包(syn= x)的数据包到服务器,并进入SYN_SEND状态,等待服务器确认

    =第二次握手:服务器收到客户端发来的syn包,必须确认客户的SYN(ack=x+1),同时自己也发送一个SYN包(syn= y)即SYN+ACK包,接着服务器进入SYN_RECV状态

    =第三次握手:客户端收到服务器发来的SYN+ACK包,接着向服务器发送确认包ACK(ack=y+1),以表示确认自己收到了SYN+ACK包;发送确认包ACK(ack=y+1)完毕后,客户端和服务器端都进入了ESTABLISHED状态,此时三次握手就完成了。

     

    (2)四次挥手

    =第一次挥手:客户端程序运行到close()指令,处于FIN_WAIT_1的状态,向服务器端发送FIN(seq=x+2)+ACK(ack=y+1)包,等待服务器的回应

    =第二次挥手:服务器接送到客户端发来的FIN+ACK包,向客户端发送

    ACK(ack=x+3),此时服务器进入CLOSE_WAIT状态,客户端接收到服务器发送的ACK(ack=x+3)包,进入FIN_WAIT_2的状态

    =三次挥手:服务器向客户端发送ACK(ack=x+3)后,接着进入LAST_ACK状态,并向客户端发送FIN(seq=y+1)包,确认close()命令的执行。

    =第四次挥手:客户端接收到FIN(seq=y+1)包,进入TIME_WAIT状态,向服务器发送ACK(ack=y+2)包。此时四次挥手完成。

     

    20.什么是面向对象编程思想?

    面向对象编程思想的核心是“对象”,即将对象的数据和功能进行整合。



    21.什么是面向对象三大特性?分别的作用是什么?

    (1)封装:将对象的属性进行封装,明确区分内外,并提供接口供外部间接访问内部的属性。

    (2)继承:最大限度地重用代码,减少代码的冗余,增强代码的可扩展性

    (3)多态:增加代码的功能,可扩展性


    22.__getattr__在什么时候触发?

    __getattr__ 方法只有在使用“点调用属性且属性不存在时,才会被触发


    23.__getattrubite__在什么时候触发?

    __getattrubite__ 在使用“点调用属性时,不管属性是否存在,都会被触发执行


    24.__call__在什么时候触发?

    在有对象后面加上括号()时触发的。


    25.什么是元类?

    元类不是父类,是用来实例化产生类的类


    26.如何用元类控制类的创建,请写代码?

    class Mymeta(type):
        def __init__(self,x,y,z):
            print("run520")
            print(self)
        def __new__(cls, *args, **kwargs):
            print('run1314')
            return type.__new__(cls,*args,**kwargs)
    People = Mymeta("People",(object,),{...})
    
    class People(metaclass=Mymeta)
        def __init__(self,name,age):
            self.name = name
            self.age = age
            
        def say(self):
            print('%s;%s'%(self.name,self.age))


    27.对象的绑定方法、类的绑定方法与静态方法的区别是什么?

    对象的绑定方法——是绑定到对象的方法,正常定义的函数默认是绑定到对象的

    类的绑定方法——加上装饰器@classmethod,就是函数就绑定到类了

    静态方法——加上装饰器@staticmethod,就是非绑定方法,即静态函数

     

    28.对象的属性查找顺序是什么?

    有继承关系后,对象在查找属性时,先从对象自己的__dict__中找,如果没有,则去子类中找,然后再去父类中找。

     

    29. 什么是新式类?什么是经典类?

    (1)在pyhton2中,有经典类和新式类之分。

    没有显式继承object类的类以及其子类,都是经典类

    显式继承object类的类以及其子类,都是新式类

    (2)在python3 中,即使没有显式继承object类,也会默认继承该类。所以python3 中都是新式类


    30.Python面向对象中的多继承的继承关系如何查找?

    (1)如果多继承是非菱形继承,经典类和新式类的属性查找顺序一样,都是一个分支一个分支地找下去,最后再找object类

    (2)如果多继承是菱形继承,经典类与新式类的属性查找不一样。

    经典类:深度优先,会在检索的时候,一条路走到底一直到父类

    新式类:广度优先,会在检索时,最后一个分支的时候检索父类

     

     

     

     

     

  • 相关阅读:
    说说爬虫分享
    飞机大战改进篇
    Unity WebGL WebSocket
    2048 控制台版(C#)
    C++多小球非对心弹性碰撞(HGE引擎)
    Unity中如何计算带minimap的贴图资源的大小
    【原】Unity 骨骼节点对象优化,AnimatorUtility.OptimizeTransformHierarchy
    ios sdk agree 无法通过,升级Mac系统到10.14,并且升级Xcode到最近版本后遇到
    【原】高光贴图参数放入颜色贴图的alpha通道中
    KBEngine游戏服务器(二)——运行Unity的Demo
  • 原文地址:https://www.cnblogs.com/bigorangecc/p/12732725.html
Copyright © 2011-2022 走看看