python面试题总结(二)

1、简述any()和all()方法

any():只要迭代器对象中有一个元素为真就为真
all():迭代器中所有的判断项返回都是真,结果才为真

python中什么元素为假?

0、空字符串、None、False、空列表、空字典、空元组、空集合

data=[1,4,6,3,7,0]
print(any(data))

data1=[1,0,0,0]
print(any(data1))

data2=[0,0,0,0]
print(any(data2))

打印结果依次为:
True
True
False

data=[1,4,6,3,7,8]
print(all(data))

data1=[1,0,0,0]
print(all(data1))

data2=[0,0,0,0]
print(all(data2))

打印结果依次为:
True
False
False

2、常见的异常

IOError:输入输出异常
AttributeError:试图访问一个对象没有属性
ImportError:无法引入模块和包,,基本是路径的问题
IndentationError::语法错误,代码没有正确的对齐
IndexError:下标索引超出序列边界
KeyError:试图访问字典中不存在的键
SyntaxError:代码逻辑语法错误,不能执行
NameError:使用一个还未赋予对象的变量

3、简述同源策略

同源策略需要同时满足3点要求

协议相同
域名相同
端口相同

举例来说:
http://www.example.com/dir/page.html
协议是 http://
域名是 www.example.com
端⼝是 80(默认端⼝可以省略)


同源政策的⽬的,是为了保证⽤户信息的安全,防⽌恶意的⽹站窃取数据。

4、简述悲观锁和乐观锁

悲观锁:每次去拿数据的时候都认为别人会去修改,所以每次拿数据的时候都会上锁,这样别人想拿这个数据就会block直到它拿到锁。传统的关系型数据库里面就用到了很多这种锁机制,比如行锁、表锁、读锁、写锁等,都是在操作之前先上锁
乐观锁:每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有更新这个数据,可以使用版本号机制。

5、分别从前端、后端、数据库阐述web项目的性能优化

后端:
1、对于缓冲存储读写次数高、变化少的数据,比如网站首页的信息。应用程序读取数据时,一般是先从缓冲中给读取,如果读取不到或者数据已经失效,再访问磁盘数据库,并将数据再次写入缓冲。

2、异步方式,如果有耗时操作,采用异步,celery
3、代码优化,避免循环和判断次数太多,如果有多个if else判断,优先判断最有可能先发生的情况。

数据库优化
1、如有条件,数据可以存放redis,读取速度快
2、建立索引、外键

前端:
1、html和css放在页面的上部,javascript放在页面下方,因为javascript加载比html和css加载慢,所以要优先加载html和css,以防页面显示不全,性能差,影响用户体验。

6、举例说明SQL注入和解决办法



7、python引用计数机制

python垃圾回收机制主要以引用计数为主,标记清除和分代清楚为辅的机制

引用计数算法

当有1个变量保存了对象的引用时,此对象的引用计数就会加1;
当使用del删除变量指向的对象时,如果对象的引用计数不为1,比如3,那么此时只会让引用计数减1,即变为2;
当再次调用del时,变为1;
如果再调用1次del,此时会真的把对象进行删除。

class Animal(object):

    def __init__(self,name):
        self.name=name

    def __del__(self):
        print('{}对象马上被干掉了'.format(self.name))

if __name__ == '__main__':
    cat=Animal('波斯猫')
    cat1=cat
    cat2=cat
    print(id(cat), id(cat1), id(cat2))
    print('马上删除cat对象')
    del cat
    print('马上删除cat1对象')
    del cat1
    print('马上删除cat2对象')
    del cat2

执行结果:
1949389517488 1949389517488 1949389517488
马上删除cat对象
马上删除cat1对象
马上删除cat2对象
波斯猫对象马上被干掉了

8、给定2个字符串A=“abcdefg”,B=“abfyt”,得到两个字符串中相同字符组成新的字符串

A="abcdefg"
B="abfyt"

list=[]
for  i in A:
    for j in B:
        if i==j:
            list.append(i)
print(list)
res=''.join(list)
print(res)

来源:YZL40514131

物联沃分享整理
物联沃-IOTWORD物联网 » python面试题总结(二)

发表评论