記錄一些細碎的東西

_miaomiao_發表於2019-12-30
  1. mysql in 查詢:某個範圍內的值連續的會走索引 ,不連續的不會走索引
  2. htmlspecialchar() 會轉移特殊字元:& =>& "=>" ' => ' < => &lg; > =>>
  3. 今天被人問到mysql 的三大正規化:
    1. 第一正規化: 每一列屬性都是不可再分的屬性值,確保每一列的原子性
    2. 第二正規化: 有主鍵,對記錄的惟一性,要求記錄有惟一標識,即實體的惟一性
    3. 第三正規化:非主鍵欄位不能相互依賴,是對欄位的冗餘性,要求任何欄位不能由其他欄位派生出來,它要求欄位沒有冗餘,即不存在傳遞依賴;(需要確保資料表中的每一列資料都和主鍵直接相關,而不能間接相關)
  4. 工廠模式:一般類例項化都靠new,工廠類可以按需去例項化不同的物件,這樣就避免了對原始類的依賴,實現瞭解耦。
  5. 什麼是redis雪崩,什麼是redis穿透,redis在專案中的使用場景
    1. 快取穿透是指查詢一個一定不存在的資料,由於快取是不命中時需要從資料庫查詢,查不到資料則不寫入快取,這將導致這個不存在的資料每次請求都要到資料庫去查詢,造成快取穿透。請求的資料在快取大量不命中,導致請求走資料庫。
    2. 解決方案:由於請求的引數是不合法的(每次都請求不存在的引數),於是我們可以使用布隆過濾器(BloomFilter#))或者壓縮filter提前攔截,不合法就不讓這個請求到資料庫層!當我們從資料庫找不到的時候,我們也將這個空物件設定到快取裡邊去。下次再請求的時候,就可以從快取裡邊獲取了。這種情況我們一般會將空物件設定一個較短的過期時間。
    3. 如果快取集中在一段時間內失效,發生大量的快取穿透,所有的查詢都落在資料庫上,造成了快取雪崩。
    4. 解決方案:
      1.在快取的時候給過期時間加上一個隨機值,這樣就會大幅度的減少快取在同一時間過期。讓快取失效的時間點儘量均勻。
      1. .做二級快取,或者雙快取策略。A1為原始快取,A2為拷貝快取,A1失效時,可以訪問A2,A1快取失效時間設定為短期,A2設定為長期。
        1. redis的使用場景:1.廣播 2.快取 3. 訊息佇列 4. 樂觀鎖 5.redis 事務
  6. 如何保持快取一致性:讀的時候先讀快取,沒有的話去資料庫裡讀。寫的話先寫資料庫,再刪除快取,如果寫資料庫失敗了,直接返回重試,如果資料庫修改成功了,快取刪除失敗(設定失效時間),可以加入佇列嘗試再次刪除,可以先返回一箇舊值。
  7. http 認證有幾種方式:#
    1.表單認證 (進入站點主頁前,需要在登陸頁面輸入使用者名稱和密碼,這種更專業的叫法為表單認證)
    2.ssl客戶端認證
    3.digest認證
    4.basic認證 (訪問API時,瀏覽器會自動彈出一個對話方塊去輸入使用者名稱/密碼)
  8. redis 鎖
    一、分散式鎖的幾個特點:
    1. 互斥性:在任意時刻,只有一個客戶端可以獲得鎖;
    2. 避免死鎖:客戶端最終一定可以獲得鎖,即使鎖住某個資源的客戶端在釋放鎖之前崩潰或者網路不可達
    3. 容錯性:只要鎖服務叢集中的大部分節點存活,Client 就可以進行加鎖解鎖操作。
    4. 解鈴還須繫鈴人。加鎖和解鎖必須是同一個客戶端,客戶端自己不能把別人加的鎖給解了。
      5.redis 分散式鎖的實現#
  9. redis 持久化:
    1、save 同步儲存,bgsave非同步儲存,會fork一個子程式,將記憶體中的資料寫入RDB檔案中,,持久化的過程結束了,再用這個臨時檔案替換上次的快照檔案,然後子程式退出,記憶體釋放。
    2、 AOF:Redis會將每一個收到的寫命令都通過Write函式追加到檔案最後,類似於MySQL的binlog。當Redis重啟是會通過重新執行檔案中儲存的寫命令來在記憶體中重建整個資料庫的內容。
    當兩種方式同時開啟時,資料恢復Redis會優先選擇AOF恢復
    3、 BGREWRITEAOF:執行一個 AOF檔案 重寫操作。重寫會建立一個當前 AOF 檔案的體積優化版本。即使 BGREWRITEAOF 執行失敗,也不會有任何資料丟失,因為舊的 AOF 檔案在 BGREWRITEAOF 成功之前不會被修改。重寫操作只會在沒有其他持久化工作在後臺執行時被觸發。從 Redis 2.4 開始, AOF 重寫由 Redis 自行觸發, BGREWRITEAOF 僅僅用於手動觸發重寫操作。
  10. php的知識點:
    1.php中各進位制的表示:
    1. 8進位制0開頭
    2. 2進位制0b開頭
    3. 16進位制0x開頭
      2.PHP 變數規則:
      1.變數以$符號開頭,其後是變數的名稱
      2.變數名稱必須以字母或下劃線開頭
      3.變數名稱不能以數字開頭
      4.變數名稱只能包含字母數字字元和下劃線(A-z、0-9 以及 _)
      5.變數名稱對大小寫敏感(y 與 $Y 是兩個不同的變數)
      3.foreach迴圈並不能改變陣列元素的值,如果要改變陣列元素的值,需要使用引用型別
      4.preg_match() 定義和用法
      1.preg_match() 函式用於進行正規表示式匹配,成功返回 1 ,否則返回 0 。
      2.preg_match() 匹配成功一次後就會停止匹配,如果要實現全部結果的匹配,則需使用preg_match_all()函式。
      1. 雙引號和單引號的區別
        1.雙引號解釋變數,單引號不解釋變數
        2.雙引號裡插入單引號,其中單引號裡如果有變數的話,變數解釋
        3.雙引號的變數名後面必須要有一個非數字、字母、下劃線的特殊字元,或者用講變數括起來,否則會將變數名後面的部分當做一個整體,引起語法錯誤
        4.能使單引號字元儘量使用單引號,單引號的效率比雙引號要高(因為雙引號要先遍歷一遍,判斷裡面有沒有變數,然後再進行操作,而單引號則不需要判斷)
        1. 請描述出兩點以上 XHTML 和 和 HTML 最顯著的區別
          1. XHTML 必須強制指定文件型別 DocType,HTML 不需要
          2. XHTML 所有標籤必須閉合,HTML 比較隨意
          3. XHTML 嚴格區分大小寫,所有標籤的元素和屬性的名字都必須使用小寫
          4. XHTML 要求所有的標記都必須要有一個相應的結束標記
          5. XHTML 規定所有屬性都必須有一個值,沒有值的就重複本身
        2. int(M) M指示最大顯示寬度,當你不足M位時,會幫你不全,當你超過M位時,就沒有任何的影響
        3. 不使用cookie向客戶端傳送一個cookie。通過在URL後加一個SID引數來傳遞 SESSIONID的值。
        4. self 和 CLASS,都是對當前類的靜態引用,取決於定義當前方法所在的類。也就是說,self 寫在哪個類裡面, 它引用的就是誰。
        5. $this 指向的是實際呼叫時的物件,也就是說,實際執行過程中,誰呼叫了類的屬性或方法,$this 指向的就是哪個物件。但 $this 不能訪問類的靜態屬性和常量,且 $this 不能存在於靜態方法中
        6. static 關鍵字除了可以宣告類的靜態成員(屬性和方法)外,還有一個非常重要的作用就是後期靜態繫結。
        7. parent,是對當前類的父類的靜態引用。
        8. self 可以用於訪問類的靜態屬性、靜態方法和常量,但 self 指向的是當前定義所在的類,這是 self 的限制。
        9. $this 指向的物件所屬的類和 static 指向的類相同。
        10. static 可以用於靜態或非靜態方法中,也可以訪問類的靜態屬性、靜態方法、常量和非靜態方法,但不能訪問非靜態屬性。
        11. 靜態呼叫時,static 指向的是實際呼叫時的類;非靜態呼叫時,static 指向的是實際呼叫時的物件所屬的類。 #
        12. static 後期靜態繫結的工作原理是儲存了上一個非轉發呼叫(non-forwarding call)的類名

mysql 的共享鎖和排它鎖
共享鎖又稱為讀鎖,簡稱S鎖,顧名思義,共享鎖就是多個事務對於同一資料可以共享一把鎖,都能訪問到資料,但是隻能讀不能修改。select ... lock in share mode
排他鎖又稱為寫鎖,簡稱X鎖,顧名思義,排他鎖就是不能與其他所並存,如一個事務獲取了一個資料行的排他鎖,其他事務就不能再獲取該行的其他鎖,包括共享鎖和排他鎖,但是獲取排他鎖的事務是可以對資料就行讀取和修改。排他鎖指的是一個事務在一行資料加上排他鎖後,其他事務不能再在其上加其他的鎖。select ...for update
mysql事務
InnoDB行鎖是通過給索引上的索引項加鎖來實現的,因此InnoDB這種行鎖實現特點意味著:只有通過索引條件檢索資料,InnoDB才使用行級鎖,否則,InnoDB將使用表鎖!

linux 效能調優:
一、硬體優化。主要是對硬體選型,例如CPU、記憶體、磁碟(ACID獨立磁碟冗餘陣列)、頻寬、網路卡等。
二、作業系統優化。主要包含了作業系統的系統引數、核心引數、程式引數、檔案系統、磁碟IO等。
三、應用程式優化。主要包含對應用軟體,例如:apache、nginx、redis、Mysql、keepalived、kafka等。

本作品系原創(除文中說明外), 採用《CC 協議》許可,轉載必須註明作者和本文連結

相關文章