zoukankan      html  css  js  c++  java
  • 面试题(十二)

    1、可变对象与不可变的区别?

    可变对象是指对象的内容是可变的,不可hash的,例如list,dict
    当对象的内容发生变化时,变量的对象引用是不会发生变化的
    
    不可变的对象则相反,表示内容不可变,可以被hash,例如字符串 int,string,float,tuple
    Python中的变量存放是对象引用。对象不可变化,但变量可以重新赋值,那么对应的对象引用也发生变化
    答案

    2、集合set是一种什么样的数据结构?何时使用?
    集合是无序排列的可hash的值,可做为字典的key,用于成员关系测试,和去除重复元素

    3、python是如何进行内存管理的?
    a.对象的引用机制
    b.垃圾回收
    c.内存池机制

    4、python传递参数是值传递还是引用传递?为什么?

    python不允许程序员选择采用传值还是传引用。Python参数传递采用的肯定是“传对象引用”的方式。这种方式相当于传值和传引用的一种综合。如果函数收到的是一个可变对象(比如字典或者列表)的引用,就能修改对象的原始值--相当于通过“传引用”来传递对象。如果函数收到的是一个不可变对象(比如数字、字符或者元组)的引用,就不能直接修改原始对象--相当于通过“传值'来传递对象。
    答案

    5、__new__ 和 __init__的区别?

    __init__ 方法为初始化方法, __new__方法才是真正的构造方法。
    __new__ 方法必须返回值,__init__方法不需要返回值
    答案

    6、copy()、deepcody()的联系与区别?

    浅拷贝:创建一个新的组合对象,这个新对象与原对象共享内存中的子对象。
    深拷贝:创建一个新的组合对象,同时递归地拷贝所有子对象,新的组合对象与原对象没有任何关联
    虽然实际上会共享不可变的子对象,但不影响它们的相互独立性。
    
    浅拷贝和深拷贝的不同仅仅是对组合对象来说,所谓的组合对象就是包含了其它对象的对象,如列表,类实例。
    而对于数字、字符串以及其它“原子”类型,没有拷贝一说,产生的都是原对象的引用。
    答案

    7、is 和 == 的区别?

    Python中的对象包含三要素:id、type、value
    其中id用来唯一标识一个对象,type标识对象的类型,value是对象的值
    is判断的是a对象是否就是b对象,是通过id来判断的
    ==判断的是a对象的值是否和b对象的值相等,是通过value来判断的
    答案

    8.cookie 和 session 的区别与联系?

    cookie是存在客户端的,session是存在服务器端
    cookie跟踪会话,也可以保存用户偏好设置或者保存用户名和密码等 ,session主要跟踪回话
    cookie 是不安全的 session相反
    答案



    9、函数、类方法定义中如何实现可选参数,可选关键字参数

    *agrs **kwargs
    答案



    10、解释with关键字的用法和机制

    with 关键可用于文件打开关闭操作 机制:__enter__ 获取上下文对象会调用 __exit__()
    答案

    11、解释进程,线程,协程的区别与联系?

    线程:是夏佐系统中能够进行运算调度的最小单元,他被包含在进程中,是进程实际运作的单位
    进程:是在一次数据集上的一次动态执行过程,相当于一个应用程序,独占内存,必须有一个线程,又称主线程
    协程:就是开一个进程和一个线程,当遇到阻塞的时候不用等,会自动切换
    答案



    12、线性地址,虚拟地址,逻辑地址,物理地址的区别与联系?

    虚拟地址是由程序产生的由段选择符和段内偏移地址组成的地址。
    逻辑地址指由程序产生的段内偏移地址
    线性地址是指虚拟地址到物理地址变换的中间层, 是处理器可寻址的内存空间(称为线性地址空间)中的地址
    物理地址是指现在 CPU 外部地址总线上的寻址物理内存的地址信号,是地址变换的最终结果。
    答案



    13、post 和 get 方法区别?

    1. 根据HTTP规范,GET一般用于获取/查询资源信息,应该是安全的和幂等。而POST一般用于更新资源信息
    2. get是在url中传递数据,数据放在请求头中。 post是在请求体中传递数据
    3. get传送的数据量较小,只能在请求头上发送数据。post传送的数据量较大,一般被默认为不受限制。
    4. get安全性非常低,post安全性较高。但是执行效率却比Post方法好。
    建议:
    1、get方式的安全性较Post方式要差些,包含机密信息的话,建议用Post数据提交方式;
    2、在做数据查询时,建议用Get方式;而在做数据添加、修改或删除时,建议用Post方式;
    答案

    单例模式:

    class Singleton(object):
        def __new__(cls, *args, **kwargs):
            if not hasattr(cls,"_instance"):
                cls._instance = super().__new__(cls,*args,**kwargs)
            return cls._instance
    
    
    def singleton(cls,*args,**kwargs):
        instance = {}
        
        def _singleton():
            if cls not in instance:
                instance[cls] = cls(*args,**kwargs)
            return instance[cls]
        return _singleton
    答案
  • 相关阅读:
    Kubernetes Jenkins动态创建Slave
    运维故障汇总
    Spinnaker调用Jenkins API 返回403错误
    linux删除文件空间不释放问题解决
    华为 路由交换之DHCP
    华为 路由交换之PPPoE
    关于==和equals的探索
    springboot&mybatis 增删改查系列(二)
    springboot&mybatis 增删改查系列(一)
    nginx简单使用(windows)
  • 原文地址:https://www.cnblogs.com/skiler/p/7007031.html
Copyright © 2011-2022 走看看