主頁 > 軟體設計 > 計算機網路第5章運輸層

計算機網路第5章運輸層

2021-11-14 13:27:58 軟體設計

運輸層

    • 1. 運輸層要完成的任務是什么?(功能是什么?)
    • 2. 我們在運輸層上,大體的把行程之間通信分為面向連接的TCP和不需要建立連接的UDP,那么分類的依據是什么?(兩者的區別是什么?)
    • 3. 網路層是實作行程之間通信的,而在發送方又有多個行程,那么怎么知道在發送方行程發送的資料一定會被接收方對應的行程所接收呢?
    • 4. UDP(不需要實作可靠傳輸)
    • 5. TCP(必須實作可靠傳輸)
      • 5.1 首先要明白實作可靠傳輸的必要條件:
      • 5.2 那么位元組流是什么呢?
      • 5.3 我們所討論的可靠傳輸都是建立在起點和終點之間建立了唯一的連接,那么確定連接是通過套接字來確定的,套接字socket=(IP地址:埠號),確定完連接之后,我們就要考慮實作可靠連接的原理是什么?
    • 6. TCP報文段的首部格式
    • 7. TCP可靠傳輸的實作
    • 8. TCP的擁塞控制方法
      • 8.1 擁塞視窗
      • 8.2 擁塞的判斷
      • 8.3 擁塞控制方法
        • 8.4 慢開始
    • 9. TCP的運輸連接管理
      • 9.1 TCP是如何建立連接的
      • 9.2 TCP的連接釋放

在這里插入圖片描述

1. 運輸層要完成的任務是什么?(功能是什么?)

運輸層的功能概述:
?網路層的作用是在網路上根據提供的IP地址盡最大可能來找到主機來提供主機之間的邏輯通信,而運輸層是為應用行程之間提供端到端的邏輯,一個任務的執行在計算機系統中是由多個行程共同合作進行的,比如兩個用戶在主機上使用QQ聊天,計算機系統會運行多個行程來為QQ聊天這個功能提供保障,可能這些行程中只有一個行程是負責兩個用戶之間聊天的,其他的行程可能是確保一個賬號不能多地登錄,身份驗證等,所以,運輸層劃分的比網路層更加細致,網路層只是主機到主機,而運輸層是在主機到主機通信的前提下,兩主機之間行程之間的通信(這正好符合下層為為實作上層功能提供保障的想法),

2. 我們在運輸層上,大體的把行程之間通信分為面向連接的TCP和不需要建立連接的UDP,那么分類的依據是什么?(兩者的區別是什么?)

計算機運輸層TCP和UDP協議的區別:
?面向連接的TCP,提供一個可靠的全雙工的信道,可以讓目的主機接收到的資訊和發送主機發送的資訊完全相同,發送和接收雙方之間要有協商,關于發送資料的接收,傳輸方式等都應該有共同的確認,接收方也要確定接受到目的方發送的資料,在通信的程序中,要不斷地確認是否處在建立連接的狀態,雖然會浪費很多資源,但是正是犧牲了這些資源換來了可靠的,面向連接的通信服務,所以隨之而來的TCP傳輸的機制也就比較復雜,傳輸的資料單位是TCP報文段,
?無連接的UDP,傳送資訊的速度快,效率高,但是傳送資訊的可靠性低,這時候的通信信道不可靠,接受方不會確認接收到目的方發送的資料,傳輸的資料單位是UDP報文,并未分段,

3. 網路層是實作行程之間通信的,而在發送方又有多個行程,那么怎么知道在發送方行程發送的資料一定會被接收方對應的行程所接收呢?

?這里是通過埠號來實作的,埠號為了標明計算機應用層的各個行程,即兩個主機之間的行程通信,首先在網路層通過IP地址找到主機在哪里,再通過埠號找到對應的行程在哪里,
埠號的分類:
(1)服務器端使用的埠號(埠號不可被重復利用)
熟知埠(固定的已經分配給上層應用協議的埠號):數值為0-1023(例如http80,ftp21/20…)
登記埠號:數值為1024-49151,非通用,為常用,
(2)客戶端使用的埠號
短暫埠號:數值為49152-65535,這些埠號留給客戶埠行程短暫的使用,使用完之后就會識訓,以分配給其他行程使用,
當服務器行程收到客戶行程的報文時,就知道客戶行程所使用的動態埠號,通信結束后,這個埠號就可以共給其他客戶行程使用

