主頁 > 軟體設計 > OSI模型、Socket、TCP、HTTP/HTTPS協議

OSI模型、Socket、TCP、HTTP/HTTPS協議

2021-10-15 21:56:12 軟體設計

1、OSI模型

開放式系統互聯通信參考模型(Open System Interconnection Reference Model,縮寫為OSI),簡稱為OSI模型,該模型是由ISO(國際標準化組織)定義,是個靈活穩健和可互操作的模型,
1.1 OSI七層模型的劃分
OSI定義了網路互連的七層框架(物理層、資料鏈路層、網路層、傳輸層、會話層、表示層、應用層),即ISO開放互連系統參考模型,如下圖,
在這里插入圖片描述
1.2 常見應用層協議:

協議說明
HTTP80超文本傳輸協議
HTTPS443HTTP+SSL,HTTP的安全版
FTP20,21,990檔案傳輸協議
POP3110郵局協議
SMTP25簡單郵件傳輸協議
telnet23遠程終端協議

Socket是在會話層,TCP和UDP是在傳輸層,
OSI是一種理想的網路模型,因此一般網路系統只涉及其中的幾層,很少有系統能夠具有所有的7層,并完全遵循它的規定,

2、TCP/IP連接

在互聯網的通信中,永遠是客戶端主動連接到服務端,主動與服務端斷開連接,

2.1 欄位定義

(1)序列號seq:占4個位元組,用來標記資料段的順序,TCP把連接中發送的所有資料位元組都編上一個序號,第一個位元組的編號由本地隨機產生;給位元組編上序號后,就給每一個報文段指派一個序號;序列號seq就是這個報文段中的第一個位元組的資料編號,

(2)確認號ack:占4個位元組,期待收到對方下一個報文段的第一個資料位元組的序號;序列號表示報文段攜帶資料的第一個位元組的編號;而確認號指的是期望接收到下一個位元組的編號;因此當前報文段最后一個位元組的編號+1即為確認號,

(3)確認ACK:占1位,僅當ACK=1時,確認號欄位才有效,ACK=0時,確認號無效,

(4)同步SYN:連接建立時用于同步序號,當SYN=1,ACK=0時表示:這是一個連接請求報文段,若同意連接,則在回應報文段中使得SYN=1,ACK=1,因此,SYN=1表示這是一個連接請求,或連接接受報文,SYN這個標志位只有在TCP建產連接時才會被置1,握手完成后SYN標志位被置0,

(5)終止FIN:用來釋放一個連接,FIN=1表示:此報文段的發送方的資料已經發送完畢,并要求釋放運輸連接,

注意:ACK、SYN和FIN這些大寫的單詞表示標志位,其值要么是1,要么是0;ack、seq小寫的單詞表示序號,
在這里插入圖片描述
在這里插入圖片描述
2.2三次握手
在這里插入圖片描述

在這里插入圖片描述

第一次握手:建立連接時,客戶端發送syn包(syn=j)到服務器,并進入SYN_SENT狀態,等待服務器確認;SYN:同步序列編號(Synchronize Sequence Numbers),

第二次握手:服務器收到syn包,必須確認客戶的SYN(ack=j+1),同時自己也發送一個SYN包(syn=k),即SYN+ACK包,此時服務器進入SYN_RECV狀態,

第三次握手:客戶端收到服務器的SYN+ACK包,向服務器發送確認包ACK(ack=k+1),此包發送完畢,客戶端和服務器進入ESTABLISHED(TCP連接成功)狀態,完成三次握手,

2.3 四次斷開
在這里插入圖片描述

在這里插入圖片描述

(1)客戶端行程發出連接釋放報文,并且停止發送資料,釋放資料報文首部,FIN=1,其序列號為seq=u(等于前面已經傳送過來的資料的最后一個位元組的序號加1),此時,客戶端進入FIN-WAIT-1(終止等待1)狀態, TCP規定,FIN報文段即使不攜帶資料,也要消耗一個序號,

