今天給大家分享的是Python面試題系列的第一篇文章宰译,后續(xù)我也會(huì)陸續(xù)整理Python相關(guān)的問題給大家,無論是求職者還是新人都可以通過面試題來考察自己的能力缺陷魄懂。
1.Python中pass語句的作用是什么沿侈?
pass語句什么也不做,一般作為占位符或者創(chuàng)建占位程序市栗,pass語句不會(huì)執(zhí)行任何操作缀拭。
2.Python是如何進(jìn)行類型轉(zhuǎn)換的?
Python提供了將變量或值從一種類型轉(zhuǎn)換成另一種類型的內(nèi)置函數(shù)填帽。比如int函數(shù)能夠?qū)⒎蠑?shù)學(xué)格式數(shù)字型字符串轉(zhuǎn)換成整數(shù)蛛淋。否則,返回錯(cuò)誤信息篡腌。
3.Python是如何進(jìn)行內(nèi)存管理的褐荷?
Python引用了一個(gè)內(nèi)存池(memory pool)機(jī)制,即Pymalloc機(jī)制(malloc:n.分配內(nèi)存)嘹悼,用于管理對(duì)小塊內(nèi)存的申請(qǐng)和釋放叛甫。
4.dict 的 items() 方法與 iteritems() 方法的不同?
items方法將所有的字典以列表方式返回杨伙,其中項(xiàng)在返回時(shí)沒有特殊的順序其监;
iteritems方法有相似的作用,但是返回一個(gè)迭代器對(duì)象
5.什么是lambda函數(shù)限匣?它有什么好處?
編程中提到的 lambda 表達(dá)式棠赛,通常是在需要一個(gè)函數(shù),但是又不想費(fèi)神去命名一個(gè)函數(shù)的場合下使用膛腐,也就是指匿名函數(shù)睛约。
Python允許你定義一種單行的小函數(shù)。定義lambda函數(shù)的形式如下:labmda 參數(shù):表達(dá)式lambda函數(shù)默認(rèn)返回表達(dá)式的值哲身。你也可以將其賦值給一個(gè)變量辩涝。lambda函數(shù)可以接受任意個(gè)參數(shù),包括可選參數(shù)勘天,但是表達(dá)式只有一個(gè)怔揩。
6.說明os,sys模塊不同,并列舉常用的模塊方法脯丝?
官方解釋:
os: This module provides a portable way of usingoperating system dependent functionality.
翻譯:提供一種方便的使用操作系統(tǒng)函數(shù)的方法商膊。
sys:This module provides access to some variablesused or maintained by the interpreter and to functions that interact stronglywith the interpreter.
翻譯:提供訪問由解釋器使用或維護(hù)的變量和在與解釋器交互使用到的函數(shù)。
os 常用方法
sys 常用方法
7.Python里面如何拷貝一個(gè)對(duì)象宠进?deepcopy 和 copy的區(qū)別晕拆?
copy 僅拷貝對(duì)象本身,而不拷貝對(duì)象中引用的其它對(duì)象材蹬。
deepcopy 除拷貝對(duì)象本身实幕,而且拷貝對(duì)象中引用的其它對(duì)象吝镣。
8.os.path和sys.path的區(qū)別?
os.path是module昆庇,包含了各種處理長文件名(路徑名)的函數(shù)末贾。
sys.path是由目錄名構(gòu)成的列表,Python 從中查找擴(kuò)展模塊( Python 源模塊, 編譯模塊,或者二進(jìn)制擴(kuò)展). 啟動(dòng) Python 時(shí),這個(gè)列表從根據(jù)內(nèi)建規(guī)則,PYTHONPATH 環(huán)境變量的內(nèi)容, 以及注冊(cè)表( Windows 系統(tǒng))等進(jìn)行初始化.
9.re模塊中match和search方法的不同整吆?
match() 函數(shù)只檢查 RE 是否在字符串開始處匹配拱撵,而search() 則是掃描整個(gè)字符串。
10.解釋生成器(generator)與函數(shù)的不同表蝙,并實(shí)現(xiàn)和使用簡單generator拴测?
生成器和函數(shù)的主要區(qū)別在于函數(shù) return avalue,生成器 yield a value同時(shí)標(biāo)記或記憶point of the yield 以便于在下次調(diào)用時(shí)從標(biāo)記點(diǎn)恢復(fù)執(zhí)行勇哗。 yield 使函數(shù)轉(zhuǎn)換成生成器,而生成器反過來又返回迭代器寸齐。
11.解釋一下 WSGI 和 FastCGI 的關(guān)系欲诺?
CGI全稱是“公共網(wǎng)關(guān)接口”(CommonGateway Interface),HTTP服務(wù)器與你的或其它機(jī)器上的程序進(jìn)行“交談”的一種工具渺鹦,其程序須運(yùn)行在網(wǎng)絡(luò)服務(wù)器上扰法。 CGI可以用任何一種語言編寫毅厚,只要這種語言具有標(biāo)準(zhǔn)輸入塞颁、輸出和環(huán)境變量。如php,perl,tcl等吸耿。
FastCGI像是一個(gè)常駐(long-live)型的CGI祠锣,它可以一直執(zhí)行著,只要激活后咽安,不會(huì)每次都要花費(fèi)時(shí)間去fork一次(這是CGI最為人詬病的fork-and-execute模式)伴网。它還支持分布式的運(yùn)算, 即 FastCGI 程序可以在網(wǎng)站服務(wù)器以外的主機(jī)上執(zhí)行并且接受來自其它網(wǎng)站服務(wù)器來的請(qǐng)求。
FastCGI是語言無關(guān)的妆棒、可伸縮架構(gòu)的CGI開放擴(kuò)展澡腾,其主要行為是將CGI解釋器進(jìn)程保持在內(nèi)存中并因此獲得較高的性能。眾所周知糕珊,CGI解釋器的反復(fù)加載是CGI性能低下的主要原因动分,如果CGI解釋器保持在內(nèi)存中并接受FastCGI進(jìn)程管理器調(diào)度,則可以提供良好的性能红选、伸縮性澜公、Fail- Over特性等等。
WSGI的全稱為: PythonWeb Server Gateway Interface v1.0 (Python Web 服務(wù)器網(wǎng)關(guān)接口)喇肋,
它是 Python 應(yīng)用程序和 WEB 服務(wù)器之間的一種接口玛瘸。
它的作用蜕青,類似于FCGI 或 FASTCGI 之類的協(xié)議的作用。
WSGI 的目標(biāo)糊渊,是要建立一個(gè)簡單的普遍適用的服務(wù)器與 WEB 框架之間的接口右核。
Flup就是使用 Python 語言對(duì) WSGI 的一種實(shí)現(xiàn),是可以用于 Python 的應(yīng)用開發(fā)中的一種工具或者說是一種庫渺绒。
Spawn-fcgi是一個(gè)小程序贺喝,這個(gè)程序的作用是管理fast-cgi進(jìn)程,那么管理wsgi進(jìn)程也是沒有問題的宗兼,功能和php-fpm類似躏鱼。
故,簡單地說殷绍,WSGI和FastCGI都是一種CGI染苛,用于連接WEB服務(wù)器與應(yīng)用程序,而WSGI專指Python應(yīng)用程序主到。而flup是WSGI的一種實(shí)現(xiàn)茶行,Spawn-fcgi是用于管理flup進(jìn)程的一個(gè)工具,可以啟動(dòng)多個(gè)wsgi進(jìn)程登钥,并管理它們畔师。
12.解釋一下 Django 和 Tornado 的關(guān)系、差別
Django源自一個(gè)在線新聞 Web站點(diǎn)牧牢,于 2005 年以開源的形式被釋放出來看锉。
Django 框架的核心組件有:
用于創(chuàng)建模型的對(duì)象關(guān)系映射為最終用戶設(shè)計(jì)的完美管理界面一流的 URL 設(shè)計(jì)設(shè)計(jì)者友好的模板語言緩存系統(tǒng)等等
它鼓勵(lì)快速開發(fā),并遵循MVC設(shè)計(jì)。Django遵守 BSD版權(quán)塔鳍,最新發(fā)行版本是Django
1.4伯铣,于2012年03月23日發(fā)布.Django的主要目的是簡便、快速的開發(fā)數(shù)據(jù)庫驅(qū)動(dòng)的網(wǎng)站轮纫。它強(qiáng)調(diào)代碼復(fù)用,多個(gè)組件可以很方便的以“插件”形式服務(wù)于整個(gè)框架懂傀,Django有許多功能強(qiáng)大的第三方插件,你甚至可以很方便的開發(fā)出自己的工具包蜡感。這使得Django具有很強(qiáng)的可擴(kuò)展性蹬蚁。它還強(qiáng)調(diào)快速開發(fā)和DRY(Do Not RepeatYourself)原則。
Tornado是 FriendFeed使用的可擴(kuò)展的非阻塞式 web 服務(wù)器及其相關(guān)工具的開源版本郑兴。這個(gè) Web 框架看起來有些像 web.py 或者 Google 的 webapp犀斋,不過為了能有效利用非阻塞式服務(wù)器環(huán)境,這個(gè) Web 框架還包含了一些相關(guān)的有用工具和優(yōu)化情连。
Tornado 和現(xiàn)在的主流 Web 服務(wù)器框架(包括大多數(shù)Python 的框架)有著明顯的區(qū)別:它是非阻塞式服務(wù)器叽粹,而且速度相當(dāng)快。得利于其 非阻塞的方式和對(duì)epoll的運(yùn)用,Tornado 每秒可以處理數(shù)以千計(jì)的連接虫几,這意味著對(duì)于實(shí)時(shí) Web服務(wù)來說锤灿,Tornado 是一個(gè)理想的 Web 框架。我們開發(fā)這個(gè) Web 服務(wù)器的主要目的就是為了處理 FriendFeed 的實(shí)時(shí)功能 ——在 FriendFeed 的應(yīng)用里每一個(gè)活動(dòng)用戶都會(huì)保持著一個(gè)服務(wù)器連接辆脸。(關(guān)于如何擴(kuò)容 服務(wù)器但校,以處理數(shù)以千計(jì)的客戶端的連接的問題歇式。
13.解釋下django-debug-toolbar的使用
使用django開發(fā)站點(diǎn)時(shí)步鉴,可以使用django-debug-toolbar來進(jìn)行調(diào)試。在settings.py中添加’debug_toolbar.middleware.DebugToolbarMiddleware’到項(xiàng)目的MIDDLEWARE_CLASSES 內(nèi)旭蠕。
14.解釋下Django使用redis緩存服務(wù)器
為了能在Django中使用redis倘是,還需要安裝redis for Django的插件亭枷。然后在Django的settings中配置了。現(xiàn)在連接和配置都已經(jīng)完成了搀崭,接下來是一個(gè)簡單的例子:
15.如何進(jìn)行Django單元測試
Django的單元測試使用python的unittest模塊叨粘,這個(gè)模塊使用基于類的方法來定義測試。類名為django.test.TestCase,繼承于python的unittest.TestCase瘤睹。
執(zhí)行目錄下所有的測試(所有的test*.py文件):運(yùn)行測試的時(shí)候升敲,測試程序會(huì)在所有以test開頭的文件中查找所有的test cases(inittest.TestCase的子類),自動(dòng)建立測試集然后運(yùn)行測試。
$python manage.pytest
執(zhí)行animals項(xiàng)目下tests包里的測試:
$ python manage.py testanimals.tests
執(zhí)行animals項(xiàng)目里的test測試:
$ python manage.py testanimals
單獨(dú)執(zhí)行某個(gè)test case:
$ python manage.py testanimals.tests.AnimalTestCase
單獨(dú)執(zhí)行某個(gè)測試方法:
$ python manage.py testanimals.tests.AnimalTestCase.test_animals_can_speak
為測試文件提供路徑:
$ python manage.py testanimals/
通配測試文件名:
$python manage.pytest--pattern="tests_*.py"
啟用warnings提醒:
$python -Wall manage.pytest
16.解釋下Http協(xié)議
HTTP是一個(gè)屬于應(yīng)用層的面向?qū)ο蟮膮f(xié)議默蚌,由于其簡捷冻晤、快速的方式苇羡,適用于分布式超媒體信息系統(tǒng)绸吸。
HTTP協(xié)議的主要特點(diǎn)可概括如下:
1.支持客戶/服務(wù)器模式。
2.簡單快速:客戶向服務(wù)器請(qǐng)求服務(wù)時(shí)设江,只需傳送請(qǐng)求方法和路徑锦茁。請(qǐng)求方法常用的有GET、HEAD叉存、POST码俩。每種方法規(guī)定了客戶與服務(wù)器聯(lián)系的類型不同。由于HTTP協(xié)議簡單歼捏,使得HTTP服務(wù)器的程序規(guī)模小稿存,因而通信速度很快。
3.靈活:HTTP允許傳輸任意類型的數(shù)據(jù)對(duì)象瞳秽。正在傳輸?shù)念愋陀蒀ontent-Type加以標(biāo)記瓣履。
4.無連接:無連接的含義是限制每次連接只處理一個(gè)請(qǐng)求。服務(wù)器處理完客戶的請(qǐng)求练俐,并收到客戶的應(yīng)答后袖迎,即斷開連接。采用這種方式可以節(jié)省傳輸時(shí)間。
5.無狀態(tài):HTTP協(xié)議是無狀態(tài)協(xié)議燕锥。無狀態(tài)是指協(xié)議對(duì)于事務(wù)處理沒有記憶能力辜贵。缺少狀態(tài)意味著如果后續(xù)處理需要前面的信息,則它必須重傳归形,這樣可能導(dǎo)致每次連接傳送的數(shù)據(jù)量增大托慨。另一方面,在服務(wù)器不需要先前信息時(shí)它的應(yīng)答就較快连霉。
17.解釋下Http請(qǐng)求頭和常見響應(yīng)狀態(tài)碼
Accept:指瀏覽器或其他客戶可以接愛的MIME文件格式榴芳。可以根據(jù)它判斷并返回適當(dāng)?shù)奈募袷健?/p>
Accept-Charset:指出瀏覽器可以接受的字符編碼跺撼。英文瀏覽器的默認(rèn)值是ISO-8859-1.
Accept-Language:指出瀏覽器可以接受的語言種類窟感,如en或en-us,指英語歉井。
Accept-Encoding:指出瀏覽器可以接受的編碼方式柿祈。編碼方式不同于文件格式,它是為了壓縮文件并加速文件傳遞速度哩至。瀏覽器在接收到Web響應(yīng)之后先解碼躏嚎,然后再檢查文件格式。
Cache-Control:設(shè)置關(guān)于請(qǐng)求被代理服務(wù)器存儲(chǔ)的相關(guān)選項(xiàng)菩貌。一般用不到卢佣。
Connection:用來告訴服務(wù)器是否可以維持固定的HTTP連接。HTTP/1.1使用Keep-Alive為默認(rèn)值箭阶,這樣虚茶,當(dāng)瀏覽器需要多個(gè)文件時(shí)(比如一個(gè)HTML文件和相關(guān)的圖形文件),不需要每次都建立連接仇参。
Content-Type:用來表名request的內(nèi)容類型嘹叫。可以用HttpServletRequest的getContentType()方法取得诈乒。
Cookie:瀏覽器用這個(gè)屬性向服務(wù)器發(fā)送Cookie罩扇。Cookie是在瀏覽器中寄存的小型數(shù)據(jù)體,它可以記載和服務(wù)器相關(guān)的用戶信息怕磨,也可以用來實(shí)現(xiàn)會(huì)話功能喂饥。
狀態(tài)代碼有三位數(shù)字組成,第一個(gè)數(shù)字定義了響應(yīng)的類別肠鲫,且有五種可能取值:
1xx:指示信息–表示請(qǐng)求已接收员帮,繼續(xù)處理
2xx:成功–表示請(qǐng)求已被成功接收、理解滩届、接受
3xx:重定向–要完成請(qǐng)求必須進(jìn)行更進(jìn)一步的操作
4xx:客戶端錯(cuò)誤–請(qǐng)求有語法錯(cuò)誤或請(qǐng)求無法實(shí)現(xiàn)
5xx:服務(wù)器端錯(cuò)誤–服務(wù)器未能實(shí)現(xiàn)合法的請(qǐng)求
常見狀態(tài)代碼集侯、狀態(tài)描述被啼、說明:
200 OK //客戶端請(qǐng)求成功
400 Bad Request //客戶端請(qǐng)求有語法錯(cuò)誤,不能被服務(wù)器所理解
401 Unauthorized //請(qǐng)求未經(jīng)授權(quán)棠枉,這個(gè)狀態(tài)代碼必須和WWW-Authenticate報(bào)頭域一起使用
403 Forbidden //服務(wù)器收到請(qǐng)求浓体,但是拒絕提供服務(wù)
404 Not Found //請(qǐng)求資源不存在,eg:輸入了錯(cuò)誤的URL
500 Internal Server Error //服務(wù)器發(fā)生不可預(yù)期的錯(cuò)誤
503 Server Unavailable //服務(wù)器當(dāng)前不能處理客戶端的請(qǐng)求辈讶,一段時(shí)間后可能恢復(fù)正常
eg:HTTP/1.1 200 OK (CRLF)