全網最全Python專案練習500例(附原始碼),練完可就業

yk 坤帝發表於2021-06-13

1.有一個jsonline格式的檔案file.txt大小約為10K

2.補充缺失的程式碼

3.輸入日期, 判斷這一天是這一年的第幾天?

4.打亂一個排好序的list物件alist?

5.現有字典 d= {‘a’:24,‘g’:52,‘i’:12,‘k’:33}請按value值進行排序?

6.字典推導式

7.請反轉字串 “aStr”?

8.將字串 “k:1 |k1:2|k2:3|k3:4”,處理成字典 {k:1,k1:2,…}

9.請按alist中元素的age由大到小排序

10.下面程式碼的輸出結果將是什麼?

11.寫一個列表生成式,產生一個公差為11的等差數列

12.給定兩個列表,怎麼找出他們相同的元素和不同的元素?

13.請寫出一段python程式碼實現刪除list裡面的重複元素?

14.給定兩個list A,B ,請用找出A,B中相同與不同的元素 企業面試題

15.python新式類和經典類的區別?

16.python中內建的資料結構有幾種?

17.python如何實現單例模式?請寫出兩種實現方式?

18.反轉一個整數,例如-123 --> -321

19.設計實現遍歷目錄與子目錄,抓取.pyc檔案

20.一行程式碼實現1-100之和

21.Python-遍歷列表時刪除元素的正確做法

22.字串的操作題目

23.可變型別和不可變型別

24.is和==有什麼區別?

25.求出列表所有奇數並構造新列表

26.用一行python程式碼寫出1+2+3+10248

27.Python中變數的作用域?(變數查詢順序)

28.字串 “123” 轉換成 123 ,不使用內建api,例如 int()

29.Given an array of integers

30.python程式碼實現刪除一個list裡面的重複元素

31.統計一個文字中單詞頻次最高的10個單詞?

32.請寫出一個函式滿足以下條件

33.使用單一的列表生成式來產生一個新的列表

34.用一行程式碼生成[1,4,9,16,25,36,49,64,81,100]

35.輸入某年某月某日,判斷這一天是這一年的第幾天?

36.兩個有序列表,l1,l2,對這兩個列表進行合併不可使用extend

37.給定一個任意長度陣列,實現一個函式

38.寫一個函式找出一個整數陣列中,第二大的數

39.閱讀一下程式碼他們的輸出結果是什麼?

40.統計一段字串中字元出現的次數

41.super函式的具體用法和場景

42.Python中類方法、類例項方法、靜態方法有何區別?

43.遍歷一個object的所有屬性,並print每一個屬性名?

44.寫一個類,並讓它儘可能多的支援操作符?

45.介紹Cython,Pypy Cpython Numba各有什麼缺點

46.請描述抽象類和介面類的區別和聯絡

47.Python中如何動態獲取和設定物件的屬性?

48.哪些操作會導致Python記憶體溢位,怎麼處理?

49.關於Python記憶體管理,下列說法錯誤的是 B

50.Python的記憶體管理機制及調優手段?

51.記憶體洩露是什麼?如何避免?

52.python常見的列表推導式?

53.簡述read、readline、readlines的區別?

54.什麼是Hash(雜湊函式)?

55.python函式過載機制?

56.寫一個函式找出一個整數陣列中,第二大的數

57.手寫一個判斷時間的裝飾器

58.使用Python內建的filter()方法來過濾?

59.編寫函式的4個原則

60.函式呼叫引數的傳遞方式是值傳遞還是引用傳遞?

61.如何在function裡面設定一個全域性變數

62.對預設引數的理解 ?

63.Mysql怎麼限制IP訪問?

64.帶引數的裝飾器?

65.為什麼函式名字可以當做引數用?

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

67.有這樣一段程式碼,print c會輸出什麼,為什麼?

68.交換兩個變數的值?

69.map函式和reduce函式?

70.回撥函式,如何通訊的?

71.Python主要的內建資料型別都有哪些? print dir( ‘a ’) 的輸出?

72.map(lambda x:xx,[y for y in range(3)])的輸出?

