主頁 > 後端開發 > 01_網路編程基礎理論

01_網路編程基礎理論

2020-09-15 06:02:15 後端開發

1.OSI七層模型: 將功能分開,降低網路傳輸中的耦合度,每一部分完成自己的功能,開發更加清晰

1.應用層(Application): 提供用戶服務,具體內容有特定程式規定

        網路服務與最終用戶的一個介面

        協議有: HTTP FTP TFTP SMTP SNMP DNS

2.表示層(Presentation Layer): 提供資料的壓縮解壓縮和加密等

        資料的表示,安全,壓縮

        格式有,JPEG,ASCll,DECOIC,加密格式等

3.會話層(Session Layer): 建立程式的連接,決定使用什么樣的傳輸服務

        建立,管理,終止會話

        對應主機行程,指本地主機與遠程主機正在進行的會話

4.傳輸層(Transport): 提供合適的通信服務,流量控制

        基于埠(port)

        傳輸層由來: IP地址幫我們區分子網,mac地址幫我們找到主機,但卻需要一個埠定位具體應用程式,埠即為應用程式與網卡的編號

        傳輸層功能: 建立埠到埠通信,范圍:0-65535,0-1023為系統占用埠

        TCP協議: 面向連接可靠的資料傳輸,沒有長度限制但不超過IP包長度,在IP包頭中用2個位元組描述報文長度,2個位元組所能表達的最大數字就是65535
            可靠傳輸: 無失序,無差錯,無丟失,無重復
            應用情況: 適用于傳輸內容較大,網路情況好,需要提供準確傳輸的情況,如聊天資訊,檔案傳輸,郵件
            TCP的三次握手與四次揮手流程圖: https://www.processon.com/view/link/5ef9200d7d9c0844203a1449

            三次握手
                1.客戶端向服務器發起連接請求(問是否可以連接)
                2.服務器接收到請求后進行確認(允許連接)回傳報文
                3.客戶端收到許可,建立連接

            四次揮手
                1.主動方發送報文告知被動方要斷開連接
                2.被動方回傳報文,告知受到請求,準備斷開
                3.被動方發送報文給主動方告知準備就緒可以斷開
                4.主動方發送報文確定斷開

            連接
                TCP在真正的讀寫操作之前,server與client之間必須建立一個連接
                當讀寫操作完成后,雙方不再需要這個連接時它們可以釋放這個連接
                短連接和長連接流程圖: https://www.processon.com/view/link/5efca678e401fd1fd2bbe605

            長連接
                1.client 向 server 發起連接
                2.server 接到請求,雙方建立連接
                3.client 向 server 發送訊息
                4.server 回應 client
                5.一次讀寫完成,連接不關閉
                6.后續讀寫操作...
                7.長時間操作之后client發起關閉請求

            短連接
                1.client 向 server 發起連接請求
                2.server 接到請求,雙方建立連接
                3.client 向 server 發送訊息
                4.server 回應 client
                5.一次讀寫完成,此時雙方任何一個都可以發起 close 操作

            TCP長/短連接的優缺點
                長連接可以省去較多的TCP建立和關閉的操作,減少浪費,節約時間,對于頻繁請求資源的客戶來說,較適用長連接
                長連接多用于操作頻繁,點對點的通訊,而且連接數不能太多情況,如資料庫的連接用長連接
                短連接對于服務器來說管理較為簡單,存在的連接都是有用的連接,不需要額外的控制手段
                短連接下客戶請求頻繁,將在TCP的建立和關閉操作上浪費時間和帶寬
                并發量大,但每個用戶無需頻繁操作情況下需用短連好,如WEB網站

        UDP協議: 面向無連接的服務 不可靠的資料傳輸,報頭8位元組,總長不超過65535位元組,剛好放進一個IP包
            發送時由發送端自主進行,不考慮接收端
            適用情況: 網路較差,對傳輸準確性要求低,廣播組播
            比如: 視頻會議, 廣播資料

        物理設備: 四層交換機,四層路由器

