主頁 > 後端開發 > 計算機網路學習筆記:第二章

計算機網路學習筆記:第二章

2020-11-13 07:53:58 後端開發

計算機網路學習筆記:第二章

學習書籍:《計算機網路:自頂向下方法》


文章目錄

  • 計算機網路學習筆記:第二章
  • 前言
  • 2.1、應用層協議原理
    • 2.1.1 網路應用程式體系結構
    • 2.1.2 行程通信
    • 2.1.3 可供應用程式使用的運輸服務
    • 2.1.4 因特網提供的傳輸層服務
    • 2.1.5 應用層協議
    • 2.1.6 本書涉及的網路應用
  • 2.2 Web和HTTP
    • 2.2.1 HTTP概述
    • 2.2.2 持續連接和非持續連接
    • 2.2.3 HTTP報文格式
    • 2.2.4 用戶與服務器的互動:Cookie
    • 2.2.5 Web快取
    • 2.2.6 條件GET方法


前言

本章介紹有關網路應用的原理和實作方法;定義關鍵的應用層概念,包括程式所需要的網路服務客戶和服務器行程和運輸層介面;詳細考察幾種網路應用程式,包括WEB、電子郵件、DNS、對等檔案分發和視頻流;并設計開發運行在TCP和UDP上的網路應用程式;

2.1、應用層協議原理

研發網路應用的核心是寫出能夠運行在不同端系統通過網路彼此通信的程式;值得注意的是,我們不需要寫在網路核心設備如路由器或者鏈路層交換機上運行的軟體,這種設計方式(將應用程式限制在端系統的方法),促進了大量網路應用程式的迅速研發和部署;

2.1.1 網路應用程式體系結構

應用程式的體系結構不同于網路的體系結構,從應用程式研發者的角度來看,網路體系結構是固定的,并為應用程式提供特定的服務集合;換言之,應用程式體系結構使用應用程式開發設計的,它規定了在端系統上如何組織應用程式,兩種常見的現代網路應用程式所采用的體系結構為:客戶-服務器體系結構和對等體系結構

客戶-服務器體系結構

在該體系結構中,有一個總是打開的主機,即服務器,它接收和服務來自其他許多被稱為客戶的主機請求;值得注意的是,在該體系結構中,客戶之間是不直接通信的該服務器具有固定的、周知的地址

客戶-服務器體系結構的著名應用有:Web、FTP、Telnet和電子郵件

通常,如果僅有一臺服務器處理所有的請求,那么服務器系統將很快變得不堪重負,為此,配備大量主機的資料中心常被用于創建強大的虛擬的服務器,一個資料中心可以有數十萬臺服務器,它們需要供電和維護,同時服務提供商還需要支付不斷出現的互聯和帶寬費用,以及發送和接收到達/來自資料中心的資料;

P2P體系結構

在P2P體系結構中,對位于資料中心的專用服務器有著最小或者沒有依賴,應用程式在間斷連接的主機對之間使用直接通信,這些主機被稱為對等方,對等方并不為服務提供商所擁有,因為這種對等方通信不需要通過專門的服務器,所以該體系結構也被稱為對等方到對等方結構;

目前,流量密集型應用都是P2P體系結構的,這些應用包括檔案共享(例如BitTorrent)、協助下載(例如迅雷)、因特網電話(例如Skype)和 IPTV(例如迅雷看看),

值得注意的是,某些應用具有混合的體系結構,它們結合了客戶-服務器和P2P這兩種體系結果,比如許多的即時通訊工具,服務器用來跟蹤用戶IP地址,但是用戶之間的通信則使用直接發送

P2P體系結構最引人入勝的特性之一就是它們的自擴展性,比如在檔案共享應用中,對等方可能通過向檔案的原始擁有者發出請求而產生作業量,但是對等方也有可能通過為其他對等方傳送檔案而為原始擁有者分擔壓力;P2P體系結構也是成本有效的,因為他通常不需要龐大的服務器基礎設施和服務帶寬,

