3.18 C++八股學習
- 什么是內存對齊?為什么要進行內存對齊?
- 類如何實現(xiàn)只能靜態(tài)分配和只能動態(tài)分配?
- 為什么模版類一般都是放在一個h文件中?
- 為什么析構函數(shù)用虛函數(shù),不用會有什么影響?
- 講一下IO多路復用
- 邊緣觸發(fā)和水平觸發(fā),邊緣觸發(fā)如何保證讀取緩沖區(qū)所有內容?
- 左值、右值引用,以及作用,什么是將亡值?
- 什么是Unix域套接字?
- 迭代器失效原因,怎么編程能夠避免迭代器失效?
- https相比http有哪些地方的變化?
1. 內存對齊,可以通過舉一個例子struct來解釋。可以提高處理器對數(shù)據(jù)的讀取效率。內存對齊規(guī)則:可以使用#pragma pack來規(guī)定內存對齊大小。1.第一個數(shù)據(jù)成員放在offset為0的地方,以后每個數(shù)據(jù)成員存儲的起始位置要從該成員大小的整數(shù)倍開始。 結構體成員要從其內部最大元素大小的整數(shù)倍地址開始存儲。3.結構體的總大小,必須是其內部最大成員的整數(shù)倍,不足的要補齊。記憶法則:起始自身、最大元素開始、最大倍數(shù)。
2.前者是把new、delete運算符重載為private屬性。后者把構造、析構函數(shù)設為protected屬性,再用子類來動態(tài)創(chuàng)建。A *p = new A();動態(tài)建立一個類對象:第一步執(zhí)行operator new()函數(shù),在堆中搜索一塊內存并進行分配;第二步調用類構造函數(shù)構造對象。
3.C++標準明確表示,模版僅在需要的時候才會實例化出來,所以,當編譯器沒看到模版的聲明時,他不能實例化該模版,只能創(chuàng)建一個具有外部連接的符號并期待連接器能夠將符號的地址決議出來。然而當實現(xiàn)該模板的.cpp文件中沒有用到模板的實例時,編譯器懶得去實例化,所以,整個工程的.obj中就找不到一行模板實例的二進制代碼。所以我們需要放到一個文件夾中。
4.當涉及到繼承時,基類的析構函數(shù)被聲明為虛函數(shù)可以確保派生類的析構函數(shù)在對象被銷毀時能夠被調用,從而正確釋放子類特有的資源。
5.IO多路復用是一種在單個線程中管理多個輸入/輸出通道的技術。允許一個線程同時監(jiān)聽多個輸入流(例如網絡套接字、文件描述符等),并在有數(shù)據(jù)可讀或可寫時進行相應的處理,而不需要為每個通道創(chuàng)建一個獨立的線程。
6.在邊緣觸發(fā)模式下,應用程序必須在事件觸發(fā)后,盡可能多地讀取數(shù)據(jù),直到無法再讀出數(shù)據(jù)為止。
使用非阻塞套接字:邊緣觸發(fā)模式只支持非阻塞套接口,這樣在讀取數(shù)據(jù)時,如果緩沖區(qū)沒有數(shù)據(jù),read和recv會立即返回。
循環(huán)讀取數(shù)據(jù):在事件觸發(fā)后,應用程序需要不斷嘗試讀取數(shù)據(jù),直到讀取到所有數(shù)據(jù)或遇到錯誤為止
7.左值引用時C++傳統(tǒng)的引用類型,用&符號表示。它引用的是一個已存在、有名字的對象,并且該對象在引用的作用域內是持久存在的。主要用于函數(shù)參數(shù)傳遞、返回值優(yōu)化以及實現(xiàn)常規(guī)模版功能。
右值引用時C++11引入的新特性,用&&表示。它引用的是一個臨時對象(即右值),通常用于實現(xiàn)移動語義與完美轉發(fā)。
將亡值是C++11引入的一種值類別,屬于右值的一種。指的是一個即將被銷毀的對象。例子:函數(shù)返回一個對象,該對象即將被銷毀,調用std::move函數(shù),將一個左值顯式轉換為右值。臨時對象的創(chuàng)建和銷毀。
8.Unix域套接字是一種用于同一臺機器上進程通信的機制,與網絡套接字不同,Unix域套接字不需要網絡協(xié)議棧,直接在操作系統(tǒng)內核中實現(xiàn),因此具有更高的通信效率和更低的延遲。
具體而言,是創(chuàng)建一個套接字并綁定到文件路徑,然后監(jiān)聽該套接字上的連接請求??蛻舳送ㄟ^連接到該套接字文件與服務器建立通信。通信雙方可以通過套接字發(fā)送和接收數(shù)據(jù)。
9.迭代器失效指的是:在對容器進行修改(如插入、刪除、重分配)后,先前的迭代器、指針或引用可能不再有效,訪問它們會導致未定義行為。如何解決迭代器失效:插入或刪除操作后,重新獲取迭代器。遍歷容器時刪除元素,使用 erase() 的返回值獲取下一個有效迭代器。使用 vector::reserve() 預先分配內存,減少插入操作導致的迭代器失效。
10.增加了SSL/TLS握手過程,以確保數(shù)據(jù)傳輸?shù)募用芎桶踩?1)客戶端發(fā)送一個消息,包括客戶端生成的隨機數(shù)A、客戶端支持的協(xié)議版本號、加密方式。(2)服務端確認雙方使用的加密方式,并給出數(shù)字證書、一個服務器生成的隨機數(shù)B。(3)客戶端確認數(shù)字證書有效,生成一個新的隨機數(shù)C,使用證書中的公鑰對C加密,發(fā)送給服務端。(4)服務端使用自己的私鑰解密得到C
客戶端和服務器根據(jù)約定的加密方法,使用三個隨機數(shù)ABC,生成對話秘鑰,之后的通信都用這個對話秘鑰進行加密。
使用 RSA 密鑰協(xié)商算法的最大問題是不支持前向保密。為解決這個問題,后面出現(xiàn)ECDHE秘鑰協(xié)商算法。
#學習#