5.網路層(Network): 路由選擇,網路互聯,分組傳輸

        基于IP地址(IPv4, IPv6)

        網路層由來: 世界大網路由是由一個個小的彼此隔離的局域網組成,以太網包只能在一個局域網內發送
            一個局域網是一個廣播域,以太網的廣播只能在一個廣播域內發送,跨廣播域發送只能由路由轉發

        網路層功能: 規定網路地址的協議即IP協議,廣泛采用的v4版本即ipv4,幫我們區分子網

        IP協議: 網路地址由32位2進制表示,范圍: 0.0.0.0-255.255.255.255

        Windows用cmd查詢網卡命令: ipconfig

        Linux終端中查詢網卡命令: ifconfig

        拼命令(ICMP協議): ping 域名/網址

        物理設備: 路由器(有對外身份:外網IP),三層交換機

        路由器和交換機的區別
            交換機的主要功能: 組織局域網,經過交換機內部處理決議資訊之后,將資訊以點對點,點對多的形式發送給固定端
            路由器的主要功能: 跨網段進行資料傳輸,路由選擇最佳路徑

        子網掩碼: 表示網路特征的一個引數,形式上等同于IP地址也是一個32位二進制數字,它的網路部分全部是1,主機部分全部是0
            子網掩碼示例: 255.255.255.0
                網路位: 255.255.255
                主機位: 0

        標準的子網掩碼
            定義: 指明一個IP地址的哪些位標識的是主機所在的子網,哪些位標識的是主機的位掩碼
            A類IP地址的標準子網掩碼: 255.0.0.0
            B類IP地址的標準子網掩碼: 255.255.0.0
            C類IP地址的標準子網掩碼: 255.255.255.0

子網判定

            1.將兩個IP地址與子網掩碼分別進行AND運算(兩個數位都是1,運算結果是1,否則0),結果相同則在同一子網

            2.通過基于ICMP協議的ping命令去ping對方的ip地址, 可以ping通也表示在同一個子網

通過網路地址判定兩個IP地址在不在子網示例:
    A主機的IP,子網掩碼,按位與計算得出A主機的網路地址:
        192.168.0.100        1100 0000    1010 1000    0000 0000    0110 0100
        255.255.255.0        1111 1111    1111 1111    1111 1111    0000 0000
        192.168.0.0          1100 0000    1010 1000    0000 0000    0000 0000
    B主機的IP,子網掩碼,按位與計算得出B主機的網路地址:
        192.168.0.137        1100 0000    1010 1000    0000 0000    1000 1001
        255.255.255.0        1111 1111    1111 1111    1111 1111    0000 0000
        192.168.0.0          1100 0000    1010 1000    0000 0000    0000 0000
    A主機的網路地址和B主機的網路地址一樣,所有A主機和B主機在同一個子網
通過ping命令判定兩個IP地址在不在子網示例:
    ping 192.168.0.137
    """執行結果
        PING 192.168.0.137 (192.168.0.137): 56 data bytes
        64 bytes from 192.168.0.137: icmp_seq=0 ttl=64 time=0.049 ms
        64 bytes from 192.168.0.137: icmp_seq=1 ttl=64 time=0.161 ms
        64 bytes from 192.168.0.137: icmp_seq=2 ttl=64 time=0.171 ms
        64 bytes from 192.168.0.137: icmp_seq=3 ttl=64 time=0.158 ms
        ^C
        --- 192.168.0.137 ping statistics ---
        4 packets transmitted, 4 packets received, 0.0% packet loss
        round-trip min/avg/max/stddev = 0.049/0.135/0.171/0.050 ms
    """
IP地址分類

            IPv4地址分類流程圖: https://www.processon.com/view/link/5ef2818e5653bb2925b228f2target

            A類IP地址:
                一個A類IP地址由1位元組的網路地址和3位元組主機地址組成,網路地址的最高位必須是"0"
                地址范圍: 1.0.0.1-126.255.255.254  # 0和127網段有特殊意義
                二進制表示為: 00000001 00000000 00000000 00000001 - 01111110 11111111 11111111 11111110
                可用的A類網路有126個,每個網路能容納1677214個主機

            B類IP地址:
                一個B類IP地址由2個位元組的網路地址和2個位元組的主機地址組成,網路地址的最高位必須是"10"
                二進制表示為: 10000000 00000001 00000000 00000001 - 10111111 11111111 11111111 11111110
                地址范圍: 128.1.0.1-191.255.255.254
                B類網路有16384個,每個網路能容納65534主機

            C類IP地址:
                一個C類IP地址由3位元組的網路地址和1位元組的主機地址組成,網路地址的最高位必須是"110"
                地址范圍: 192.0.1.1-223.255.255.254
                C類網路有2097152個,每個網路能容納254個主機

            D類IP地址:
                D類IP地址第一個位元組以"1110"開始,它是一個專門保留的地址
                它并不指向特定的網路,目前這一類地址被用在多點廣播(Multicast)中
                用于多點廣播,多點廣播地址用來一次尋址一組計算機 s 地址范圍224.0.0.1-239.255.255.254

            E類IP地址:
                以"1111"開始,為將來使用保留
                E類地址保留,僅作實驗和開發用

            1.公有IP地址分類: inter NIC機構分配給注冊組織的IP地址

            2.私有IP地址分類: 私有地址(private address)屬于非注冊地址,專門為非組織機構使用
                在這么多網路IP中,國際規定有一部分IP地址是用于我們的局域網使用,也就是屬于私網IP,不在公網中使用的
                私網IP地址范圍:
                    10.0.0.0~10.255.255.255
                    172.16.0.0~172.31.255.255
                    192.168.0.0~192.168.255.255

            3.回路測驗IP地址: 127.0.0.1~127.255.255.255  # 用于回路測驗