P2P面臨以下三個問題:

  1. ISP友好,大多數住宅ISP受制于非對稱帶寬應用,也就是下載比上傳要多得多,但是P2P視頻和檔案分發應用改變了從服務器到住宅ISP的上載流量,因而給ISP帶來壓力;
  2. 安全性,因為其高度的分布和開放式,P2P應用也可能給安全帶來挑戰;
  3. 激勵,如何說服用戶資源向應用提供帶寬、存盤和計算資源?這是一個問題;

2.1.2 行程通信

在作業系統中,實際進行通信的是行程而不是應用程式;當行程運行在同一個端系統上時,它們使用行程間通信機制相互通信;而行程間通信的規則是由端系統上的作業系統確定的,當行程運行在不同的端系統上時,它們通過跨越計算機網路的報文相互通信;發送行程產生報文并且向網路中發送,接收行程接收報文并對此作出回應(不回應也是一種回應);

客戶與服務器行程

網路應用程式由成對的行程組成,這些行程通過網路互相發送報文,對于每對通信行程,我們通常將這兩個行程之一標識為客戶,而另一個行程標識為服務器
需要注意的是,在某些P2P應用中,一個行程可能既是客戶也是服務器,因為在一個檔案共享應用中,一個行程的確既能請求檔案也能發送檔案,所以從行程所扮演的角色來區分是客戶行程還是服務器行程不夠精確,所以我們從發起通信的順序來定義它們:在給定的一對行程之間,首先發起通信的行程被標記為客戶行程,在會話開始時等待聯系的行程被稱為服務器行程,

行程與計算機網路之間的介面

