你說說為神馬表的總數、redis庫的總數、HashMap的數量最好是2的N次方
數據在表庫HashMap 落地時候都會跟總數取模,這個我們做個測試
假設數量是2的3次方就是8,即索引就是0-7
php -r "echo 58 % 8;
php -r "echo 58 & 7;
00111010 & 00000111 = 00000010 =》2
再來個
php -r "echo 1234567 % 8;"
php -r "echo 1234567 & 7;"
100101101011010000111 & 00000111 = 00000111=》7
你就說等不等。
結論:本來需要算術運算實現,如果是2的N次方的話,計算機內部就可以使用位運算實現了。主要是運算速度提高了。
那為神馬位運算比算術運算速度快呢?
我覺得主要是位運算都是對內存上的二進制數直接操作。如果使用十進制的取模的話,必須先從內存里面讀到二進制數的這兩個數,再轉成十進制數,再運算。
為嘛一個字節使用兩個16進制數表示
使用ultraedit打開圖像文件,或者使用瀏覽器工具打開socket通信的內容,均是兩個16進制數一組分隔。就是因為展示的時候兩個16進制表示一個字節。
一個字節8位,拆開的話,前后四位,0000-1111能表示16個數,1111是15,加上0是16.所以1個字節只能使用兩個16進制表示
本來還想分享下base64的為啥能顯示二進制表示的數據。想想還得先說亂碼的原因。
------------------------------------end
一起關注高性能WEB后端技術,關注公眾號