73.hasattr() getattr() setattr() 函式使用詳解?

74.一句話解決階乘函式?

75.什麼是lambda函式? 有什麼好處?

76.遞迴函式停止的條件?

77.下面這段程式碼的輸出結果將是什麼?請解釋。

78.什麼是lambda函式?它有什麼好處?寫一個匿名函式求兩個數的和

79.對設計模式的理解,簡述你瞭解的設計模式?

80.請手寫一個單例

81.單例模式的應用場景有那些?

82.用一行程式碼生成[1,4,9,16,25,36,49,64,81,100]

83.對裝飾器的理解,並寫出一個計時器記錄方法執行效能的裝飾器?

84.解釋以下什麼是閉包?

85.函式裝飾器有什麼作用?

86.生成器,迭代器的區別?

87.X是什麼型別?

88.請用一行程式碼 實現將1-N 的整數列表以3為單位分組

89.Python中yield的用法?

90.Python中的可變物件和不可變物件?

91.Python的魔法方法

92.物件導向中怎麼實現只讀屬性?

93.談談你對物件導向的理解?

94.請寫出一段程式碼用正則匹配出ip?

95.a = “abbbccc”,用正則匹配為abccc,不管有多少b,就出現一次?

96.Python字串查詢和替換?

97.用Python匹配HTML g tag的時候,<.> 和 <.*?> 有什麼區別

98.正規表示式貪婪與非貪婪模式的區別?

99.寫出開頭匹配字母和下劃線,末尾是數字的正規表示式?

100.正規表示式操作

101.請匹配出變數A 中的json字串。

102.怎麼過濾評論中的表情?

103.簡述Python裡面search和match的區別

104.請寫出匹配ip的Python正規表示式

105.Python裡match與search的區別?

106.程式總結

107.談談你對多程式,多執行緒,以及協程的理解,專案是否用?

108.Python異常使用場景有那些?

109.多執行緒共同操作同一個資料互斥鎖同步?

110.什麼是多執行緒競爭?

111.請介紹一下Python的執行緒同步?

112.解釋以下什麼是鎖,有哪幾種鎖?

113.什麼是死鎖?

114.多執行緒互動訪問資料,如果訪問到了就不訪問了?

115.什麼是執行緒安全,什麼是互斥鎖?

116.說說下面幾個概念:同步,非同步,阻塞,非阻塞?

117.什麼是殭屍程式和孤兒程式?怎麼避免殭屍程式?

118.python中程式與執行緒的使用場景?

119.執行緒是併發還是並行,程式是併發還是並行?

120.並行(parallel)和併發(concurrency)?

121.IO密集型和CPU密集型區別?

122.python asyncio的原理?

123.怎麼實現強行關閉客戶端和伺服器之間的連線?

124.簡述TCP和UDP的區別以及優缺點?

125.簡述瀏覽器通過WSGI請求動態資源的過程?

126.描述用瀏覽器訪問www.baidu.com的過程

127.Post和Get請求的區別?

128.cookie 和session 的區別?

129.列出你知道的HTTP協議的狀態碼,說出表示什麼意思?

130.請簡單說一下三次握手和四次揮手?

131.說一下什麼是tcp的2MSL?

132.為什麼客戶端在TIME-WAIT狀態必須等待2MSL的時間?

133.說說HTTP和HTTPS區別?

134.談一下HTTP協議以及協議頭部中表示資料型別的欄位?

135.HTTP請求方法都有什麼?

136.使用Socket套接字需要傳入哪些引數 ?

137.HTTP常見請求頭?

138.七層模型?

139.url的形式?

140.對Flask藍圖(Blueprint)的理解?

141.Flask 和 Django 路由對映的區別?

142.什麼是wsgi,uwsgi,uWSGI?

143.Django、Flask、Tornado的對比?

144.CORS 和 CSRF的區別?

145.Session,Cookie,JWT的理解

146.簡述Django請求生命週期

147.用的restframework完成api傳送時間時區

148.nginx,tomcat,apach到都是什麼?