(2)服務器收到連接釋放報文,發出確認報文,ACK=1,ack=u+1,并且帶上自己的序列號seq=v,此時,服務端就進入了CLOSE-WAIT(關閉等待)狀態,TCP服務器通知高層的應用行程,客戶端向服務器的方向就釋放了,這時候處于半關閉狀態,即客戶端已經沒有資料要發送了,但是服務器若發送資料,客戶端依然要接受,這個狀態還要持續一段時間,也就是整個CLOSE-WAIT狀態持續的時間,

(3)客戶端收到服務器的確認請求后,此時,客戶端就進入FIN-WAIT-2(終止等待2)狀態,等待服務器發送連接釋放報文(在這之前還需要接受服務器發送的最后的資料),

(4)服務器將最后的資料發送完畢后,就向客戶端發送連接釋放報文,FIN=1,ack=u+1,由于在半關閉狀態,服務器很可能又發送了一些資料,假定此時的序列號為seq=w,此時,服務器就進入了LAST-ACK(最后確認)狀態,等待客戶端的確認,

(5)客戶端收到服務器的連接釋放報文后,必須發出確認,ACK=1,ack=w+1,而自己的序列號是seq=u+1,此時,客戶端就進入了TIME-WAIT(時間等待)狀態,注意此時TCP連接還沒有釋放,必須經過2*MSL(最長報文段壽命)的時間后,當客戶端撤銷相應的TCB(Transmission Control Block,傳輸控制塊,包含了資料發送雙方對應的socket資訊以及擁有裝載資料的緩沖區)后,才進入CLOSED狀態,

(6)服務器只要收到了客戶端發出的確認,立即進入CLOSED狀態,同樣,服務器撤銷TCB后,就結束了這次的TCP連接,可以看到,服務器結束TCP連接的時間要比客戶端早一些,

2.4 面試問題
【問題1】為什么連接的時候是三次握手,關閉的時候卻是四次握手?
答:因為當Server端收到Client端的SYN連接請求報文后,可以直接發送SYN+ACK報文,其中ACK報文是用來應答的,SYN報文是用來同步的,但是關閉連接時,當Server端收到FIN報文時,很可能并不會立即關閉SOCKET,所以只能先回復一個ACK報文,告訴Client端,“你發的FIN報文我收到了”,只有等到我Server端所有的報文都發送完了,我才能發送FIN報文,因此不能一起發送,故需要四步握手,
【問題2】如果已經建立了連接,但是客戶端突然出現故障了怎么辦?
TCP還設有一個保活計時器,顯然,客戶端如果出現故障,服務器不能一直等下去,白白浪費資源,服務器每收到一次客戶端的請求后都會重新復位這個計時器,時間通常是設定為2小時,若兩小時還沒有收到客戶端的任何資料,服務器就會發送一個探測報文段,以后每隔75秒鐘發送一次,若一連發送10個探測報文仍然沒反應,服務器就認為客戶端出了故障,接著就關閉連接,

3、SOCKET原理

3.1套接字(socket)概念
套接字(socket)是通信的基石,是支持TCP/IP協議的網路通信的基本操作單元,它是網路通信程序中端點的抽象表示,包含進行網路通信必須的五種資訊:連接使用的協議,本地主機的IP地址,本地行程的協議埠,遠地主機的IP地址,遠地行程的協議埠,

應用層通過傳輸層進行資料通信時,TCP會遇到同時為多個應用程式行程提供并發服務的問題,多個TCP連接或多個應用程式行程可能需要通過同一個 TCP協議埠傳輸資料,為了區別不同的應用程式行程和連接,許多計算機作業系統為應用程式與TCP/IP協議互動提供了套接字(Socket)介面,應用層可以和傳輸層通過Socket介面,區分來自不同應用程式行程或網路連接的通信,實作資料傳輸的并發服務,

3.2 建立socket連接
建立Socket連接至少需要一對套接字,其中一個運行于客戶端,稱為ClientSocket ,另一個運行于服務器端,稱為ServerSocket ,

套接字之間的連接程序分為三個步驟:服務器監聽,客戶端請求,連接確認,

服務器監聽:服務器端套接字并不定位具體的客戶端套接字,而是處于等待連接的狀態,實時監控網路狀態,等待客戶端的連接請求,

