Python工程師面試題集合

發表於2016-01-17

Python 基礎語法相關

Python中pass語句的作用是什麼?

pass語句什麼也不做,一般作為佔位符或者建立佔位程式,pass語句不會執行任何操作。

Python是如何進行型別轉換的?

Python提供了將變數或值從一種型別轉換成另一種型別的內建函式。比如int函式能夠將符合數學格式數字型字串轉換成整數。否則,返回錯誤資訊。

Python是如何進行記憶體管理的?

Python引用了一個記憶體池(memory pool)機制,即Pymalloc機制(malloc:n.分配記憶體),用於管理對小塊記憶體的申請和釋放。

dict 的 items() 方法與 iteritems() 方法的不同?

items方法將所有的字典以列表方式返回,其中項在返回時沒有特殊的順序;

iteritems方法有相似的作用,但是返回一個迭代器物件

什麼是lambda函式?它有什麼好處?

程式設計中提到的 lambda 表示式,通常是在需要一個函式,但是又不想費神去命名一個函式的場合下使用,也就是指匿名函式。

Python允許你定義一種單行的小函式。定義lambda函式的形式如下:labmda 引數:表示式lambda函式預設返回表示式的值。你也可以將其賦值給一個變數。lambda函式可以接受任意個引數,包括可選引數,但是表示式只有一個。

說明os,sys模組不同,並列舉常用的模組方法?

官方解釋:

os: This module provides a portable way of usingoperating system dependent functionality.

翻譯:提供一種方便的使用作業系統函式的方法。

sys:This module provides access to some variablesused or maintained by the interpreter and to functions that interact stronglywith the interpreter.

翻譯:提供訪問由直譯器使用或維護的變數和在與直譯器互動使用到的函式。

os 常用方法

 

 

sys 常用方法

 

 

Python裡面如何拷貝一個物件?deepcopy 和 copy的區別?

copy 僅拷貝物件本身,而不拷貝物件中引用的其它物件。

deepcopy 除拷貝物件本身,而且拷貝物件中引用的其它物件。

os.path和sys.path的區別?

os.path是module,包含了各種處理長檔名(路徑名)的函式。

sys.path是由目錄名構成的列表,Python 從中查詢擴充套件模組( Python 源模組, 編譯模組,或者二進位制擴充套件). 啟動 Python 時,這個列表從根據內建規則,PYTHONPATH 環境變數的內容, 以及登錄檔( Windows 系統)等進行初始化.

re模組中match和search方法的不同?

match() 函式只檢查 RE 是否在字串開始處匹配,而search() 則是掃描整個字串。

解釋生成器(generator)與函式的不同,並實現和使用簡單generator?

生成器和函式的主要區別在於函式 return avalue,生成器 yield a value同時標記或記憶point of the yield 以便於在下次呼叫時從標記點恢復執行。 yield 使函式轉換成生成器,而生成器反過來又返回迭代器。

Python Web相關

解釋一下 WSGI 和 FastCGI 的關係?

CGI全稱是“公共閘道器介面”(CommonGateway Interface),HTTP伺服器與你的或其它機器上的程式進行“交談”的一種工具,其程式須執行在網路伺服器上。 CGI可以用任何一種語言編寫,只要這種語言具有標準輸入、輸出和環境變數。如php,perl,tcl等。

 

FastCGI像是一個常駐(long-live)型的CGI,它可以一直執行著,只要啟用後,不會每次都要花費時間去fork一次(這是CGI最為人詬病的fork-and-execute模式)。它還支援分散式的運算, 即 FastCGI 程式可以在網站伺服器以外的主機上執行並且接受來自其它網站伺服器來的請求。

FastCGI是語言無關的、可伸縮架構的CGI開放擴充套件,其主要行為是將CGI直譯器程式保持在記憶體中並因此獲得較高的效能。眾所周知,CGI直譯器的反覆載入是CGI效能低下的主要原因,如果CGI直譯器保持在記憶體中並接受FastCGI程式管理器排程,則可以提供良好的效能、伸縮性、Fail- Over特性等等。

