筆試知識點總結(一)

  1. 關於A,B,C三類地址的子網以及子網掩碼的概念
    大學的只是好容易忘記,現在恢復下:
    首先,IP地址是由4個字節構成,分爲 網絡號+主機號,A,B,C三類地址所使用的網絡號的字節數不同,分別爲1,2,3字節,A類網絡號開頭必須爲0,B類爲10,C類爲110,主要是用於區分三類地址的;
    爲了擴大網絡號,想到用主機號劃分子網進行擴展,利用主機號的幾位用作子網號,但是這樣就很難區分出網絡號了,所以又出現了 子網掩碼,網絡號爲1,主機號爲0,A類默認的子網掩碼爲255.0.0.0,B和C以此類推;
    這樣給出一個IP地址和子網掩碼,就可以得出網絡號和主機號了;
    (個人理解)

  2. 關於各種排序算法的穩定性
    由於沒有刻意的分析過,所以一直掉坑裏,寶寶決定去理解下;

    • 冒泡排序:相鄰值進行比較,相同的數字不會進行交換,那麼相同數字的順序也就不會被打亂,所以是穩定的;

    • 選擇排序:每次選出最小/最大數放到特定位置,那麼前面的大的數可能會被交換到後面,舉例最清楚:5,5,3 , 5(1)和3會進行交換,則第2個5就到第1個5前面了;不穩定

    • 插入排序:每次依次找到一個數的正確插入的位置,所以相同的數據不會亂序;穩定;

    • 快速排序:每次找到partition的正確位置,在partition和那個小於它的值進行交換時,可能會破壞順序,不穩定;舉例:(5) 3 3 4 (3) 8 9 10 11,5和3需要交換,那麼3的順序就被打亂了;

    • 歸併排序:分組進行排序,再合併,組間合併進行排序時 相同的數值 用前面數組的,不會亂序;穩定;

    • 堆排序:舉例最清楚:1 2(1) 3 2(2)

      1        
      

      / \
      2(1) 3
      /
      2(2)

      2(2)
      / \
      2(1) 3

    • 希爾排序:步數由長到短,組內插入排序;組內不會亂序,但是組間會亂序;舉例:
      3 5 10 8(1) 7 2 8(2) 1 20 6
      d=2 分成2組 (3 10 7 8(2) 20) 和(5 8(1) 2 1 6)
      排序後(3 7 8(2) 10 20)和 (1 2 5 6 8(1))
      即: 3 1 7 2 8(2) 5 10 6 20 8(1)
      不穩定;

    • 基數排序:它,我覺得是基於穩定才能正確排序的吧;

    總結:冒泡,插入,歸併,基數排序 穩定;
    選擇,快排,希爾,堆排序不穩定;

3.關於計數排序(以前很少關注,看到了就學習下吧)
計算排序的時間複雜度比較低,O(n),目測很像桶排序,具體思路如下:

計數排序的思想是對每一個輸入元素x,確定出小於x的元素個數,有了這一信息,就可以把x直接放在它在最終輸出數組的位置上,例如,如果有17個元素小於x,則x就是屬於第18個輸出位置。當幾個元素相同是,方案要略作修改。

計數排序是穩定的。(因爲從後向前確定每個數的位置時,相同的數字的順序不會被打亂,前面的數字的小於它的數<= 後面相同的數字小於它的數)或者採用小於等於也可以;

舉個別人的例子吧:
這裏寫圖片描述
這裏寫圖片描述
這裏寫圖片描述
這裏寫圖片描述

但是這個算法需要對待排序的數組有個大概的瞭解,而且分佈需要比較緊密,比如每個數都處於[0,max]之間,不然空間浪費嚴重;

4.關於窺孔優化(寶寶真的沒見過)
編譯器的一種優化方式;

窺孔優化的優化對象:
(1)既可以是中間代碼級,也可以是目標代碼級。(2)每次處理的只是一組相鄰指令,相當於將一組相鄰指令暴露在一個優化窗口中(正如“窺孔”的含義)。 (3)對優化對象進行線性掃描。(4)優化後產生的結果可能會給後面的代碼提供進一步優化的機會。(5)窺孔優化程序通常很小,只需很少的內存,執行速度很快。

常用技術:
冗餘指令刪除,包括冗餘的load和store指令以及死代碼(不會執行的代碼);控制流優化;強度削弱;利用特有指令。

