自身知識體系的梳理與總結
抽點時間來梳理一下自己的知識體系,主要的框架流程是:
- tcp/ip
- http
- nginx
- php
- mysql(包括分散式系統相關)
- redis
- linux(常用命令)
- 面向物件,設計模式
- 演算法
- 專案
- 其他
一.tcp/ip知識點整理
1.2. tcpip完整知識點擴充:
1.4. tcpip的流量控制:
TCP流量控制和擁塞控制(有幾個關於慢啟動,擁塞避免的圖。計算機網路那本書上的那個圖,可以輔助複習)
1.5.其他
如何防禦ddos的攻擊:(針對sync的攻擊)[參考:DDOS攻擊原理及防護方法論中的3.1.2]
1.sync proxy
2.隨機丟包
3.特徵匹配(帶options的sync包)
4.sync cookies(給每一個請求連線的ip地址分配一個cookie)
5.ip信譽機制(終極)
另外,可以看一下關於tcp/ip,http我的相關手寫筆記:在此
二.http
另外,tcp/ip和http可以結合這兩篇文章來進行復習:
1.簡潔版:知乎問
(http的個人整體筆記:在此)
三.nginx
四.php
4.1. 個人整理的知識框架:在此
4.2. php7的新特性:個人總結
4.3. 語言細節方面的問題
4.3.5.php中的self與static的區別;this,self,parent三個關鍵字的區別等
4.5. php記憶體溢位的處理:文章1,
4.6. FastCGI與php-fpm的關係:個人總結,相關問題解答,白話講解
五.MySQL
5.1. MySQL系統複習相關
5.1.2. 個人系統整理的比較結構化的mysql複習相關筆記(這裡,複習mysql以這個為主)
5.2. MySQL主從同步相關
5.2.1. 主從同步:文章1(有圖,簡單易懂),文章2(Mysql主從同步架構圖和原理),文章3(MySQL主從同步原理)
(auto-increment-offset=1, 2[多主偏移量不一致,但是後面的步數是一樣的,跳躍的], auto-increment-increment=2)mysql分表的防止id重複的兩種方法(1.全域性表,2.兩個分表偏移一致,起點不同)
5.3. 資料庫中的鎖
5.4. 講的很仔細,不錯!強烈推薦要好好看一看)
5.5. MySQL連線數相關問題
5.6. 資料庫分表(純科普)
5.7. NoSQL資料庫相關
5.7.1. nosql(科普)
5.8. 分散式系統常見問題:
相關(純)科普:
六.redis等快取
個人整理的相關筆記(這裡)
6.1. 資料型別以及底層資料結構的實現
文章1:深入淺出Redis-redis底層資料結構(上)(下)
文章2:Redis中的物件型別與底層編碼(有底層實現的程式碼以及相關的對應關係,不錯,值得一看)
文章4:聊一聊Redis的資料結構(有彩圖分析資料結構的實際效果,不錯)
6.3.redis的持久化[相當重要!!!](參考:關於Redis持久化(圖片筆記說明版;純文字說明版,看綠色部分即可))
快照;aof。兩者的原理一定要清楚。
(快照相關說明:因為os的copyonwrite導致子程序的地址空間內的資料知識fork時刻整個資料庫的一個快照)
6.4.redis的併發競爭(參考redis的面試題)
主要解決方案分為:客戶端的連線池;服務端利用setnx實現鎖
6.5.redis的快取失效策略以及主鍵失效策略(參考redis的面試題)
volatile(有生命週期的key);
volatile_lru,volatile_ttl,volatile_rand + allkey_lru,allkey_rand + no_envicition
6.6.watch、multi、exec等命令(參考redis的面試題)
6.7.主從複製 (重要)
redis的主從複製是建立在記憶體快照持久化的基礎上的;
關鍵詞:快照,寫命令快取,非同步複製,SYNC,BGSAVE,RDB檔案
6.8. sentinal(哨兵)(同樣可檢視樓上文章,以及這篇有圖解結構的說明文章)
6.9. 快取穿透,雪崩以及熱點資料集中失效問題(注意概念的理解,可看草稿圖)
6.10. 其他
注意該文有以下一段話,值得回味:
Redis使用現場申請記憶體的方式來儲存資料,並且很少使用free-list等方式來優化記憶體分配,會在一定程度上存在記憶體碎片,Redis跟據儲存命令引數,會把帶過期時間的資料單獨存放在一起,並把它們稱為臨時資料,非臨時資料是永遠不會被剔除的,即便實體記憶體不夠,導致swap也不會剔除任何非臨時資料(但會嘗試剔除部分臨時資料),這點上Redis更適合作為儲存而不是cache。
七.linux
可以參考個人筆記:這裡
其中比較容易理解的學習命令:awk檢視統計Nginx訪問日誌(可以學習到uniq,sort,head,awk的用法 )
八.面向物件、設計模式
8.1. 面向物件的相關原則
個人整理的相關筆記(在此)
8.1.1 六大原則實用帖
六大原則(官方說明版本,科普帖)
8.1.2 六大原則科普帖
SOLID原則(純科普帖,比較長,講的比較詳細):
8.2. 設計模式個人整理的相關筆記(在此)
人人都能讀懂的設計模式系列(php實現,很不錯)
(1):建立型模式;(2):結構型模式;(3):行為型模式;
九.演算法
一致性hash演算法以及應用:
十.其他:
秒殺系統的設計與關注點(限流->削峰->非同步處理->記憶體快取->可拓展)
十一.線上學習的一些視訊