WSGI的全稱為: PythonWeb Server Gateway Interface v1.0 (Python Web 伺服器閘道器介面),

它是 Python 應用程式和 WEB 伺服器之間的一種介面。

它的作用,類似於FCGI 或 FASTCGI 之類的協議的作用。

WSGI 的目標,是要建立一個簡單的普遍適用的伺服器與 WEB 框架之間的介面。

Flup就是使用 Python 語言對 WSGI 的一種實現,是可以用於 Python 的應用開發中的一種工具或者說是一種庫。

Spawn-fcgi是一個小程式,這個程式的作用是管理fast-cgi程式,那麼管理wsgi程式也是沒有問題的,功能和php-fpm類似。

故,簡單地說,WSGI和FastCGI都是一種CGI,用於連線WEB伺服器與應用程式,而WSGI專指Python應用程式。而flup是WSGI的一種實現,Spawn-fcgi是用於管理flup程式的一個工具,可以啟動多個wsgi程式,並管理它們。

解釋一下 Django 和 Tornado 的關係、差別

Django源自一個線上新聞 Web站點,於 2005 年以開源的形式被釋放出來。

Django 框架的核心元件有:

用於建立模型的物件關係對映為終端使用者設計的完美管理介面一流的 URL 設計設計者友好的模板語言快取系統等等

它鼓勵快速開發,並遵循MVC設計。Django遵守 BSD版權,最新發行版本是Django

1.4,於2012年03月23日釋出.Django的主要目的是簡便、快速的開發資料庫驅動的網站。它強調程式碼複用,多個元件可以很方便的以“外掛”形式服務於整個框架,Django有許多功能強大的第三方外掛,你甚至可以很方便的開發出自己的工具包。這使得Django具有很強的可擴充套件性。它還強調快速開發和DRY(Do Not RepeatYourself)原則。

Tornado是 FriendFeed使用的可擴充套件的非阻塞式 web 伺服器及其相關工具的開源版本。這個 Web 框架看起來有些像 web.py 或者 Google 的 webapp,不過為了能有效利用非阻塞式伺服器環境,這個 Web 框架還包含了一些相關的有用工具和優化。

