1.類的方法分別怎么調(diào)用鹅巍,項(xiàng)目中在哪里可以用到
類方法分為實(shí)例方法带膀、靜態(tài)方法和類方法步势,后兩者實(shí)際上沒有區(qū)別国撵,只不過類方法的第一個(gè)參數(shù)是代表類的對(duì)象瞪醋,而靜態(tài)方法沒有這個(gè)參數(shù)瓤的,實(shí)例方法要用對(duì)象調(diào)用(發(fā)給對(duì)象的消息)休弃,靜態(tài)方法和類方法用類就可以調(diào)用。
2.裝飾器和中間件的區(qū)別
裝飾器和中間件本質(zhì)也是一致的圈膏,Django1.8以后官方推薦的寫法中間件跟裝飾器的寫法是一致的塔猾,只不過中間件可以對(duì)web的請(qǐng)求和響應(yīng)進(jìn)行過濾,web的中間件更應(yīng)該稱為攔截過濾器
3.celery怎么寫
app = celery.Celery('模塊名'稽坤, broker = '消息服務(wù)器的URL'丈甸, backend = '存儲(chǔ)服務(wù)的URL')
4.七牛云怎么用的 CDN是干什么的
七牛云可以用來存儲(chǔ)靜態(tài)資源,CDN可以加速對(duì)靜態(tài)資源的訪問
5.數(shù)據(jù)庫索引
普通索引尿褪、主鍵索引睦擂、全文索引、唯一索引
6.中間件的種類
處理請(qǐng)求杖玲、處理響應(yīng)顿仇、處理異常、處理視圖摆马、處理模板
7.富文本編輯器是怎么做到圖片上傳的臼闻,又是怎么關(guān)聯(lián)到文章的(相當(dāng)于就是一篇文章 (字 圖片1 字 圖片2)怎么讓圖片和文章進(jìn)行關(guān)聯(lián))
富文本一般都帶了支持文件上傳的,只要給一個(gè)支持文件上傳的url地址就可以了囤采,圖片里面加一個(gè)文章的id作為外鍵就可以了圖片和文章就關(guān)聯(lián)起來了述呐,在存儲(chǔ)的時(shí)候就給圖片編一個(gè)號(hào)或者按照時(shí)間先后順序生成一個(gè)時(shí)間戳就可以區(qū)分順序了
8.緩存穿透和緩存雪崩怎么解決
緩存穿透:指查詢一個(gè)數(shù)據(jù)庫不存在的數(shù)據(jù)。
解決:
1.使用互斥鎖排隊(duì):
業(yè)界比價(jià)普遍的一種做法蕉毯,即根據(jù)key獲取value值為空時(shí)乓搬,鎖上思犁,從數(shù)據(jù)庫中l(wèi)oad數(shù)據(jù)后再釋放鎖。若其它線程獲取鎖失敗进肯,則等待一段時(shí)間后重試抒倚。這里要注意,分布式環(huán)境中要使用分布式鎖坷澡,單機(jī)的話用普通的鎖(synchronized托呕、Lock)就夠了。這樣做思路比較清晰频敛,也從一定程度上減輕數(shù)據(jù)庫壓力项郊,但是鎖機(jī)制使得邏輯的復(fù)雜度增加,吞吐量也降低了斟赚,有點(diǎn)治標(biāo)不治本着降。
2.接口限流與熔斷、降級(jí):
重要的接口一定要做好限流策略拗军,防止用戶惡意刷接口任洞,同時(shí)要降級(jí)準(zhǔn)備,當(dāng)接口中的某些服務(wù)不可用時(shí)候发侵,進(jìn)行熔斷交掏,失敗快速返回機(jī)制。
3.布隆過濾器:
bloomfilter就類似于一個(gè)hash set刃鳄,用于快速判某個(gè)元素是否存在于集合中盅弛,其典型的應(yīng)用場(chǎng)景就是快速判斷一個(gè)key是否存在于某容器,不存在就直接返回叔锐。布隆過濾器的關(guān)鍵就在于hash算法和容器大小挪鹏。
緩存雪崩:緩存在同一時(shí)間內(nèi)大量鍵過期(失效),接著來的一大波請(qǐng)求瞬間都落在了數(shù)據(jù)庫中導(dǎo)致連接異常愉烙。嚴(yán)重可能導(dǎo)致數(shù)據(jù)庫宕機(jī)讨盒。
解決:
1.也可加鎖排隊(duì)機(jī)制。
2.建立備份緩存步责,緩存A和緩存B返顺,A設(shè)置超時(shí)時(shí)間,B不設(shè)置超時(shí)時(shí)間勺择,先從A讀緩存创南,A沒有讀B,省核,并且更新A緩存和B緩存稿辙。
3.設(shè)置緩存超時(shí)時(shí)間的時(shí)候加上一個(gè)隨機(jī)的時(shí)間長(zhǎng)度,比如這個(gè)緩存key的超時(shí)時(shí)間是固定的5分鐘加上隨機(jī)的2分鐘气忠,這樣可從一定程度上避免雪崩問題
注:redis是單線程+異步IO的工作模式
9.接口怎么做限流
接口限流是配置throttle_classes
10.數(shù)據(jù)庫事務(wù)
一個(gè)是事務(wù)的ACID特性邻储,一個(gè)是事務(wù)隔離級(jí)別赋咽,對(duì)應(yīng)到底層的鎖機(jī)制
事務(wù)的ACID特性:
1. 原子性(atomic),事務(wù)必須是原子工作單元吨娜;對(duì)于其數(shù)據(jù)修改脓匿,要么全都執(zhí)行,要么全都不執(zhí)行
2. 一致性(consistent)宦赠,事務(wù)的執(zhí)行結(jié)果陪毡,必須是從一個(gè)一致狀態(tài),變成另一個(gè)新的一致狀態(tài)勾扭。事務(wù)的原子性保證其一致性
3. 隔離性(insulation)毡琉,主要在并發(fā)時(shí),各個(gè)事務(wù)之間互不影響妙色。并發(fā)事務(wù)所作的修改必須與任何其它并發(fā)事務(wù)所作的修改隔離桅滋。
4. 持久性(Duration),事務(wù)一旦提交身辨,數(shù)據(jù)就永久的保存在數(shù)據(jù)庫丐谋,它對(duì)于系統(tǒng)的影響是永久性的。
事務(wù)隔離級(jí)別:
1. Serializable 串行化
2. Repeatable Read 可重復(fù)讀
3. Read Commited 可讀已提交
4. Read Uncommited 可讀未提交
鎖的機(jī)制
1) 共享鎖
共享鎖的代號(hào)是S煌珊,共享鎖的鎖粒度是行或元組(多個(gè)行)号俐。一個(gè)事務(wù)獲取了共享鎖之后,可以對(duì)鎖定范圍內(nèi)的數(shù)據(jù)執(zhí)行讀操作怪瓶。
2) 排它鎖
排它鎖的代號(hào)是X萧落,排它鎖的粒度與共享鎖相同践美,也是行或元組洗贰。一個(gè)事務(wù)獲取了排它鎖之后,可以對(duì)鎖定范圍內(nèi)的數(shù)據(jù)執(zhí)行寫操作陨倡。
3) 意向鎖
意向鎖是一種表鎖敛滋,鎖定的粒度是整張表,分為意向共享鎖(IS)和意向排它鎖(IX)兩類兴革。意向共享鎖表示一個(gè)事務(wù)有意對(duì)數(shù)據(jù)上共享鎖绎晃;意向排它鎖表示一個(gè)事務(wù)有意對(duì)數(shù)據(jù)上排它鎖。
使用意向鎖來保護(hù)鎖層次結(jié)構(gòu)的底層資源杂曲,以防止其他事務(wù)對(duì)自己鎖住的資源造成傷害庶艾。
意向鎖可以提高性能,因?yàn)閿?shù)據(jù)庫引擎僅在表級(jí)檢查意向鎖擎勘,確定事務(wù)是否能安全地獲取該表上的鎖咱揍,而不需要檢查表中的每行或每頁上的鎖以確定事務(wù)是否可以鎖定整個(gè)表。
MYSQL鎖級(jí)別
1) 表級(jí)鎖:直接鎖定整張表棚饵,在鎖定期間煤裙,其它進(jìn)程無法對(duì)該表進(jìn)行寫操作掩完,若是排他鎖,則其它進(jìn)程讀也不允許硼砰。開銷小且蓬,加鎖快,不會(huì)出現(xiàn)死鎖题翰,沖突概率高恶阴,并發(fā)度低。
2) 行級(jí)鎖:僅對(duì)指定的記錄進(jìn)行加鎖豹障,其它進(jìn)程還是可以對(duì)同一個(gè)表中的其它記錄進(jìn)行操作存淫。開銷大,加鎖慢沼填,會(huì)出現(xiàn)死鎖桅咆,沖突概率低,并發(fā)度高坞笙。
3) 頁級(jí)鎖:頁級(jí)鎖取了折衷岩饼,一次鎖定相鄰的一組記錄。開銷和加鎖時(shí)間界于表級(jí)鎖和行級(jí)鎖之間薛夜,會(huì)出現(xiàn)死鎖籍茧,并發(fā)度一般。
11.數(shù)據(jù)庫的優(yōu)化
1梯澜、選取最適用的字段屬性
2寞冯、使用連接(JOIN)來代替子查詢(Sub-Queries)
3、使用聯(lián)合(UNION)來代替手動(dòng)創(chuàng)建的臨時(shí)表
4晚伙、事務(wù)
5吮龄、鎖定表
6、使用外鍵
7咆疗、使用索引
8漓帚、優(yōu)化的查詢語句
9、定時(shí)的去清除不需要的數(shù)據(jù),定時(shí)進(jìn)行碎片整理(MyISAM)
10午磁、存儲(chǔ)過程 [模塊化編程尝抖,可以提高速度]
11、讀寫[寫: update/delete/add]分離
12迅皇、分表技術(shù)(水平分割昧辽、垂直分割)
12.高并發(fā)怎么處理
1.HTML靜態(tài)化
2.圖片服務(wù)器分離(七牛云云存儲(chǔ),CDN加速)
3.數(shù)據(jù)庫集群和庫表散列
4.緩存
5.鏡像
6.負(fù)載均衡
13.args和*kwargs分別代表什么
*args是非關(guān)鍵字參數(shù)登颓,傳入元組搅荞;**kwargs是關(guān)鍵字參數(shù)用于字典。
14.代碼審查(Review)
代碼評(píng)審可以分為代碼評(píng)審會(huì)議和Single Review(一對(duì)一審查),主要就是檢查代碼的風(fēng)格取具、邏輯這些脖隶,可以用工具進(jìn)行輔助檢查 或者是用工具(單元測(cè)試、pylint檢查代碼風(fēng)格)
15.Python的內(nèi)存管理機(jī)制
就是引用計(jì)數(shù)器機(jī)制和垃圾回收機(jī)制的混合機(jī)制
垃圾回收機(jī)制:
當(dāng)Python的某個(gè)對(duì)象的引用計(jì)數(shù)降為0時(shí)暇检,說明沒有任何引用指向該對(duì)象产阱,該對(duì)象就成為要被回收的垃圾。比如某個(gè)新建對(duì)象块仆,被分配給某個(gè)引用构蹬,對(duì)象的引用計(jì)數(shù)變?yōu)?。如果引用被刪除悔据,對(duì)象的引用計(jì)數(shù)為0庄敛,那么該對(duì)象就可以被垃圾回收。
16.Python2和Python3的區(qū)別
一科汗、 print 從語句變?yōu)楹瘮?shù)
原: print 1, 2+3
改為: print(1, 2+3)
二藻烤、range 與 xrange
原 : range( 0, 4 ) 結(jié)果 是 列表 [0,1,2,3 ]
改為:list( range(0,4) )
原 : xrange( 0, 4 ) 適用于 for 循環(huán)的變量控制
改為:range(0,4)
三、字符串
原: 字符串以 8-bit 字符串存儲(chǔ)
改為: 字符串以 16-bit Unicode 字符串存儲(chǔ)
四头滔、try except 語句的變化
原:
try:
......
except Exception, e :
......
改為:
try:
......
except Exception as e :
......
五怖亭、打開文件
原:
file( ..... )或 open(.....)
改為:
open(.....)
六、從鍵盤錄入一個(gè)字符串
原: raw_input( "提示信息" )
改為: input( "提示信息" )
七坤检、bytes 數(shù)據(jù)類型