面試分享系列 | 17道Python面試題,讓你在求職中無往不利

来源:https://www.cnblogs.com/miansheng/archive/2019/08/02/11286361.html
-Advertisement-
Play Games

今天給大家分享的是Python面試題系列的第一篇文章,後續我也會陸續整理Python相關的問題給大家,無論是求職者還是新人都可以通過面試題來考察自己的能力缺陷。 這些問題由伯樂線上整理,原文是Python工程師面試題集合。 嘛...這幾天原創少了,因為在憋大招啊.... python面試題大本營 1 ...


今天給大家分享的是Python面試題系列的第一篇文章,後續我也會陸續整理Python相關的問題給大家,無論是求職者還是新人都可以通過面試題來考察自己的能力缺陷。

這些問題由伯樂線上整理,原文是Python工程師面試題集合

嘛...這幾天原創少了,因為在憋大招啊....

python面試題大本營

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

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

2.Python是如何進行類型轉換的?

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

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

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

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

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

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

5.什麼是lambda函數?它有什麼好處?

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

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

6.說明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 常用方法

20os.remove()刪除文件
os.rename()重命名文件
os.walk()生成目錄樹下的所有文件名
os.chdir()改變目錄
os.mkdir/makedirs創建目錄/多層目錄
os.rmdir/removedirs刪除目錄/多層目錄
os.listdir()列出指定目錄的文件
os.getcwd()取得當前工作目錄
os.chmod()改變目錄許可權
os.path.basename()去掉目錄路徑,返迴文件名
os.path.dirname()去掉文件名,返回目錄路徑
os.path.join()將分離的各部分組合成一個路徑名
os.path.split()返回(dirname(),basename())元組
os.path.splitext()(返回filename,extension)元組
os.path.getatime\ctime\mtime分別返回最近訪問、創建、修改時間
os.path.getsize()返迴文件大小
os.path.exists()是否存在
os.path.isabs()是否為絕對路徑
os.path.isdir()是否為目錄
os.path.isfile()是否為文件

sys 常用方法

sys.argv 命令行參數List,第一個元素是程式本身路徑 
sys.modules.keys() 返回所有已經導入的模塊列表 
sys.exc_info() 獲取當前正在處理的異常類,exc_type、exc_value、exc_traceback當前處理的異常詳細信息 
sys.exit(n) 退出程式,正常退出時exit(0) 
sys.hexversion 獲取Python解釋程式的版本值,16進位格式如:0x020403F0 
sys.version 獲取Python解釋程式的版本信息 
sys.maxint 最大的Int值 
sys.maxunicode 最大的Unicode值 
sys.modules 返回系統導入的模塊欄位,key是模塊名,value是模塊 
sys.path 返回模塊的搜索路徑,初始化時使用PYTHONPATH環境變數的值 
sys.platform 返回操作系統平臺名稱 
sys.stdout 標準輸出
sys.stdin 標準輸入
sys.stderr 錯誤輸出
sys.exc_clear() 用來清除當前線程所出現的當前的或最近的錯誤信息
sys.exec_prefix 返回平臺獨立的python文件安裝的位置
sys.byteorder 本地位元組規則的指示器,big-endian平臺的值是'big',little-endian平臺的值是'little'
sys.copyright 記錄python版權相關的東西
sys.api_version 解釋器的C的API版本
sys.version_info

7.Python裡面如何拷貝一個對象?deepcopy 和 copy的區別?

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

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

8.os.path和sys.path的區別?

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

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

9.re模塊中match和search方法的不同?

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

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

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

11.解釋一下 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進程,並管理它們。