149.請給出你熟悉關聯式資料庫正規化有哪些,有什麼作用?

150.簡述QQ登陸過程

151.post 和 get的區別?

152.專案中日誌的作用

153.django中介軟體的使用?

154.談一下你對uWSGI和nginx的理解?

155.Python中三大框架各自的應用場景?

156.Django中哪裡用到了執行緒?哪裡用到了協程?哪裡用到了程式?

157.有用過Django REST framework嗎?

158.對cookies與session的瞭解?他們能單獨用嗎?

159.試列出至少三種目前流行的大型資料庫

160.列舉您使用過的Python網路爬蟲所用到的網路資料包?

161.爬取資料後使用

哪個資料庫儲存資料的,為什麼? 162.你用過的爬蟲框架或者模組有哪些?優缺點?

163.寫爬蟲是用多程式好?還是多執行緒好?

164.常見的反爬蟲和應對方法?

165.解析網頁的解析器使用最多的是哪幾個?

166.需要登入的網頁,如何解決同時限制ip,cookie,session

167.驗證碼的解決?

168.使用最多的資料庫,對他們的理解?

169.

編寫過哪些爬蟲中介軟體? 170.“極驗”滑動驗證碼如何破解?

171.爬蟲多久爬一次,爬下來的資料是怎麼儲存?

172.cookie過期的處理問題?

173.動態載入又對及時性要求很高怎麼處理?

174.HTTPS有什麼優點和缺點?

175.HTTPS是如何實現安全傳輸資料的?

176.TTL,MSL,RTT各是什麼?

177.談一談你對Selenium和PhantomJS瞭解

178.平常怎麼使用代理的 ?

179.存放在資料庫(redis、mysql等)。

180.怎麼監控爬蟲的狀態?

181.描述下scrapy框架執行的機制?

182.談談你對Scrapy的理解?

183.怎麼樣讓 scrapy 框架傳送一個 post 請求(具體寫出來)

184.怎麼監控爬蟲的狀態 ?

185.怎麼判斷網站是否更新?

186.圖片、視訊爬取怎麼繞過防盜連線

187.你爬出來的資料量大概有多大?大概多長時間爬一次?

188.用什麼資料庫存爬下來的資料?部署是你做的嗎?怎麼部署?

189.增量爬取

190.爬取下來的資料如何去重,說一下scrapy的具體的演算法依據。

191.Scrapy的優缺點?

192.怎麼設定爬取深度?

193.scrapy和scrapy-redis有什麼區別?為什麼選擇redis資料庫?

194.分散式爬蟲主要解決什麼問題?

195.什麼是分散式儲存?

196.你所知道的分散式爬蟲方案有哪些?

197.scrapy-redis,有做過其他的分散式爬蟲嗎?

198.主鍵 超鍵 候選鍵 外來鍵

199.檢視的作用,檢視可以更改麼?

200.drop,delete與truncate的區別

201.索引的工作原理及其種類

202.連線的種類

203.資料庫優化的思路

204.儲存過程與觸發器的區別

205.悲觀鎖和樂觀鎖是什麼?

206.你常用的mysql引擎有哪些?各引擎間有什麼區別?

207.Redis當機怎麼解決?

208.redis和mecached的區別,以及使用場景

209.Redis叢集方案該怎麼做?都有哪些方案?

210.Redis回收程式是如何工作的

211.MongoDB中對多條記錄做更新操作命令是什麼?

212.MongoDB如何才會擴充到多個shard裡?

213.編寫測試計劃的目的是

214.對關鍵詞觸發模組進行測試

215.其他常用筆試題目網址彙總

216.測試人員在軟體開發過程中的任務是什麼

217.一條軟體Bug記錄都包含了哪些內容?

218.簡述黑盒測試和白盒測試的優缺點

219.請列出你所知道的軟體測試種類,至少5項

220.Alpha測試與Beta測試的區別是什麼?

221.舉例說明什麼是Bug?一個bug report應包含什麼關鍵字?

222.陣列中出現次數超過一半的數字-Python版

223.求100以內的質數

224.無重複字元的最長子串-Python實現

