尋夢新聞LINE@每日推播熱門推薦文章,趣聞不漏接❤️
Python是一門學習曲線較為容易的編程語言,隨著人工智能時代的到來,Python迎來了新一輪的高潮。目前,國內知乎、網易(遊戲)、騰訊(某些網站)、搜狐(郵箱)、金山、豆瓣屬於使用Python較為知名的企業。國外YouTube、Google、Yelp、Slide等也或多或少在使用Python。如果你想應聘Python相關職位,不妨面試前自測一下自己對基礎知識掌握程度如何?下面是一張一百分的試卷,看看你自己能得幾分?
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(\t)分隔。
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在加密或認證時不提供任何形式的安全性
總共一百分的試卷,你得了多少分呢?