排序
(1)快速排序:快速排序是由冒泡排序改進的,冒泡排序過程中,只對相鄰的兩個記錄進行比較,因此每次交換兩個相鄰記錄時只能消除一個逆序.快速排序是通過兩個不相鄰記錄的一次交換消除多個逆序,提高排序速度.
時間復雜度分析:從快速排序算法的遞歸樹可知,快速排序的趟數取決于遞歸樹的深度.最好情況下:每一趟排序后都能將記錄序列均勻的分割成兩個長度大致相等的子表時間復雜度為O(nlogn).最壞情況下:在待排序序列已經排好序 的情況下,其遞歸樹成為單支樹.時間復雜度為O(n^2/2)
空間復雜度:快速排序是遞歸的,執(zhí)行時需要一個棧來存放相應的數據,最大遞歸調用次數與遞歸樹的深度一致,故最好情況的空間復雜度為O(logn),最壞情況為O(n);
算法特點:記錄的非順次的移動導致排序方法不穩(wěn)定.
排序過程中需要定位表的上階和下界,所以適合用于順序結構,很難用于鏈式結構.
適合用于初始記錄無序,n較大的情況.
計算機網絡
層次結構:
以五層結構為例:應用層,傳輸層(運輸層),網絡層,數據鏈路層,物理層
1.物理層:通過光纖和電纜以及雙絞線等物體將計算機連接。然后才能進行通信在計算機之間傳輸0,1這樣的電信號.
?。玻當祿溌穼樱汗ぷ髟谖锢韺又?,負責給這些0,1制定傳送的規(guī)則,然后另一方再按照相應的規(guī)則來進行解讀。負責分配MAC地址
以太網協議:以太網協議規(guī)定,一組電信號構成一個數據包,把這個數據包稱之為“楨”。每一個楨由標頭(Head)和數據(Data)兩部分組成,楨的最大長度是1518個字節(jié),最小長度為64字節(jié)。假如需要傳送的數據很大的 話,就分成多個楨來進行傳送。
MAC地址:連入網絡的每一個計算機都會有網卡接口,每一個網卡都會一個地址,這個地址就叫做MAC地址。計算機之間的數據傳送,就是通過MAC地址來唯一尋找、傳送的。
ARP協議:通過它我們可以知道子網中其他計算機的MAC地址。
?。常W絡層:實際上我們所處的網絡,是由無數個子網絡構成的。廣播的時候,也只有同一個子網里面的計算機能夠收到。 假如沒有子網這種劃分的話,計算機A發(fā)一個數據包給計算機B,其他所有計算機也都能收到這個數據包,然后進行對比再舍棄。世界上有那么多它計算機,每一臺計算機都能收到其他所有計算機的數據包,那就不得了了。如何區(qū)分哪些MAC地址是屬于同一個子網的呢?假如是同一個子網,那我們就用廣播的形式把數據傳送給對方,如果不是同一個子網的,我們就會把數據發(fā)給網關,讓網關進行轉發(fā)。為了解決這個問題我們引入了一套新的地址協議(IP協議),這個地址協議能夠幫助我們區(qū)分MAC地址是否處于同一個子網中。這也是網絡層負責解決的問題。
?。矗畟鬏攲樱河嬎銠CA已經可以發(fā)送數據到計算機B中了,但是計算機B里面有多種多樣的程序應用,此時通過指定端口Port供特定的應用程序來接受處理.傳輸層的功能就是建立端口到端口的通信。相比網絡層的功能是建立主機到主機的通信。傳輸層最常見的兩大協議是 TCP 協議和 UDP 協議,其中 TCP 協議與 UDP 最大的不同就是 TCP 提供可靠的傳輸,而 UDP 提供的是不可靠傳輸。
?。担畱脤樱簜鬟^來的數據格式不同,而應用層的功能,就是用來規(guī)定應用程序的數據格式的.
協議有:HTTP、SMTP、FTP、ping、telnet、DNS、DHCP等
HTTP的狀態(tài)碼有哪些:
(1):200 請求成功
?。撮_頭表示客戶端錯誤
?。ǎ玻?00請求有語法錯誤,不能被服務器所理解;
?。ǎ常?04請求資源不存在
?。甸_頭表示服務器端錯誤
?。ǎ矗?00服務器發(fā)生不可預期的錯誤;
(5):503服務器不能處理客戶請求
HTTP的長連接和短短連接:
HTTP協議是基于請求/響應模式的,因此只要服務端給了響應,本次HTTP連接就結束了,或者更準確的說,是本次HTTP請求就結束了,所謂的HTTP連接本質上是TCP的連接。TCP連接是可以保持一段時間不中斷的就是長連接,發(fā)起一次請求后就主動斷開的就是短連接,所以就有了長連接和短連接一說。
若沒有長連接TCP連接將會越來越多,直到把服務器的TCP連接數量撐爆到上限為止,長連接為了節(jié)省連接而重復利用
TCP與UDP:
TCP:(1)面向連接的,每條TCP連接只能由兩個端點,一對一通信;
?。ǎ玻┨峁┛煽康慕桓斗眨瑐鬏敂祿o差錯,不丟失,不重復,且按時序到達
?。ǎ常┟嫦蜃止?jié)流,TCP根據對方給出的窗口和當前的網絡擁塞程度決定一個報文應該包含多少個字節(jié)
UDP:(1)無連接,UDP使用盡最大努力交付,不保證可靠性UDP是面向報文的
?。ǎ玻︰DP支持一對一,一對多,多對一和多對多的交互通信。
(3)應用層交給UDP多長的報文,UDP就照樣發(fā)送,即一次發(fā)送一個報文;
TCP協議需要三次握手通信成功后進行建立,應用場景:互聯網和企業(yè)網上客戶端應用,數據傳輸性能讓位于數據傳輸的完整性,可控制性和可靠性。
UDP協議是直接發(fā)送,不會判斷是否接收和發(fā)送成功,應用場景:當強調輸出性能而非完整性時,如音頻和多媒體的應用。
URL與URI的區(qū)別:
URI:通一資源標志符(Universal Resource Identifier, URI),表示是一個網絡資源,如 HTML文檔、圖像、視頻片段、程序等都由一個URI進行定位的。
組成部分:訪問資源的命名機制,存放資源的主機名,資源自身的名稱
URL:是Uniform Resource Locator,表示是一個地址,URL是URI的子集,所有的URL都是URI,但不是每個URI都是URL,還有可能是URN
URN:統(tǒng)一資源名稱 (Uniform Resource Name, URN),是URI兩種形式之一。唯一標識一個實體的標識符,但是不能給出實體的位置
從輸入URL到展示網頁全過程:
?。ǎ保┹斎刖W址:緩存解析 瀏覽器獲取了這個url,當然就去解析了,它先去緩存當中看看有沒有,從 瀏覽器緩存-系統(tǒng)緩存-路由器緩存 當中查看,如果有從緩存當中顯示頁面,否則進行下一步.
?。ǎ玻〥NS解析:在發(fā)送http請求前,需要域名解析(DNS解析),解析獲取相應的IP地址.
(3)瀏覽器向服務器發(fā)起tcp連接,與瀏覽器建立tcp三次握手。
(4)握手成功后,瀏覽器向服務器發(fā)送http請求,請求數據包。
?。ǎ担┓掌魈幚硎盏降恼埱螅瑢祿祷刂翞g覽器
?。ǎ叮g覽器收到HTTP響應,讀取頁面內容,瀏覽器渲染,解析html源碼
TCP三次握手過程:
step1:建立連接時,客戶端發(fā)送SYN包到服務器,其中包含客戶端的初始序號seq=x,并進入SYN_SENT狀態(tài),等待服務器確認。(其中,SYN=1,ACK=0,表示這是一個TCP連接請求數據報文;序號seq=x,表明傳輸數據時的第一個數據字節(jié)的序號是x)。
step2:服務器收到請求后,必須確認客戶的數據包。同時自己也發(fā)送一個SYN包,即SYN ACK包,此時服務器進入SYN_RECV狀態(tài)。(其中確認報文段中,標識位SYN=1,ACK=1,表示這是一個TCP連接響應數據報文,并含服務端的初始序號seq(服務器)=y,以及服務器對客戶端初始序號的確認號ack(服務器)=seq(客戶端) 1=x 1)。
第三步:客戶端收到服務器的SYN ACK包,向服務器發(fā)送一個序列號(seq=x 1),確認號為ack(客戶端)=y 1,Server檢查ack是否為x 1,ACK是否為1,如果正確則連接建立成功,完成三次握手.
總結:第三次握手是為了防止:如果客戶端遲遲沒有收到服務器返回確認報文,這時會放棄連接,重新啟動一條連接請求,但問題是:服務器不知道客戶端沒有收到,所以他會收到兩個連接,浪費連接開銷。如果每次都是這樣,就會浪費多個連接開銷。
四次揮手過程:
所謂四次揮手(Four-Way Wavehand)即終止TCP連接,就是指斷開一個TCP連接時,需要客戶端和服務端總共發(fā)送4個包以確認連接的斷開。
由于TCP連接時全雙工的,因此,每個方向都必須要單獨進行關閉,這一原則是當一方完成數據發(fā)送任務后,發(fā)送一個FIN來終止這一方向的連接,收到一個FIN只是意味著這一方向上沒有數據流動了,即不會再收到數據了,但是在這個TCP連接上仍然能夠發(fā)送數據,直到這一方向也發(fā)送了FIN。首先進行關閉的一方將執(zhí)行主動關閉,而另一方則執(zhí)行被動關閉,上圖描述的即是如此。
(1)第一次揮手:Client發(fā)送一個FIN,用來關閉Client到Server的數據傳送,Client進入FIN_WAIT_1狀態(tài)。
(2)第二次揮手:Server收到FIN后,發(fā)送一個ACK給Client,確認序號為收到序號 1(與SYN相同,一個FIN占用一個序號),Server進入CLOSE_WAIT狀態(tài)。
(3)第三次揮手:Server發(fā)送一個FIN,用來關閉Server到Client的數據傳送,Server進入LAST_ACK狀態(tài)。
(4)第四次揮手:Client收到FIN后,Client進入TIME_WAIT狀態(tài),接著發(fā)送一個ACK給Server,確認序號為收到序號 1,Server進入CLOSED狀態(tài),完成四次揮手。