6.鏈路層(Link): 提供鏈路交換,具體訊息發送

        基于以太網卡固定的Mac地址
        資料鏈路層由來: 單純的電信號0和1沒有任何意義,必須規定電信號多少位一組,每組什么意思
        資料鏈路層功能: 定義了電信號的分組方式以太網協議,幫我們找到主機
        ARP協議: 通過目標主機的ip地址獲取目標主機Mac地址的一個協議
        資料包組成:
            head + data 組成的一個資料包(最短64B,最大1518B)
            head = 發送者mac地址(6B)+接收者mac地址(6B)+資料型別(6B)
            data: 資料包具體內容(最短46B,最大1500B)

        通訊原理: 廣播
        物理設備: 網橋,網卡,以太網交換機
        Mac地址: ac:bc:32:bf:6e:25  # 物理地址,全球唯一,前三位表示生產廠家,后三位表示生產廠家生產的那一塊網卡

A主機給B主機第一次發包三步

            第一步: 先計算判定A主機和B主機在不在一個子網

            在一個子網內(直接通過交換機轉發資料包,ip和mac都不變)
                第二步:
                    A主機先看自己快取區里也有沒有B主機的mac地址,有的話直接到第三步
                    A主機通過arp協議單播發給交換機,交換機收到后在子網內廣播(ff:ff:ff)
                    B主機收到廣播資料后通過對比ip地址,發現A主機是要拿自己的mac地址
                    B主機通過單播回送給交換機包含自己的mac地址的包,交換機快取B主機的ip和mac
                    交換機再把包通過單播發送給A主機
                    此時A主機成功的拿到B主機的mac地址,并將B主機的mac地址快取到本地
                第三步: A主機由單播方式發包給交換機,交換機再單播把包發送給B主機

            不在一個子網內(通過交換機和路由器轉發資料包,ip不變,mac改變)
                第二步:
                    A主機先看自己快取區里也有沒有A主機所在子網路由器的mac地址,有的話直接到第三步
                    A主機通過arp協議單播發給交換機,此時目標ip是A主機所在子網內路由器的網關ip(例如: 192.168.1.1)
                    A主機所在的交換機沒有快取A主機所在子網路由器的ip和mac
                        A主機所在的交換機收到包后會在子網內廣播(ff:ff:ff)
                        A主機所在的路由器收到廣播資料后通過對比ip地址,發現A主機是要拿自己的mac地址
                        A主機所在的路由器通過單播回送給交換機包含自己的mac地址的包
                        此時A主機所在的交換機會快取A主機所在的路由器的ip和mac資訊
                    A主機所在的交換機快取了A主機所在子網路由器的ip和mac
                        A主機所在的交換機收到包后會單播發送給A主機所在子網的路由器
                        A主機所在的路由器通過單播回送給交換機包含自己的mac地址的包
                    A主機所在的交換機再把包通過單播發送給A主機
                    此時A主機成功的拿到A主機所在子網的路由器的mac地址,并將mac地址快取到本地
                第三步:
                    1.A主機的資料包在A主機子網內的程序
                        A主機通過arp協議單播發給交換機,此時目標ip是B主機ip,而目標mac是A主機所在子網的路由器的mac地址
                        交換機收到A主機的包后將通過單播發送給A主機所在子網內的路由器
                    2.A主機的資料包在路由間的程序
                        A主機的包由A主機子網內的路由器轉發到中間路由
                        中間路由再把A主機的包發到B主機所在子網的路由器
                        注: 中間路由的轉發次數由實際A主機和B主機間的路由設備來決定
                    3.A主機的資料包在B主機子網內的程序
                        B主機所在子網的路由器將A的包發給B主機所在的交換機
                        B主機所在的交換機沒有快取B主機的ip和mac資訊
                            B主機所在的交換機收到A主機的包后在B主機所在的子網內廣播(ff:ff:ff)
                            B主機收到廣播資料后通過對比ip地址,發現是A主機給自己的包
                        B主機所在的交換機快取了B主機的ip和mac資訊
                            B主機所在的交換機通過單播把A主機的資料包發送給B主機

            補充:
                1.如果是通過集線器發包,那么即使A主機拿到了B主機的mac地址依然是在一個通過廣播方式發包
                2.可以通過命令查看本地快取的mac地址: arp -a

