@(彙總)[網絡, 彙總]css
1.HTTP是計算機經過網絡進行通訊的規則
2.HTTP是一種無狀態的協議(不創建持久的鏈接,服務端不保留鏈接的相關信息,瀏覽器發出請求和服務器返回響應是一個沒有記憶的過程)html
Allow:服務器支持哪些請求方法(如GET、POST等)。
Content-Encoding:文檔的編碼(Encode)方法。
Content-Length:表示內容長度。
Content-Type:表示後面的文檔屬於什麼MIME類型。
Date:當前的GMT時間。
Expires:應該在何時認爲文檔通過期,從而再也不緩存它?
Last-Modified:文檔的最後改動時間。
Location:表示客戶應當到哪裏去提取文檔。
Refresh:表示瀏覽器應該在多少時間以後刷新文檔,以秒計。
Server:客戶應該在Authorization頭中提供什麼類型的受權信息?
Set-Cookie:設置和頁面關聯的Cookie。
WWW-Authenticate:客戶應該在Authorization頭中提供什麼類型的受權信息?mysql
請求頭:
Accept: text/html,image/*(瀏覽器能夠接收的類型)
Accept-Charset: ISO-8859-1(瀏覽器能夠接收的編碼類型)
Accept-Encoding: gzip,compress(瀏覽器能夠接收壓縮編碼類型)
Accept-Language: en-us,zh-cn(瀏覽器能夠接收的語言和國家類型)
Host: www.it315.org:80(瀏覽器請求的主機和端口)
If-Modified-Since: Tue, 11 Jul 2000 18:23:51 GMT(某個頁面緩存時間)
Referer: http://www.it315.org/index.jsp(請求來自於哪一個頁面)
User-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0)(瀏覽器相關信息)
Cookie:(瀏覽器暫存服務器發送的信息)
Connection: close(1.0)/Keep-Alive(1.1)(HTTP請求的版本的特色)
Date: Tue, 11 Jul 2000 18:23:51 GMT(請求網站的時間)linux
響應頭:
Location: http://www.it315.org/index.jsp(控制瀏覽器顯示哪一個頁面)
Server:apache tomcat(服務器的類型)
Content-Encoding: gzip(服務器發送的壓縮編碼方式)
Content-Length: 80(服務器發送顯示的字節碼長度)
Content-Language: zh-cn(服務器發送內容的語言和國家名)
Content-Type: image/jpeg; charset=UTF-8(服務器發送內容的類型和編碼類型)
Last-Modified: Tue, 11 Jul 2000 18:23:51 GMT(服務器最後一次修改的時間)
Refresh: 1;url=http://www.it315.org(控制瀏覽器1秒鐘後轉發URL所指向的頁面)
Content-Disposition: attachment; filename=aaa.jpg(服務器控制瀏覽器發下載方式打開文件)
Transfer-Encoding: chunked(服務器分塊傳遞數據到客戶端)
Set-Cookie:SS=Q0=5Lb_nQ; path=/search(服務器發送Cookie相關的信息)
Expires: -1(服務器控制瀏覽器不要緩存網頁,默認是緩存)
Cache-Control: no-cache(服務器控制瀏覽器不要緩存網頁)
Pragma: no-cache(服務器控制瀏覽器不要緩存網頁)
Connection: close/Keep-Alive(HTTP請求的版本的特色)
Date: Tue, 11 Jul 2000 18:23:51 GMT(響應網站的時間)ios
http1.1協議報文首部字段中與緩存相關的字段程序員
1.通用首部字段
Cache-Control:控制緩存的行爲
Pragma:值爲no-cache時禁用緩存es6
2.請求首部字段
If-Match:比較ETag是否一致
If-None-Match:比較ETag是否不一致
If-Modified-Since:比較資源最後更新的時間是否一致
If-Unmondified-Since:比較資源最後更新的時間是否不一致面試
3.響應首部字段
ETag:資源的匹配信息算法
4.實體首部字段
Expires:實體主體過時的時間
Last-Modified:資源最後一次修改的時間sql
五層協議(5層):
物理層、數據鏈路層、網絡層、應用層、運輸層。
TCP/IP分層(4層):
網絡接口層、 網際層、運輸層、 應用層。
每一層的協議以下:
物理層:RJ4五、CLOCK、IEEE802.3 (中繼器,集線器,網關)
數據鏈路:PPP、FR、HDLC、VLAN、MAC (網橋,交換機)
網絡層:IP、ICMP、ARP、RARP、OSPF、IPX、RIP、IGRP、 (路由器)
傳輸層:TCP、UDP、SPX
會話層:NFS、SQL、NETBIOS、RPC
表示層:JPEG、MPEG、ASII
應用層:FTP、DNS、Telnet、SMTP、HTTP、WWW、NFS
每一層的做用以下:
物理層:經過媒介傳輸比特,肯定機械及電氣規範(比特Bit)
數據鏈路層:將比特組裝成幀和點到點的傳遞(幀Frame)
網絡層:負責數據包從源到宿的傳遞和網際互連(包PackeT)
傳輸層:提供端到端的可靠報文傳遞和錯誤恢復(段Segment)
會話層:創建、管理和終止會話(會話協議數據單元SPDU)
表示層:對數據進行翻譯、加密和壓縮(表示協議數據單元PPDU)
應用層:容許訪問OSI環境的手段(應用協議數據單元APDU)
HTTP(超文本傳輸協議):應用層
TCP(傳輸控制協議):傳輸層
UDP(用戶數據報協議):傳輸層
TCP提供面向鏈接的、可靠的數據流傳輸;傳輸單位稱爲TCP報文段;TCP注重數據安全性
UDP提供的是非面向鏈接的、不可靠的數據流傳輸;傳輸單位稱爲用戶數據報;UDP數據傳輸快,由於不須要鏈接等待,少了許多操做,可是其安全性卻通常。
TCP對應的協議和UDP對應的協議
TCP對應的協議:
(1) FTP:定義了文件傳輸協議,使用21端口。
(2) Telnet:一種用於遠程登錄的端口,使用23端口,用戶能夠以本身的身份遠程鏈接到計算機上,可提供基於DOS模式下的通訊服務。
(3) SMTP:郵件傳送協議,用於發送郵件。服務器開放的是25號端口。
(4) POP3:它是和SMTP對應,POP3用於接收郵件。POP3協議所用的是110端口。
(5)HTTP:是從Web服務器傳輸超文本到本地瀏覽器的傳送協議。
UDP對應的協議:
(1) DNS:用於域名解析服務,將域名地址轉換爲IP地址。DNS用的是53號端口。
(2) SNMP:簡單網絡管理協議,使用161號端口,是用來管理網絡設備的。因爲網絡設備不少,無鏈接的服務就體現出其優點。
(3) TFTP(Trival File Tran敏感詞er Protocal),簡單文件傳輸協議,該協議在熟知端口69上使用UDP服務。
PS:html頁面加載和解析的流程
幾個重要的概念:
(1)Reflow(迴流):瀏覽器要花時間去渲染,當它發現了某個部分發生了變化影響了布
局,那就須要倒回去從新渲染。
(2)Repaint(重繪):若是隻是改變了某個元素的背景顏色,文字顏色等,不影響元素周
圍或內部佈局的屬性,將只會引發瀏覽器的repaint,重畫某一部分。 Reflow要比Repaint更
花費時間,也就更影響性能。因此在寫代碼的時候,要儘可能避免過多的Reflow。
reflow的緣由:
(1)頁面初始化的時候;
(2)操做DOM時;
(3)某些元素的尺寸變了;
(4)若是 CSS 的屬性發生變化了。
減小 reflow/repaint:
(1)不要一條一條地修改 DOM 的樣式。與其這樣,還不如預先定義好 css 的 class,然
後修改 DOM 的 className。
(2)不要把 DOM 結點的屬性值放在一個循環裏當成循環裏的變量。
(3)爲動畫的 HTML 元件使用 fixed 或 absoult 的 position,那麼修改他們的 CSS 是不
會 reflow 的。
(4)千萬不要使用 table 佈局。由於可能很小的一個小改動會形成整個 table 的從新布
局。
(真懂不了不少,由於沒有怎麼實踐過,我直接說了本身的理解)
HTTP 2.0與HTTP 1.1區別
一、什麼是HTTP 2.0
HTTP/2(超文本傳輸協議第2版,最初命名爲HTTP 2.0),是HTTP協議的的第二個主要版本,使用於萬維網。HTTP/2是HTTP協議自1999年HTTP 1.1發佈後的首個更新,主要基於SPDY協議(是Google開發的基於TCP的應用層協議,用以最小化網絡延遲,提高網絡速度,優化用戶的網絡使用體驗)。
二、與HTTP 1.1相比,主要區別包括
三、HTTP/2爲何是二進制?
比起像HTTP/1.x這樣的文本協議,二進制協議解析起來更高效、「線上」更緊湊,更重要的是錯誤更少。
四、爲何 HTTP/2 須要多路傳輸?
HTTP/1.x 有個問題叫線端阻塞(head-of-line blocking), 它是指一個鏈接(connection)一次只提交一個請求的效率比較高, 多了就會變慢。 HTTP/1.1 試過用流水線(pipelining)來解決這個問題, 可是效果並不理想(數據量較大或者速度較慢的響應, 會阻礙排在他後面的請求). 此外, 因爲網絡媒介(intermediary )和服務器不能很好的支持流水線, 致使部署起來困難重重。而多路傳輸(Multiplexing)能很好的解決這些問題, 由於它能同時處理多個消息的請求和響應; 甚至能夠在傳輸過程當中將一個消息跟另一個摻雜在一塊兒。因此客戶端只須要一個鏈接就能加載一個頁面。
五、消息頭爲何須要壓縮?
假定一個頁面有80個資源須要加載(這個數量對於今天的Web而言仍是挺保守的), 而每一次請求都有1400字節的消息頭(着一樣也並很多見,由於Cookie和引用等東西的存在), 至少要7到8個來回去「在線」得到這些消息頭。這還不包括響應時間——那只是從客戶端那裏獲取到它們所花的時間而已。這全都因爲TCP的慢啓動機制,它會基於對已知有多少個包,來肯定還要來回去獲取哪些包 – 這很明顯的限制了最初的幾個來回能夠發送的數據包的數量。相比之下,即便是頭部輕微的壓縮也能夠是讓那些請求只需一個來回就能搞定——有時候甚至一個包就能夠了。這種開銷是能夠被節省下來的,特別是當你考慮移動客戶端應用的時候,即便是良好條件下,通常也會看到幾百毫秒的來回延遲。
六、服務器推送的好處是什麼?
當瀏覽器請求一個網頁時,服務器將會發回HTML,在服務器開始發送JavaScript、圖片和CSS前,服務器須要等待瀏覽器解析HTML和發送全部內嵌資源的請求。服務器推送服務經過「推送」那些它認爲客戶端將會須要的內容到客戶端的緩存中,以此來避免往返的延遲。
三次握手:
第一次握手:客戶端發送syn包到服務器,並進入SYN_SEND狀態,等待服務器確認;
第二次握手:服務器收到syn包,確認客戶的SYN,同時本身也發送一個SYN包(syn=y),即SYN+ACK包,此時服務器進入SYN_RECV狀態;
第三次握手:客戶端收到服務器的SYN+ACK包,向服務器發送確認包ACK,此包發送完畢,客戶端和服務器進入ESTABLISHED狀態,完成三次握手。
四次揮手
與創建鏈接的「三次握手」相似,斷開一個TCP鏈接則須要「四次揮手」。
第一次揮手:主動關閉方發送一個FIN,用來關閉主動方到被動關閉方的數據傳送,也就是主動關閉方告訴被動關閉方:我已經不會再給你發數據了。可是,此時主動關閉方還可 以接受數據。
第二次揮手:被動關閉方收到FIN包後,發送一個ACK給對方,確認序號爲收到序號+1。
第三次揮手:被動關閉方發送一個FIN,用來關閉被動關閉方到主動關閉方的數據傳送,也就是告訴主動關閉方,個人數據也發送完了,不會再給你發數據了。
第四次揮手:主動關閉方收到FIN後,發送一個ACK給被動關閉方,確認序號爲收到序號+1,至此,完成四次揮手。
1XX 表示消息 2XX 表示成功 3XX 表示重定向 4XX 表示請求錯誤 5XX 表示服務器端錯誤 常見HTTP狀態碼 200 OK 表示請求成功 一切正常 301 Moved Permanently 永久重定向,客戶請求的文檔在其餘地方,新的URL在Location頭中給出,瀏覽器應該自動地訪問新的URL 302 Found 臨時重定向,相似於301,但新的URL應該被視爲臨時性的替代,而不是永久性的。 304 Not Modified 客戶端有緩衝的文檔併發出了一個條件性的請求。服務器告訴客戶,原來緩衝的文檔還能夠繼續使用。 400 Bad Request 請求出現語法錯誤。 403 Forbidden 資源不可用。 404 Not Found 沒法找到指定位置的資源。 405 Method Not Allowed 請求方法對指定的資源不適用(方法:GET、POST、HEAD、Delete、PUT、TRACE等)。 500 Internal Server Error 服務器出現錯誤,不能完成客戶的請求。 501 Not Implemented 服務器不支持實現請求所須要的功能。
2開頭 (請求成功)表示成功處理了請求的狀態代碼。
200 (成功) 服務器已成功處理了請求。 一般,這表示服務器提供了請求的網頁。
201 (已建立) 請求成功而且服務器建立了新的資源。
202 (已接受) 服務器已接受請求,但還沒有處理。
203 (非受權信息) 服務器已成功處理了請求,但返回的信息可能來自另外一來源。
204 (無內容) 服務器成功處理了請求,但沒有返回任何內容。
205 (重置內容) 服務器成功處理了請求,但沒有返回任何內容。
206 (部份內容) 服務器成功處理了部分 GET 請求。
3開頭 (請求被重定向)表示要完成請求,須要進一步操做。 一般,這些狀態代碼用來重定向。
300 (多種選擇) 針對請求,服務器可執行多種操做。 服務器可根據請求者 (user agent) 選擇一項操做,或提供操做列表供請求者選擇。
301 (永久移動) 請求的網頁已永久移動到新位置。 服務器返回此響應(對 GET 或 HEAD 請求的響應)時,會自動將請求者轉到新位置。
302 (臨時移動) 服務器目前從不一樣位置的網頁響應請求,但請求者應繼續使用原有位置來進行之後的請求。
303 (查看其餘位置) 請求者應當對不一樣的位置使用單獨的 GET 請求來檢索響應時,服務器返回此代碼。
304 (未修改) 自從上次請求後,請求的網頁未修改過。 服務器返回此響應時,不會返回網頁內容。
305 (使用代理) 請求者只能使用代理訪問請求的網頁。 若是服務器返回此響應,還表示請求者應使用代理。
307 (臨時重定向) 服務器目前從不一樣位置的網頁響應請求,但請求者應繼續使用原有位置來進行之後的請求。
4開頭 (請求錯誤)這些狀態代碼表示請求可能出錯,妨礙了服務器的處理。
400 (錯誤請求) 服務器不理解請求的語法。
401 (未受權) 請求要求身份驗證。 對於須要登陸的網頁,服務器可能返回此響應。
403 (禁止) 服務器拒絕請求。
404 (未找到) 服務器找不到請求的網頁。
405 (方法禁用) 禁用請求中指定的方法。
406 (不接受) 沒法使用請求的內容特性響應請求的網頁。
407 (須要代理受權) 此狀態代碼與 401(未受權)相似,但指定請求者應當受權使用代理。
408 (請求超時) 服務器等候請求時發生超時。
409 (衝突) 服務器在完成請求時發生衝突。 服務器必須在響應中包含有關衝突的信息。
410 (已刪除) 若是請求的資源已永久刪除,服務器就會返回此響應。
411 (須要有效長度) 服務器不接受不含有效內容長度標頭字段的請求。
412 (未知足前提條件) 服務器未知足請求者在請求中設置的其中一個前提條件。
413 (請求實體過大) 服務器沒法處理請求,由於請求實體過大,超出服務器的處理能力。
414 (請求的 URI 過長) 請求的 URI(一般爲網址)過長,服務器沒法處理。
415 (不支持的媒體類型) 請求的格式不受請求頁面的支持。
416 (請求範圍不符合要求) 若是頁面沒法提供請求的範圍,則服務器會返回此狀態代碼。
417 (未知足指望值) 服務器未知足"指望"請求標頭字段的要求。
5開頭(服務器錯誤)這些狀態代碼表示服務器在嘗試處理請求時發生內部錯誤。 這些錯誤多是服務器自己的錯誤,而不是請求出錯。
500 (服務器內部錯誤) 服務器遇到錯誤,沒法完成請求。
501 (還沒有實施) 服務器不具有完成請求的功能。 例如,服務器沒法識別請求方法時可能會返回此代碼。
502 (錯誤網關) 服務器做爲網關或代理,從上游服務器收到無效響應。
503 (服務不可用) 服務器目前沒法使用(因爲超載或停機維護)。 一般,這只是暫時狀態。
504 (網關超時) 服務器做爲網關或代理,可是沒有及時從上游服務器收到請求。
505 (HTTP 版本不受支持) 服務器不支持請求中所用的 HTTP 協議版本。
401 (未受權) 請求要求身份驗證。 對於須要登陸的網頁,服務器可能返回此響應。
403 (禁止) 服務器拒絕請求。
200 (成功) 服務器已成功處理了請求。 一般,這表示服務器提供了請求的網頁。
302 (臨時移動) 服務器目前從不一樣位置的網頁響應請求,但請求者應繼續使用原有位置來進行之後的請求。
304 Not Modified
客戶端有緩衝的文檔併發出了一個條件性的請求。服務器告訴客戶,原來緩衝的文檔還能夠繼續使用。
304 (未修改) 自從上次請求後,請求的網頁未修改過。 服務器返回此響應時,不會返回網頁內容。
(強緩存和協商緩存的命中和管理)
• 304 Not Modified 客戶端有緩衝的文檔併發出了一個條件性的請求。服務器告訴客戶,原來緩衝的文檔還能夠繼續使用。
• 404 找不到頁面 404 Not Found沒法找到指定位置的資源。
#include <iostream> using namespace std; void Qsort(int a[], int low, int high) { if(low >= high) { return; } int first = low; int last = high; int key = a[first];/*用字表的第一個記錄做爲樞軸*/ while(first < last) { while(first < last && a[last] >= key) { --last; } a[first] = a[last];/*將比第一個小的移到低端*/ while(first < last && a[first] <= key) { ++first; } a[last] = a[first]; /*將比第一個大的移到高端*/ } a[first] = key;/*樞軸記錄到位*/ Qsort(a, low, first-1); Qsort(a, first+1, high); } int main() { int a[] = {57, 68, 59, 52, 72, 28, 96, 33, 24}; Qsort(a, 0, sizeof(a) / sizeof(a[0]) - 1);/*這裏原文第三個參數要減1不然內存越界*/ for(int i = 0; i < sizeof(a) / sizeof(a[0]); i++) { cout << a[i] << ""; } return 0; }/*參考數據結構p274(清華大學出版社,嚴蔚敏)*/
算法是一種穩定的算法嗎?
它的最壞複雜度是多少?
平均複雜度呢?
最壞:O(n2) 平均:O(n*log2n) 不穩定 空間複雜度:O(log2n)~O(n)
選擇排序
:它的工做原理是每一次從待排序的數據元素中選出最小(或最大)的一個元素,存放在序列的起始位置,直到所有待排序的數據元素排完。
| 排序方法 | 平均 | 最好 | 最壞 | 輔助存儲 | 穩定性 |
| :-------- | -------:| :--: |-------| -------| -------|
| 選擇排序 | O(n^2) | O(n^2) | o(n^2) | O(1) | 不穩定 |
function selectSort(arr){ var len=arr.length; var temp; for(var i=0;i<len-1;i++){ for(var j=i+1;j<len;j++){ if(arr[j]<arr[i]){ temp=arr[j]; arr[j]=arr[i]; arr[i]=temp; } } i++; } return arr; }
我一開始先合併再排序,他不樂意,而後我用了相似插入排序的方法。
快速排序(不穩定):
平均:O(nlog2^n)
最好:O(nlog2^n)
最壞:O(n^2)
輔助存儲:O(nlog2^n)
var quickSort = function(arr) { if(arr.length <= 1) { return arr; } varpivotIndex = Math.floor(arr.length / 2); var pivot =arr.splice(pivotIndex, 1)[0]; var left =[]; var right =[]; for (var i= 0; i < arr.length; i++){ if(arr[i] < pivot) { left.push(arr[i]); } else { right.push(arr[i]); } } return quickSort(left).concat([pivot], quickSort(right)); };
簡單選擇排序(不穩定):
平均:O(n^2)
最好:O(n^2)
最壞:O(n^2)
輔助存儲:O(1)
原理:它的工做原理:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,而後,再從剩餘未排序元素中繼續尋找最小(大)元素,而後放到已排序序列的末尾。以此類推,直到全部元素均排序完畢。
/* struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { } };*/ class Solution { public: ListNode* FindKthToTail(ListNode* pListHead, unsigned int k) { if (pListHead == NULL || k <= 0) return NULL; ListNode *p1 = pListHead; ListNode *p2 = pListHead; for (int i=1; i<k; i++) { if (p1->next != NULL) p1 = p1->next; else return NULL; } while(p1->next != NULL) { p1 = p1->next; p2 = p2->next; } return p2; } };
一開始我就是說直接用O(n)複雜度的直接遍歷就是,可是不滿意,我就說:把這些數字分紅N組嗎,而後在每組中查找,仍是不滿意
[幾個經常使用的操做系統進程調度算法](http://blog.csdn.net/luyafei_89430/article/details/12971171
進程是資源分配的最小單位,線程是CPU調度的最小單位
堆和棧的區別:
1、堆棧空間分配區別:
一、棧(操做系統自動分配釋放 ,存放函數的參數值,局部變量的值等。其操做方式相似於數據結構中的棧;
二、堆(操做系統): 通常由程序員分配釋放, 若程序員不釋放,程序結束時可能由OS回收,分配方式卻是相似於鏈表。
2、堆棧緩存方式區別:
一、棧使用的是一級緩存, 他們一般都是被調用時處於存儲空間中,調用完畢當即釋放;
二、堆是存放在二級緩存中,生命週期由虛擬機的垃圾回收算法來決定(並非一旦成爲孤兒對象就能被回收)。因此調用這些對象的速度要相對來得低一些。
3、堆棧數據結構區別:
堆(數據結構):堆能夠被當作是一棵樹,如:堆排序;
棧(數據結構):一種先進後出的數據結構。