1.什麼是GIL? GIL全稱Global Interpreter Lock,本質是一把互斥鎖,並非python的特性。python爲了保證線程安全而採起的獨立線程運行的限制, 說白了就是一個核只能在同一時間運行一個線程.對於IO密集型任務,python多線程起到做用,但對於cpu密集型任務, python的多線程幾乎佔不到什麼優點,還有可能由於爭奪資源而變慢。 2.python中staticmethod和classmethod的區別? 區別:調用方法不一樣 靜態方法:由類調用,無默認參數 類方法:由類調用,至少一個cls參數,執行類方法時,自動將調用該方法的類複製給self 3.python裏面如何拷貝一個對象,並解釋深淺拷貝 通常來講可使用copy.copy()方法或者copy.deepcopy()方法 淺拷貝:建立一個新的對象,但它包含的是對原始對象中包含項的引用(若是用引用的方式修改其中一個對象,另一個也會被改變) 深拷貝:建立一個新的對象,而且遞歸的複製它所包含的對象(修改其中一個,另外一個不會改變) 4.python裏面的search()和match()的區別 re模塊中match(pattern,string),檢查string的開頭是否與pattern匹配,返回一個匹配的對象,若是沒找到,返回None re模塊中search(pattern,string),在string中搜索第一個匹配值,若是沒找到,返回None 5.簡述迭代器和生成器以及他們之間的區別? 生成器:生成器是一次生成一個值的特殊函數,在函數執行的過程當中,yield語句會把你須要的值返回給調用生成器的地方,而後退出函數, 下次調用生成器函數的時候,又從上次中斷的地方開始執行,而且生成器內的變量參數會被保存下來供下次使用。 迭代器:任何實現了__iter__和__next__方法的對象都是迭代器。__iter__返回迭代器自身,__next__返回容器中的下一個值。 生成器是特殊的迭代器,它內部具備這兩種方法 6.什麼是協程?python的協程是如何實現的? 協程是一種用戶態的輕量級線程,協程的調度徹底由用戶控制。協程擁有本身的寄存器上下文和棧,協程調度切換時,將寄存器上下文和棧保存到其餘地方, 在切回來時恢復先前保存的上下文和棧,直接操做棧且基本沒有內核切換的開銷,能夠不加鎖的訪問全局變量, 好比在執行函數A的時候,中斷去執行函數B,過會切過來接着執行函數A。 python的協程經過yield關鍵字來實現. 7.什麼是裝飾器?請用裝飾器實現singleton 裝飾器本質上是一個python函數或者類,它可讓其餘函數或者類在不須要作任何代碼修改的前提下, 增長額外功能,裝飾器的返回值也是一個函數/類對象. def singleton(cls,*args,**kwargs): instance = {} def _singleton(): if cls not in instance: instance[cls] = cls(*args, **kwargs) return instance[cls] return _singleton @singleton class test_singleton(object): def __init__(self): self.number = 0 def add(self): self.num_add = 10 obj_1 = test_singleton() obj_2 = test_singleton() print(obj_1,obj_2): 8.請使用python實現快速排序 def Quick_Sort(my_List,start,end): if start < end: i,j = start,end base = my_List[i] while i < j: while (i < j) and (my_List[j] >= base): j = j - 1 my_List[i] = my_List[j] while (i < j) and (my_List[i] <= base): i = i + 1 my_List[j] = my_List[i] my_List[i]=base QuickSort(my_List,start,i-1) QuickSort(my_List,j+1,end) return my_List my_List = [42,30,61,80,74,20,24,45] Quick_Sort(my_List,0,len(my_List)-1) print(my_List) 9.簡述MyISAM和InnoDB的特色。 MyISAM適合於一些須要大量查詢的應用,但對於有大量寫操做並非很好。好比你只是須要update一個字段,整個表都會被鎖起來,而別的進程, 就算是讀進程都沒法操做直到讀操做完成。另外,MyISAM對於select count(*) 這類的計算很是快。 InnoDB的趨勢會是一個很是複雜的存儲引擎,對於小的應用,會比MyISAM慢,可是支持’行鎖‘,在寫操做較多時更方便,還支持更多高級應用,好比事務。 10.簡述python的垃圾回收機制 python中的垃圾回收是以引用計數爲主,標記-清除和分代收集爲輔。 引用計數:python在內存中存儲每一個對象的引用技術,若是計數變成0,該對象就會消失,分配給該對象的內存就會釋放。 標記-清除:一些容器對象,好比list,dict,tuple,instace等可能會出現引用循環,對於這些循環,垃圾回收器會定時回收這些循環(對象之間經過引用(指針)連在一塊兒, 構成一個有向圖,對象構成這個有向圖的節點,而引用關係構成這個有向圖的邊). 分代收集:python把內存根據對象存活時間劃分爲三代,對象建立以後,垃圾回收器會分配它們所屬的代。每一個對象都會被分配一個代,而被分配更年輕的代被優先處理,所以越晚建立的對象越容易被回收。