一、序 畢業已經兩年了,曾經在學校學習的知識早已還給老師了,已經很久沒有好好學習了。雖然曾經也是高收入群體,但是因為從此再也不寫代碼了,覺得人生都沒有樂趣了,所以果斷離職了.....但是看著身邊越來越多的技術大牛和高收入人群和之前對比落差太大,心中未免有些不甘,所以重新撿起被遺忘的知識。曾子曰:“吾 ...
一、序
畢業已經兩年了,曾經在學校學習的知識早已還給老師了,已經很久沒有好好學習了。雖然曾經也是高收入群體,但是因為從此再也不寫代碼了,覺得人生都沒有樂趣了,所以果斷離職了.....但是看著身邊越來越多的技術大牛和高收入人群和之前對比落差太大,心中未免有些不甘,所以重新撿起被遺忘的知識。曾子曰:“吾日三省吾身:為人謀而不忠乎?與朋友交而不信乎?傳不習乎”。
二、比特(bit)、位元組(byte)
bit又稱為位,1 byte = 8 bit. 記下來就好,想必都聽說過8位機,8位機(bit)有8條線路,每個時鐘周期只能處理8個電信號(00001111),組成一個位元組(btye),而經常聽說32位(bit)、64位(bit)機即是指,在一個時鐘周期內可以處理32/64 位(bit).
我認為位元組(byte)是基本的存儲單元,比特/位(bit)是CPU基本的運算單元。
1位元組(byte)表示的帶符號位數字範圍,最高位表示符號位,-2^7 ~ 2^7-1,即-128 ~127.為什麼是-128-127呢?
因為最高表示符號位,正數是0,負數是1。
正數:首位為0,後七位二進位數即為所表示正數的絕對值
負數:首位為1,負數在現代電腦里一般用補碼表示,後七位二進位數的原碼+1 (補碼 = 原碼取反+1,將所有位取反,再加1)。補碼
0000 0000 = 0
補碼1000 0000 在10進位里表示什麼??? 最高位為1,所以是負數,計算反碼+1。(取反) 127(0111 1111) + 1(0000 0001)= 1*2^6 +1*2^6.......+1*2^0 + 1 = 128, 最高位為1(負數),所以為-128
0111 1111 = 127
補碼 1111 1111 -1
1Kb = 1024bit, K意為千, 2的10次方(因為我們日常使用10進位,因為習慣,所以電腦就被設定成了2的10次方的進位,2*2*2*2*2*2*2*2....
1個字母/數字 占 1個位元組,而漢字占兩2個位元組。因為帶符號位的1位元組可以表示0~2^7,128個不同的組合,對於數組和字母符號綽綽有餘,所以老外的英語學起來比較簡單。
而一個中文漢字在GBK編碼里占2個位元組,因為中文博大精深,1位元組只能表示128個東東根本不夠用,因為位元組是基本的存儲單元,沒有聽說過1.3個位元組或者1.5個位元組東西吧,0~128*128個組合足夠表示漢字。所以大於127的才有可能是漢字
所以,一個含有中文的URL編碼的解碼方式如下,php代碼如下:
<?php function link_urldecode($url) { $uri = ''; $cs = unpack('C*', $url); $len = count($cs); for ($i=1; $i<=$len; $i++) { $uri .= $cs[$i] > 127 ? '%'.strtoupper(dechex($cs[$i])) : $url{$i-1}; } return $uri; } ?>
三、網速100M
我家的網是100M,為什麼下載速度不是100MB/s?
這裡的100M是指的是100Mbps(megabits per second),這是的單位是bit....所以我說只有存儲才是byte..
100Mbps = 100*1042K bit/s 1byte = 8 bit , 100Mbps / 8 = 12.5MB/s,所以理論的最大下載速度是12.5MB/s.而且這裡預設的是下行帶寬,100M,上行帶寬一般只有2Mbps,實際最大的上傳速度只有256KB/s....
鏈路層,太網的物理特性決定了數據幀的長度為(46+18)-(1500+18),其中的18是數據幀的頭和尾,也就是說數據幀的內容最大為1500(不包括幀頭和幀尾),即MTU(Maximum Transmission Unit)為1500; 網路層,因為IP包的首部要占用20位元組,所以這的MTU為1500-20=1480; 傳輸層,對於UDP包的首部要占用8位元組,所以這的MTU為1480-8=1472; 所以,在應用層,Data最大長度為1472,單位是byte 約等於1.43Kb 2M的上行帶寬舉例,理論上每秒可以發出179次網路請求。