• 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))
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    打印结果依次为:
    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))
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    打印结果依次为:
    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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    执行结果:
    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)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    在这里插入图片描述

  • 相关阅读:
    4.矩阵的几何意义、变基与迹
    Assertion介绍
    形式逻辑简介
    深度解析四大主流软件架构模型:单体架构、分布式应用、微服务与Serverless的优缺点及场景应用
    Python搭建自己的VPN
    11.多进程与多线程
    Python制作AI贪吃蛇,很多很多细节、思路都写下来了!
    vector 模拟与用法
    使用 Django 构建简单 Web 应用
    JMeter工具的介绍,安装
  • 原文地址:https://blog.csdn.net/YZL40514131/article/details/125474149