面試第三篇

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就能夠知足平時的需求 
相關文章
相關標籤/搜索