解決了三個問題之后就正式進入介紹TCP協議和UDP協議的環節,要想實作可靠傳輸,那么其中的程序不免有些復雜,而不需要建立連接的UDP協議更加簡單,所以先介紹UDP,

4. UDP(不需要實作可靠傳輸)

?UDP協議和IP協議都是提供不可靠的交付,但是一個是在運輸層使用的協議,另一個是在網路層,UDP只是在IP的資料報服務之上增加了復用和分用的功能,差錯檢測的功能,
?UDP的主要特點:無連接的,使用盡最大努力交付的,面向報文的(UDP對應用層交下來的報文,既不合并,也不拆分,只是保留報文的邊界,即一次交付一個完整的報文),沒有擁塞控制的,支持一(多)對一(多),
?應用程式在應用層傳輸下來的是應用層報文,運輸層使用UDP協議在應用層報文前面加上UDP首部在傳給網路層,首部有四個部分,分別為偽首部(12位元組),源埠(2位元組),目的埠(2位元組),長度(2位元組),檢驗和(2位元組),偽首部包括源IP地址,目的IP地址,0,17,UDP長度,在計算校驗和的時候,把偽首部和用戶和資料報連接在一起,僅僅是為了計算校驗和,算完校驗和之后就舍棄偽首部,傳輸之后的部分,為什么丟棄偽首部,因為在IP層會再加上新首部,里面有源和目的IP地址等資訊,

5. TCP(必須實作可靠傳輸)

?從物理層開始一層一層到傳輸層,每一層我們都在問一個問題:是否可以實作可靠傳輸?現在到了網路層,到了TCP協議這一個知識點,我們可以說,必須實作可靠傳輸,

5.1 首先要明白實作可靠傳輸的必要條件:

(1)雙方必須建立連接
(2)雙方只能是一對一的連接(區別于UDP)
(3)在傳輸的資料,不重復,不丟失,不失序
(4)提供的是全雙工的通信
(5)是面向位元組流的(TCP把上層傳輸下來的資料看為一串無結構的位元組流,接收雙方的位元組流必須是相同的,在位元組上沒有丟失,重復,失序)

5.2 那么位元組流是什么呢?

?上層應用行程把資料按照位元組流的方式傳輸到下層,下層要想實作接收資料的不丟失,不重復,不失序就必須接收一個位元組的資料就給這個位元組流編號0-n,編號結束之后,就會把資料放到發送緩沖當中去,等待發送,每次發送的位元組數不相同,會受到很多影響,要綜合考慮,在發送程序中不一定先發送的先到,因為正在IP層是不保證可靠傳輸的,但是由于發送的位元組是已經編號完成的,就算接收方接收到的資料順序不一樣,也能通過編號來進行排序和判斷是否有丟失的情況,
在這里插入圖片描述

?這張圖可以看出來,應用行程發送的資料是有大有小的,如果是UDP協議的話,可能在前面安裝上UDP首部就進行發送了,但是TCP不一樣,如果資料太大的話,會把資料分為一個個資料段,形成TCP報文段進行發送,
注意:
?TCP對應用行程一次把多長的報文發送到TCP的快取中是不關心的,只會吧太長的資料塊劃分為短一些來進行發送;TCP會根據對方給出的視窗值和當前網路的擁塞情況來確定一個報文應該包含多少個位元組,

5.3 我們所討論的可靠傳輸都是建立在起點和終點之間建立了唯一的連接,那么確定連接是通過套接字來確定的,套接字socket=(IP地址:埠號),確定完連接之后,我們就要考慮實作可靠連接的原理是什么?

TCP實作可靠傳輸的作業原理有兩個:

停止等待協議
?停止等待協議就是每發送完一個分組就停止發送,知道目的主機確認之后,并且發送主機接收到確認之后再發送下一個分組,(類似于雙方打電話,一方每說一句話就加上還在嗎,對方說還在,就可以繼續通話)
1.無差錯情況
發送方A發送一組資料到接收方B,接受方B接收到之后就會發送一個確認(ACK)給發送方A,當發送方A接收到這個ACK的時候,就會發送之后的資料,接收方是無法知道發送方發送資料的,只能被動接收,
2.出現差錯
接收方B如果再接收資料的時候檢測資料出現錯誤,或者更本沒有接收到資料,那么就不會發送ACK,為了讓發送方A知道發送的資料出現了問題,我們在發送方定義一個超時計數器,當發送方每發送一個資料的時候,超時計時器就會開始計時,如果發送方A在超時計時器到時間限之前收到了ACK就會發送下一個分組,如果沒接收到,就會進行重發,
3.確認丟失和確認遲到
那么如果接收方接收到發來的分組之后發個發送方的ACK出現了丟失和超時的情況,都會通過超時重發來解決,但是后者在接收到第二個重復的ACK的時候,就會停止重發,
為了保障可以重發,發送方在發送完一個分組之后,必須暫時保留自己已發送的分組副本,為了確保發送方和接收方必須收到,就要把分組和確認分組都必須進行編號,超時計時器的時限應當比資料在分組發送的平均往返時間長一些,