arp攻擊-中間人攻擊

            正常來說A主機要給B主機發包會經歷發包三步
            但是在A主機給B主機發包之前,C主機先回一個基于arp協議的包告訴A主機B主機的mac地址是自己的mac地址
            此時A主機會在快取記錄B主機的mac地址實際是C主機的mac地址,此時A主機向B主機發包會發給C主機
            B主機等待A主機發包,但是C主機先回一個基于arp協議的包告訴B主機A主機的mac地址是自己的mac地址
            此時A主機開始給B主機發包,C主機在收到A主機的包時在本地拷貝一份資料,再將資料包發送給B主機

7.物理層(Physical Layer): 物理硬體,介面

        基于物理層面的鏈接
        物理層由來: 計算機之間的物理連接網,如光纖,電纜,雙絞線,無線電波
        物理層功能: 主要基于電器特性發送高低電壓(電信號)高電壓對應數字1,低電壓對應數字0
        物流設備: 集線器,網線,光纖
        雙絞線(網線)線序
            1->T568A: 綠白 綠 橙白 藍 藍白 橙 棕白 棕
            2->T568B: 橙白 橙 綠白 藍 藍白 綠 棕白 棕
            交叉線: T568A----T568B 用于同種設備連接(交換機連交換機)
            直通線: T568A----T568A(T568B----T568B) 不同設備連接(PC機連交換機)

2.OSI五層模型(TCP/IP模型)

    應用層: 應用層,表示層,會話層

    傳輸層: 傳輸層

    網路層: 網路層

    鏈路層: 鏈路層

    物理層: 物理層

3.OSI四層模型

    應用層: 應用層,表示層,會話層

    傳輸層: 傳輸層

    網路層: 網路層

    物理鏈路層: 鏈路層,物理層

4.什么是協議

    網路協議概述: 網路通信中,各方必須遵守規定,包括建立連接,如何識別,訊息結構等

    應用層: FTP, TFTP, HTTP, HTTPS, SMTP, DNS

    傳輸層: TCP, UDP

    網路層: IP

    資料鏈路層: ARP協議

    物理層: 傳輸電信號

    TCP/IP協議族中各協議之間的關系流程圖: https://www.processon.com/view/link/5efdf74e07912929cb6e292d

    TCP/IP協議傳輸流程圖: https://www.processon.com/view/link/5efdfba1f346fb1ae58de263

5.主機,IP,PORT,網段,子網掩碼,DNS,位元組序

    1.主機: 計算機的名稱(本機 localhost)

獲取主機名
    In [1]: import socket

    In [2]: socket.gethostname()
    Out[2]: 'MacBook-Pro.local'
通過主機名決議IP
    In [3]: socket.gethostbyname('MacBook-Pro.local')
    Out[3]: '127.0.0.1'

    In [4]: socket.gethostbyname('localhost')
    Out[4]: '127.0.0.1'
獲取服務器別名和地址
    In [5]: socket.gethostbyaddr('www.baidu.com')
    # 回傳的元祖第一項是服務器的主機名稱,第二項是服務器別名,第三項是服務器地址
    Out[5]: ('www.baidu.com', ['38.177.215.14.in-addr.arpa'], ['14.215.177.38'])

    In [6]: socket.gethostbyaddr('14.215.177.38')
    Out[6]: ('www.baidu.com', ['38.177.215.14.in-addr.arpa'], ['14.215.177.38'])

    2.IP地址
        IPv4: 點分十進制,三個點分為四個部分,每個部分范圍是 0-255
            示例: 192.168.1.2
                127.0.0.1: 本地回環地址(本地測驗ip)
                0.0.0.0: 局域網可用IP
                192.168.1.0: 表是網段
                192.168.1.1: 網關
                192.168.1.255: 廣播地址
        IPv6: ip地址更多

將IP地址轉換為二進制:
    In [5]: socket.inet_aton('192.168.1.2')
    Out[5]: b'\xc0\xa8\x01\x02'