225.通過2個5/6升得水壺從池塘得到3升水

226.什麼是MD5加密,有什麼特點?

227.什麼是對稱加密和非對稱加密

228.氣泡排序的思想?

229.快速排序的思想?

230.如何判斷單向連結串列中是否有環?

231.你知道哪些排序演算法(一般是通過問題考演算法)

232.斐波那契數列

233.如何翻轉一個單連結串列?

234.青蛙跳臺階問題

235.兩數之和 Two Sum

236.搜尋旋轉排序陣列 Search in Rotated Sorted Array

237.Python實現一個Stack的資料結構

238.寫一個二分查詢

239.set 用 in 時間複雜度是多少,為什麼?

240.列表中有n個正整數範圍在[0,1000],進行排序;

241.物件導向程式設計中有組合和繼承的方法實現新的類

242.找出1G的檔案中高頻詞

243.一個大約有一萬行的文字檔案統計高頻詞

244.怎麼在海量資料中找出重複次數最多的一個?

245.判斷資料是否在大量資料中

141.Flask 和 Django 路由對映的區別?

在django中,路由是瀏覽器訪問伺服器時,先訪問的專案中的url,再由專案中的url找到應用中url,這些url是放在一個列表裡,遵從從前往後匹配的規則。在flask中,路由是通過裝飾器給每個檢視函式提供的,而且根據請求方式的不同可以一個url用於不同的作用。

142.什麼是wsgi,uwsgi,uWSGI?

WSGI:
web伺服器閘道器介面,是一套協議。用於接收使用者請求並將請求進行初次封裝,然後將請求交給web框架。
實現wsgi協議的模組:wsgiref,本質上就是編寫一socket服務端,用於接收使用者請求(django)
werkzeug,本質上就是編寫一個socket服務端,用於接收使用者請求(flask)
uwsgi:
與WSGI一樣是一種通訊協議,它是uWSGI伺服器的獨佔協議,用於定義傳輸資訊的型別。
uWSGI:
是一個web伺服器,實現了WSGI的協議,uWSGI協議,http協議

143.Django、Flask、Tornado的對比?

1、 Django走的大而全的方向,開發效率高。它的MTV框架,自帶的ORM,admin後臺管理,自帶的sqlite資料庫和開發測試用的伺服器,給開發者提高了超高的開發效率。
重量級web框架,功能齊全,提供一站式解決的思路,能讓開發者不用在選擇上花費大量時間。

自帶ORM和模板引擎,支援jinja等非官方模板引擎。

自帶ORM使Django和關係型資料庫耦合度高,如果要使用非關係型資料庫,需要使用第三方庫自帶資料庫管理app成熟,穩定,開發效率高,相對於Flask,Django的整體封閉性比較好,適合做企業級網站的開發。

python web框架的先驅,第三方庫豐富

2、 Flask 是輕量級的框架,自由,靈活,可擴充套件性強,核心基於Werkzeug WSGI工具 和jinja2 模板引擎

適用於做小網站以及web服務的API,開發大型網站無壓力,但架構需要自己設計
與關係型資料庫的結合不弱於Django,而與非關係型資料庫的結合遠遠優於Django

3、 Tornado走的是少而精的方向,效能優越,它最出名的非同步非阻塞的設計方式
Tornado的兩大核心模組:
iostraem:對非阻塞的socket進行簡單的封裝
ioloop: 對I/O 多路複用的封裝,它實現一個單例

144.CORS 和 CSRF的區別?

什麼是CORS? CORS是一個W3C標準,全稱是“跨域資源共享"(Cross-origin resoure sharing).

它允許瀏覽器向跨源伺服器,發出XMLHttpRequest請求,從而客服了AJAX只能同源使用的限制。

什麼是CSRF?

CSRF主流防禦方式是在後端生成表單的時候生成一串隨機token,內建到表單裡成為一個欄位,同時,將此串token置入session中。每次表單提交到後端時都會檢查這兩個值是否一致,以此來判斷此次表單提交是否是可信的,提交過一次之後,如果這個頁面沒有生成CSRF token,那麼token將會被清空,如果有新的需求,那麼token會被更新。