客戶端請求:指客戶端的套接字提出連接請求,要連接的目標是服務器端的套接字,為此,客戶端的套接字必須首先描述它要連接的服務器的套接字,指出服務器端套接字的地址和埠號,然后就向服務器端套接字提出連接請求,

連接確認:當服務器端套接字監聽到或者說接收到客戶端套接字的連接請求時,就回應客戶端套接字的請求,建立一個新的執行緒,把服務器端套接字的描述發給客戶端,一旦客戶端確認了此描述,雙方就正式建立連接,而服務器端套接字繼續處于監聽狀態,繼續接收其他客戶端套接字的連接請求,

3.3 SOCKET連接與TCP/IP連接
創建Socket連接時,可以指定使用的傳輸層協議,Socket可以支持不同的傳輸層協議(TCP或UDP),當使用TCP協議進行連接時,該Socket連接就是一個TCP連接,

socket則是對TCP/IP協議的封裝和應用(程式員層面上),也可以說,TPC/IP協議是傳輸層協議,主要解決資料 如何在網路中傳輸,而HTTP是應用層協議,主要解決如何包裝資料,關于TCP/IP和HTTP協議的關系,網路有一段比較容易理解的介紹:

“我們在傳輸資料時,可以只使用(傳輸層)TCP/IP協議,但是那樣的話,如果沒有應用層,便無法識別資料內容,如果想要使傳輸的資料有意義,則必須使用到應用層協議,應用層協議有很多,比如HTTP、FTP、TELNET等,也可以自己定義應用層協議,WEB使用HTTP協議作應用層協議,以封裝HTTP文本資訊,然后使用TCP/IP做傳輸層協議將它發到網路上,”

我們平時說的最多的socket是什么呢,實際上socket是對TCP/IP協議的封裝,Socket本身并不是協議,而是一個呼叫介面(API),通過Socket,我們才能使用TCP/IP協議,

實際上,Socket跟TCP/IP協議沒有必然的聯系,Socket編程介面在設計的時候,就希望也能適應其他的網路協議,所以說,Socket的出現只是使得程式員更方便地使用TCP/IP協議堆疊而已,是對TCP/IP協議的抽象,從而形成了我們知道的一些最基本的函式介面,比如create、 listen、connect、accept、send、read和write等等,網路有一段關于socket和TCP/IP協議關系的說法比較容易理解:

“TCP/IP只是一個協議堆疊,就像作業系統的運行機制一樣,必須要具體實作,同時還要提供對外的操作介面,這個就像作業系統會提供標準的編程介面,比如win32編程介面一樣,TCP/IP也要提供可供程式員做網路開發所用的介面,這就是Socket編程介面,”

實際上,傳輸層的TCP是基于網路層的IP協議的,而應用層的HTTP協議又是基于傳輸層的TCP協議的,而Socket本身不算是協議,就像上面所說,它只是提供了一個針對TCP或者UDP編程的介面,socket是對埠通信開發的工具,它要更底層一些.

3.4 Socket連接與HTTP連接
由于通常情況下Socket連接就是TCP連接,因此Socket連接一旦建立,通信雙方即可開始相互發送資料內容,直到雙方連接斷開,但在實際網路應用中,客戶端到服務器之間的通信往往需要穿越多個中間節點,例如路由器、網關、防火墻等,大部分防火墻默認會關閉長時間處于非活躍狀態的連接而導致 Socket 連接斷連,因此需要通過輪詢告訴網路,該連接處于活躍狀態,而HTTP連接使用的是“請求—回應”的方式,不僅在請求時需要先建立連接,而且需要客戶端向服務器發出請求后,服務器端才能回復資料,很多情況下,需要服務器端主動向客戶端推送資料,保持客戶端與服務器資料的實時與同步,此時若雙方建立的是Socket連接,服務器就可以直接將資料傳送給客戶端;若雙方建立的是HTTP連接,則服務器需要等到客戶端發送一次請求后才能將資料傳回給客戶端,因此,客戶端定時向服務器端發送連接請求,不僅可以保持在線,同時也是在“詢問”服務器是否有新的資料,如果有就將資料傳給客戶端,

4、HTTP協議

