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