攻擊者可以偽造POST表單提交,但是他沒有後端生成的內建於表單的token,session中沒有token都無濟於事。

145.Session,Cookie,JWT的理解

為什麼要使用會話管理

眾所周知,HTTP協議是一個無狀態的協議,也就是說每個請求都是一個獨立的請求,請求與請求之間並無關係。但在實際的應用場景,這種方式並不能滿足我們的需求。舉個大家都喜歡用的例子,把商品加入購物車,單獨考慮這個請求,服務端並不知道這個商品是誰的,應該加入誰的購物車?因此這個請求的上下文環境實際上應該包含使用者的相關資訊,在每次使用者發出請求時把這一小部分額外資訊,也做為請求的一部分,這樣服務端就可以根據上下文中的資訊,針對具體的使用者進行操作。所以這幾種技術的出現都是對HTTP協議的一個補充,使得我們可以用HTTP協議+狀態管理構建一個的面向使用者的WEB應用。

Session 和Cookie的區別

這裡我想先談談session與cookies,因為這兩個技術是做為開發最為常見的。那麼session與cookies的區別是什麼?個人認為session與cookies最核心區別在於額外資訊由誰來維護。利用cookies來實現會話管理時,使用者的相關資訊或者其他我們想要保持在每個請求中的資訊,都是放在cookies中,而cookies是由客戶端來儲存,每當客戶端發出新請求時,就會稍帶上cookies,服務端會根據其中的資訊進行操作。

當利用session來進行會話管理時,客戶端實際上只存了一個由服務端傳送的session_id,而由這個session_id,可以在服務端還原出所需要的所有狀態資訊,從這裡可以看出這部分資訊是由服務端來維護的。

除此以外,session與cookies都有一些自己的缺點:

cookies的安全性不好,攻擊者可以通過獲取本地cookies進行欺騙或者利用cookies進行CSRF攻擊。使用cookies時,在多個域名下,會存在跨域問題。
session 在一定的時間裡,需要存放在服務端,因此當擁有大量使用者時,也會大幅度降低服務端的效能,當有多臺機器時,如何共享session也會是一個問題.(redis叢集)也就是說,使用者第一個訪問的時候是伺服器A,而第二個請求被轉發給了伺服器B,那伺服器B如何得知其狀態。實際上,session與cookies是有聯絡的,比如我們可以把session_id存放在cookies中的。

JWT是如何工作的
首先使用者發出登入請求,服務端根據使用者的登入請求進行匹配,如果匹配成功,將相關的資訊放入payload中,利用演算法,加上服務端的金鑰生成token,這裡需要注意的是secret_key很重要,如果這個洩露的話,客戶端就可以隨機篡改傳送的額外資訊,它是資訊完整性的保證。生成token後服務端將其返回給客戶端,客戶端可以在下次請求時,將token一起交給服務端,一般是說我們可以將其放在Authorization首部中,這樣也就可以避免跨域問題。

146.簡述Django請求生命週期

一般是使用者通過瀏覽器向我們的伺服器發起一個請求(request),這個請求會去訪問檢視函式,如果不涉及到資料呼叫,那麼這個時候檢視函式返回一個模板也就是一個網頁給使用者)檢視函式呼叫模型毛模型去資料庫查詢資料,然後逐級返回,檢視函式把返回的資料填充到模板中空格中,最後返回網頁給使用者。

1.wsgi ,請求封裝後交給web框架(Flask,Django)
2.中介軟體,對請求進行校驗或在請求物件中新增其他相關資料,例如:csrf,request.session
3.路由匹配 根據瀏覽器傳送的不同url去匹配不同的檢視函式
4.檢視函式,在檢視函式中進行業務邏輯的處理,可能涉及到:orm,templates
5.中介軟體,對響應的資料進行處理
6.wsgi,將響應的內容傳送給瀏覽器

147.用的restframework完成api傳送時間時區

當前的問題是用django的rest framework模組做一個get請求的傳送時間以及時區資訊的api