這樣發一個等待確定后再發送的機制效率低下,要想提高效率,可以采用流水線傳輸的方式,邊發送邊確認,這樣的機制仍然會設定一個超時計時器,

連續ARQ協議
?會在發送方設定一個發送視窗,在接收方設定一個接收視窗,這里視窗的意義是發送快取當中的一塊區域,發送方的這一塊區域存放的要發送的資料,代表這一次可以連續發送的資料個數,若視窗的前面資料發送完接收方確認發送成功,那么這個發送視窗就向后移動一個資料單元,視窗滑動的程序就是不斷有資料進這個視窗,也不斷有資料出這個視窗,視窗中的資料按照編號大小排序,在前面的程序中,為了保證可靠傳輸,要求發一個資料,就要確認以下,會浪費很多時間,但是利用滑動視窗的方式,可以采用累計確認的方法來減少花費在確認上的時間,累計確認的描述如下:
?因為視窗中的資料是按照編號的大小排序的,那么發送的資料不必對每個資料的分組逐個進行發送確認,而只需對按序到達的最后一個分組發送確認,只要最后一個分組確認收到之后,就能代表到這個分組為止的所有分組都正確接收到了, 使用這樣方法固然可以減少時間的浪費和重傳的操作,但是不能確保到最后接收到的分組之前的分組是否接收到,
?若發送方發送了前5個分組,而中間的第三個分組丟失,此時接受方只能對前面兩個分組發出確認,發送方不知道后面的三個分組有沒有發送成功,所以就要執行Go-back-N操作,回退到第三個分組重新發送,這種操作當在線路質量不好的情況的時候,就會是使得重發頻繁,
?接收視窗接收到資料的時候,并不著急把接收到的資料分組提交給上層,而是要等待接收完成,且不缺少對應發送視窗中發送的資料,(個數,次序均不能錯誤)
綜合:TCp可靠通信的具體實作
(1)TCP連接的每一端都必須設有兩個視窗,分別為接收視窗和發送視窗,
(2)TCP的可靠傳輸機制用位元組的序號進行控制,TCP所有的確認都是基于序號而不是基于報文段,
(3)TCP兩端的四個視窗經常處于動態變化之中,
(4)TCP連接的往返時間RTT不是固定不變的,需要使用特定的演算法估算較為合理的重傳時間,

6. TCP報文段的首部格式

在這里插入圖片描述

TCP首部的最小長度為20位元組,首部成分:源埠,目的埠,序號(指的是編號之后的資料開始發送的序號),確認號(是期望收到對方的下一個報文段的資料編號的序號,確認號會在接收端發送確認回復中發回給發送端),資料偏移(資料在TCP報文那個位置開始),URG,ACK,PSH,RST,SYN,FIN,視窗(接收視窗的大小,確保用戶有能力接收發送來的資料),檢驗和(和UDP相同,會把前面加上IP地址的偽首部),緊急指標,選項,填充,

7. TCP可靠傳輸的實作

