全網(wǎng)最全Python項(xiàng)目練習(xí)500例(附源代碼),練完可就業(yè)
個(gè)人公眾號(hào) yk 坤帝
后臺(tái)回復(fù) 項(xiàng)目七 獲取整理資源
1.有一個(gè)jsonline格式的文件file.txt大小約為10K
2.補(bǔ)充缺失的代碼
3.輸入日期, 判斷這一天是這一年的第幾天?
4.打亂一個(gè)排好序的list對(duì)象alist?
5.現(xiàn)有字典 d= {‘a(chǎn)’:24,‘g’:52,‘i’:12,‘k’:33}請(qǐng)按value值進(jìn)行排序?
6.字典推導(dǎo)式
7.請(qǐng)反轉(zhuǎn)字符串 “aStr”?
8.將字符串 “k:1 |k1:2|k2:3|k3:4”,處理成字典 {k:1,k1:2,…}
9.請(qǐng)按alist中元素的age由大到小排序
10.下面代碼的輸出結(jié)果將是什么?
11.寫一個(gè)列表生成式,產(chǎn)生一個(gè)公差為11的等差數(shù)列
12.給定兩個(gè)列表,怎么找出他們相同的元素和不同的元素?
13.請(qǐng)寫出一段python代碼實(shí)現(xiàn)刪除list里面的重復(fù)元素?
14.給定兩個(gè)list A,B ,請(qǐng)用找出A,B中相同與不同的元素 企業(yè)面試題
15.python新式類和經(jīng)典類的區(qū)別?
16.python中內(nèi)置的數(shù)據(jù)結(jié)構(gòu)有幾種?
17.python如何實(shí)現(xiàn)單例模式?請(qǐng)寫出兩種實(shí)現(xiàn)方式?
18.反轉(zhuǎn)一個(gè)整數(shù),例如-123 --> -321
19.設(shè)計(jì)實(shí)現(xiàn)遍歷目錄與子目錄,抓取.pyc文件
20.一行代碼實(shí)現(xiàn)1-100之和
21.Python-遍歷列表時(shí)刪除元素的正確做法
22.字符串的操作題目
23.可變類型和不可變類型
24.is和==有什么區(qū)別?
25.求出列表所有奇數(shù)并構(gòu)造新列表
26.用一行python代碼寫出1+2+3+10248
27.Python中變量的作用域?(變量查找順序)
28.字符串 “123” 轉(zhuǎn)換成 123 ,不使用內(nèi)置api,例如 int()
29.Given an array of integers
30.python代碼實(shí)現(xiàn)刪除一個(gè)list里面的重復(fù)元素
31.統(tǒng)計(jì)一個(gè)文本中單詞頻次最高的10個(gè)單詞?
32.請(qǐng)寫出一個(gè)函數(shù)滿足以下條件
33.使用單一的列表生成式來(lái)產(chǎn)生一個(gè)新的列表
34.用一行代碼生成[1,4,9,16,25,36,49,64,81,100]
35.輸入某年某月某日,判斷這一天是這一年的第幾天?
36.兩個(gè)有序列表,l1,l2,對(duì)這兩個(gè)列表進(jìn)行合并不可使用extend
37.給定一個(gè)任意長(zhǎng)度數(shù)組,實(shí)現(xiàn)一個(gè)函數(shù)
38.寫一個(gè)函數(shù)找出一個(gè)整數(shù)數(shù)組中,第二大的數(shù)
39.閱讀一下代碼他們的輸出結(jié)果是什么?
40.統(tǒng)計(jì)一段字符串中字符出現(xiàn)的次數(shù)
41.super函數(shù)的具體用法和場(chǎng)景
42.Python中類方法、類實(shí)例方法、靜態(tài)方法有何區(qū)別?
43.遍歷一個(gè)object的所有屬性,并print每一個(gè)屬性名?
44.寫一個(gè)類,并讓它盡可能多的支持操作符?
45.介紹Cython,Pypy Cpython Numba各有什么缺點(diǎn)
46.請(qǐng)描述抽象類和接口類的區(qū)別和聯(lián)系
47.Python中如何動(dòng)態(tài)獲取和設(shè)置對(duì)象的屬性?
48.哪些操作會(huì)導(dǎo)致Python內(nèi)存溢出,怎么處理?
49.關(guān)于Python內(nèi)存管理,下列說(shuō)法錯(cuò)誤的是 B
50.Python的內(nèi)存管理機(jī)制及調(diào)優(yōu)手段?
51.內(nèi)存泄露是什么?如何避免?
52.python常見(jiàn)的列表推導(dǎo)式?
53.簡(jiǎn)述read、readline、readlines的區(qū)別?
54.什么是Hash(散列函數(shù))?
55.python函數(shù)重載機(jī)制?
56.寫一個(gè)函數(shù)找出一個(gè)整數(shù)數(shù)組中,第二大的數(shù)
57.手寫一個(gè)判斷時(shí)間的裝飾器
58.使用Python內(nèi)置的filter()方法來(lái)過(guò)濾?
59.編寫函數(shù)的4個(gè)原則
60.函數(shù)調(diào)用參數(shù)的傳遞方式是值傳遞還是引用傳遞?
61.如何在function里面設(shè)置一個(gè)全局變量
62.對(duì)缺省參數(shù)的理解 ?
63.Mysql怎么限制IP訪問(wèn)?
64.帶參數(shù)的裝飾器?
65.為什么函數(shù)名字可以當(dāng)做參數(shù)用?
66.Python中pass語(yǔ)句的作用是什么?
67.有這樣一段代碼,print c會(huì)輸出什么,為什么?
68.交換兩個(gè)變量的值?
69.map函數(shù)和reduce函數(shù)?
70.回調(diào)函數(shù),如何通信的?
71.Python主要的內(nèi)置數(shù)據(jù)類型都有哪些? print dir( ‘a(chǎn) ’) 的輸出?
72.map(lambda x:xx,[y for y in range(3)])的輸出?
73.hasattr() getattr() setattr() 函數(shù)使用詳解?
74.一句話解決階乘函數(shù)?
75.什么是lambda函數(shù)? 有什么好處?
76.遞歸函數(shù)停止的條件?
77.下面這段代碼的輸出結(jié)果將是什么?請(qǐng)解釋。
78.什么是lambda函數(shù)?它有什么好處?寫一個(gè)匿名函數(shù)求兩個(gè)數(shù)的和
79.對(duì)設(shè)計(jì)模式的理解,簡(jiǎn)述你了解的設(shè)計(jì)模式?
80.請(qǐng)手寫一個(gè)單例
81.單例模式的應(yīng)用場(chǎng)景有那些?
82.用一行代碼生成[1,4,9,16,25,36,49,64,81,100]
83.對(duì)裝飾器的理解,并寫出一個(gè)計(jì)時(shí)器記錄方法執(zhí)行性能的裝飾器?
84.解釋以下什么是閉包?
85.函數(shù)裝飾器有什么作用?
86.生成器,迭代器的區(qū)別?
87.X是什么類型?
88.請(qǐng)用一行代碼 實(shí)現(xiàn)將1-N 的整數(shù)列表以3為單位分組
89.Python中yield的用法?
90.Python中的可變對(duì)象和不可變對(duì)象?
91.Python的魔法方法
92.面向?qū)ο笾性趺磳?shí)現(xiàn)只讀屬性?
93.談?wù)勀銓?duì)面向?qū)ο蟮睦斫猓?/p>
94.請(qǐng)寫出一段代碼用正則匹配出ip?
95.a = “abbbccc”,用正則匹配為abccc,不管有多少b,就出現(xiàn)一次?
96.Python字符串查找和替換?
97.用Python匹配HTML g tag的時(shí)候,<.> 和 <.*?> 有什么區(qū)別
98.正則表達(dá)式貪婪與非貪婪模式的區(qū)別?
99.寫出開(kāi)頭匹配字母和下劃線,末尾是數(shù)字的正則表達(dá)式?
100.正則表達(dá)式操作
101.請(qǐng)匹配出變量A 中的json字符串。
102.怎么過(guò)濾評(píng)論中的表情?
103.簡(jiǎn)述Python里面search和match的區(qū)別
104.請(qǐng)寫出匹配ip的Python正則表達(dá)式
105.Python里match與search的區(qū)別?
106.進(jìn)程總結(jié)
107.談?wù)勀銓?duì)多進(jìn)程,多線程,以及協(xié)程的理解,項(xiàng)目是否用?
108.Python異常使用場(chǎng)景有那些?
109.多線程共同操作同一個(gè)數(shù)據(jù)互斥鎖同步?
110.什么是多線程競(jìng)爭(zhēng)?
111.請(qǐng)介紹一下Python的線程同步?
112.解釋以下什么是鎖,有哪幾種鎖?
113.什么是死鎖?
114.多線程交互訪問(wèn)數(shù)據(jù),如果訪問(wèn)到了就不訪問(wèn)了?
115.什么是線程安全,什么是互斥鎖?
116.說(shuō)說(shuō)下面幾個(gè)概念:同步,異步,阻塞,非阻塞?
117.什么是僵尸進(jìn)程和孤兒進(jìn)程?怎么避免僵尸進(jìn)程?
118.python中進(jìn)程與線程的使用場(chǎng)景?
119.線程是并發(fā)還是并行,進(jìn)程是并發(fā)還是并行?
120.并行(parallel)和并發(fā)(concurrency)?
121.IO密集型和CPU密集型區(qū)別?
122.python asyncio的原理?
123.怎么實(shí)現(xiàn)強(qiáng)行關(guān)閉客戶端和服務(wù)器之間的連接?
124.簡(jiǎn)述TCP和UDP的區(qū)別以及優(yōu)缺點(diǎn)?
125.簡(jiǎn)述瀏覽器通過(guò)WSGI請(qǐng)求動(dòng)態(tài)資源的過(guò)程?
126.描述用瀏覽器訪問(wèn)www.baidu.com的過(guò)程
127.Post和Get請(qǐng)求的區(qū)別?
128.cookie 和session 的區(qū)別?
129.列出你知道的HTTP協(xié)議的狀態(tài)碼,說(shuō)出表示什么意思?
130.請(qǐng)簡(jiǎn)單說(shuō)一下三次握手和四次揮手?
131.說(shuō)一下什么是tcp的2MSL?
132.為什么客戶端在TIME-WAIT狀態(tài)必須等待2MSL的時(shí)間?
133.說(shuō)說(shuō)HTTP和HTTPS區(qū)別?
134.談一下HTTP協(xié)議以及協(xié)議頭部中表示數(shù)據(jù)類型的字段?
135.HTTP請(qǐng)求方法都有什么?
136.使用Socket套接字需要傳入哪些參數(shù) ?
137.HTTP常見(jiàn)請(qǐng)求頭?
138.七層模型?
139.url的形式?
140.對(duì)Flask藍(lán)圖(Blueprint)的理解?
141.Flask 和 Django 路由映射的區(qū)別?
142.什么是wsgi,uwsgi,uWSGI?
143.Django、Flask、Tornado的對(duì)比?
144.CORS 和 CSRF的區(qū)別?
145.Session,Cookie,JWT的理解
146.簡(jiǎn)述Django請(qǐng)求生命周期
147.用的restframework完成api發(fā)送時(shí)間時(shí)區(qū)
148.nginx,tomcat,apach到都是什么?
149.請(qǐng)給出你熟悉關(guān)系數(shù)據(jù)庫(kù)范式有哪些,有什么作用?
150.簡(jiǎn)述QQ登陸過(guò)程
151.post 和 get的區(qū)別?
152.項(xiàng)目中日志的作用
153.django中間件的使用?
154.談一下你對(duì)uWSGI和nginx的理解?
155.Python中三大框架各自的應(yīng)用場(chǎng)景?
156.Django中哪里用到了線程?哪里用到了協(xié)程?哪里用到了進(jìn)程?
157.有用過(guò)Django REST framework嗎?
158.對(duì)cookies與session的了解?他們能單獨(dú)用嗎?
159.試列出至少三種目前流行的大型數(shù)據(jù)庫(kù)
160.列舉您使用過(guò)的Python網(wǎng)絡(luò)爬蟲(chóng)所用到的網(wǎng)絡(luò)數(shù)據(jù)包?
161.爬取數(shù)據(jù)后使用
哪個(gè)數(shù)據(jù)庫(kù)存儲(chǔ)數(shù)據(jù)的,為什么? 162.你用過(guò)的爬蟲(chóng)框架或者模塊有哪些??jī)?yōu)缺點(diǎn)?
163.寫爬蟲(chóng)是用多進(jìn)程好?還是多線程好?
164.常見(jiàn)的反爬蟲(chóng)和應(yīng)對(duì)方法?
165.解析網(wǎng)頁(yè)的解析器使用最多的是哪幾個(gè)?
166.需要登錄的網(wǎng)頁(yè),如何解決同時(shí)限制ip,cookie,session
167.驗(yàn)證碼的解決?
168.使用最多的數(shù)據(jù)庫(kù),對(duì)他們的理解?
169.
編寫過(guò)哪些爬蟲(chóng)中間件? 170.“極驗(yàn)”滑動(dòng)驗(yàn)證碼如何破解?
171.爬蟲(chóng)多久爬一次,爬下來(lái)的數(shù)據(jù)是怎么存儲(chǔ)?
172.cookie過(guò)期的處理問(wèn)題?
173.動(dòng)態(tài)加載又對(duì)及時(shí)性要求很高怎么處理?
174.HTTPS有什么優(yōu)點(diǎn)和缺點(diǎn)?
175.HTTPS是如何實(shí)現(xiàn)安全傳輸數(shù)據(jù)的?
176.TTL,MSL,RTT各是什么?
177.談一談你對(duì)Selenium和PhantomJS了解
178.平常怎么使用代理的 ?
179.存放在數(shù)據(jù)庫(kù)(redis、mysql等)。
180.怎么監(jiān)控爬蟲(chóng)的狀態(tài)?
181.描述下scrapy框架運(yùn)行的機(jī)制?
182.談?wù)勀銓?duì)Scrapy的理解?
183.怎么樣讓 scrapy 框架發(fā)送一個(gè) post 請(qǐng)求(具體寫出來(lái))
184.怎么監(jiān)控爬蟲(chóng)的狀態(tài) ?
185.怎么判斷網(wǎng)站是否更新?
186.圖片、視頻爬取怎么繞過(guò)防盜連接
187.你爬出來(lái)的數(shù)據(jù)量大概有多大?大概多長(zhǎng)時(shí)間爬一次?
188.用什么數(shù)據(jù)庫(kù)存爬下來(lái)的數(shù)據(jù)?部署是你做的嗎?怎么部署?
189.增量爬取
190.爬取下來(lái)的數(shù)據(jù)如何去重,說(shuō)一下scrapy的具體的算法依據(jù)。
191.Scrapy的優(yōu)缺點(diǎn)?
192.怎么設(shè)置爬取深度?
193.scrapy和scrapy-redis有什么區(qū)別?為什么選擇redis數(shù)據(jù)庫(kù)?
194.分布式爬蟲(chóng)主要解決什么問(wèn)題?
195.什么是分布式存儲(chǔ)?
196.你所知道的分布式爬蟲(chóng)方案有哪些?
197.scrapy-redis,有做過(guò)其他的分布式爬蟲(chóng)嗎?
198.主鍵 超鍵 候選鍵 外鍵
199.視圖的作用,視圖可以更改么?
200.drop,delete與truncate的區(qū)別
201.索引的工作原理及其種類
202.連接的種類
203.數(shù)據(jù)庫(kù)優(yōu)化的思路
204.存儲(chǔ)過(guò)程與觸發(fā)器的區(qū)別
205.悲觀鎖和樂(lè)觀鎖是什么?
206.你常用的mysql引擎有哪些?各引擎間有什么區(qū)別?
207.Redis宕機(jī)怎么解決?
208.redis和mecached的區(qū)別,以及使用場(chǎng)景
209.Redis集群方案該怎么做?都有哪些方案?
210.Redis回收進(jìn)程是如何工作的
211.MongoDB中對(duì)多條記錄做更新操作命令是什么?
212.MongoDB如何才會(huì)拓展到多個(gè)shard里?
213.編寫測(cè)試計(jì)劃的目的是
214.對(duì)關(guān)鍵詞觸發(fā)模塊進(jìn)行測(cè)試
215.其他常用筆試題目網(wǎng)址匯總
216.測(cè)試人員在軟件開(kāi)發(fā)過(guò)程中的任務(wù)是什么
217.一條軟件Bug記錄都包含了哪些內(nèi)容?
218.簡(jiǎn)述黑盒測(cè)試和白盒測(cè)試的優(yōu)缺點(diǎn)
219.請(qǐng)列出你所知道的軟件測(cè)試種類,至少5項(xiàng)
220.Alpha測(cè)試與Beta測(cè)試的區(qū)別是什么?
221.舉例說(shuō)明什么是Bug?一個(gè)bug report應(yīng)包含什么關(guān)鍵字?
222.數(shù)組中出現(xiàn)次數(shù)超過(guò)一半的數(shù)字-Python版
223.求100以內(nèi)的質(zhì)數(shù)
224.無(wú)重復(fù)字符的最長(zhǎng)子串-Python實(shí)現(xiàn)
225.通過(guò)2個(gè)5/6升得水壺從池塘得到3升水
226.什么是MD5加密,有什么特點(diǎn)?
227.什么是對(duì)稱加密和非對(duì)稱加密
228.冒泡排序的思想?
229.快速排序的思想?
230.如何判斷單向鏈表中是否有環(huán)?
231.你知道哪些排序算法(一般是通過(guò)問(wèn)題考算法)
232.斐波那契數(shù)列
233.如何翻轉(zhuǎn)一個(gè)單鏈表?
234.青蛙跳臺(tái)階問(wèn)題
235.兩數(shù)之和 Two Sum
236.搜索旋轉(zhuǎn)排序數(shù)組 Search in Rotated Sorted Array
237.Python實(shí)現(xiàn)一個(gè)Stack的數(shù)據(jù)結(jié)構(gòu)
238.寫一個(gè)二分查找
239.set 用 in 時(shí)間復(fù)雜度是多少,為什么?
240.列表中有n個(gè)正整數(shù)范圍在[0,1000],進(jìn)行排序;
241.面向?qū)ο缶幊讨杏薪M合和繼承的方法實(shí)現(xiàn)新的類
242.找出1G的文件中高頻詞
243.一個(gè)大約有一萬(wàn)行的文本文件統(tǒng)計(jì)高頻詞
244.怎么在海量數(shù)據(jù)中找出重復(fù)次數(shù)最多的一個(gè)?
245.判斷數(shù)據(jù)是否在大量數(shù)據(jù)中
141.Flask 和 Django 路由映射的區(qū)別?
在django中,路由是瀏覽器訪問(wèn)服務(wù)器時(shí),先訪問(wèn)的項(xiàng)目中的url,再由項(xiàng)目中的url找到應(yīng)用中url,這些url是放在一個(gè)列表里,遵從從前往后匹配的規(guī)則。在flask中,路由是通過(guò)裝飾器給每個(gè)視圖函數(shù)提供的,而且根據(jù)請(qǐng)求方式的不同可以一個(gè)url用于不同的作用。
1
142.什么是wsgi,uwsgi,uWSGI?
WSGI:
web服務(wù)器網(wǎng)關(guān)接口,是一套協(xié)議。用于接收用戶請(qǐng)求并將請(qǐng)求進(jìn)行初次封裝,然后將請(qǐng)求交給web框架。
實(shí)現(xiàn)wsgi協(xié)議的模塊:wsgiref,本質(zhì)上就是編寫一socket服務(wù)端,用于接收用戶請(qǐng)求(django)
werkzeug,本質(zhì)上就是編寫一個(gè)socket服務(wù)端,用于接收用戶請(qǐng)求(flask)
uwsgi:
與WSGI一樣是一種通信協(xié)議,它是uWSGI服務(wù)器的獨(dú)占協(xié)議,用于定義傳輸信息的類型。
uWSGI:
是一個(gè)web服務(wù)器,實(shí)現(xiàn)了WSGI的協(xié)議,uWSGI協(xié)議,http協(xié)議
143.Django、Flask、Tornado的對(duì)比?
1、 Django走的大而全的方向,開(kāi)發(fā)效率高。它的MTV框架,自帶的ORM,admin后臺(tái)管理,自帶的sqlite數(shù)據(jù)庫(kù)和開(kāi)發(fā)測(cè)試用的服務(wù)器,給開(kāi)發(fā)者提高了超高的開(kāi)發(fā)效率。
重量級(jí)web框架,功能齊全,提供一站式解決的思路,能讓開(kāi)發(fā)者不用在選擇上花費(fèi)大量時(shí)間。
自帶ORM和模板引擎,支持jinja等非官方模板引擎。
自帶ORM使Django和關(guān)系型數(shù)據(jù)庫(kù)耦合度高,如果要使用非關(guān)系型數(shù)據(jù)庫(kù),需要使用第三方庫(kù)自帶數(shù)據(jù)庫(kù)管理app成熟,穩(wěn)定,開(kāi)發(fā)效率高,相對(duì)于Flask,Django的整體封閉性比較好,適合做企業(yè)級(jí)網(wǎng)站的開(kāi)發(fā)。
python web框架的先驅(qū),第三方庫(kù)豐富
2、 Flask 是輕量級(jí)的框架,自由,靈活,可擴(kuò)展性強(qiáng),核心基于Werkzeug WSGI工具 和jinja2 模板引擎
適用于做小網(wǎng)站以及web服務(wù)的API,開(kāi)發(fā)大型網(wǎng)站無(wú)壓力,但架構(gòu)需要自己設(shè)計(jì)
與關(guān)系型數(shù)據(jù)庫(kù)的結(jié)合不弱于Django,而與非關(guān)系型數(shù)據(jù)庫(kù)的結(jié)合遠(yuǎn)遠(yuǎn)優(yōu)于Django
3、 Tornado走的是少而精的方向,性能優(yōu)越,它最出名的異步非阻塞的設(shè)計(jì)方式
Tornado的兩大核心模塊:
iostraem:對(duì)非阻塞的socket進(jìn)行簡(jiǎn)單的封裝
ioloop: 對(duì)I/O 多路復(fù)用的封裝,它實(shí)現(xiàn)一個(gè)單例
144.CORS 和 CSRF的區(qū)別?
什么是CORS? CORS是一個(gè)W3C標(biāo)準(zhǔn),全稱是“跨域資源共享"(Cross-origin resoure sharing).
它允許瀏覽器向跨源服務(wù)器,發(fā)出XMLHttpRequest請(qǐng)求,從而客服了AJAX只能同源使用的限制。
什么是CSRF?
CSRF主流防御方式是在后端生成表單的時(shí)候生成一串隨機(jī)token,內(nèi)置到表單里成為一個(gè)字段,同時(shí),將此串token置入session中。每次表單提交到后端時(shí)都會(huì)檢查這兩個(gè)值是否一致,以此來(lái)判斷此次表單提交是否是可信的,提交過(guò)一次之后,如果這個(gè)頁(yè)面沒(méi)有生成CSRF token,那么token將會(huì)被清空,如果有新的需求,那么token會(huì)被更新。
攻擊者可以偽造POST表單提交,但是他沒(méi)有后端生成的內(nèi)置于表單的token,session中沒(méi)有token都無(wú)濟(jì)于事。
145.Session,Cookie,JWT的理解
為什么要使用會(huì)話管理
眾所周知,HTTP協(xié)議是一個(gè)無(wú)狀態(tài)的協(xié)議,也就是說(shuō)每個(gè)請(qǐng)求都是一個(gè)獨(dú)立的請(qǐng)求,請(qǐng)求與請(qǐng)求之間并無(wú)關(guān)系。但在實(shí)際的應(yīng)用場(chǎng)景,這種方式并不能滿足我們的需求。舉個(gè)大家都喜歡用的例子,把商品加入購(gòu)物車,單獨(dú)考慮這個(gè)請(qǐng)求,服務(wù)端并不知道這個(gè)商品是誰(shuí)的,應(yīng)該加入誰(shuí)的購(gòu)物車?因此這個(gè)請(qǐng)求的上下文環(huán)境實(shí)際上應(yīng)該包含用戶的相關(guān)信息,在每次用戶發(fā)出請(qǐng)求時(shí)把這一小部分額外信息,也做為請(qǐng)求的一部分,這樣服務(wù)端就可以根據(jù)上下文中的信息,針對(duì)具體的用戶進(jìn)行操作。所以這幾種技術(shù)的出現(xiàn)都是對(duì)HTTP協(xié)議的一個(gè)補(bǔ)充,使得我們可以用HTTP協(xié)議+狀態(tài)管理構(gòu)建一個(gè)的面向用戶的WEB應(yīng)用。
Session 和Cookie的區(qū)別
這里我想先談?wù)剆ession與cookies,因?yàn)檫@兩個(gè)技術(shù)是做為開(kāi)發(fā)最為常見(jiàn)的。那么session與cookies的區(qū)別是什么?個(gè)人認(rèn)為session與cookies最核心區(qū)別在于額外信息由誰(shuí)來(lái)維護(hù)。利用cookies來(lái)實(shí)現(xiàn)會(huì)話管理時(shí),用戶的相關(guān)信息或者其他我們想要保持在每個(gè)請(qǐng)求中的信息,都是放在cookies中,而cookies是由客戶端來(lái)保存,每當(dāng)客戶端發(fā)出新請(qǐng)求時(shí),就會(huì)稍帶上cookies,服務(wù)端會(huì)根據(jù)其中的信息進(jìn)行操作。
當(dāng)利用session來(lái)進(jìn)行會(huì)話管理時(shí),客戶端實(shí)際上只存了一個(gè)由服務(wù)端發(fā)送的session_id,而由這個(gè)session_id,可以在服務(wù)端還原出所需要的所有狀態(tài)信息,從這里可以看出這部分信息是由服務(wù)端來(lái)維護(hù)的。
除此以外,session與cookies都有一些自己的缺點(diǎn):
cookies的安全性不好,攻擊者可以通過(guò)獲取本地cookies進(jìn)行欺騙或者利用cookies進(jìn)行CSRF攻擊。使用cookies時(shí),在多個(gè)域名下,會(huì)存在跨域問(wèn)題。
session 在一定的時(shí)間里,需要存放在服務(wù)端,因此當(dāng)擁有大量用戶時(shí),也會(huì)大幅度降低服務(wù)端的性能,當(dāng)有多臺(tái)機(jī)器時(shí),如何共享session也會(huì)是一個(gè)問(wèn)題.(redis集群)也就是說(shuō),用戶第一個(gè)訪問(wèn)的時(shí)候是服務(wù)器A,而第二個(gè)請(qǐng)求被轉(zhuǎn)發(fā)給了服務(wù)器B,那服務(wù)器B如何得知其狀態(tài)。實(shí)際上,session與cookies是有聯(lián)系的,比如我們可以把session_id存放在cookies中的。
JWT是如何工作的
首先用戶發(fā)出登錄請(qǐng)求,服務(wù)端根據(jù)用戶的登錄請(qǐng)求進(jìn)行匹配,如果匹配成功,將相關(guān)的信息放入payload中,利用算法,加上服務(wù)端的密鑰生成token,這里需要注意的是secret_key很重要,如果這個(gè)泄露的話,客戶端就可以隨機(jī)篡改發(fā)送的額外信息,它是信息完整性的保證。生成token后服務(wù)端將其返回給客戶端,客戶端可以在下次請(qǐng)求時(shí),將token一起交給服務(wù)端,一般是說(shuō)我們可以將其放在Authorization首部中,這樣也就可以避免跨域問(wèn)題。
146.簡(jiǎn)述Django請(qǐng)求生命周期
一般是用戶通過(guò)瀏覽器向我們的服務(wù)器發(fā)起一個(gè)請(qǐng)求(request),這個(gè)請(qǐng)求會(huì)去訪問(wèn)視圖函數(shù),如果不涉及到數(shù)據(jù)調(diào)用,那么這個(gè)時(shí)候視圖函數(shù)返回一個(gè)模板也就是一個(gè)網(wǎng)頁(yè)給用戶)視圖函數(shù)調(diào)用模型毛模型去數(shù)據(jù)庫(kù)查找數(shù)據(jù),然后逐級(jí)返回,視圖函數(shù)把返回的數(shù)據(jù)填充到模板中空格中,最后返回網(wǎng)頁(yè)給用戶。
1.wsgi ,請(qǐng)求封裝后交給web框架(Flask,Django)
2.中間件,對(duì)請(qǐng)求進(jìn)行校驗(yàn)或在請(qǐng)求對(duì)象中添加其他相關(guān)數(shù)據(jù),例如:csrf,request.session
3.路由匹配 根據(jù)瀏覽器發(fā)送的不同url去匹配不同的視圖函數(shù)
4.視圖函數(shù),在視圖函數(shù)中進(jìn)行業(yè)務(wù)邏輯的處理,可能涉及到:orm,templates
5.中間件,對(duì)響應(yīng)的數(shù)據(jù)進(jìn)行處理
6.wsgi,將響應(yīng)的內(nèi)容發(fā)送給瀏覽器
147.用的restframework完成api發(fā)送時(shí)間時(shí)區(qū)
當(dāng)前的問(wèn)題是用django的rest framework模塊做一個(gè)get請(qǐng)求的發(fā)送時(shí)間以及時(shí)區(qū)信息的api
148.nginx,tomcat,apach到都是什么?
Nginx(engine x)是一個(gè)高性能的HTTP和反向代理服務(wù)器,也是 一個(gè)IMAP/POP3/SMTP服務(wù)器,工作在OSI七層,負(fù)載的實(shí)現(xiàn)方式:輪詢,IP_HASH,fair,session_sticky.
Apache HTTP Server是一個(gè)模塊化的服務(wù)器,源于NCSAhttpd服務(wù)器
Tomcat 服務(wù)器是一個(gè)免費(fèi)的開(kāi)放源代碼的Web應(yīng)用服務(wù)器,屬于輕量級(jí)應(yīng)用服務(wù)器,是開(kāi)發(fā)和調(diào)試JSP程序的首選。
149.請(qǐng)給出你熟悉關(guān)系數(shù)據(jù)庫(kù)范式有哪些,有什么作用?
在進(jìn)行數(shù)據(jù)庫(kù)的設(shè)計(jì)時(shí),所遵循的一些規(guī)范,只要按照設(shè)計(jì)規(guī)范進(jìn)行設(shè)計(jì),就能設(shè)計(jì)出沒(méi)有數(shù)據(jù)冗余和數(shù)據(jù)維護(hù)異常的數(shù)據(jù)庫(kù)結(jié)構(gòu)。
數(shù)據(jù)庫(kù)的設(shè)計(jì)的規(guī)范有很多,通常來(lái)說(shuō)我們?cè)谠O(shè)是數(shù)據(jù)庫(kù)時(shí)只要達(dá)到其中一些規(guī)范就可以了,這些規(guī)范又稱之為數(shù)據(jù)庫(kù)的三范式,一共有三條,也存在著其他范式,我們只要做到滿足前三個(gè)范式的要求,就能設(shè)陳出符合我們的數(shù)據(jù)庫(kù)了,我們也不能全部來(lái)按照范式的要求來(lái)做,還要考慮實(shí)際的業(yè)務(wù)使用情況,所以有時(shí)候也需要做一些違反范式的要求。
1.數(shù)據(jù)庫(kù)設(shè)計(jì)的第一范式(最基本),基本上所有數(shù)據(jù)庫(kù)的范式都是符合第一范式的,符合第一范式的表 具有以下幾個(gè)特點(diǎn): 數(shù)據(jù)庫(kù)表中的所有字段都只具有單一屬性,單一屬性的列是由基本的數(shù)據(jù)類型(整型,浮點(diǎn)型,字符型等)所構(gòu)成的設(shè)計(jì)出來(lái)的表都是簡(jiǎn)單的二比表
2.數(shù)據(jù)庫(kù)設(shè)計(jì)的第二范式(是在第一范式的基礎(chǔ)上設(shè)計(jì)的),要求一個(gè)表中只具有一個(gè)業(yè)務(wù)主鍵,也就是說(shuō)符合第二范式的表中不能存在非主鍵列對(duì)只對(duì)部分主鍵的依賴關(guān)系
3.數(shù)據(jù)庫(kù)設(shè)計(jì)的第三范式,指每一個(gè)非主屬性既不部分依賴與也不傳遞依賴于業(yè)務(wù)主鍵,也就是第二范式的基礎(chǔ)上消除了非主屬性對(duì)主鍵的傳遞依賴
150.簡(jiǎn)述QQ登陸過(guò)程
qq登錄,在我們的項(xiàng)目中分為了三個(gè)接口,
第一個(gè)接口是請(qǐng)求qq服務(wù)器返回一個(gè)qq登錄的界面;
第二個(gè)接口是通過(guò)掃碼或賬號(hào)登陸進(jìn)行驗(yàn)證,qq服務(wù)器返回給瀏覽器一個(gè)code和state,利用這個(gè)code通過(guò)本地服務(wù)器去向qq服務(wù)器獲取access_token覆返回給本地服務(wù)器,憑借access_token再向qq服務(wù)器獲取用戶的openid(openid用戶的唯一標(biāo)識(shí))
第三個(gè)接口是判斷用戶是否是第一次qq登錄,如果不是的話直接登錄返回的jwt-token給用戶,對(duì)沒(méi)有綁定過(guò)本網(wǎng)站的用戶,對(duì)openid進(jìn)行加密生成token進(jìn)行綁定
151.post 和 get的區(qū)別?
1.GET是從服務(wù)器上獲取數(shù)據(jù),POST是向服務(wù)器傳送數(shù)據(jù)
2.在客戶端,GET方式在通過(guò)URL提交數(shù)據(jù),數(shù)據(jù)在URL中可以看到,POST方式,數(shù)據(jù)放置在HTML——HEADER內(nèi)提交
3.對(duì)于GET方式,服務(wù)器端用Request.QueryString獲取變量的值,對(duì)于POST方式,服務(wù)器端用Request.Form獲取提交的數(shù)據(jù)
152.項(xiàng)目中日志的作用
一、日志相關(guān)概念
1.日志是一種可以追蹤某些軟件運(yùn)行時(shí)所發(fā)生事件的方法
2.軟件開(kāi)發(fā)人員可以向他們的代碼中調(diào)用日志記錄相關(guān)的方法來(lái)表明發(fā)生了某些事情
3.一個(gè)事件可以用一個(gè)包含可選變量數(shù)據(jù)的消息來(lái)描述
4.此外,事件也有重要性的概念,這個(gè)重要性也可以被成為嚴(yán)重性級(jí)別(level)
二、日志的作用
1.通過(guò)log的分析,可以方便用戶了解系統(tǒng)或軟件、應(yīng)用的運(yùn)行情況;
2.如果你的應(yīng)用log足夠豐富,可以分析以往用戶的操作行為、類型喜好,地域分布或其他更多信息;
3.如果一個(gè)應(yīng)用的log同時(shí)也分了多個(gè)級(jí)別,那么可以很輕易地分析得到該應(yīng)用的健康狀況,及時(shí)發(fā)現(xiàn)問(wèn) 題并快速定位、解決問(wèn)題,補(bǔ)救損失。
4.簡(jiǎn)單來(lái)講就是我們通過(guò)記錄和分析日志可以了解一個(gè)系統(tǒng)或軟件程序運(yùn)行情況是否正常,也可以在應(yīng)用程序出現(xiàn)故障時(shí)快速定位問(wèn)題。不僅在開(kāi)發(fā)中,在運(yùn)維中日志也很重要,日志的作用也可以簡(jiǎn)單。總結(jié)為以下幾點(diǎn):
1.程序調(diào)試
2.了解軟件程序運(yùn)行情況,是否正常
3,軟件程序運(yùn)行故障分析與問(wèn)題定位 4,如果應(yīng)用的日志信息足夠詳細(xì)和豐富,還可以用來(lái)做用戶行為分析
153.django中間件的使用?
Django在中間件中預(yù)置了六個(gè)方法,這六個(gè)方法的區(qū)別在于不同的階段執(zhí)行,對(duì)輸入或輸出進(jìn)行干預(yù),
方法如下:
1.初始化:無(wú)需任何參數(shù),服務(wù)器響應(yīng)第一個(gè)請(qǐng)求的時(shí)候調(diào)用一次,用于確定是否啟用當(dāng)前中間件
def __init__(): pass
1
2
2.處理請(qǐng)求前:在每個(gè)請(qǐng)求上調(diào)用,返回None或HttpResponse對(duì)象。
def process_request(request): pass
1
2
3.處理視圖前:在每個(gè)請(qǐng)求上調(diào)用,返回None或HttpResponse對(duì)象。
def process_view(request,view_func,view_args,view_kwargs): pass
1
2
4.處理模板響應(yīng)前:在每個(gè)請(qǐng)求上調(diào)用,返回實(shí)現(xiàn)了render方法的響應(yīng)對(duì)象
def process_template_response(request,response): pass
1
2
5.處理響應(yīng)后:所有響應(yīng)返回瀏覽器之前被調(diào)用,在每個(gè)請(qǐng)求上調(diào)用,返回HttpResponse對(duì)象。
def process_response(request,response): pass
1
2
6.異常處理:當(dāng)視圖拋出異常時(shí)調(diào)用,在每個(gè)請(qǐng)求上調(diào)用,返回一個(gè)HttpResponse對(duì)象。
def process_exception(request,exception): pass
1
2
154.談一下你對(duì)uWSGI和nginx的理解?
1.uWSGI是一個(gè)Web服務(wù)器,它實(shí)現(xiàn)了WSGI協(xié)議、uwsgi、http等協(xié)議。Nginx中HttpUwsgiModule的作用是與uWSGI服務(wù)器進(jìn)行交換。WSGI是一種Web服務(wù)器網(wǎng)關(guān)接口。它是一個(gè)Web服務(wù)器(如nginx,uWSGI等服務(wù)器)與web應(yīng)用(如用Flask框架寫的程序)通信的一種規(guī)范。
要注意WSGI/uwsgi/uWSGI這三個(gè)概念的區(qū)分。
WSGI是一種通信協(xié)議。
uwsgi是一種線路協(xié)議而不是通信協(xié)議,在此常用于在uWSGI服務(wù)器與其他網(wǎng)絡(luò)服務(wù)器的數(shù)據(jù)通信。
uWSGI是實(shí)現(xiàn)了uwsgi和WSGI兩種協(xié)議的Web服務(wù)器。
nginx 是一個(gè)開(kāi)源的高性能的HTTP服務(wù)器和反向代理:
1.作為web服務(wù)器,它處理靜態(tài)文件和索引文件效果非常高
2.它的設(shè)計(jì)非常注重效率,最大支持5萬(wàn)個(gè)并發(fā)連接,但只占用很少的內(nèi)存空間
3.穩(wěn)定性高,配置簡(jiǎn)潔。
4.強(qiáng)大的反向代理和負(fù)載均衡功能,平衡集群中各個(gè)服務(wù)器的負(fù)載壓力應(yīng)用
155.Python中三大框架各自的應(yīng)用場(chǎng)景?
django:主要是用來(lái)搞快速開(kāi)發(fā)的,他的亮點(diǎn)就是快速開(kāi)發(fā),節(jié)約成本,,如果要實(shí)現(xiàn)高并發(fā)的話,就要對(duì)django進(jìn)行二次開(kāi)發(fā),比如把整個(gè)笨重的框架給拆掉自己寫socket實(shí)現(xiàn)http的通信,底層用純c,c++寫提升效率,ORM框架給干掉,自己編寫封裝與數(shù)據(jù)庫(kù)交互的框架,ORM雖然面向?qū)ο髞?lái)操作數(shù)據(jù)庫(kù),但是它的效率很低,使用外鍵來(lái)聯(lián)系表與表之間的查詢;
flask: 輕量級(jí),主要是用來(lái)寫接口的一個(gè)框架,實(shí)現(xiàn)前后端分離,提考開(kāi)發(fā)效率,F(xiàn)lask本身相當(dāng)于一個(gè)內(nèi)核,其他幾乎所有的功能都要用到擴(kuò)展(郵件擴(kuò)展Flask-Mail,用戶認(rèn)證Flask-Login),都需要用第三方的擴(kuò)展來(lái)實(shí)現(xiàn)。比如可以用Flask-extension加入ORM、文件上傳、身份驗(yàn)證等。Flask沒(méi)有默認(rèn)使用的數(shù)據(jù)庫(kù),你可以選擇MySQL,也可以用NoSQL。
其WSGI工具箱用Werkzeug(路由模塊),模板引擎則使用Jinja2,這兩個(gè)也是Flask框架的核心。
Tornado: Tornado是一種Web服務(wù)器軟件的開(kāi)源版本。Tornado和現(xiàn)在的主流Web服務(wù)器框架(包括大多數(shù)Python的框架)有著明顯的區(qū)別:它是非阻塞式服務(wù)器,而且速度相當(dāng)快。得利于其非阻塞的方式和對(duì)epoll的運(yùn)用,Tornado每秒可以處理數(shù)以千計(jì)的連接因此Tornado是實(shí)時(shí)Web服務(wù)的一個(gè)理想框架
個(gè)人公眾號(hào) yk 坤帝
后臺(tái)回復(fù) 項(xiàng)目七 獲取整理資源
Python 數(shù)據(jù)結(jié)構(gòu)
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。