• 面试第三篇


    1.python线程池原理?

    我理解为线程池是一个存放很多线程的单位,同时还有一个对应的任务队列。
    整个执行过程其实就是使用线程池中已有有限的线程把任务队列中的任务做完。这样做的好处就是你不需要为每个任务都创建一个线程,
    因为当你创建第100个线程来执行第100个任务的时候,可能前面已经有50个线 程结束工作了。超过最大值的线程可以排队,但他们要等到其他线程完成后才启动。
    因此重复利用线程来执行任务,减少系统资源的开销。  

    2.python合并字典,相同key的value如何相加?

    合并两个字典的方法
     方法1:  dictMerged1=dict(dict1.items()+dict2.items())
     方法2:  dictMerged2=dict(dict1, **dict2) 
    方法2等同于: dictMerged=dict1.copy() 
                       dictMerged.update(dict2) 
    或者  dictMerged=dict(dict1)
            dictMerged.update(dict2) 
    

    3.python中单下划线和双下划线

    >>> class MyClass():
    ...     def __init__(self):
    ...             self.__superprivate = "Hello"
    ...             self._semiprivate = ", world!"
    ...
    >>> mc = MyClass()
    >>> print mc.__superprivate
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    AttributeError: myClass instance has no attribute '__superprivate'
    >>> print mc._semiprivate
    , world!
    >>> print mc.__dict__
    {'_MyClass__superprivate': 'Hello', '_semiprivate': ', world!'}
    
    __foo__:一种约定,Python内部的名字,用来区别其他用户自定义的命名,以防冲突.
    
    _foo:一种约定,用来指定变量私有.程序员用来指定私有变量的一种方式.
    
    __foo:这个有真正的意义:解析器用_classname__foo来代替这个名字,以区别和其他类相同的命名  

    4.__new__和__init__的区别

    这个__new__确实很少见到,先做了解吧.
    
    __new__是一个静态方法,而__init__是一个实例方法.
    __new__方法会返回一个创建的实例,而__init__什么都不返回.
    只有在__new__返回一个cls的实例时后面的__init__才能被调用.
    当创建一个新实例时调用__new__,初始化一个实例时用__init__.
    

    5.单例模式

    1 使用__new__方法
    class Singleton(object):
        def __new__(cls, *args, **kw):
            if not hasattr(cls, '_instance'):
                orig = super(Singleton, cls)
                cls._instance = orig.__new__(cls, *args, **kw)
            return cls._instance
    
    class MyClass(Singleton):
        a = 1
    2 共享属性
    class Borg(object):
        _state = {}
        def __new__(cls, *args, **kw):
            ob = super(Borg, cls).__new__(cls, *args, **kw)
            ob.__dict__ = cls._state
            return ob
    
    class MyClass2(Borg):
        a = 1
    3.装饰器版本
    def singleton(cls, *args, **kw):
        instances = {}
        def getinstance():
            if cls not in instances:
                instances[cls] = cls(*args, **kw)
            return instances[cls]
        return getinstance
    
    @singleton
    class MyClass:
      ...
    4.import方法
    作为python的模块是天然的单例模式
    # mysingleton.py
    class My_Singleton(object):
        def foo(self):
            pass
    
    my_singleton = My_Singleton()
    
    # to use
    from mysingleton import my_singleton
    
    my_singleton.foo()  

    6.python中的作用域

    Python 中,一个变量的作用域总是由在代码中被赋值的地方所决定的。
    当 Python 遇到一个变量的话他会按照这样的顺序进行搜索:
    本地作用域(Local)→当前作用域被嵌入的本地作用域(Enclosing locals)→全局/模块作用域(Global)→内置作用域(Built-in)
    

    7.解释下HTTP协议

    HTTP是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。
    HTTP协议的主要特点可概括如下:
    1.支持客户/服务器模式。
    2.简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、HEAD、POST。每种方法规定了客户与服务器联系的类型不同。
    由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。 3.灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。 4.无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。 5.无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。
    缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。

    8.随机生成100个数,然后写入文件

    1.打开一个新文件,准备去写
    2.然后随机生成一个数(整数或者小数),并将该数写入文件中
    3.循环第二部,知道完成100个随机数的生成
    
    import random
    with open("1.txt",'w') as f:
        for i in range(1,101):
            n = random.randint(1,100)
            f.write(str(n)+"
    ")
    

    9.字符串格式化:%s和.format的区别

    字符串的format函数非常灵活,很强大,可以接受的参数不限个数,并且位置可以不按顺序,而且有较为强大的格式限定符(比如:填充,对齐,精度等)
    

    10.xrange和range有什么区别?

     xrange和range实现的功能都是一样的,不过xrange只能在python2中使用,目前基本都使用的是python3,所以用range就可以满足平时的需求 
  • 相关阅读:
    Python自动化测试用例设计--测试类型
    几个常用高阶函数(es6)
    在ES中有关变量和作用域的几个小坑
    HTML快速生成代码的语法(Emmet)
    JavaScript之对象
    C语言格式化输出输入
    常用的win10快捷键
    Scrapy核心组件解析
    scrapy持久化存储的几种方式的简介
    scrapy框架的基础使用流程
  • 原文地址:https://www.cnblogs.com/moning/p/8450132.html
Copyright © 2020-2023  润新知