在這里插入圖片描述

  1. 以位元組為單位的滑動視窗
    ?接收端給發送端發送了確認報文,里面包含了視窗,確認號,當發送方接收到確認報文之后,通過視窗來了解接收方可以接收的視窗大小,以此來確定發送方下一次發送視窗的大小,通過確認號來確定發送方視窗后沿(發送視窗有后沿和前沿之分,后沿邊發送邊往后移動,發送完一個,就后移一個單元,傳輸過的資料單元必須發送端收到確認報文之后才能把發送過的資料單元移出發送視窗,一旦從發送視窗被移除的資料單元,就代表發送成功,就不會再重發)的開始地址,假設接收視窗接收的序號范圍為31-50,31,32序號被接受并且發送端收到確認,但是33序號的資料單元沒有被確認,可能之后的資料單元接收到了,但是接收視窗仍然認為沒有接收到,如果超過了超時重傳的時間還是沒有收到31,32的確認,那么不管接收視窗接收到32之后的任何編號的確認,都會回退到31處開始重傳(這就是發送視窗在發送完之后沒有直接把資料單元給移出發送視窗的原因,否則就得從上層再獲取這個資料編號的資料),
    ?在發送方發送視窗中的資料在發送之后只有當發送端接收到了確認才會移出發送視窗(但是這里會有快取的存在),只要后沿移出了資料單元,那么發送視窗的前沿就能移進資料單元,
    ?出去和進來要確保發送視窗的大小保持不變,大小隨著接收視窗的大小變化而變化(保證發送方一次不能發送過多的資料導致接收方接收不了,接受不了就會丟棄,這就不是可靠傳輸),如果接收視窗的大小變大了,那么發送視窗的大小也就能變大,前沿處就能多進來幾個資料單元;但是如果接收端接收窗戶變小了,原來處于發送端發送視窗中的資料也不能移走,只能讓后沿的資料單位發送一個移出一個,前沿的資料單位不變,不允許進入,知道發送端發送視窗的大小縮小為和接收端接收視窗大小相同為止,(即前沿視窗只能擴大不能收縮)
    ?這里也可以通過累計確認的方法減少系統開銷,
  2. 超時重傳時間的選擇
    ?超時重傳時間的選擇很重要,如果時間過短的話,就會導致過多的重傳操作,如果時間過長的話,又會導致空閑時間過長,導致效率降低,我們這里利用加權平均往返時間來確認超時重傳的時間,
  3. 選擇卻仍SACK
    ?為了避免回退重發帶來的重復重發,進行選擇確認要確定邊界值,(很少使用)

那么TCP的可靠傳輸的方法和原理我們都知道了,那么如果傳輸的資料太大,傳輸資料的總和大于了網路硬體可以提供給我們的傳輸資料量,這時候就會發生網路的擁塞(資料無法傳送),要想解決這個問題,在TCP中,我們使用TCP的擁塞控制方法,

8. TCP的擁塞控制方法

?簡單的想,我們可以通過提高網路硬體來解決這個問題,但是這種方法不僅受限于成本,也不方便實施,或者控制網路資料傳輸的吞吐量(減少資料量的輸入),那么判斷網路擁塞的標志是什么呢?標準的確定很重要,出現了網路擁塞,TCP就要去減少其他發送方的發送資料量(發送視窗的大小),發送視窗的大小又是隨著接受方接收視窗(接收能力)的大小來判定的,此時又新增加了一個影響因素:網路的擁堵程度,如果接收方的接收視窗很大,但是當前網路擁堵程度決定的發送量(擁塞視窗值)小的話,那么接收端的接收視窗大小應該等于當前網路的發送量,如果接收視窗的發送視窗很小的話,那么按照接收視窗的大小來發送資料,
在這里插入圖片描述

最后發送視窗的值是由兩個因素決定的,公告視窗的值可以簡單獲得,那么擁塞視窗CWND值的獲取就需要進一步的研究,

8.1 擁塞視窗

?擁塞視窗的值代表著當前網路的擁塞情況,當網路沒有出翔擁塞的時候,此時的擁塞視窗的值就會變大,就可以把更多的分組發送出去,以提高網路的利用率;如果當前網路出現了擁塞,此時的擁塞視窗的值就會小,限制發送的分組,以緩解網路出現的擁塞狀況,怎那么判斷擁塞視窗的大小呢?

8.2 擁塞的判斷

?當重傳定時器超時的時候就有可能出現了網路擁塞;當收到三個重復的確認ACK,比如發送方發送序號1-5的資料到接收方,發送資料1后,接收方收到了確認,但是在發送資料2后,資料2在網路中丟失了,接收方沒有收到資料2,那么發送方就沒有收到確認回復,發送方會繼續發送3,4,5,但是接收方就會在之后接收到的資料確認回復中表示要接收2資料,接收端就會接受到三個回復確認,但是確認不正常,這樣就可以確認網路可能發生了擁塞,這兩種情況前者已經發生擁塞了,后者表示可能要發生擁塞了,判斷出現擁塞之后,就要有一定的控制方法,

8.3 擁塞控制方法