多數應用程式是由通信行程對組成的,運行在不同端系統上的行程對之間通過計算機網路來實作通信,所以,在應用程式行程和計算機網路之間存在一個介面,該介面被稱為套接字,更為準確的說,套接字是同一臺主機內應用層和運輸層之間的介面,由于該套接字是建立網路應用程式的可編程介面,因此套接字也被稱為應用程式和網路之間的應用編程介面(Application Programming Interface, API .

應用程式開發者可以控制套接字在應用層的一切內容,但是對于運輸層的相關部分幾乎沒有控制權,可以做的只有:

  1. 選擇傳輸層協議;
  2. 設定幾個傳輸層引數,比如最大快取和最長傳輸層報文長度;

行程尋址

為了向特定目的行程發送報文,發送機行程需要知道接收行程(更為準確的說是,接收行程對應的套接字)的標記,該標記由兩部分組成:接收行程所在的主機地址在目的主機中指定接收行程的識別符號;在因特網中,主機由IP地址標記,其中IP地址是一個32位(IPV4)標記;而接收行程(或者說是接收套接字)使用埠號標記;一些常用的應用程式有著固定的埠號,比如Web服務器使用80埠、郵件服務器(運行SMTP協議)使用25埠等;

2.1.3 可供應用程式使用的運輸服務

傳輸層協議的特點大致可以從以下這四個方面考量:可靠資料傳輸吞吐量定時安全性

可靠資料傳輸

如同在第一章中介紹的,分組在傳輸程序中可能會丟失,比如,分組因為路由器中的快取溢位而被丟棄或者分組在傳輸的程序中發生了損壞等情況;有些應用是不允許資料發生丟失的,比如電子郵件檔案傳輸遠程主機訪問Web檔案傳輸以及金融應用等,為了支持這些應用,必須做一些作業以確保應用程式一段發送的資料正確完全地交付給接收資料的行程,如果一個協議提供了這樣得確保資料交付的服務,就認為該協提供了可靠資料傳輸,當應用程式使用可靠資料傳輸的傳輸層協議時,只要將要發送的資料傳輸進套接字就可以完全相信該資料可以完整無差錯地到達接收方;

當一個運輸層協議不提供可靠資料傳輸時,由發送方發送的資料就可能不能夠到達接收行程,這可能被丟失允許的應用所接受,這類應用常見的有:交談式音頻和視頻,它們能夠承擔丟失一定量的資料損失,在這些應用中,如果丟失少量資料將出現小干擾,但是不會出現致命的損傷,這些應用為容忍丟失的應用,

吞吐量

在一條網路路徑上的兩個行程之間的通信會話中,可用吞吐量就是指能夠向接收行程交付位元的速率,因為會有其他會話共享該網路的路徑的帶寬,并且因為這些會話的到來和離開,可用吞吐量將發生變化;這就導致另一種自然的服務,即運輸層協議能夠提供確切的可用吞吐量,使用這種服務時,應用程式就能以明確的速度接收資料,并且運輸層應當保證可用吞吐量必須總是至少為該速度;

對吞吐量有明確要求的應用程式被稱為帶寬敏感的應用,許多多媒體應用是帶寬敏感的,比如因特網電話,而彈性應用則對吞吐量沒有嚴格的要求,這類應用包括:電子郵件、檔案傳輸以及web傳送等,值得注意的是,吞吐量當然是越多越好了;

定時

定時和吞吐量都是關于速度的,一個提供定時服務的例子是:發送方注入套接字中的每個位元到達接收方的套接字不遲于100ms,也就是說,定時是對資料從發送到到達所需時間的要求,而吞吐量是對資料交付速度的要求,有些應用為了服務的有效性而對資料到達時間有嚴格的要求,常見的應用有:因特網電話多方在線游戲等;

安全性

運輸層可以提供一些安全服務,以防止傳輸的資料以某種方式在這兩個行程之間被察覺到,這些安全服務包括:數據的加解密資料的完整性端點鑒別等;

2.1.4 因特網提供的傳輸層服務

因特網(更一般的是TCP/IP網路)為應用程式提供連個運輸層協議,即UDPTCP,每個協議對應用程式提供了不同服務的組合,以下為常見的因特網應用的特點:

應用資料丟失帶寬時間敏感
檔案傳輸不能丟失彈性
電子郵件不能丟失彈性
Web檔案不能丟失彈性(幾kbs)
因特網電話/視頻會議容忍丟失音頻(幾kbs~1Mbps) / 視頻(10kbps~5Mbps)是,100ms
流存式存盤音頻/視頻容忍丟失同上是, 幾秒
互動式游戲容忍丟失幾kbs~10kbps是,100ms
智能手機訊息不能丟失彈性是和不是

TCP服務
TCP服務模型包括了面向連接的服務可靠資料傳輸服務

面向連接的服務:在應用層資料報文開始流動之前,TCP會在客戶端和服務器端相互交換傳輸層控制資訊,這個握手程序將提示客戶端和服務器端,讓它們為即將到來的大量分組做好準備;握手階段接收后將建立一個TCP連接,這條鏈接是全雙工的,即連接雙方使用該條鏈接可以同時進行報文的收發,這條連接將在通訊結束后拆除
可靠的資料傳輸:應用程式使用TCP協議可實作無差錯按適當順序交付所有發送的資料沒有位元組的丟失和冗余

TCP服務還提供了擁塞控制機制該機制不一定會給通行雙方帶來好處,但是會給網路帶來整體好處;當發送方和接收方之間的網路出現擁塞時,TCP將使用擁塞控制機制來使網路恢復正常 ;

UDP服務

UDP服務是一種不提供不必要服務的輕量級運輸協議,它僅提供最小服務,UDP是無連接的也就是說通信之前沒有握手;UDP不提供資料的可靠傳輸;UDP也沒有擁塞控制機制,所以UDP的發送端可以用它選定的任何速率向其下層(網路層)注入資料,有些應用場景下,UDP協議將帶來更多的便利和效率,比如DNS和一些因特網電話服務(為了避免擁塞控制協議的控制而使用UDP);

傳輸層無法提供的服務

從可靠資料傳輸、吞吐量、定時、安全性等四個角度來看運輸層提供的服務,我們發現,運輸層無法對吞吐量和定時做出保證(因為因特網已經被設計成盡可能最大可能對付這種保證的缺乏),總之,今天的因特網能夠為時間敏感的應用提供滿意的服務,盡管它并不提供任何定時或者帶寬保證;

流行的因特網應用及其應用層協議和支撐的運輸協議

應用應用層協議支撐的運輸協議
電子郵件SMTP [RFC 5321]TCP
遠程終端訪問Telnet [RFC 854]TCP
WebHTTP [RFC 2616]TCP
檔案傳輸FTP [RFC 959]TCP
流式多媒體HTTP (如YouTube)TCP
因特網電話SIP [RFC 3261]、RTP [RFC 3550]UDP或TCP

電子郵件、遠程終端訪問、Web、檔案傳輸都使用了TCP(TCP提供了可靠資料傳輸服務,確保所有資料最終到達目的地);而因特網電話應用通常能忍受某些丟失但要求一定的最小速率才能有效作業,故通常使用UDP(有些防火墻被配置成阻擋UDP流量,則使用TCP作為備份)以避開TCP的擁塞控制機制和分組開銷;

2.1.5 應用層協議

應用層協議定義運行在不同端系統上的應用程式行程如何相互傳遞資訊,涉及的內容包括:交換的報文型別(請求或者回應)、報文中包含哪些欄位欄位如何被解釋一個行程何時收發報文并如何對報文進行回應等內容‘
區分網路應用和應用層協議很重要,應用層協議只是網路應用的一部分;(例如對于一個Web應用,包括檔案格式標準HTML、Web瀏覽器、WEb服務器,以及一個應用層協議HTTP;)

2.1.6 本書涉及的網路應用

即將介紹的應用包括:Web檔案傳輸電子郵件目錄服務流式視頻和P2P,Web部分將介紹HTTP協議,它比較簡單和易于理解;FTP則和HTTP形成了對照;電子郵件是比Web更為復雜的應用,因為它使用了多個應用層協議;大多數用戶不會直接和DNS接觸,但是DNS很好地說明了一種核心的網路功能是如何在應用層實作的;最后便是P2P應用的簡單介紹了;

2.2 Web和HTTP

對于大多數用戶來說,最具吸引力的就是Web的按需操作

2.2.1 HTTP概述

HTTP(HyperText Transfer Protocol)是Web的應用層協議,它是Web的核心;HTTP有兩部分實作,一個客戶端程式和一個服務器程式;HTTP定義了客戶和服務器進行報文交換的方法

Web頁面(也叫檔案)是由物件組成的,一個物件是一個檔案,它們通過一個URL地址進行尋址,客戶和服務器互動的核心思想是客戶通過HTTP請求對服務器發出對Web頁面的請求報文,服務器收到該報文后將回傳包含該物件的HTTP回應報文,URL地址由兩部分組成:存放物件的服務器主機名和物件的路徑名

HTTP使用TCP作為它的傳輸層協議;HTTP客戶首先發起一個與服務器的TCP連接,需要注意的是,服務器根據請求作出回應,但是不存盤任何關于該客戶的狀態資訊;也正因為這樣,HTTP被稱為無狀態協議,同時,Web使用了客戶端-服務器的應用體系結構;其中web服務器總是開著的;

2.2.2 持續連接和非持續連接

在因特網應用程式中,客戶端和服務器將在很長的時間范圍里通信;應用程式將根據自身的特點,選擇以規則的間隔周期性性發出請求也可以間斷性一個個發出請求,當通信是使用TCP協議時,服務器端需要做出一個決定:這些請求是使用一個TCP連接完成還是通過獨立的TCP連接完成,前者稱應用程式使用持續連接,后者則稱為非持續連接

HTTP既可使用持續連接也可以使用非持續連接,盡管HTTP在靜默情況下使用持續連接;

采用非持續連接的HTTP

使用非持續連接時,每個TCP連接在服務器發送一個物件后就會關閉,也就是每個TCP只傳送一個請求報文和回應報文

為了描述持續連接和非持續連接的特點,我們引入往返時間(Round-Trip Time, RTT),RTT指的是,一個短分組從客戶端到服務器,然后再回傳客戶端所用的時間,RTT包括分組的傳播時延排隊時延處理時延(因為是短分組,所以其傳輸時延可不計);因為客戶端和服務器建立TCP連接的時候,會通過一個三次握手的程序來交換傳輸控制資訊,三次握手的前兩次占用了一個RTT,客戶結合第三次握手通行會通過該連接發送一個HTTP請求報文,一旦該分組到達服務器,服務器便開始使用TCP傳輸HTML物件,因此,粗略地說,回應時間是兩個RTT加上傳輸HTML的時間(不是傳播),
在這里插入圖片描述

采用持續連接的HTTP

勺ò干見非持續連接的一些缺點:第一,必須為每個請求新建一個TCP連接,而每個TCP連接將占用系統資源,包括緩沖區和變數等,這樣服務器的負擔就很重了;第二,一個物件將通過兩個RTT的時延才能交付;

如果使用持續連接,那么服務器在發送回應報文后將保持該TCP打開,后續客戶端可以使用該連接來向服務器發出請求,不但一個完整的頁面可以通過同一個連接傳送,同一臺服務器上的多個頁面也可以通過同一個連接發送,這就提高了效率
一般來說,如果一條連接在一定的時間間隔后沒被使用的話,就會被關閉,HTTP默認使用的是帶流水線的持續連接

2.2.3 HTTP報文格式

HTTP報文有兩種:請求報文和回應報文;

HTTP請求報文

GET /somedir/page.html HTTP/1.1
Host: www.someschool.edu
Connection: close
User-agent: Mosilla/5.0
Accept-language: fr

一個請求報文具有至少一行的內容,請求報文的第一行稱為請求行,其后繼的各行被稱為首部行,請求行包含三個內容:方法欄位URL欄位HTTP版本;其中方法欄位可為:GET、POST、PUT、DELETE、HEAD等,URL欄位里可以傳遞請求物件的標志;

首部行包含是否在發送完回應報文后關閉TCP連接的Connection;請求的主機地址(該頭部資訊被Web高速快取所要求);瀏覽器版本;可接受的語言等頭部資訊;

在首部行之后一個空行,之后便是請求的“物體體”,使用GET方法時物體體為空,使用POST方法的時候才用該物體體;該物體體可以在POST方法里傳遞Form表單內容或者傳遞其它一些二進制流資料等,值得注意的是,表單也不一定必須使用POST方法,如果使用GET圖,物體體為空,會顯示在URL中;

HEAD類似于GET方法,將會用一個HTTP報文進行回應,但是不回傳請求物件,經常用作除錯跟蹤,PUT方法常與Web發行工具聯合使用,允許用戶上傳物件到指定的Web服務器上指定的路徑,DELETE方法允許用戶或應用程式洗掉Web服務器上的物件,

在這里插入圖片描述
HTTP回應報文

HTTP/1.1 200 OK
Connection: close
Date: True, 18 Aug 2015 15:44:04 GMT
Server: Apache/2.2.3 (CentOS) // 類似于請求報文的User-agent
Last-Modified: True, 18 Aug 2015 15:11:03 GMT 
Content-Length: 6821
Content-Type: text/html
(data data data data data ...)

回應報文總體上也分三個部分,第一部分是狀態行,包含HTTP版本、狀態以及狀態資訊等內容;第二部分是首部行,包含發送日期、服務器型別、上一次修改請求資源的時間、內容的型別等內容,第三部分是物體體,物體體包含請求物件本身,

這里的Date是從檔案系統中檢索到該物件,插入到回應報文,并發送該回應報文的時間,Last-Modified則是物件創建或者最后修改的日期和時間;

在這里插入圖片描述

常見狀態碼

200 OK:請求成功,處理方式:資訊在回傳的回應報文中;
301 Moved Permanently:請求的物件被永久轉移了,首部行中;處理方式:重定向到分配的URL;
400 Bad Request:非法請求,處理方式:丟棄;
404 Not Found:沒有找到,處理方式:丟棄;
505 HTTP Version Not Supported:服務器不支持請求報文使用的HTTP版本;

2.2.4 用戶與服務器的互動:Cookie

前面提到,HTTP是無狀態協議,但是Web站點為了識別用戶身份或者限制用戶訪問的時間或者將用戶訪問的內容同用戶身份相關聯,Web站點可以使用Cookie技術;

Cookie技術包含4個組件:

  1. HTTP回應報文里增加一個關于Cookie的首部行;
  2. HTTP請求報文里增加一個關于Cookie的首部行;
  3. 用戶端系統保留一個Cookie檔案,由瀏覽器保存維護;
  4. Web站點建立Cookie和用戶身份的關聯;

雖然,Cookie的使用方便了用戶也方便了服務端,但是它的使用存在爭議,因為使用Cookie被認為是對用戶隱私的一種侵犯,因為Web站點可以通過Cookie得到很多用戶的資訊,并有可能將這部分資訊賣給第三方等;

在這里插入圖片描述

2.2.5 Web快取

Web快取器也被稱為代理服務器,它代表初始web服務器來滿足HTTP請求,它有自己的存盤空間,并在存盤空間里保持有最近請求過的物件的副本;可以通過配置瀏覽器,將所有指向初始服務器的請求首先指向代理服務器,

當代理服務器收到一個HTTP請求后,它將檢查本地是否快取過該物件,如果快取過該物件,將檢查是否過期,如果沒有過期,則直接將該物件回傳給瀏覽器;如果本地不存在或者存在已過期,則代理服務器將根據請求報文里的Host首部行以及請求行里的URL欄位向初始服務器發出請求,然后將回應物件回傳給瀏覽器并快取在本地,

通常,代理服務器與客戶端的通信速度要快于初始服務器與客戶端的連接速度;因特網部署Web快取器有兩個原因:1)Web代理服務器可以大起大減少對客戶請求的回應時間;2)快取器能從整體上大大降低因特網上的Web流量,從而有助于提高所有應用程式的性能;

