面试第三篇

1.python线程池原理?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.单例模式dom

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个数,而后写入文件ui

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)+"\n")

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

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

10.xrange和range有什么区别?code

 xrange和range实现的功能都是同样的,不过xrange只能在python2中使用,目前基本都使用的是python3,因此用range就能够知足平时的需求 
相关文章
相关标签/搜索