zoukankan      html  css  js  c++  java
  • 面试题_day0212

    1.请写出下面代码的输出结果:

     1 class Parent(object):
     2     x = 1
     3 
     4 class Child1(Parent):
     5     pass
     6 
     7 class Child2(Parent):
     8         pass
     9 
    10 --print(Parent.x,Child1.x,child2.x)   # 结果都是1 ,面向对象继承问题,派生类中没有,去基类中找,
    11 
    12  Child1.x = 2
    13 print(Parent.x,Child1.x,child2.x)   # 结果1 2 1  # 自己类中有此属性,则用自己的。
    14 
    15 Child2.x = 3
    16 
    17 print(Parent.x,Child1.x,child2.x)   # 结果1 2 3  # 同上

    2.请写出下边的运算结果

    a = 1
    def fun(a):
        a = 2
    
    fun(a)          # 执行函数后,会在fun函数的局部创建一个局部变量a = 2,跟全局是不一样的。
    print(a)    # 结果是1,首先在自己的全局空间找a,找到了a = 1,打印1
    
    
    a = []
    def fun(a):
        a.append(1)
    
    fun(a)
    print(a)    # [1]  a是可变对象,程序运行时候,在内存中绑定了一块地址,函数一运行,就给这个列表增加了一个元素,但是内存地址不变,假如下边在执行一次,a的元素就会再增加一个,但是内存地址不变,可用id(a)来测试。

    3.如何判断一个邮箱是否合法

    邮箱的组成是:用户名@服务器地址,一般是每个网站会要求用户名大于多少个长度之类的。
    按照这个基础规则来用正则匹配,
    
    [a-zA-Z0-9]{3,16}@([a-zA-Z0-9]).([a-zA-Z0-9])
    
    在正则中,最基本的是两部分:要匹配的内容+前边内容出现的次数,还有就注意特殊字符的转义问题。可以在前边加r,或者用\,

    4.请实现一个装饰器,限制该函数被调用的频率,如10秒一次

     1 import time
     2 
     3 def freq(func):
     4     def inner(*args,**kwargs):
     5         while True:
     6             time.sleep(3)
     7             func(*args,**kwargs)
     8     return inner
     9 
    10 @freq
    11 def f():
    12     print('ffff')
    13 
    14 f()

    5.迭代器与生成器的理解。

    讨论迭代器与生成器
    1.在python中一切皆对象,如果一个对象,含有__iter__方法,则这个对象就是可迭代对象;
    
    2.如果一个对象拥有__next__方法,其是迭代器。
    
    3.定义可迭代对象,必须实现__iter__方法;定义迭代器,必须实现__iter__和next方法。
    
    4.具有yield关键字的函数都是生成器,yield可以理解为return,返回后面的值给调用者。
      不同的是return返回后,函数会释放,而生成器则不会。在直接调用next方法或用for语句进行下一次迭代时,生成器会从yield下一句开始执行,直至遇到下一个yield。

     

    6.mysql有哪些存储引擎,优化mysql数据库的方式有哪些?

    MySQL5.5以后默认使用InnoDB存储引擎,其中InnoDB和BDB提供事务安全表,其它存储引擎都是非事务安全表。
    1.MyISAM
    它不支持事务,也不支持外键,尤其是访问速度快,对事务完整性没有要求或者以SELECT、INSERT为主的应用基本都可以使用这个引擎来创建表。
    
    2.InnoDB
    InnoDB存储引擎提供了具有提交、回滚和崩溃恢复能力的事务安全。但是对比MyISAM的存储引擎,InnoDB写的处理效率差一些并且会占用更多的磁盘空间以保留数据和索引。
    
    3.MEMORY
    memory使用存在内存中的内容来创建表。每个MEMORY表实际对应一个磁盘文件,格式是.frm。MEMORY类型的表访问非常快,因为它到数据是放在内存中的,
    并且默认使用HASH索引,但是一旦服务器关闭,表中的数据就会丢失,但表还会继续存在。
    4.MERGE   merge存储引擎是一组MyISAM表的组合,这些MyISAM表结构必须完全相同,MERGE表中并没有数据,对MERGE类型的表可以进行查询、更新、删除的操作,这些操作实际上是对内部的MyISAM表进行操作

    优化方式:看自己摘抄的一篇文章。地址:

    7.尽可能列举python列表的成员方法,并给出下列的结果

    a = [1,2,3,4,5]
    
    ret = a[::2]
    print(ret)   # 【1,3,5】 步长为2取值
    
    print(a[-2])     # 4 ,取倒数第二个
    
    
    
    #########################
    一行代码实现对列表a偶数位置上的数加3,然后再计算列表元素的和
    
    sum(map(lambda x:x+3 if a.index(x)%2 == 0 else x,a))
    使用了map函数、lambda函数、sum函数,都是内置函数。

    8.python中如何动态的获取和设置对象的属性

    其实就是Python的自省。。。。看题目没明白
        dir([obj]):
        调用这个方法将返回包含obj大多数属性名的列表(会有一些特殊的属性不包含在内)。obj的默认值是当前的模块对象。
        hasattr(obj, attr): 
        这个方法用于检查obj是否有一个名为attr的值的属性,返回一个布尔值。
        getattr(obj, attr): 
        调用这个方法将返回obj中名为attr值的属性的值,例如如果attr为’bar’,则返回obj.bar。
        setattr(obj, attr, val):
        调用这个方法将给obj的名为attr的值的属性赋值为val。例如如果attr为’bar’,则相当于obj.bar = val。 

    9.python是如何进行类型转换的

    常见数据类型转换
    '''
    int()
    str()
    list()
    dict()
    '''
    a = 100
    print('nan'+str(a))
    stre = '1111'
    print(int(stre))
    '''
    print(type(len(stre))) #len是int类型
    print("打印长度"+str(len(stre)))
    '''

    10.python中如何拷贝一个对象

     在Python中,无论是对象赋值,作为为参数传递,作为函数返回值,都是引用传递的.如果需要拷贝对象,需要使用标准库中的copy模块(import copy)。
    
    1.浅拷贝 :
    
        使用copy.copy,它可以进行对象的浅拷贝(shallow copy),它复制了对象,但对于对象中的元素,依然使用引用(换句话说修改拷贝对象元素,则被拷贝对象元素也被修改)
    
    2.深拷贝 :
    
        使用copy.deepcopy,它可以进行深拷贝,不仅拷贝了对象,同时也拷贝了对象中的元素,获得了全新的对象,与被拷贝对象完全独立,但这需要牺牲一定的时间和空间。
  • 相关阅读:
    三种负载均衡 Nginx、Dubbo、Ribbon 区别
    Docker基础学习
    主从复制报错2061:Authentication plugin 'caching_sha2_password' reported error:Authentication require secure connection
    LRU、LFU算法区别
    CAP理论原理
    Mysql安装服务到Window服务列表
    从零开始掌握 HAProxy 负载均衡器,详细!!
    一举拿下Nginx
    Nginx 负载均衡配置误区
    Linux自动化技巧
  • 原文地址:https://www.cnblogs.com/fengqing89/p/8445626.html
Copyright © 2011-2022 走看看