HTTP協議即超文本傳送協議(Hypertext Transfer Protocol ),是Web聯網的基礎,也是手機聯網常用的協議之一,HTTP協議是建立在TCP協議之上的一種應用,

HTTP連接最顯著的特點是客戶端發送的每次請求都需要服務器回送回應,在請求結束后,會主動釋放連接,從建立連接到關閉連接的程序稱為“一次連接”,

(1)在HTTP 1.0中,客戶端的每次請求都要求建立一次單獨的連接,在處理完本次請求后,就自動釋放連接,

(2)在HTTP 1.1中則可以在一次連接中處理多個請求,并且多個請求可以重疊進行,不需要等待一個請求結束后再發送下一個請求,

由于HTTP在每次請求結束后都會主動釋放連接,因此HTTP連接是一種“短連接”,要保持客戶端程式的在線狀態,需要不斷地向服務器發起連接請求,通常的做法是即時不需要獲得任何資料,客戶端也保持每隔一段固定的時間向服務器發送一次“保持連接”的請求,服務器在收到該請求后對客戶端進行回復,表明知道客戶端“在線”,若服務器長時間無法收到客戶端的請求,則認為客戶端“下線”,若客戶端長時間無法收到服務器的回復,則認為網路已經斷開,

4.1 http協議的請求
http協議的報文傳輸的是ASCII碼
請求主要分為三部分:請求行、請求頭、請求體

4.1.1 請求行
第一行,包含三個資訊:請求方式,url,http協議版本

GET 請求

GET /books/?sex=man&name=Professional HTTP/1.1  
Host: www.example.com
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.6) 
Gecko/20050225 Firefox/1.0.1  
Connection: Keep-Alive

POST 請求

 POST / HTTP/1.1
 Host: www.example.com
 User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.6)
 Gecko/20050225 Firefox/1.0.1
 Content-Type: application/x-www-form-urlencoded
 Content-Length: 40
 Connection: Keep-Alive

 sex=man&name=Professional 

4.1.2 post和get的區別
1、url可見性:
get,引數url可見;
post,url引數不可見
2、資料傳輸上:
get,通過拼接url進行傳遞引數;
post,通過body體傳輸引數
3、快取性:
get,請求是可以快取的
post,請求不可以快取
4、后退頁面的反應
get,請求頁面后退時,不產生影響
post,請求頁面后退時,會重新提交請求
5、傳輸資料的大小
get,一般傳輸資料大小不超過2k-4k(根據瀏覽器不同,限制不一樣,但相差不大)
post,請求傳輸資料的大小根據php.ini 組態檔設定,也可以無限大,
6、安全性
這個也是最不好分析的,原則上post肯定要比get安全,畢竟傳輸引數時url不可見,但也擋不住部分人閑的沒事在那抓包玩,安全性個人覺得是沒多大區別的,防君子不防小人就是這個道理,對傳遞的引數進行加密,其實都一樣,

4.1.3 post和get的本質區別:
GET產生一個TCP資料包;POST產生兩個TCP資料包,
對于GET方式的請求,瀏覽器會把http header和data一并發送出去,服務器回應200(回傳資料);
而對于POST,瀏覽器先發送header,服務器回應100 continue,瀏覽器再發送data,服務器回應200 ok(回傳資料),

4.1.4 請求頭
瀏覽器向服務器發送一些狀態資料,標識資料等等
一個資訊一行,包括資訊名:資訊值 按行分隔

User-Agent: firefox//表示發送請求的瀏覽器(請求代理端)是firefox
Host: shop.100.com//表示請求的主機域名(基于域名的虛擬主機就是靠這個頭判斷的)
Cookie:name=itcast//瀏覽器攜帶的cookie資料,
Content-Type: application/x-www-form-urlencoded
Content-Length: 40
Connection: Keep-Alive

注意,請求頭資訊,需要使用一個空行結束!

4.1.5 請求主體
請求代理端向服務器端,發送的請求資料!
典型的就是POST形式發送的表單資料!
get請求,沒有請求主體部分!get資料是在請求行中的url上進行傳遞的!

4.2 http協議的回應
回應包括:回應行、回應頭、回應體