?前面說的兩種擁塞情況,都可以用慢開始和擁塞避免的方法來控制,但是第二種情況更適合用快重傳和塊回復的方法控制,下面介紹這四種擁塞控制方法,

8.4 慢開始

?發送量由小變大,在第一次傳輸輪次只發送一次,之后傳輸輪次的擁塞視窗按照指數增長,
在這里插入圖片描述

?橫軸為傳輸輪次,縱軸為擁塞視窗,擁塞視窗的初始值為1,我們要設定一個危險的值(ssthresh)在這個值之前的擁塞視窗的值可以呈指數增長,為了讓總和發送的資料最多,在ssthresh之后的值就不能指數的增大了,串口值只能一個一個的增大(因為可能在ssthresh值之后還按照指數的增長的話,到達擁塞時的輪次就會變少,與此同時發送的資料總量也就變少,我們最終的目的是讓發送資料的總量最多),讓視窗的值一個一個增加,判斷什么時候會發生擁塞,當通過超時(圖中2)發現擁塞后,視窗的值直接恢復到最小值(由此來減少網路的負擔),從新開始增加,對應的ssthresh值也會變小(一般變為上一次的一半),當通過收到三個確認(圖中4)來判斷發生擁塞的情況的時候,視窗值并不會減少到1,而是減少到此時的ssthresh值處開始慢慢增長(恢復快),省略了一開始的視窗增長程序(恢復慢),所以說要發現早發現,就早恢復,所以慢重傳只是通過減少擁塞的來臨,依次來增加傳輸的輪次,讓更多的資料可以傳輸過去,

9. TCP的運輸連接管理

?前面討論了建立連接之后的可靠傳輸,但是TCP是如何建立連接的呢?對方是怎么知道另外一方的存在?雙方要在建立連接的時候需要協商哪些必要的引數(視窗的最大值等…)?如何分配資源來確保連接?

9.1 TCP是如何建立連接的

?我們這里使用客戶服務器方式,主動發起建立連接的行程叫客戶,而被動建立連接的行程叫做服務器,TCP建立連接的程序叫握手,要在客戶和服務器之間交換三個TCP報文段才能代表連接建立成功,這個建立連接的三次報文我們稱之為三握手報文,
建立三握手報文的流程(雙發互相發送資料并且得到確認):
在這里插入圖片描述

(1)發送方向接受方發送連接請求報文,同步位STN=1,選擇序號seq=x,表明傳送資料時候的資料位元組的序號為x,
(2)接收方在收到連接請求報文后,同意后,回發確認,確認報文中SYN=1,使ACK=1,確認號ack=x+1,同時接受方也向發送方發送一個建立連接的請求,seq=y,(保證全雙工)
(3)最后原發送發給接收方回一個確認報文,ACK=1,seq=x+1,ack=y+1,
?當資料傳送結束后,就要釋放連接,釋放其他占用的資源,于建立連接相同,釋放連接也要相互發送釋放連接報文,并且要的到確認,

9.2 TCP的連接釋放

在這里插入圖片描述

(1)當資料發送結束之后對應的發送方就會發送一個連接釋放報文,確認號seq=u,接受方接收到這個連接釋放報文之后會發送一個確認報文,確認編號為u的資料已經接收到了,此時就可以把接收快取中的資料就會把資料送給上層應用行程,若原接收方的發送視窗也把資料發送完成了,就會向原發送方發送一個連接釋放報文,等待源發送方的確認,確認之后雙方的連接就會斷開,這種連接釋放就叫做四次分手,如果最后一次的握手確認沒有收到,超過了超時重發的時間,就會重發,如果對方接收到了三次的握手請求,就會也知道可以進行釋放,

總結:

TCP實作可靠傳輸:

第一步:建立連接
?三握手
第二部:發送資料
?視窗(序號,發送視窗+接收視窗),確認機制,流量控制(發送的資料接收方可以有能力接收),擁塞控制(發現什么時候擁塞,讓擁塞來的越晚越好),超時重傳…
第三步:連接釋放
?四握手

轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/356945.html

標籤:其他

上一篇:關于 Linux中內網安裝軟體的一些筆記