在這裡插入圖片描述
148.nginx,tomcat,apach到都是什麼?

Nginx(engine x)是一個高效能的HTTP和反向代理伺服器,也是 一個IMAP/POP3/SMTP伺服器,工作在OSI七層,負載的實現方式:輪詢,IP_HASH,fair,session_sticky.
Apache HTTP Server是一個模組化的伺服器,源於NCSAhttpd伺服器
Tomcat 伺服器是一個免費的開放原始碼的Web應用伺服器,屬於輕量級應用伺服器,是開發和除錯JSP程式的首選。

149.請給出你熟悉關聯式資料庫正規化有哪些,有什麼作用?

在進行資料庫的設計時,所遵循的一些規範,只要按照設計規範進行設計,就能設計出沒有資料冗餘和資料維護異常的資料庫結構。

資料庫的設計的規範有很多,通常來說我們在設是資料庫時只要達到其中一些規範就可以了,這些規範又稱之為資料庫的三正規化,一共有三條,也存在著其他正規化,我們只要做到滿足前三個正規化的要求,就能設陳出符合我們的資料庫了,我們也不能全部來按照正規化的要求來做,還要考慮實際的業務使用情況,所以有時候也需要做一些違反正規化的要求。

1.資料庫設計的第一正規化(最基本),基本上所有資料庫的正規化都是符合第一正規化的,符合第一正規化的表 具有以下幾個特點: 資料庫表中的所有欄位都只具有單一屬性,單一屬性的列是由基本的資料型別(整型,浮點型,字元型等)所構成的設計出來的表都是簡單的二比表
2.資料庫設計的第二正規化(是在第一正規化的基礎上設計的),要求一個表中只具有一個業務主鍵,也就是說符合第二正規化的表中不能存在非主鍵列對只對部分主鍵的依賴關係
3.資料庫設計的第三正規化,指每一個非主屬性既不部分依賴與也不傳遞依賴於業務主鍵,也就是第二正規化的基礎上消除了非主屬性對主鍵的傳遞依賴

150.簡述QQ登陸過程

qq登入,在我們的專案中分為了三個介面,

第一個介面是請求qq伺服器返回一個qq登入的介面;
第二個介面是通過掃碼或賬號登陸進行驗證,qq伺服器返回給瀏覽器一個code和state,利用這個code通過本地伺服器去向qq伺服器獲取access_token覆返回給本地伺服器,憑藉access_token再向qq伺服器獲取使用者的openid(openid使用者的唯一標識)
第三個介面是判斷使用者是否是第一次qq登入,如果不是的話直接登入返回的jwt-token給使用者,對沒有繫結過本網站的使用者,對openid進行加密生成token進行繫結

151.post 和 get的區別?

1.GET是從伺服器上獲取資料,POST是向伺服器傳送資料
2.在客戶端,GET方式在通過URL提交資料,資料在URL中可以看到,POST方式,資料放置在HTML——HEADER內提交
3.對於GET方式,伺服器端用Request.QueryString獲取變數的值,對於POST方式,伺服器端用Request.Form獲取提交的資料

152.專案中日誌的作用
一、日誌相關概念

1.日誌是一種可以追蹤某些軟體執行時所發生事件的方法
2.軟體開發人員可以向他們的程式碼中呼叫日誌記錄相關的方法來表明發生了某些事情
3.一個事件可以用一個包含可選變數資料的訊息來描述
4.此外,事件也有重要性的概念,這個重要性也可以被成為嚴重性級別(level)

二、日誌的作用

1.通過log的分析,可以方便使用者瞭解系統或軟體、應用的執行情況;
2.如果你的應用log足夠豐富,可以分析以往使用者的操作行為、型別喜好,地域分佈或其他更多資訊;
3.如果一個應用的log同時也分了多個級別,那麼可以很輕易地分析得到該應用的健康狀況,及時發現問 題並快速定位、解決問題,補救損失。
4.簡單來講就是我們通過記錄和分析日誌可以瞭解一個系統或軟體程式執行情況是否正常,也可以在應用程式出現故障時快速定位問題。不僅在開發中,在運維中日誌也很重要,日誌的作用也可以簡單。總結為以下幾點:
1.程式除錯
2.瞭解軟體程式執行情況,是否正常
3,軟體程式執行故障分析與問題定位 4,如果應用的日誌資訊足夠詳細和豐富,還可以用來做使用者行為分析

