1、序
畢業已經兩年了,曾經在學校學習的知識早已還給老師了,已經好久沒有好好學習了。雖然曾經也是高收入羣體,可是由於今後不再寫代碼了,以爲人生都沒有樂趣了,因此果斷離職了.....可是看着身邊愈來愈多的技術大牛和高收入人羣和以前對比落差太大,心中未免有些不甘,因此從新撿起被遺忘的知識。曾子曰:「吾日三省吾身:爲人謀而不忠乎?與朋友交而不信乎?傳不習乎」。php
2、比特(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。url
正數:首位爲0,後七位二進制數即爲所表示正數的絕對值spa
負數:首位爲1,負數在現代計算機裏通常用補碼錶示,後七位二進制數的原碼+1 (補碼 = 原碼取反+1,將全部位取反,再加1)。補碼code
0000 0000 = 0 blog
補碼1000 0000 在10進制裏表示什麼??? 最高位爲1,因此是負數,計算反碼+1。(取反) 127(0111 1111) + 1(0000 0001)= 1*2^6 +1*2^6.......+1*2^0 + 1 = 128, 最高位爲1(負數),因此爲-128get
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; } ?>
3、網速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次網絡請求。
Mark:2017年10月17日