Tornado 和現在的主流 Web 伺服器框架(包括大多數Python 的框架)有著明顯的區別:它是非阻塞式伺服器,而且速度相當快。得利於其 非阻塞的方式和對epoll的運用,Tornado 每秒可以處理數以千計的連線,這意味著對於實時 Web服務來說,Tornado 是一個理想的 Web 框架。我們開發這個 Web 伺服器的主要目的就是為了處理 FriendFeed 的實時功能 ——在 FriendFeed 的應用裡每一個活動使用者都會保持著一個伺服器連線。(關於如何擴容 伺服器,以處理數以千計的客戶端的連線的問題。

解釋下django-debug-toolbar的使用

使用django開發站點時,可以使用django-debug-toolbar來進行除錯。在settings.py中新增’debug_toolbar.middleware.DebugToolbarMiddleware’到專案的MIDDLEWARE_CLASSES 內。

解釋下Django使用redis快取伺服器

為了能在Django中使用redis,還需要安裝redis for Django的外掛。然後在Django的settings中配置了。現在連線和配置都已經完成了,接下來是一個簡單的例子:

 

 

如何進行Django單元測試

Django的單元測試使用python的unittest模組,這個模組使用基於類的方法來定義測試。類名為django.test.TestCase,繼承於python的unittest.TestCase。

執行目錄下所有的測試(所有的test*.py檔案):執行測試的時候,測試程式會在所有以test開頭的檔案中查詢所有的test cases(inittest.TestCase的子類),自動建立測試集然後執行測試。

 

 

執行animals專案下tests包裡的測試:

 

 

執行animals專案裡的test測試:

 

 

單獨執行某個test case:

 

 

單獨執行某個測試方法:

 

 

為測試檔案提供路徑:

 

 

通配測試檔名:

 

 

啟用warnings提醒:

 

 

解釋下Http協議

HTTP是一個屬於應用層的物件導向的協議,由於其簡捷、快速的方式,適用於分散式超媒體資訊系統。

HTTP協議的主要特點可概括如下:

1.支援客戶/伺服器模式。

2.簡單快速:客戶向伺服器請求服務時,只需傳送請求方法和路徑。請求方法常用的有GET、HEAD、POST。每種方法規定了客戶與伺服器聯絡的型別不同。由於HTTP協議簡單,使得HTTP伺服器的程式規模小,因而通訊速度很快。

3.靈活:HTTP允許傳輸任意型別的資料物件。正在傳輸的型別由Content-Type加以標記。

4.無連線:無連線的含義是限制每次連線只處理一個請求。伺服器處理完客戶的請求,並收到客戶的應答後,即斷開連線。採用這種方式可以節省傳輸時間。

5.無狀態:HTTP協議是無狀態協議。無狀態是指協議對於事務處理沒有記憶能力。缺少狀態意味著如果後續處理需要前面的資訊,則它必須重傳,這樣可能導致每次連線傳送的資料量增大。另一方面,在伺服器不需要先前資訊時它的應答就較快。

解釋下Http請求頭和常見響應狀態碼

Accept:指瀏覽器或其他客戶可以接愛的MIME檔案格式。可以根據它判斷並返回適當的檔案格式。

Accept-Charset:指出瀏覽器可以接受的字元編碼。英文瀏覽器的預設值是ISO-8859-1.

Accept-Language:指出瀏覽器可以接受的語言種類,如en或en-us,指英語。

Accept-Encoding:指出瀏覽器可以接受的編碼方式。編碼方式不同於檔案格式,它是為了壓縮檔案並加速檔案傳遞速度。瀏覽器在接收到Web響應之後先解碼,然後再檢查檔案格式。

Cache-Control:設定關於請求被代理伺服器儲存的相關選項。一般用不到。

Connection:用來告訴伺服器是否可以維持固定的HTTP連線。HTTP/1.1使用Keep-Alive為預設值,這樣,當瀏覽器需要多個檔案時(比如一個HTML檔案和相關的圖形檔案),不需要每次都建立連線。

Content-Type:用來表名request的內容型別。可以用HttpServletRequest的getContentType()方法取得。

Cookie:瀏覽器用這個屬性向伺服器傳送Cookie。Cookie是在瀏覽器中寄存的小型資料體,它可以記載和伺服器相關的使用者資訊,也可以用來實現會話功能。

 

狀態程式碼有三位數字組成,第一個數字定義了響應的類別,且有五種可能取值:

1xx:指示資訊–表示請求已接收,繼續處理

2xx:成功–表示請求已被成功接收、理解、接受

3xx:重定向–要完成請求必須進行更進一步的操作

4xx:客戶端錯誤–請求有語法錯誤或請求無法實現

5xx:伺服器端錯誤–伺服器未能實現合法的請求

常見狀態程式碼、狀態描述、說明:

200 OK     //客戶端請求成功

400 Bad Request  //客戶端請求有語法錯誤,不能被伺服器所理解

401 Unauthorized //請求未經授權,這個狀態程式碼必須和WWW-Authenticate報頭域一起使用

403 Forbidden  //伺服器收到請求,但是拒絕提供服務

404 Not Found  //請求資源不存在,eg:輸入了錯誤的URL

500 Internal Server Error //伺服器發生不可預期的錯誤

503 Server Unavailable  //伺服器當前不能處理客戶端的請求,一段時間後可能恢復正常

eg:HTTP/1.1 200 OK (CRLF)

相關文章