1. 程式人生 > >python筆試題(二)

python筆試題(二)

search let 趨勢 object 協程 div python實現 python函數 start

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把內存根據對象存活時間劃分為三代,對象創建之後,垃圾回收器會分配它們所屬的代。每個對象都會被分配一個代,而被分配更年輕的代被優先處理,因此越晚創建的對象越容易被回收。

python筆試題(二)