5.DHCP的工作流程:
DHCP(Dynamic Host Configure Protocol,動態主機配置協議),用於向網絡中的計算機分配IP地址及一些TCP/ip配置信息。DHCP提供了安全,可靠且簡單的TCP/IP網絡設置,避免了TCP/ip網絡地址的衝突,同時大大降低了工作負擔。
DHCP的 工作原理:客戶機從服務器獲取IP的四個租約過程,客戶機請求ip,服務器相應請求,客戶機選擇ip,服務器確定租約。
這裏寫圖片描述

  1. 客戶機請求IP地址 —— DHCP客戶機在網絡中廣播一個DHCP DISCOVER包,請求ip地址 ,DHCP Discover 包的源地址爲0.0.0.0 。目的地址爲255.255.255.255,該包 包含客戶機的MAC和計算機名,使服務器能夠確定是哪個客戶機發送的請求。
    這裏寫圖片描述

  2. 服務器響應請求——當DHCP服務器接收到客戶機請求ip地址的信息時,就在自己的庫中查找是否有合法的ip地址提供給客戶機,如果有 ,將此ip標記,廣播一個 DHCP offer 包。這個包中包含:客戶機的的MAC地址;提供的合法ip;子網掩碼;租約期限;服務器標示;其他參數等。因爲客戶機沒有ip地址,所以還是以廣播方式發送的,源地址:0.0.0.0 目的地255.255.255.255。
    這裏寫圖片描述

  3. 客戶機選擇IP地址——DHCP客戶機接收到第一個DHCP offer包中選擇ip地址,並在次 廣播一個DHCP request 包到所有服務器,該包中包含爲客戶機提供的ip配置的服務器的服務標示符(ip地址),服務器查看標示符,以確定自己提供的ip地址是否被客戶機選中,如果客戶機接受ip,則發出ip地址的DHCP服務器將該地址保留,就不能將該地址提供給另一個DHCP。如果拒絕,提供給下一個ip租約請求。這個源地址仍然是0.0.0.0 目的地255.255.255.255。
    這裏寫圖片描述

  4. 服務器確認IP 租約——DHCP租約的最後一步,服務器確認租約,發送一個DHCP ack/DHCP NACK包。服務器收到DHCP request 包後,以dhcp ack 包向客戶機廣播出去,當客戶機收到後,就配置了ip地址,完成初始化,就可以在TCP/IP網絡上通信了。客戶機收到DHCP nack 包後會重新發送DHCP discover包。這次源地址是服務器的ip地址 目的地是255.255.255.255。
    這裏寫圖片描述

IP的租約更新:當客戶機重啓和租期到達50%時,就需要更新租約,直接想提供的服務器發送DHCP request包,要求更新租約。客戶機無法和服務器取得聯繫時,繼續使用現有IP,一直等到85%時,向所有的服務器發送廣播DHCP request 包請求更新,如果仍然無法聯繫,則客戶機將開始新的ip租約過程DHCP discover包
IP的租約釋放命令 :釋放的ipconfig /release
獲取是 :ipconfig /renew。

  1. mysql hash索引
    mysql用的比較多的是B+樹索引,hash索引只有memory存儲引擎中存在;
    hash索引的限制:

1)Hash 索引僅僅能滿足”=”,”IN”和”<=>”查詢,不能使用範圍查詢。

由於 Hash 索引比較的是進行 Hash 運算之後的 Hash 值,所以它只能用於等值的過濾,不能用於基於範圍的過濾,因爲經過相應的 Hash 算法處理之後的 Hash 值的大小關係,並不能保證和Hash運算前完全一樣。

2)Hash 索引無法被用來避免數據的排序操作。

由於 Hash 索引中存放的是經過 Hash 計算之後的 Hash 值,而且Hash值的大小關係並不一定和 Hash 運算前的鍵值完全一樣,所以數據庫無法利用索引的數據來避免任何排序運算;

3)Hash 索引不能利用部分索引鍵查詢。

對於組合索引,Hash 索引在計算 Hash 值的時候是組合索引鍵合併後再一起計算 Hash 值,而不是單獨計算 Hash 值,所以通過組合索引的前面一個或幾個索引鍵進行查詢的時候,Hash 索引也無法被利用。

4)Hash 索引在任何時候都不能避免表掃描。

前面已經知道,Hash 索引是將索引鍵通過 Hash 運算之後,將 Hash運算結果的 Hash 值和所對應的行指針信息存放於一個 Hash 表中,由於不同索引鍵存在相同 Hash 值,所以即使取滿足某個 Hash 鍵值的數據的記錄條數,也無法從 Hash 索引中直接完成查詢,還是要通過訪問表中的實際數據進行相應的比較,並得到相應的結果。

5)Hash 索引遇到大量Hash值相等的情況後性能並不一定就會比B-Tree索引高。

對於選擇性比較低的索引鍵,如果創建 Hash 索引,那麼將會存在大量記錄指針信息存於同一個 Hash 值相關聯。這樣要定位某一條記錄時就會非常麻煩,會浪費多次表數據的訪問,而造成整體性能低下。

注:關於<=>操作的一點解釋:

  • 和=號的相同點
    像常規的=運算符一樣,兩個值進行比較,結果是0(不等於)或1(相等);換句話說:’A’<=>’B’得0和’a’<=>’a‘得1。

  • 和=號的不同點
    和=運算符不同的是,NULL的值是沒有任何意義的。所以=號運算符不能把NULL作爲有效的結果。所以:請使用<=>,’a’ <=> NULL 得0,NULL<=> NULL 得出 1。
    和=運算符正相反,=號運算符規則是 ‘a’=NULL 結果是NULL,甚至NULL = NULL 結果也是NULL。順便說一句,mysql上幾乎所有的操作符和函數都是這樣工作的,因爲和NULL比較基本上都沒有意義。

用處
當兩個操作數中可能含有NULL時,你需要一個一致的語句。

... WHERE col_a <=> ? ...

這裏的佔位符有可能是常量也有可能是NULL,當使用<=>運算符時,你沒有必要對查詢語句做任何修改。

只記得這些了,關於其他的再整理吧,知識量太少,寶寶心裏苦��

但是寶寶是不會放棄的,��;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章