HTTP/1.1 200 0K
Date: Tue,19 Nov 2013 03:08:55 GMT
Server: Apache/2. 2.22 (Win32) PHP/5.3. 13
X- -Powered -By: PHP/5. 3.13
Content-Length: 16
Content- Type: text/html

4.2.1 回應行
回應行包括:協議版本、狀態碼、狀態訊息

典型的:
1xx:訊息
2xx:成功
3xx:請求被重定向
4xx:瀏覽器端錯誤
5xx:服務器端錯誤

典型:
500 服務器內部錯誤
404 請求的頁面沒有找到
403 沒有權限
200 請求成功

4.2.2 回應頭
Content-Type: text/html 內容型別,告知瀏覽器接下來發送的回應主體資料是什么格式!
Content-Length: 回應主體資料的長度!
Date: 回應的時間,GMT時間!
4.2.3 回應主體
主要的回應資料,在瀏覽器的主體區域顯示的資料都是相應主體!
注意,每行,包括回應行和回應頭,都需要一個 \r\n結尾

5、HTTPS協議

http協議是明文傳輸的,因此很容易被截取和決議,泄漏個人資料,https協議是在http和tcp之間多添加了一層,進行身份驗證資料加密

5.1 密碼學基礎
(1)明文: 明文指的是未被加密過的原始資料,

(2)密文:明文被某種加密演算法加密之后,會變成密文,從而確保原始資料的安全,密文也可以被解密,得到原始的明文,

(3)密鑰:密鑰是一種引數,它是在明文轉換為密文或將密文轉換為明文的演算法中輸入的引數,密鑰分為對稱密鑰非對稱密鑰,分別應用在對稱加密和非對稱加密上,

(4)對稱加密:對稱加密又叫做私鑰加密,即資訊的發送方和接收方使用同一個密鑰去加密和解密資料,

對稱加密的特點是演算法公開、加密和解密速度快,適合于對大資料量進行加密,常見的對稱加密演算法有DES、3DES、TDEA、Blowfish、RC5和IDEA

其加密程序如下:明文 + 加密演算法 + 私鑰 => 密文
解密程序如下: 密文 + 解密演算法 + 私鑰 => 明文

對稱加密中用到的密鑰叫做私鑰,私鑰表示個人私有的密鑰,即該密鑰不能被泄露,

其加密程序中的私鑰與解密程序中用到的私鑰是同一個密鑰,這也是稱加密之所以稱之為“對稱”的原因,由于對稱加密的演算法是公開的,所以一旦私鑰被泄露,那么密文就很容易被破解,所以對稱加密的缺點是密鑰安全管理困難,

(5)非對稱加密:非對稱加密也叫做公鑰加密,非對稱加密與對稱加密相比,其安全性更好,對稱加密的通信雙方使用相同的密鑰,如果一方的密鑰遭泄露,那么整個通信就會被破解,而非對稱加密使用一對密鑰,即公鑰和私鑰,且二者成對出現,私鑰被自己保存,不能對外泄露,公鑰指的是公共的密鑰,任何人都可以獲得該密鑰,用公鑰或私鑰中的任何一個進行加密,用另一個進行解密,

被公鑰加密過的密文只能被私鑰解密,程序如下:
明文 + 加密演算法 + 公鑰 => 密文, 密文 + 解密演算法 + 私鑰 => 明文
被私鑰加密過的密文只能被公鑰解密,程序如下:
明文 + 加密演算法 + 私鑰 => 密文, 密文 + 解密演算法 + 公鑰 => 明文

由于加密和解密使用了兩個不同的密鑰,這就是非對稱加密“非對稱”的原因,
非對稱加密的缺點是加密和解密花費時間長、速度慢,只適合對少量資料進行加密,
在非對稱加密中使用的主要演算法有:RSA、Elgamal、Rabin、D-H、ECC(橢圓曲線加密演算法)等

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

標籤:其他

上一篇:Linux——華為云服務器重新掛載云硬碟,資料轉移心得記錄【建議收藏】

下一篇:如何用本地構建的nuget包進行除錯?

標籤雲
其他(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