面试题 - 2

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/apollo_miracle/article/details/82999237

1、在python中,list、tuple、dict、set有什么区别,主要应用在什么样的场景?

答:

区别:

1、list、tuple是有序列表;dict、set是无序集合;

2、list元素可变,tuple元素不可变;

3、dict和set的key值不可变,唯一性;

4、set只用key没有value;

5、set的用途:去重、并集、交集;

6、list、tuple:+、*、索引、切片、检查成员等;

7、dict查询效率高,但是消耗内存多;list、tuple查询效率低,但是消耗内存少

场景:

list:简单的数据集合,可以使用索引;

tuple:把一些数据当作一个整体去使用,不能修改;

dict:使用键值和值进行关联的数据;

set:数据只出现一次,只关心数据是否出现,不关心其位置;

2、如何在一个函数内部修改全局变量?

答:global修改全局变量

3、fun(*args,**kwargs)中的*args,**kwargs是什么意思?

答:*args是不定长参数,他可以表示输入参数是不确定的,可以是任意多个

**kwargs是关键字参数,赋值的时候是以"键=值"的方式,

参数是可以任意多对在定义函数的时候不确定会有多少参数会传入时,就可以使用两个参数。

4、简述魔术方法__new__和__init__区别

答:__init__是当实例对象创建完成后被调用的,然后设置对象属性的一些初始值

__new__是在实例创建之前被调用的,因为它的任务就是创建实例对象然后返回该实例,是个静态方法。

扩展题:如何创建单例?

至少要掌握第一种方式。

# 第一种方式:重写基类的__new__方法
class MusicPlayer(object):
    instance = None

    # 创建对象时 new方法回被自动调用 new是静态方法 所以要传入cls
    def __new__(cls, *args, **kwargs):
        if cls.instance is None:
            cls.instance = super().__new__(cls)

        return cls.instance

    def __init__(self):
        print("播放器初始化……")


player1 = MusicPlayer()
player2 = MusicPlayer()
print(player1)
print(player2)
# 第二种方式:使用装饰器
# 第三种方式:使用元类

5、简述 cookie 和 session 的区别

答:1、cookie数据存放在客户的浏览器上,session数据放在服务器上;

2、cookie不是很安全,别人可以分析存放在本地的cookie并进行cookie欺骗,考虑到安全应当使用session;

3、session会在一定时间内保存在服务器上,当访问增多,会比较占用服务器的性能,考虑到减轻服务器性能方面,应当使用cookie;

4、单个cookie保存的数据不能超过4k,很多浏览器都限制一个站点最多保存20个cookie;

5、建议:将登陆信息等重要信息存放在session,其他信息如需要,可保留在cookie

6、js中,如何阻止事件冒泡和默认事件?

答:stopPropagation就是阻止目标元素的事件冒泡到父级元素,stopPropagation也是事件对象(Event)的一个方法,

作用是阻止目标元素的冒泡事件,但是会不阻止默认行为。preventDefault它是事件对象(Event)的一个方法,

作用是取消一个目标元素的默认行为。

7、在js中null和undefined有什么区别?

答:null常用来描述"空值",对null执行typeof运算,返回字符串"object"。

undefined是预定义的全局变量,它的值就是"未定义",用typeof运算得到undefined类型,

返回undefined,变量没有初始化时是undefined,函数没有返回值,返回undefined

如果想将他们赋值给变量或者属性,或者将他们作为参数传入函数,最佳选择是使用null

猜你喜欢

转载自blog.csdn.net/apollo_miracle/article/details/82999237