下一篇:三次握手四次揮手

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 面試突擊第一季,第二季,第三季

    第一季必考 https://www.bilibili.com/video/BV1FE411y79Y?from=search&seid=15921726601957489746 第二季分布式 https://www.bilibili.com/video/BV13f4y127ee/?spm_id_fro ......

    uj5u.com 2020-09-10 05:35:24 more
  • 第三單元作業總結

    1.前言 這應該是本學期最后一次寫作業總結了吧。總體來說,對作業的節奏也差不多掌握了,作業做起來的效率也更高了。雖然和之前的作業一樣,作業中都要用到新的知識,但是相比之前,更加懂得了如何利用工具以及資料。雖然之間卡過殼,但總體而言,這幾次作業還算完成的比較好。 2.作業程序總結 相比前兩個單元,此單 ......

    uj5u.com 2020-09-10 05:35:41 more
  • 北航OO(2020)第四單元博客作業暨課程總結博客

    北航OO(2020)第四單元博客作業暨課程總結博客 本單元作業的架構設計 在本單元中,由于UML圖具有比較清晰的樹形結構,因此我對其中需要進行查詢操作的元素進行了包裝,在樹的父節點中存盤所有孩子的參考。考慮到性能問題,我采用了快取機制,一次查詢后盡可能快取已經遍歷過的資訊,以減少遍歷次數。 本單元我 ......

    uj5u.com 2020-09-10 05:35:48 more
  • BUAA_OO_第四單元

    一、UML決議器設計 ? 先看下題目:第四單元實作一個基于JDK 8帶有效性檢查的UML(Unified Modeling Language)類圖,順序圖,狀態圖分析器 MyUmlInteraction,實際上我們要建立一個有向圖模型,UML中的物件(元素)可能與同級元素連接,也可與低級元素相連形成 ......

    uj5u.com 2020-09-10 05:35:54 more
  • 6.1邏輯運算子

    邏輯運算子 1. && 短路與 運算式1 && 運算式2 01.運算式1為true并且運算式2也為true 整體回傳為true 02.運算式1為false,將不會執行運算式2 整體回傳為false 03.只要有一個運算式為false 整體回傳為false 2. || 短路或 運算式1 || 運算式2 ......

    uj5u.com 2020-09-10 05:35:56 more
  • BUAAOO 第四單元 & 課程總結

    1. 第四單元:StarUml檔案決議 本單元采用了圖模型決議UML。 UML檔案可以抽象為圖、子圖、邊的邏輯結構。 在實作中,圖的節點包括類、介面、屬性,子圖包括狀態圖、順序圖等。 采用了三次遍歷UML元素的方法建圖,第一遍遍歷建點,第二、三次遍歷設定屬性、連邊,實作圖物件的初始化。這里借鑒了一些 ......

    uj5u.com 2020-09-10 05:36:06 more
  • 談談我對C# 多型的理解

    面向物件三要素:封裝、繼承、多型。 封裝和繼承,這兩個比較好理解,但要理解多型的話,可就稍微有點難度了。今天,我們就來講講多型的理解。 我們應該經常會看到面試題目:請談談對多型的理解。 其實呢,多型非常簡單,就一句話:呼叫同一種方法產生了不同的結果。 具體實作方式有三種。 一、多載 多載很簡單。 p ......

    uj5u.com 2020-09-10 05:36:09 more
  • Python 資料驅動工具:DDT

    背景 python 的unittest 沒有自帶資料驅動功能。 所以如果使用unittest,同時又想使用資料驅動,那么就可以使用DDT來完成。 DDT是 “Data-Driven Tests”的縮寫。 資料:http://ddt.readthedocs.io/en/latest/ 使用方法 dd. ......

    uj5u.com 2020-09-10 05:36:13 more
  • Python里面的xlrd模塊詳解

    那我就一下面積個問題對xlrd模塊進行學習一下: 1.什么是xlrd模塊? 2.為什么使用xlrd模塊? 3.怎樣使用xlrd模塊? 1.什么是xlrd模塊? ?python操作excel主要用到xlrd和xlwt這兩個庫,即xlrd是讀excel,xlwt是寫excel的庫。 今天就先來說一下xl ......

    uj5u.com 2020-09-10 05:36:28 more
  • 當我們創建HashMap時,底層到底做了什么?

    jdk1.7中的底層實作程序(底層基于陣列+鏈表) 在我們new HashMap()時,底層創建了默認長度為16的一維陣列Entry[ ] table。當我們呼叫map.put(key1,value1)方法向HashMap里添加資料的時候: 首先,呼叫key1所在類的hashCode()計算key1 ......

    uj5u.com 2020-09-10 05:36:38 more