將二進制轉換為點分十進制:
    In [6]: socket.inet_ntoa(b'\xc0\xa8\x01\x02')
    Out[6]: '192.168.1.2'

指定以v4協議還是v6協議轉換 inet_pton & inet_ntop:
    In [7]: socket.inet_pton(socket.AF_INET, '192.168.1.2')
    Out[7]: b'\xc0\xa8\x01\x02'
    In [8]: socket.inet_ntop(socket.AF_INET, b'\xc0\xa8\x01\x02')
    Out[8]: '192.168.1.2'
    # socket.AF_INET 表示IPv4
    # socket.AF_INET6 表示IPv6

    3.PORT埠
        定義: 埠號是地址的組成部分,在一個系統中用于區分應用程式
        埠取值范圍1-65535
            1-255: 眾所周知的埠
            256-1023: 系統埠
            1024-65535: 動態埠
        獲取一個應用的埠

In [9]: socket.getservbyname('mysql')
Out[9]: 3306

In [10]: socket.getservbyname('http')
Out[10]: 80

In [11]: socket.getservbyname('https')
Out[11]: 443

In [12]: socket.getservbyname('ssh')
Out[12]: 22

In [13]: socket.getservbyname('ftp')
Out[13]: 21

    4.網段: 一個局域網內ip地址的范圍

    5.子網掩碼: 和ip地址進行&運算,得出計算計算機網段

    6.DNS: 域名決議

    7.位元組序:
        在不同的設備上針對資料型別存盤的方式不同
        大端序: 高位元組存在低地址,例如數值14對應二進制1110按大端序存盤為: 1110
        小端序: 低位元組存在低地址,例如數值14對應二進制1110按小端序存盤為: 0111
        網路位元組序: 在訊息的發送和接收程中都按照網路位元組序的方式進行決議,其實就是采用了大端序將位元組發送方式統一

6.網路通信中的單工,半雙工,全雙工

    單工: 單項通信,要么只能收, 要么只能發,例如收音機
    半雙工: 發的時候不能收, 收的時候不能發,例如對講機
    全雙工: 發的時候可以收, 收的時候可以發,例如電話,socket

7.多任務

    CPU的調度演算法: 時間片輪轉,優先級調度
    并行:真的多任務,cup數>=任務數,任務真的是一起執行的
    并發:假的多任務,cup數<任務數,通過作業系統的各種任務調度演算法,實作用多個任務一起執行
        實際上總有一些任務不在執行,因為切換任務的速度相當快,看上去一起執行而已

8.靜態URL

    靜態URL類似 域名/news/2012-5-18/110.html 我們一般稱為真靜態URL,每個網頁有真實的物理路徑,也就是真實存在服務器里的
    優點: 網站打開速度快,因為它不用進行運算,另外網址結構比較友好利于記憶
    缺點: 最大的缺點是如果是中大型網站,則產生的頁面特別多,不好管理
    SEO影響: 靜態URL對SEO肯定有加分的影響,因為打開速度快,這個是本質

9.動態URL

    動態URL類似 域名/DaiKuan.php?id=17,帶有?號的URL,一般稱為動態網址,每個URL只是一個邏輯地址,并不是真實物理存在服務器硬碟里的
    優點: 適合中大型網站,修改頁面很方便,因為是邏輯地址,所以占用硬碟空間要比純靜態網站小
    缺點: 因為要進行運算所以打開速度稍慢,目前有服務器快取技術可以解決速度問題,最大的缺點是URL結構稍稍復雜不利于記憶
    SEO影響: 目前百度SE已經能夠很好的理解動態URL,所以對SEO沒有什么減分的影響(特別復雜的URL結構除外)

10.偽靜態URL

    偽靜態URL類似 域名/course/74.html 這個URL和真靜態URL類似,他是通過偽靜態規則把動態URL偽裝成靜態網址,也是邏輯地址不存在物理地址
    優點: URL比較友好,利于記憶,非常適合大中型網站,是個折中方案
    缺點:
        1.設定麻煩,服務器要支持重寫規則,另外進行了偽靜態網站訪問速度并沒有變快
        2.因為實質上它會額外的進行運算解釋,反正增加了服務器負擔,速度反而變慢
        3.還有可能會造成動態URL和靜態URL都被搜索引擎收錄,不過可以用robots禁止掉動態地址
    SEO影響: 和動態URL一樣,對SEO沒有什么減分影響

 

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

標籤:Python

上一篇:day3 筆記

下一篇:Python日期時間(詳細)

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