通過使用內容分發網路(Content Distribution Network, CDN),Web快取器正在因特網中發揮越來越重要的作用;

Web快取即是客戶又是服務器;

2.2.6 條件GET方法

高速快取器的使用,帶來很多好處,但是有一個問題:存放在快取器傷的物件副本可能是舊的,即保存在服務器中的物件自該副本快取在客戶上以后可能被修改了;

其實HTTP提供了一種機制,允許快取器證實其使用的物件是最新的,這種機制就是條件GET方法,使用條件GET方法只需在使用GET方法的時候,增加一個If-Modified-Since:首部行,其對應的內容是一個時間,如果所請求的資源在指定日期后被修改了,那么服務器將回傳新的物件,否則服務器將回傳一個包含空物體體的報文,這樣代理服務器就可以確認快取是否過期了,

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

標籤:java

上一篇:演算法太TM重要了!7天內刷完這些題我拿到了位元組跳動offer

下一篇:月薪50K程式員傾心推薦,Linux C/C++ 學習這些就夠了

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

熱門瀏覽
  • 【C++】Microsoft C++、C 和匯編程式檔案

    ......

    uj5u.com 2020-09-10 00:57:23 more
  • 例外宣告

    相比于斷言適用于排除邏輯上不可能存在的狀態,例外通常是用于邏輯上可能發生的錯誤。 例外宣告 Item 1:當函式不可能拋出例外或不能接受拋出例外時,使用noexcept 理由 如果不打算拋出例外的話,程式就會認為無法處理這種錯誤,并且應當盡早終止,如此可以有效地阻止例外的傳播與擴散。 示例 //不可 ......

    uj5u.com 2020-09-10 00:57:27 more
  • Codeforces 1400E Clear the Multiset(貪心 + 分治)

    鏈接:https://codeforces.com/problemset/problem/1400/E 來源:Codeforces 思路:給你一個陣列,現在你可以進行兩種操作,操作1:將一段沒有 0 的區間進行減一的操作,操作2:將 i 位置上的元素歸零。最終問:將這個陣列的全部元素歸零后操作的最少 ......

    uj5u.com 2020-09-10 00:57:30 more
  • UVA11610 【Reverse Prime】

    本人看到此題沒有翻譯,就附帶了一個自己的翻譯版本 思考 這一題,它的第一個要求是找出所有 $7$ 位反向質數及其質因數的個數。 我們應該需要質數篩篩選1~$10^{7}$的所有數,這里就不慢慢介紹了。但是,重讀題,我們突然發現反向質數都是 $7$ 位,而將它反過來后的數字卻是 $6$ 位數,這就說明 ......

    uj5u.com 2020-09-10 00:57:36 more
  • 統計區間素數數量

    1 #pragma GCC optimize(2) 2 #include <bits/stdc++.h> 3 using namespace std; 4 bool isprime[1000000010]; 5 vector<int> prime; 6 inline int getlist(int ......

    uj5u.com 2020-09-10 00:57:47 more
  • C/C++編程筆記:C++中的 const 變數詳解,教你正確認識const用法

    1、C中的const 1、區域const變數存放在堆疊區中,會分配記憶體(也就是說可以通過地址間接修改變數的值)。測驗代碼如下: 運行結果: 2、全域const變數存放在只讀資料段(不能通過地址修改,會發生寫入錯誤), 默認為外部聯編,可以給其他源檔案使用(需要用extern關鍵字修飾) 運行結果: ......

    uj5u.com 2020-09-10 00:58:04 more
  • 【C++犯錯記錄】VS2019 MFC添加資源不懂如何修改資源宏ID

    1. 首先在資源視圖中,添加資源 2. 點擊新添加的資源,復制自動生成的ID 3. 在解決方案資源管理器中找到Resource.h檔案,編輯,使用整個專案搜索和替換的方式快速替換 宏宣告 4. Ctrl+Shift+F 全域搜索,點擊查找全部,然后逐個替換 5. 為什么使用搜索替換而不使用屬性視窗直 ......

    uj5u.com 2020-09-10 00:59:11 more
  • 【C++犯錯記錄】VS2019 MFC不懂的批量添加資源

    1. 打開資源頭檔案Resource.h,在其中預先定義好宏 ID(不清楚其實ID值應該設定多少,可以先新建一個相同的資源項,再在這個資源的ID值的基礎上遞增即可) 2. 在資源視圖中選中專案資源,按F7編輯資源檔案,按 ID 型別 相對路徑的形式添加 資源。(別忘了先把檔案拷貝到專案中的res檔案 ......

    uj5u.com 2020-09-10 01:00:19 more
  • C/C++編程筆記:關于C++的參考型別,專供新手入門使用

    今天要講的是C++中我最喜歡的一個用法——參考,也叫別名。 參考就是給一個變數名取一個變數名,方便我們間接地使用這個變數。我們可以給一個變數創建N個參考,這N + 1個變數共享了同一塊記憶體區域。(參考型別的變數會占用記憶體空間,占用的記憶體空間的大小和指標型別的大小是相同的。雖然參考是一個物件的別名,但 ......

    uj5u.com 2020-09-10 01:00:22 more
  • 【C/C++編程筆記】從頭開始學習C ++:初學者完整指南

    眾所周知,C ++的學習曲線陡峭,但是花時間學習這種語言將為您的職業帶來奇跡,并使您與其他開發人員區分開。您會更輕松地學習新語言,形成真正的解決問題的技能,并在編程的基礎上打下堅實的基礎。 C ++將幫助您養成良好的編程習慣(即清晰一致的編碼風格,在撰寫代碼時注釋代碼,并限制類內部的可見性),并且由 ......

    uj5u.com 2020-09-10 01:00:41 more
最新发布
  • Rust中的智能指標:Box<T> Rc<T> Arc<T> Cell<T> RefCell<T> Weak

    Rust中的智能指標是什么 智能指標(smart pointers)是一類資料結構,是擁有資料所有權和額外功能的指標。是指標的進一步發展 指標(pointer)是一個包含記憶體地址的變數的通用概念。這個地址參考,或 ” 指向”(points at)一些其 他資料 。參考以 & 符號為標志并借用了他們所 ......

    uj5u.com 2023-04-20 07:24:10 more
  • Java的值傳遞和參考傳遞

    值傳遞不會改變本身,參考傳遞(如果傳遞的值需要實體化到堆里)如果發生修改了會改變本身。 1.基本資料型別都是值傳遞 package com.example.basic; public class Test { public static void main(String[] args) { int ......

    uj5u.com 2023-04-20 07:24:04 more
  • [2]SpinalHDL教程——Scala簡單入門

    第一個 Scala 程式 shell里面輸入 $ scala scala> 1 + 1 res0: Int = 2 scala> println("Hello World!") Hello World! 檔案形式 object HelloWorld { /* 這是我的第一個 Scala 程式 * 以 ......

    uj5u.com 2023-04-20 07:23:58 more
  • 理解函式指標和回呼函式

    理解 函式指標 指向函式的指標。比如: 理解函式指標的偽代碼 void (*p)(int type, char *data); // 定義一個函式指標p void func(int type, char *data); // 宣告一個函式func p = func; // 將指標p指向函式func ......

    uj5u.com 2023-04-20 07:23:52 more
  • Django筆記二十五之資料庫函式之日期函式

    本文首發于公眾號:Hunter后端 原文鏈接:Django筆記二十五之資料庫函式之日期函式 日期函式主要介紹兩個大類,Extract() 和 Trunc() Extract() 函式作用是提取日期,比如我們可以提取一個日期欄位的年份,月份,日等資料 Trunc() 的作用則是截取,比如 2022-0 ......

    uj5u.com 2023-04-20 07:23:45 more
  • 一天吃透JVM面試八股文

    什么是JVM? JVM,全稱Java Virtual Machine(Java虛擬機),是通過在實際的計算機上仿真模擬各種計算機功能來實作的。由一套位元組碼指令集、一組暫存器、一個堆疊、一個垃圾回收堆和一個存盤方法域等組成。JVM屏蔽了與作業系統平臺相關的資訊,使得Java程式只需要生成在Java虛擬機 ......

    uj5u.com 2023-04-20 07:23:31 more
  • 使用Java接入小程式訂閱訊息!

    更新完微信服務號的模板訊息之后,我又趕緊把微信小程式的訂閱訊息給實作了!之前我一直以為微信小程式也是要企業才能申請,沒想到小程式個人就能申請。 訊息推送平臺🔥推送下發【郵件】【短信】【微信服務號】【微信小程式】【企業微信】【釘釘】等訊息型別。 https://gitee.com/zhongfuch ......

    uj5u.com 2023-04-20 07:22:59 more
  • java -- 緩沖流、轉換流、序列化流

    緩沖流 緩沖流, 也叫高效流, 按照資料型別分類: 位元組緩沖流:BufferedInputStream,BufferedOutputStream 字符緩沖流:BufferedReader,BufferedWriter 緩沖流的基本原理,是在創建流物件時,會創建一個內置的默認大小的緩沖區陣列,通過緩沖 ......

    uj5u.com 2023-04-20 07:22:49 more
  • Java-SpringBoot-Range請求頭設定實作視頻分段傳輸

    老實說,人太懶了,現在基本都不喜歡寫筆記了,但是網上有關Range請求頭的文章都太水了 下面是抄的一段StackOverflow的代碼...自己大修改過的,寫的注釋挺全的,應該直接看得懂,就不解釋了 寫的不好...只是希望能給視頻網站開發的新手一點點幫助吧. 業務場景:視頻分段傳輸、視頻多段傳輸(理 ......

    uj5u.com 2023-04-20 07:22:42 more
  • Windows 10開發教程_編程入門自學教程_菜鳥教程-免費教程分享

    教程簡介 Windows 10開發入門教程 - 從簡單的步驟了解Windows 10開發,從基本到高級概念,包括簡介,UWP,第一個應用程式,商店,XAML控制元件,資料系結,XAML性能,自適應設計,自適應UI,自適應代碼,檔案管理,SQLite資料庫,應用程式到應用程式通信,應用程式本地化,應用程式 ......

    uj5u.com 2023-04-20 07:22:35 more