數據庫: B樹就是 B-樹 B&B+都用到了磁盤塊的概念,每塊大概4k,利用了磁盤的預讀和同一數據塊內頗有可能一塊兒用到 Redis端口6379前端
事務四大特性(ACID)原子性(不可再分 要麼都發生 要麼不發生)、一致性、隔離性、持久性node
數據庫隔離級別:讀取未提交數據=髒讀,能夠讀取其餘事務提交的數據 大多數默認級別,不可重複讀-MySQL默認,可重讀=幻讀 InnoDB默認,串行化 讀寫阻塞。並行依次下降,安全性提升。mysql
innodb和myisam區別:MyIsam-容許沒有主鍵 表鎖 不產生死鎖 讀快 不支持事務操做,外鍵以及行級鎖 保存錶行數count直接返回行數 支持全文索引 存儲數據文件 索引/數據文件分離 索引文件保存數據地址; InnoDB-沒主鍵或非空惟一索引它會自動生成一個用戶不可見的主鍵 不保存表的行數,count()會遍歷整個表,可是加上where倆引擎都同樣 不支持全文索引 寫較快 併發高 索引和數據一塊兒存在表空間-數據記錄自己被存於主索引的葉子節點上 行鎖,併發高,可能死鎖 表數據文件就是主索引-葉節點包含完整數據記錄,數據按照主鍵彙集,因此InnoDB必須有主鍵,沒有也會 自生成長度6字節的 輔助索引先檢索主鍵再根據主鍵找到數據 設計主鍵時長度不能過大由於輔助索引都引用主索引,過大引發輔助索引過大 使用單調的字段,非單調在插入新數據時會爲了維持其特性而頻 繁分裂調整。
後者查詢快-葉子節點不保存數據,佔用空間小,分佈集中。前者相反,因此佔用更多扇區,更多IO。插入也是後者快,前者須要檢測主鍵重複,儘量也要按順序來。linux
查詢語句不一樣元素(where、jion、limit、group by、having 等等)執行前後順序:from-join-where-group by-having-select-order bynginx
使用explain優化sql索引:先開啓慢日誌查詢,找到慢的SQL再執行explain。id type(ALL < index < range ~ index_merge < ref < eq_ref < const < system)至少range key ref extra
SQL優化:減小數據請求量 不要* 減小與數據庫交互,最好批量操做 用limit 緩存 避免隱式轉化致使索引失效 拆分大SQL爲小SQL。
索引失效:% 索引列計算 左原則 查詢條件有函數 組合索引有null 查詢條件中有!=,<>,is null is not null 查詢條件字符串不帶引號
字段設計優化:必定要根據需求設計,好比varchar char的選擇 前者變長但有額外信息 後者固定適合定長字段如UUID 使用簡單數據結構-str變數字 IP變整型 列設置not null-索引列須要額外空間保存 時間用TIMESTAMP,DATETIME可讀性高空間小 不建議外鍵約束,影響性能,用業務邏輯約束。主鍵自增,不宜過大。
索引優化:多列索引比多個單列索引好 在order by where常常搜索 範圍搜索上建立索引 主鍵建立惟一索引 外鍵創建索引 常常改的/大量重複/記錄少不建 限制單表索引數量通常少於5
數據量大以後分庫分表:垂直 水平分表 主從複製分庫git
數據庫的主從複製:binlog 線程(將主服務器上的數據更改寫入二進制日誌(Binary log)中)、I/O 線程(從主服務器上讀取二進制日誌,並寫入從服務器的中繼日誌(Relay log))和 SQL 線程(讀取中繼日誌,解析出主服務器已經執行的數據更改並在從服務器中重放(Replay))讀寫分離:主從服務器負責各自的讀和寫,極大程度緩解了鎖的爭用 從服務器可使用 MyISAM,提高查詢性能以及節約系統開銷github
B+索引數據結構,和B(B-)樹的區別:B樹是比平衡二叉樹多分枝,每一個索引節點都會有Data域。B+樹的倆個特色:數據存在葉子結點,葉子結點由指針鏈接
爲何選擇B+:由於B樹無論是葉子節點仍是非葉子節點都會保存數據,這樣在非葉子節點保存的指針數量就會變少,響應的樹高就會增大,I/O數就變多,性能變低。web
彙集和非彙集索引:共同點-內部都是B+,高度都是平衡,葉節點存放全部數據。不一樣點:葉節點是否存放一整行數據。彙集是按照數據的物理存在劃分的,索引的順序和數據的物理順序保持一致。
非彙集強調邏輯分類-先去索引表查位置 再去取記錄。
主索引:key是主鍵的索引ajax
數據庫三範式,根據某個場景設計數據表(能夠經過手繪ER圖)第一:列的原子性 即不可再分-也要看需求,必要再分(如地址 若城市查詢率很高 則須要再分地址字段爲省、城市、縣)
第二:必有主鍵 沒有包含在主鍵中的列必須徹底依賴於主鍵 第三:非主鍵列必須直接依賴於主鍵,不能存在傳遞依賴redis
MySQL:單進程多線程,分三層:客戶端 服務層 存儲引擎
MySQL數據庫備份:SELECT INTO OUTFILE 這種方法只能導出或導入數據的內容,而不包括表的結構。若表的結構文件損壞,則必須先設法恢復原來表的結構。LOAD DATA…INFILE 恢復數據
MySQL分區:物理分區,邏輯一個表。分類:hash分區-按活躍來 range-適合時間相關
redis和mysql何時同步:讀,先讀緩存,沒有數據則讀數據庫,而後取出數據後放入緩存同時返回響應。更新,先刪除緩存,而後再更新數據庫。爲何刪緩存?懶加載用到再寫入緩存。爲何先刪再更新?若反着來先更新再刪除緩存,若刪除失敗則出現數據不一致,先刪後更新,更新失敗則訪問數據爲空
內鏈接、外鏈接、交叉鏈接、笛卡兒積等
死鎖:當兩個事務都須要得到對方持有的排他鎖才能完成事務,致使循環鎖等待。關鍵:兩個 (或以上) 的Session加鎖的順序不一致。那麼對應的解決死鎖問題的關鍵就是:讓不一樣的 session 加鎖有次序。
InnoDB提供wait-for graph算法,當檢測到有向圖是否出現環路,回滾一個事務。或kill線程,設置鎖超時時間。預防:約定程序讀表順序同樣 大事務拆成小事務 下降隔離級別
樂觀鎖悲觀鎖:排它鎖:寫鎖,其餘事務不可加鎖 用法 select 後面加 FOR UPDATE 樂觀鎖:更新提交才檢測 版本號 時間戳
Redis特色:持久化、豐富的數據類型,支持數據的備份即master-slave模式,性能高,操做原子性-MULTI和EXEC指令包起來
Redis數據類型,以及Redis底層實現:string計算;list消息隊列 最近瀏覽;set共同好友;hash zset排行榜
實現:單線程(避免沒必要要的上下文切換和競爭條件 不用考慮鎖)-多路複用IO模型。由於單線程因此在使用keys查看時會阻塞,如果在線上則不能用keys,用scan,無阻塞取但有重複,去重便可。
Redis緩存穿透/雪崩 穿透-查數據庫沒有的數據會一直請求,解決:查不到緩存空值或布隆過濾器
雪崩-許多key設置相同時間過時,即同時出現大面積緩存失效去訪問數據庫,解決:加隨機數設置過時時間 加鎖或者隊列,不讓大量線程去請求數據庫
緩存預熱:系統上線後,將相關數據加載到緩存系統。思路:寫一個刷新緩存頁面,去請求次數據 數據量不大能夠自動加載 定時刷新緩存
如何使用Redis來實現分佈式鎖:SET NX 是將key的值設爲value,當且僅當 key不存在,返回1說明拿到鎖 返回0則沒拿到;設置超時時間 萬一忽然宕機鎖沒有被釋放
Redis的併發競爭問題如何解決:樂觀鎖,使用redis的命令watch進行監控key值,若exec執行事務時watch的key變了則事務失敗
Redis 持久化的幾種方式,優缺點是什麼,怎麼實現的:有AOF優先加載
RDB: SAVE/BGSAVE:前者是阻塞執行,後者是fork一個子進程不影響用戶請求 前面是手動保存,通常配置參數:900-1(900秒內改一次則快照) 300-10 60-10000 在Redis中,這個自動保存RDB 的功能是默認開啓的。優缺點:適合災難恢復 大量數據比AOF快 須要避免過多丟失數據不適合快照 若fork子進程去執行,數據多時很佔資源
AOF:默認關閉,設置(每秒默認 每一個命令都寫 操做系統決定)優缺點:有重寫功能 減小冗餘命令 比RDB大 執行時大量寫入操做,效率低
選擇:通常倆者都開 對數據要求不高,只開RDB 不能只開AOF,官方說有BUG,且載入慢比RDB慢。重啓優先加載AOF 沒有再去加載RDB。
Redis幾種模式:主從複製不能用圖狀,用單鏈表式
主從複製:實現:輸入slave of host port後,從節點保存主節點信息,主從創建socket鏈接,發送ping命令,權限校驗,數據同步便完成創建,後面主持續寫命令至從。 第一次時主作bgsave操做,並將後續的修改操做寫入內存buffer,完成後把rdb文件複製到從且寫入從內存,再將buffer同步到從節點。通常不會用,至少會是哨兵。
哨兵:解決高可用,獨立的進程,在監聽全部的Redis服務器是否正常運行,若主機宕機,令從機變爲主機並經過發佈訂閱模式通知別的服務器,修改配置文件,讓他們切換主機。
哨兵模式分倆部分,一是哨兵系統-不存數據,二是主從節點。配置:sentinel monitor master ip port n(n爲master故障幾個哨兵贊成才故障轉移) 啓動:redis-sentinel conf_path
cluster集羣/分區/分片:拓展性,數據量大時用。分片:將數據存在多個服務器 分類:範圍分片(1-10 10-20)hash分片。
Redis 的數據淘汰策略 6種:已設置過時時間 最近最少使用/將要過時/任意數據 全部數據 最少使用/任意 禁止驅除數據
Redis過時鍵刪除策略:一、定時刪除-過時時建立一個定時器二、惰性刪除-過時鍵無論,當再次訪問時若過時則刪除三、按期刪-隔一段時間刪除過時鍵。
Redis在項目中用:settings中配置 from django_redis import get_redis_connection pool = redis.ConnectionPool(host='localhost', port=6379, db=2)
redis_db = redis.Redis(connection_pool=pool)
URL URI區別:URI-統一資源描述符,用來惟一標識一個資源 URL-統一資源定位器,具體的URI,便可以標識該資源還能夠定位該資源。URN-統一資源命名
HTTP協議:特色:一、簡單快速-只需傳方法路徑二、靈活-傳輸的類型由Content-Type控制三、無鏈接-應答完畢斷開四、無狀態-指協議對事務沒記憶能力,即倆次打開同一個頁面無任何聯繫1.1開始默認長鏈接
Http的報文結構:Request請求行 請求頭部 空行 請求數據 首部-Cache-Control緩存 accept-charset/encoding/language
Http長鏈接:本質是TCP長短鏈接。1.1開始默認長鏈接,設置實在響應頭中加Connection:keep-alive,他會有一個保持時間即一次任務完成後鏈接不斷開。長短取捨在於場景,長用在操做頻繁 點對點,web網
站通常爲短 由於有成千上萬個用戶 各自都佔鏈接 資源浪費太大
TCP報文結構:序號Seq,確認號Ack,標誌位-共6個Ack SYN-新鏈接標誌 FIN-斷開鏈接標誌,窗口,指針,數據
TCP握手與揮手:Seq用來標識A到B數據包的序號,Ack確認號 等於Seq+1,SYN創建新鏈接,FIN斷開鏈接 TIMEWAIT:斷開鏈接時,最後客戶端給服務端發送Ack後進入的狀態,不直接斷開的緣由是
怕服務端沒有接受到Ack就會繼續給客戶端發送以前的信息,正常狀況TIMEWAIT會維持往返倆個傳輸的時間後進入close狀態
HTTPs加密原理:數字證書-CA機構頒發的 裏面有證書持有人及其密鑰信息。數字簽名-製做過程:CA對證書明文先hash(私鑰加密很慢 hash後爲固定長度 傳輸快)再用私鑰加密獲得簽名,明文和數字簽名 共同組成了數字證書。瀏覽器驗證過程:拿到證書獲得明文T,數字簽名S,用CA機構的公鑰對S解密獲得S’,用證書裏說明的hash算法對明文T進行hash獲得 T’,若S’=T’則證書可信。
常見的hash MD5 除了能夠加密,因爲算法後獲得固定的值,如用md5算法hash後能夠獲得固定的128位的值,這樣加密解密就會快不少。
OSI七層網絡模型太複雜,TCP/IP概念層經常使用:分爲應用層-HTTP FTP SMTP DNS,傳輸層-TCP/UDP,網絡層-IP,網絡接口-。IP協議主要解決網絡路由和尋址問題,TCP 協議主要解決如何在 IP 層之上可靠的傳遞數據包,使在網絡上的另外一端收到發端發出的全部包,而且順序與發出順序一致。
CDN實現原理:基於UDP。選擇就近服務器請求資源是由於下面DNS解析時,訪問到權威服務器他會就近原則返回就近的IP。總結:經過權威 dns 服務器來實現優質節點的選擇,經過緩存來減小源站的壓力。
DNS域名解析:本地緩存(瀏覽器 主機)-運營商DNS(本地local DNS)-域名一次從左往右域名對於www.taobao.com.,先去問負責。的根域名服務器 .com。。。返回ip-localDNS緩存並回復瀏覽器
cookie和session和token的關係:cookie自動放在每次的http 因此適合存放必須傳的數據如身份信息 大小4k 可設置過時expires;session存在服務器,session_id存在cookie,較安全
token和cookie類似 登陸後服務器返回給瀏覽器 再次訪問放到headers中 能夠防止攻擊,與cookie區別:不會自動添加至headers且攻擊者沒法訪問到token。保證cookie安全設置HttpOnly,js就訪問不到。
session爲何更安全:第一先要攻破cookie 登陸後cookie纔有sessionID 並且加密 第二次訪問第一次的就沒用了
session是抽象概念,你們把每次的鏈接成爲會話,而cookie是存在header裏的。
常見攻擊技術:XSS-注入js腳本獲取cookie(過濾用戶輸入的特殊字符 cookie設置httponly)。DDoS:黑客經過向插件注入惡意代碼,把你的機子當作傀儡機去不間斷的請求另外一個網頁, 解決-引入第三方庫時在頁面寫上hash值,若被劫持則與開發者寫的hash值不一致。
tcp爲何比udp安全:TCP面向鏈接 三次握手四次揮手 傳輸中間有確認號 重傳機制等多種機制保證數據正確到達。UDP:無鏈接,只是簡單的把數據丟進網絡
TCP粘包問題(數據的無邊界性):客戶端發送的多個數據包被當作一個數據包接收。也稱數據的無邊界性,read/recv函數不知道數據包的開始或結束標誌,由於也沒有任何開始或結束標誌,只把它們當作連續的數據流來處理。
ajax(Asynchronous JavaScript And XML異步js和XML 這倆個都是語言)原理:獲取數據後經過js操做DOM,DOM至關於人體的骨架。
web框架的底層協議:WSGI協議:定義一種server與application如何通訊的規範,主要是解耦,WSGI server 負責從客戶端接收請求,將 request 轉發給 application,將 application 返回的 response 返回給客戶端,WSGI application 接收由 server 轉發的 request,處理請求,並將處理結果返回給 server。uWSGI和Gunicorn都是實現了WSGI server協議的服務器,Django,Flask 是實現了 WSGI application 協議的web框架,能夠根據項目實際狀況搭配使用。Django flask也實現了簡單的 WSGI server用於調試,線上必定要用WSGI server。
uwsgi:與WSGI同樣是一種通訊協議,是uWSGI服務器的獨佔協議,用於定義傳輸信息的類型。
uWSGI:實現了WSGI協議、uwsgi協議、http協議等。屬於應用服務器-處理動態資源,另一種web服務器-只處理靜態資源http協議 發送靜態頁面 如nginx
django:生命週期:用戶輸入URL,瀏覽器生成請求頭請求體發給服務端,若是有nginx,處理後轉給後臺,通過django的wsgi,到中間件,映射路由表,匹配一條轉給視圖函數,邏輯處理後返回結果給前端,渲染呈現。
五個中間件:請求進來前-IP攔截,執行views前-修改請求,用render前,view拋異常前,view執行完準備返回前端前-修改。黑白名單,csrf,緩存,判斷登陸
FBV-基於函數,url匹配對應函數。CBV-基於類,請求包含url和method,url匹配後走dispatch反射找到類對應的方法執行。
orm:可執行SQL的:extra、raw、自定義SQL。F:操做數據中的某列,如能夠給這列值加值。Q:複雜查詢,支持& | ~not
django-csrf:全局中間件配置,亦可用裝飾器,表單提交時要加入{%csrf%}。django-緩存:settings配置,可視圖緩存,中間件所有緩存。
csrf:跨站請求僞造,先訪問正常網站A得到A信任,再訪問攻擊網站B,B可能會在用戶不知情下訪問A,因爲同域名可帶上cookie,認證經過請求僞造。解決:一、檢測請求來源-referer二、表單中加入token
懶加載:QuerySet被構造,過濾,切片,作爲參數傳遞,都沒查詢數據庫,後面的會:循環,切片,len,list,序列化
HttpResponse-傳字符串。render-request、HTML文件、數據參數(字典 顯示在前端的模板語言)。redirect(HttpResponseRedirect 相似)-調到指定的URL。reverse-指定處理函數。
路由中的name至關於給URL起個別名,若是用的是name,修改URL也不要緊。
RESTful API設計:全稱 資源表現層狀態轉化。規範:URI不能有動詞用名詞且是複數 資源具體操做類型用動詞 協議用https 版本放入url,也可放入頭信息 請求的無狀態 資源描述-MIME 多級緩存:從瀏覽器(私有共有都有)-代理服務器-緩存服務器-應用服務器。如:https://developer.github.com/v3/pulls/reviews/ https://developer.linkedin.com/zh-cn/docs/rest-api
冪等性:其任意屢次執行對資源自己所產生的影響均與一次執行的影響相同-主要是對系統內部(如System.getCPULoad(),返回值雖不同,但冪等),不考慮網絡。用在支付/交易-訂單隻能是一個,支付只能扣一次錢。注:patch不是冪等,http是。冪等承諾只要調用接口成功,外部屢次調用對系統
Zookeeper:分佈式協調服務。由於是在內存中,so每一個節點最大存儲1M。持久節點和臨時節點
項目中做用:做爲服務生產者和服務消費者的註冊中心,去config寫,執行返回至output。提供了文件系統和通知機制。
zookeeper原理和適用場景:其實只有倆個功能:一、讀寫二、watch。數據存在內存中,因此高吞吐量和低延遲。主備模式:Leader-發起投票更新系統狀態、Follower-參與投票和Observer-拓展系統 提升讀取速度,過半寫成功策略
zookeeper watch機制
redis/zk節點宕機如何處理
消息中間件是如何實現的,技術難點有哪些:做用-應用解耦,異步消息,流量削鋒。
celery:任務生產者,交給任務隊列處理 任務調度器-獨立進程,自帶的任務生產者,讀取配置文件 任務代理-做爲消息隊列,可爲Redis 任務消費者-
堆 棧
硬連接和軟鏈接區別:Linux裏文件分爲用戶數據(即文件數據塊,記錄真實數據)和元數據(文件附加屬性 大小 建立者 時間),元數據中的i-node號纔是文件的惟一標識而非文件名,因此文件打開順序是
filename=>i-node=>data block。若一個inode對應多個文件名,則這些文件稱爲硬連接,換言之硬連接就是同一個文件使用了多個別名,特色:文件有相同的inode data block,只能對已存在的文件建立,不
可對目錄建立,刪除一個不會影響別的。若文件用戶數據塊中存放的內容是另外一文件的路徑名的指向,則該文件是軟鏈接,軟鏈接是一個數據塊特殊的普通文件。特色:它有本身的inode 文件屬性 權限等,可
對不存在的文件和目錄建立,刪除軟鏈接不影響被指向的文件,但刪除源文件,則這些連接稱爲死連接。
發現磁盤空間不夠,如何快速找出佔用空間最大的文件? du -sh:當前目錄大小 du –max-depth=1 -h: find . -type f -size +100M
文件描述符表:內核爲每一個進程維護一個,表中記錄單個文件描述符的相關信息,包括:控制標誌-目前內核僅定義了一個close-on-exec 打開文件描述指針-指向打開文件表的地址。
打開文件表:全稱打開文件描述表,表中條目爲打開文件描述體,存儲與一個文件打開的所有信息。包括:文件偏移量-調用read/write更新 訪問模式-只讀只寫或讀寫追加覆蓋 i-node-對象指針
i-node表:每一個文件系統會爲存儲於其上的全部文件/目錄維護一個i-node表,表中包括:文件類型-常規文件、目錄、套接字 時間戳-建立更新時間等 訪問權限 文件鎖列表 文件大小等等
同步異步:指代碼調用IO操做時,必須等待or沒必要等待操做完成才返回的調用方式。異步須要多線程、多CPU或非阻塞IO支持。同步IO必然是阻塞IO,異步IO必然是非阻塞IO。
阻塞非阻塞:指調用線程進程會不會被操做系統掛起。
總結:同步異步關注消息通訊機制-同步主動等待調用結果並本身寫讀寫數據,異步是調用發起後就返回,且沒結果,有結果後經過回調函數來處理這個調用,由操做系統本身來讀寫數據。阻塞非阻塞關注程序在等待調用結果時的狀態-阻塞是在獲得結果前當前線程會被掛起,非阻塞在沒獲得結果前不會阻塞當前線程(但會時不時的check是否有結果返回)。
阻塞非阻塞是從線程角度看的-請求不能當即回答且要等待就是阻塞,不然是非阻塞。同步異步表示一種協做方式或者是進程之間的合做方式,按甲方請求一次乙方應答一次屬於同步(同步IO中對同一個描述符的操做必須是有序的)。而甲方有須要就請求無論上次乙方是否應答,即請求應答不須要一致進行,這種是異步。同步是線性的,異步是併發的。
同步異步&阻塞非阻塞屬於倆個範疇,異步不分阻塞非阻塞
響應時間:一個請求從開始到結束的時間。吞吐量:單位時間內系統能處理的請求數量,經常使用性能指標。QPS-每秒查詢數,QPS = 併發數 / 平均響應時間。 TPS-每秒事務數 吞吐量經常使用指標 HPS-每秒HTTP數
kill用法,某個進程殺不掉的緣由(進入內核態,忽略kill信號)
linux命令:scp-遠程拷貝文件 scp 文件名 帳號@remote_ip:目標路徑,完畢須要輸入密碼。> & >>:覆蓋&追加寫入。抓包-tcpdump -i echo host and port網卡。Windows findstr=prep。
top看CPU free看內存。find 路徑 -name/size/ 。tar xvf解包 cvf打包。history | grep zk-查看關於zk的歷史命令。chmod 777 file_name文件主 其餘 組成員。netstat -ano | grep port-查看端口占用。
cat xxx|less;ps -ef|grep zk kill-9。make 編譯 make install-安裝編譯好的源碼包。sudu apt-get install yum -y install/update。df -h磁盤剩餘。tab 補全命令。
if test `find path -size -3k`; then cat path; else echo 'file too big' ; fi:if 要對應 fi,test檢測某個條件是否成立。
Linux上查看日誌:less:比more強大 能夠向前翻頁 Shift+G到達文件底部 再經過?+關鍵字的方式來根據關鍵來搜索信息 grep的方式查關鍵字
vim:u撤回 Ctrl+r恢復撤銷 刪除文本:x dd 5dd 複製粘貼:yy。tail -f。awk:grep出來 +這個選擇列數 重定向到一個文本。free -h 。 curl 能夠get post。
crontab:能夠定時執行一個腳本,若是邏輯簡單,可直接寫入任務(-e 寫入 -l 列出當前任務 -r 終止任務)
git:工做區 暫存區 本地倉庫 遠程倉庫。git pull = fetch(下載遠程倉庫的變更至本地倉庫)+merge(合併制定分支至當前分支)。git branch新建 -b新建並切換至該分支。status log。
git rebase:替代merge的操做,對多個commit合併,減小分支合併的記錄。git reset-修改.git裏的東西。
IO多路複用:select-在一個進程打開的FD有限,默認2048,去輪詢每一個FD是否準備好。epoll-FD沒限制,採起事件的通知機制,一旦某個FD好了內核採起callback的機制。
布隆過濾器:一個很長的二進制向量和一系列隨機映射函數 用於檢索一個元素是否在一個集合中 優勢是空間效率和查詢時間都比通常的算法要好的多,缺點是有必定的誤識別率和刪除困難(hash碰撞 能夠屢次hash減小碰撞)。
正向代理(客戶端代理)和反向代理(服務器端代理)
nginx:一、靜態代理二、負載均衡:輪詢 加權輪詢-服務器性能不一 ip_hash(IP不變 每次都由一個機器處理) 隨機 最小鏈接法(動態選擇當前鏈接最少的處理) ***Sticky:session粘滯(分發和識別cookie 讓同一個機器處理請求 默認標識名爲route 須要增長nginx-sticky-module模塊 設置:upstream字典裏設置 sticky [name=route][domain=.foo.bar][path=/][expires=1h][hash=index|md5|sha1][no_fallback][secure] [httponly];)
三、限流:參數設置請求每秒不超過100個四、緩存:瀏覽器靜態資源用expire 代理層緩存 五、黑白名單
原理:接受到一個http請求根據配置映射到響應模塊。HTTP Request=>nginx core=>handler負責處理請求 生成相應內容=>filter1處理相應內容=>filter2=>n=>HTTP response
docker:一層一層的被封裝,鏡像(只可讀)是初始,加一層變容器(最上一層可讀可寫),再加進程隔離空間。docker倉庫是存放鏡像的 docker run = create+start 至關於git pull = fetch+merge
什麼是守護線程?有什麼用?
上下文切換是什麼含義:上下文管理器-含有__enter__和__exit__方法的對象
負載均衡爲何用到redis master和worker屬於負載均衡?
gc垃圾處理:一、引用計數 會引發循環引用 so產生下面倆個方法:一、標記清除算法:用圖論理解不可達理論二、分代收集
多線程、多進程、協程
threading.Thread(target=):方法:在線程開始(thread.start())以前,調用setDeamon(True)函數,設定線程的daemon標誌,代表該線程不重要,主線程退出它就退出。start()開始線程活動 run()調用target join()等待,直到線程終結。
經常使用魔法方法:call-對象可call, init-對象實例化先new再init new-對象的建立,必須有返回值,返回實例化出的實例,通常調用object.new
Python dict:hash算法實現,會留三分之一空的,多了則擴容。若hash碰撞,Python採起開放尋址法(用不一樣的hash從新計算)即空間換時間 或者是一個鏈表,直到找到的key是須要的
hash算法:倆條件:對於輸入的值會有固定長度輸出 不一樣的輸入可能輸出同樣
Python sort是在原位置排序 sorted是返回一個新列表,對原列表無影響
計算機英文單詞準備,django https://blog.csdn.net/hairetz/article/details/4141043
PostgreSQL:相比較MySQL,沒那麼多坑,後者對text有限制,前者text都能存,後者可重複讀隔離級別不能阻止併發還須要加鎖,前者有隱藏的樂觀鎖version。前者數據類型豐富,可用字典、數組。scrapy numpy pandas