標籤:共用 節點 八進位 分代 單元 node 關閉 資料類型 地址
1、什麼是pickling和unpickling?(1分)
Pickle模組接受任何Python對象,並將其轉換為字串,使用dump函數將其轉儲到檔案中,這個過程稱為pickling。從儲存的字串表示中檢索原始Python對象的過程稱為unpickling。
2、作為解釋型語言,Python如何運行?(1分)
Python是一種解釋型語言。Python程式直接從原始碼運行,將程式員編寫的原始碼轉換成中繼語言,再將中繼語言翻譯成必須執行的機器語言。
3、有哪些工具可以協助尋找錯誤或執行靜態分析?(2分)
PyChecker是一個靜態分析工具,用於檢測Python原始碼中的錯誤,並給出錯誤的類型和複雜性。Pylint是驗證模組是否符合編碼通訊協定的另一種工具。
4、按下述要求編寫代碼,實現以下功能:(5分)
(1)編寫代碼下載https://en.wikipedia.org/wiki/Machine_translation 頁面的內容並儲存為mt.html
(2)統計mt.html中<p>標籤下所有單詞並儲存到mt_word.txt中,要求:
a) 每個單詞一行。單詞在前,單詞出現的次數在後,中間用Tab()分隔。
b) 單詞按照數目從多到少排列。比如說單詞a出現了100次,單詞b出現了10次,則單詞a要在單詞b前面。
5、下面的代碼會輸出什麼:(2分)
def f(x,l=[]): for i in range(x): l.append(i*i) print l f(2)f(3,[3,2,1])f(3)
答案:
[0, 1][3, 2, 1, 0, 1, 4][0, 1, 0, 1, 4]
6、閱讀下面的代碼,它的輸出結果是什嗎?(6分)
class Node(object): def __init__(self,sName): self._lChildren = [] self.sName = sName def __repr__(self): return "<Node ‘{}‘>".format(self.sName) def append(self,*args,**kwargs): self._lChildren.append(*args,**kwargs) def print_all_1(self): print self for oChild in self._lChildren: oChild.print_all_1() def print_all_2(self): def gen(o): lAll = [o,] while lAll: oNext = lAll.pop(0) lAll.extend(oNext._lChildren) yield oNext for oNode in gen(self): print oNode oRoot = Node("root") oChild1 = Node("child1") oChild2 = Node("child2") oChild3 = Node("child3") oChild4 = Node("child4") oChild5 = Node("child5") oChild6 = Node("child6") oChild7 = Node("child7") oChild8 = Node("child8") oChild9 = Node("child9") oChild10 = Node("child10") oRoot.append(oChild1) oRoot.append(oChild2) oRoot.append(oChild3) oChild1.append(oChild4) oChild1.append(oChild5) oChild2.append(oChild6) oChild4.append(oChild7) oChild3.append(oChild8) oChild3.append(oChild9) oChild6.append(oChild10) # 說明下面代碼的輸出結果 oRoot.print_all_1() oRoot.print_all_2()
答案
7、Python中lambda是什麼意思?(1分)
它是一個經常用作內嵌函式的單個運算式匿名函數。
8、為什麼python中的lambda表單沒有語句?(1分)
python中的lambda表單沒有語句,因為它用於建立新的函數對象,然後在運行時返回它們。
9、Python中的pass是什麼意思?(1分)
pass意味著沒有任何操作的Python語句,換句話說,它是複合陳述式中的一個預留位置,如果一個地方沒有什麼必須寫在那裡,就需要用上pass了。
10、閱讀下面的代碼,寫出A0,A1至An的最終值。(5分)
A0 = dict(zip((‘a‘,‘b‘,‘c‘,‘d‘,‘e‘),(1,2,3,4,5)))A1 = range(10)A2 = [i for i in A1 if i in A0]A3 = [A0[s] for s in A0]A4 = [i for i in A1 if i in A3]A5 = {i:i*i for i in A1}A6 = [[i,i*i] for i in A1]
11、什麼是Python的單元測試?(1分)
Python中的單元測試架構被稱為unittest。它支援共用設定,自動化測試,測試關機代碼,測試集合等。
12、在Python中unittest是什嗎?(1分)
從列表,元組,字串等序列類型中選擇一系列項目的機制被稱為unittest。
13、什麼是Python中的產生器?(1分)
實現迭代器的方式被稱為產生器。除了在函數中產生運算式之外,它是一個正常的函數。
14、__new__和__init__的區別(4分)
15、如何複製Python中的對象?(2分)
要在Python中複製對象,一般情況下可以嘗試copy.copy()或copy.deepcopy()。不能複製所有的對象,但大多數還是可以的。
16、如何將數字轉換為字串?(2分)
為了將數字轉換為字串,使用內建函數str()。如果想要一個八進位或十六進位表示,使用內建函數oct()或 hex()。
17、Xrange和range有什麼區別?(2分)
Xrange返回一個xrange對象,而range返回一個數組。不管範圍多大,使用同樣的記憶體。
18、什麼是Python中的模組和包?(3分)
在Python中,模組是構造程式的方式。每個Python程式檔案都是一個模組,它匯入其他模組,如對象和屬性。
Python程式的檔案夾是一個模組包,包可以有模組或子檔案夾。
19、提到Python中的局部和全域變數的規則是什嗎?(3分)
局部變數:如果一個變數在函數體內的任何地方被分配了一個新的值,它被認為是本地的。
全域變數:使用global定義的變數就是全域變數
當局部變數名字和全域變數名字重複時,局部變數會覆蓋掉全域變數。
20、怎樣才能跨模組共用全域變數?(3分)
要在單個程式的模組之間共用全域變數,請建立一個配置模組。在應用程式的所有模組中匯入配置模組,該模組將作為跨模組的全域變數提供。
21、解釋如何在Unix上建立一個Python指令碼可執行檔?(4分)
要在Unix上建立Python指令碼可執行檔需要做兩件事情:
·Script檔案的模式必須是可執行檔
·第一行必須以#(#!/ usr / local / bin / python)開頭
22、Python記憶體回收機制(3分)
Python GC主要使用引用計數(reference counting)來跟蹤和回收垃圾。在引用計數的基礎上,通過“標記-清除”(mark and sweep)解決容器物件可能產生的循環參考問題,通過“分代回收”(generation collection)以空間換時間的方法提高記憶體回收效率。
23、解釋如何在Python中產生隨機數字?(3分)
要在Python中產生隨機數需要將命令匯入
隨機匯入:random.random()
這將返回範圍[0,1)中的隨機浮點數
24、解釋如何訪問用C語言編寫的Python模組?(3分)
你可以通過下面的方法訪問一個用C寫成的模組,
Module = = PyImport_ImportModule(“<modulename>”);
25、在Python中如何使用//運算子?(1分)
它是一個Floor Division Operator,用於將兩個運算元相除,結果為小數點前面的數字。例如,10 // 5 = 2和10.0 // 5.0 = 2.0。
26、提到使用Python的五個好處?(2分)
·Python包含了大多數互連網平台(如電子郵件,HTML等)的巨大標準庫。
·Python不需要顯式的記憶體管理,因為解譯器本身將記憶體配置給新變數並自動釋放它們
·由於使用方括弧而提供易讀性
·易於初學者學習
·具有內建的資料類型,可以節省編程時間和工作量,從而聲明變數。
27、簡單說明在Python中如何使用split函數?(1分)
在Python中使用split函數是使用定義的分隔字元將字串分解成更短的字串。它給出了字串中所有單詞的列表。
28、解釋什麼是Flask及其好處?(2分)
Flask是一個基於“Werkzeug,Jinja 2和良好意圖”BSD許可的web微型架構,Werkzeug和jingja是它的兩個依賴項。
Flask是微觀架構的一部分。這意味著它將很少或不依賴於外部庫,它使架構輕而易舉,更新和安全性漏洞更少。
29、Django,Pyramid和Flask有什麼區別?(3分)
Flask是一個“微架構”,主要用於需求更簡單的小型應用程式。在Flask中,你必須使用外部庫。
Pyramid是為更大的應用程式建立的。它提供了靈活性,並讓開發人員為他們的項目使用正確的工具。開發人員可以選擇資料庫,URL結構,模板樣式等等。
Pyramid可重新設定。像Pyramid一樣,Django也可以用於更大的應用程式。 它包括一個ORM。
30、Flask-WTF是什麼,有什麼特點?(3分)
Flask-WTF提供了與WTForms的簡單整合,功能包括:
·與wtforms整合
·使用csrf令牌安全形式
·全球csrf保護
·Reptcha支援
·與Flask Uploads一起使用的檔案上傳
31、Flask指令碼的常用方式是什嗎?(1分)
應該是應用程式的匯入路徑或Python檔案的路徑
32、如何在Flask中訪問會話?(2分)
一個會話基本上允許記住從一個請求到另一個請求的資訊。在Flask中,它使用簽名的cookie,以便使用者可以查看會話內容並進行修改。使用者可以修改會話,只要它有密鑰Flask.secret_key。
33、Flask是一個MVC模型嗎?如果是,可以樣本一下嗎?(5分)
基本上,Flask是一個簡單的架構,其行為與MVC架構相同。所以MVC是Flask的完美選擇,樣本參考如下:
34、解釋Python Flask中的資料庫連接?(5分)
Flask支援資料庫驅動的應用程式(RDBS)。這樣的系統需要建立一個模式,將shema.sql檔案傳送到sqlite3命令。所以需要sqlite3命令才能在Flask中建立或啟動資料庫。
Flask允許以三種方式請求資料庫
·before_request():它們在請求前被調用並且不傳遞任何參數
·after_request():它們在請求之後被調用並且傳遞將被發送到用戶端響應
·teardown_request():在引發異常的情況下調用,並且不保證響應。他們在響應結束後被調用。他們不允許修改請求,他們的值被忽略。
35、你有多個運行Python的Memcache伺服器,其中一個memcacher伺服器失敗,它有你的資料,它會試圖從那個失敗的伺服器擷取關鍵資料嗎?(5分)
發生故障的伺服器中的資料不會被刪除,但是可以為多個節點配置自動故障規定。可以在任何類型的通訊端或Memcached伺服器級錯誤期間觸發故障切換,而不會在正常的用戶端錯誤(如添加現有密鑰等)期間觸發。
36、解釋如何最大限度地減少Python開發中的Memcached伺服器中斷?(5分)
當一個執行個體失敗,這將在用戶端發出請求時重新載入丟失的資料,在資料庫伺服器上承受更大的負載。為了避免這種情況,如果代碼已經寫入,盡量減少緩衝的衝擊,那麼它將產生最小的影響
另一種方法是使用丟失的機器IP地址在新機器上啟動Memcached執行個體
代碼是最大限度減少伺服器停機的另一種方法,因為它可以自由地以最少的工作更改Memcached伺服器列表
設定逾時值是一些Memcached用戶端為Memcached伺服器中斷實現的另一個選項。當Memcached伺服器關閉時,用戶端將不斷嘗試發送請求,直到達到逾時限制
37、解釋Python項目中應不應該使用Memcached?(5分)
Memcached常見的誤用是將其用作資料存放區,而不是用作緩衝
切勿使用Memcached作為運行應用程式所需資訊的唯一來源,資料應該始終可以通過其他來源獲得
Memcached只是一個鍵或值儲存,不能對資料執行查詢或遍曆內容以提取資訊
Memcached在加密或認證時不提供任何形式的安全性
[Python Study Notes]python面試題