153.django中介軟體的使用?
Django在中介軟體中預置了六個方法,這六個方法的區別在於不同的階段執行,對輸入或輸出進行干預,

方法如下:
1.初始化:無需任何引數,伺服器響應第一個請求的時候呼叫一次,用於確定是否啟用當前中介軟體

def __init__(): 
	pass

2.處理請求前:在每個請求上呼叫,返回None或HttpResponse物件。

def process_request(request): 
	pass

3.處理檢視前:在每個請求上呼叫,返回None或HttpResponse物件。

def process_view(request,view_func,view_args,view_kwargs): 
	pass

4.處理模板響應前:在每個請求上呼叫,返回實現了render方法的響應物件

def process_template_response(request,response): 
	pass

5.處理響應後:所有響應返回瀏覽器之前被呼叫,在每個請求上呼叫,返回HttpResponse物件。

def process_response(request,response): 
	pass

6.異常處理:當檢視丟擲異常時呼叫,在每個請求上呼叫,返回一個HttpResponse物件。

def process_exception(request,exception): 
	pass

154.談一下你對uWSGI和nginx的理解?

1.uWSGI是一個Web伺服器,它實現了WSGI協議、uwsgi、http等協議。Nginx中HttpUwsgiModule的作用是與uWSGI伺服器進行交換。WSGI是一種Web伺服器閘道器介面。它是一個Web伺服器(如nginx,uWSGI等伺服器)與web應用(如用Flask框架寫的程式)通訊的一種規範。

要注意WSGI/uwsgi/uWSGI這三個概念的區分。
WSGI是一種通訊協議。
uwsgi是一種線路協議而不是通訊協議,在此常用於在uWSGI伺服器與其他網路伺服器的資料通訊。
uWSGI是實現了uwsgi和WSGI兩種協議的Web伺服器。
nginx 是一個開源的高效能的HTTP伺服器和反向代理:

1.作為web伺服器,它處理靜態檔案和索引檔案效果非常高
2.它的設計非常注重效率,最大支援5萬個併發連線,但只佔用很少的記憶體空間
3.穩定性高,配置簡潔。
4.強大的反向代理和負載均衡功能,平衡叢集中各個伺服器的負載壓力應用

155.Python中三大框架各自的應用場景?
django:主要是用來搞快速開發的,他的亮點就是快速開發,節約成本,,如果要實現高併發的話,就要對django進行二次開發,比如把整個笨重的框架給拆掉自己寫socket實現http的通訊,底層用純c,c++寫提升效率,ORM框架給幹掉,自己編寫封裝與資料庫互動的框架,ORM雖然物件導向來運算元據庫,但是它的效率很低,使用外來鍵來聯絡表與表之間的查詢;

flask: 輕量級,主要是用來寫介面的一個框架,實現前後端分離,提考開發效率,Flask本身相當於一個核心,其他幾乎所有的功能都要用到擴充套件(郵件擴充套件Flask-Mail,使用者認證Flask-Login),都需要用第三方的擴充套件來實現。比如可以用Flask-extension加入ORM、檔案上傳、身份驗證等。Flask沒有預設使用的資料庫,你可以選擇MySQL,也可以用NoSQL。

其WSGI工具箱用Werkzeug(路由模組),模板引擎則使用Jinja2,這兩個也是Flask框架的核心。

Tornado: Tornado是一種Web伺服器軟體的開源版本。Tornado和現在的主流Web伺服器框架(包括大多數Python的框架)有著明顯的區別:它是非阻塞式伺服器,而且速度相當快。得利於其非阻塞的方式和對epoll的運用,Tornado每秒可以處理數以千計的連線因此Tornado是實時Web服務的一個理想框架

相關文章