1. 程式人生 > >自身知識體系的梳理與總結

自身知識體系的梳理與總結

抽點時間來梳理一下自己的知識體系,主要的框架流程是:

  1. tcp/ip
  2. http
  3. nginx
  4. php
  5. mysql(包括分散式系統相關)
  6. redis
  7. linux(常用命令)
  8. 面向物件,設計模式
  9. 演算法
  10. 專案
  11. 其他

一.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

nginx加權輪詢的演算法:介紹1介紹2

nginx防盜鏈:文章1文章2



四.php

4.1. 個人整理的知識框架:在此

4.2. php7的新特性:個人總結

4.3. 語言細節方面的問題

    4.3.5.php中的self與static的區別;this,self,parent三個關鍵字的區別等

4.4. php的異常處理,執行緒安全(文章1

4.5. php記憶體溢位的處理:文章1

文章2記憶體回收機制

4.6. FastCGI與php-fpm的關係:個人總結相關問題解答白話講解

五.MySQL

5.1. MySQL系統複習相關

    5.1.1. 個人手寫相關筆記(這裡1,這裡2

5.1.2. 個人系統整理的比較結構化的mysql複習相關筆記(這裡,複習mysql以這個為主

5.2. MySQL主從同步相關

5.2.1. 主從同步文章1(有圖,簡單易懂),文章2Mysql主從同步架構圖和原理),文章3MySQL主從同步原理

(auto-increment-offset=1, 2[多主偏移量不一致,但是後面的步數是一樣的,跳躍的], auto-increment-increment=2)

mysql分表的防止id重複的兩種方法(1.全域性表,2.兩個分表偏移一致,起點不同)

5.3. 資料庫中的鎖

5.3.1. 樂觀鎖與悲觀鎖:簡單說明詳細介紹

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演算法以及應用:

十.其他:

秒殺系統的設計與關注點(限流->削峰->非同步處理->記憶體快取->可拓展)

十一.線上學習的一些視訊