12.解釋一下 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 的應用里每一個活動用戶都會保持著一個伺服器連接。(關於如何擴容 伺服器,以處理數以千計的客戶端的連接的問題。

13.解釋下django-debug-toolbar的使用

使用django開發站點時,可以使用django-debug-toolbar來進行調試。在settings.py中添加’debug_toolbar.middleware.DebugToolbarMiddleware’到項目的MIDDLEWARE_CLASSES 內。

14.解釋下Django使用redis緩存伺服器

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

from django.conf import settings
from django.core.cache import cache
#read cache user id
def read_from_cache(self, user_name):
key = 'user_id_of_'+user_name
value = cache.get(key)
if value == None:
data = None
else:
data = json.loads(value)
return data
#write cache user id
def write_to_cache(self, user_name):
key = 'user_id_of_'+user_name
cache.set(key, json.dumps(user_name), settings.NEVER_REDIS_TIMEOUT)

15.如何進行Django單元測試

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

from django.test import TestCase
from myapp.models import Animal

class AnimalTestCase(TestCase):
def setUp(self):
Animal.objects.create(name="lion", sound="roar")
Animal.objects.create(name="cat", sound="meow")

def test_animals_can_speak(self):
"""Animals that can speak are correctly identified"""
lion = Animal.objects.get(name="lion")
cat = Animal.objects.get(name="cat")
self.assertEqual(lion.speak(), 'The lion says "roar"')
self.assertEqual(cat.speak(), 'The cat says "meow"')

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

$ python manage.py test

執行animals項目下tests包里的測試:

$ python manage.py testanimals.tests

執行animals項目里的test測試:

$ python manage.py testanimals

單獨執行某個test case:

$ python manage.py testanimals.tests.AnimalTestCase

單獨執行某個測試方法:

$ python manage.py testanimals.tests.AnimalTestCase.test_animals_can_speak

為測試文件提供路徑:

$ python manage.py testanimals/

通配測試文件名:

$ python manage.py test--pattern="tests_*.py"

啟用warnings提醒:

$ python -Wall manage.py test

16.解釋下Http協議

python面試題大本營

HTTP是一個屬於應用層的面向對象的協議,由於其簡捷、快速的方式,適用於分散式超媒體信息系統。

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

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

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

3.靈活:HTTP允許傳輸任意類型的數據對象。正在傳輸的類型由Content-Type加以標記。

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

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

17.解釋下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)

python面試題大本營


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 一、定義 1. 什麼是jQuery <1> jQuery由美國人John Resig創建,至今已吸引了來自世界各地的眾多 javascript高手加入其team。 <2>jQuery是繼prototype之後又一個優秀的Javascript框架。其宗旨是——WRITE LESS,DO MORE! < ...
  • arguments對象與數組類似,可以使用length屬性確定函數傳進多少參數。 var f = function m(x) { if (x <= 1) { return 1; } else { return x * m(x - 1); } }; var f = function (x) { if ...
  • 函數,一段能夠自動完成某些功能的代碼塊,函數的出現,既解決了重覆使用重一功能的需求,又可以避免代碼的臃腫性。 使用函數有兩個要求:必須調用後才可以執行;函數名不要和關鍵字以及系統函數相同; 函數主要有三種,直接調用,參數傳遞,返回值。 1、直接調用: 2、參數傳遞: 3、返回值(在一般的前端開發中, ...
  • 在項目中遇到了兩種不同情況, 1、get請求導出文件,實現起來相對簡單 直接把要傳遞的參數拼接在請求地址url後面即可 2、post請求方式 這種方式用於傳遞參數比較多的情況,在這個項目中所傳遞參數達到了三四十個。 同時不要忘記在介面加上responseType屬性。 ...
  • 背景: 都知道js內置的類型檢測,大多數情況下是不太可靠的,例如: typeof 、 instanceof typeof 返回一個未經計算的操作數的類型, 可以發現所有對象都是返回object (null是空指針即空對象) instanceof : 用於測試構造函數的prototype屬性是否出現在 ...
  • 這是button預設自帶的css樣式 正常來說,去除button我們使用如下代碼即可 但是有時候卻不起作用,這個時候我們可以使用::after 偽類選擇器,因為button的邊框樣式是通過::after方式實現的,如果在button上定義邊框就會出現兩條邊框線,所以我們可以使用::after的方式去 ...
  • 單一職責原則 單一職責原則:一個類應該只有一個原因引起改變,即一個類應該只負責一個業務邏輯。 問題由來:類T負責t1, t2兩個職責,當因為t1j對類T修改的時候,可能導致類T出現問題而影響職責t2。 解決方案:遵循單一職責原則,將類T進行改寫,確保一個類負責一個職責。 demo: 有一個類Anim ...
  • java路徑存在兩種寫法"/"和"\\" String path="D:\\1.txt"; String path1="D:/1.txt"; ①正斜杠”/”的話,一般在配置文件路徑時,指向下一個路徑只要使用一個 ②而反斜杠”\”的話,在配置文件路徑時,由於它本身在java中有特殊意義,作為轉義符而存 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...