最新发布
  • 【中介者設計模式詳解】C/Java/JS/Go/Python/TS不同語言實作

    * 中介者模式是一種行為型設計模式,它可以用來減少類之間的直接依賴關系,
    * 將物件之間的通信封裝到一個中介者物件中,從而使得各個物件之間的關系更加松散。
    * 在中介者模式中,物件之間不再直接相互互動,而是通過中介者來中轉訊息。 ......

    uj5u.com 2023-04-20 08:20:47 more
  • 露天煤礦現場調研和交流案例分享

    他們集團的資訊化公司及研究院在一個礦區正在做智能礦山的統一平臺的 試點,專案投資大概1億,包括了礦山的各方面的內容,顯示得我們這次交流有點多余。他們2年前開始做智能礦山的規劃,有很多煤礦行業專家的加持,他們的描述是非常完美,但是去年底應該上線的平臺,現在還沒有看到影子。他們確實有很多場景需求,但是被... ......

    uj5u.com 2023-04-20 08:20:25 more
  • 《社區人員管理》實戰案例設計&個人案例分享

    設計是一個讓人夢想成真程序,開始編碼、測驗、除錯之前進行需求分析和架構設計,才能保證關鍵方面都做正確 ......

    uj5u.com 2023-04-20 08:20:17 more
  • 軟體架構生態化-多角色交付的探索實踐

    作為一個技術架構師,不僅僅要緊跟行業技術趨勢,還要結合研發團隊現狀及痛點,探索新的交付方案。在日常中,你是否遇到如下問題 “ 業務需求排期長研發是瓶頸;非研發角色感受不到研發技改提效的變化;引入ISV 團隊又擔心質量和安全,培訓周期長“等等,基于此我們探索了一種新的技術體系及交付方案來解決如上問題。 ......

    uj5u.com 2023-04-20 08:20:10 more
  • 【中介者設計模式詳解】C/Java/JS/Go/Python/TS不同語言實作

    * 中介者模式是一種行為型設計模式,它可以用來減少類之間的直接依賴關系,
    * 將物件之間的通信封裝到一個中介者物件中,從而使得各個物件之間的關系更加松散。
    * 在中介者模式中,物件之間不再直接相互互動,而是通過中介者來中轉訊息。 ......

    uj5u.com 2023-04-20 08:19:44 more
  • 露天煤礦現場調研和交流案例分享

    他們集團的資訊化公司及研究院在一個礦區正在做智能礦山的統一平臺的 試點,專案投資大概1億,包括了礦山的各方面的內容,顯示得我們這次交流有點多余。他們2年前開始做智能礦山的規劃,有很多煤礦行業專家的加持,他們的描述是非常完美,但是去年底應該上線的平臺,現在還沒有看到影子。他們確實有很多場景需求,但是被... ......

    uj5u.com 2023-04-20 08:19:07 more
  • 《社區人員管理》實戰案例設計&個人案例分享

    設計是一個讓人夢想成真程序,開始編碼、測驗、除錯之前進行需求分析和架構設計,才能保證關鍵方面都做正確 ......

    uj5u.com 2023-04-20 08:18:57 more
  • 軟體架構生態化-多角色交付的探索實踐

    作為一個技術架構師,不僅僅要緊跟行業技術趨勢,還要結合研發團隊現狀及痛點,探索新的交付方案。在日常中,你是否遇到如下問題 “ 業務需求排期長研發是瓶頸;非研發角色感受不到研發技改提效的變化;引入ISV 團隊又擔心質量和安全,培訓周期長“等等,基于此我們探索了一種新的技術體系及交付方案來解決如上問題。 ......

    uj5u.com 2023-04-20 08:18:49 more
  • 05單件模式

    #經典的單件模式 public class Singleton { private static Singleton uniqueInstance; //一個靜態變數持有Singleton類的唯一實體。 // 其他有用的實體變數寫在這里 //構造器宣告為私有,只有Singleton可以實體化這個類! ......

    uj5u.com 2023-04-19 08:42:51 more
  • 【架構與設計】常見微服務分層架構的區別和落地實踐

    軟體工程的方方面面都遵循一個最基本的道理:沒有銀彈,架構分層模型更是如此,每一種都有各自優缺點,所以請根據不同的業務場景,并遵循簡單、可演進這兩個重要的架構原則選擇合適的架構分層模型即可。 ......

    uj5u.com 2023-04-19 08:42:41 more