文章目錄
- 前言
- 一、數組和鏈表的區別
- 二、什么是內存對齊
- 三、IIC的時序
- 四、static作用
- 五、查看tty設備的方法
- 六、查找指定文件命令
- 七、三次握手和四次揮手
- 1.三次握手
- 2.四次揮手
- 八、半關閉狀態
- 九、字節流和數據報
- 總結
前言
本篇文章繼續講解筆試和面試。
一、數組和鏈表的區別
1.內存:
數組使用連續的內存塊來存儲元素,每個元素在內存中占據固定大小的空間。這樣的存儲方式使得數組的訪問速度快,通過索引即可直接訪問任意位置的元素。
鏈表使用分散的內存塊來存儲元素,每個元素(節點)在內存中可以位于任意位置。每個節點包含了存儲數據的部分和指向下一個節點的指針。這種存儲方式使得插入和刪除操作更加靈活,但訪問元素需要遍歷整個鏈表。
2.性能:
數組的訪問速度快,通過索引可以直接訪問任意位置的元素,時間復雜度為 O(1)。但是在插入和刪除元素時,需要移動其他元素來保持連續性,導致時間復雜度為 O(n)。
鏈表在插入和刪除元素時,只需要修改指針的指向,所以插入和刪除的時間復雜度可以達到 O(1)。但是在訪問元素時,需要遍歷鏈表,時間復雜度為 O(n)。
3.操作復雜度:
數組的插入和刪除操作需要移動其他元素,因此操作復雜度較高。在插入和刪除元素的場景較多時,數組性能不如鏈表。
鏈表的插入和刪除操作只需要改變指針的指向,操作復雜度較低。在需要頻繁執行插入和刪除操作的場景中,鏈表更加適合。
數組適合于需要頻繁訪問元素的場景,而鏈表適用于需要頻繁插入和刪除元素的場景。
二、什么是內存對齊
內存對齊是指在存儲數據時,將數據按照一定規則放置在內存中的過程。
三、IIC的時序
1.開始信號(Start Signal):主設備發送一個低電平的信號,表示即將開始通信。
2.從設備地址(Device Address):主設備發送從設備的地址,主要用于指定與之通信的從設備。地址包括一個7位的從設備地址和讀/寫位。讀/寫位用于指示主設備是要進行讀操作還是寫操作。
3.應答信號(Acknowledge Signal):每次發送地址或數據后,發送方會釋放SDA線(串行數據線),然后接收方會發送應答位。如果接收到的正確數據,則發送一個低電平的應答(ACK)信號;如果接收到的數據有誤或不需要發送應答,則發送一個高電平的非應答(NACK)信號。
4.讀或寫操作(Read or Write Operation):主設備通過傳輸數據來完成讀或寫操作。在讀操作中,從設備向主設備發送數據;在寫操作中,主設備向從設備發送數據。
5.停止信號(Stop Signal):主設備發送一個高電平的停止信號,表示通信結束。
四、static作用
static關鍵字在C語言中可以用于靜態變量、靜態函數、靜態全局變量和靜態局部變量。它們的具體作用包括控制變量的生命周期、作用域以及對其他文件的可見性。
五、查看tty設備的方法
使用ls /dev/tty*
六、查找指定文件命令
1.使用find命令:
find <路徑> -name <文件名>
<路徑>:指定要搜索的起始路徑。可以是根目錄 /,也可以是當前目錄 .,或者其他指定的目錄。
-name <文件名>:指定要查找的文件名。可以使用通配符進行模糊匹配,如 * 表示任意字符。
2.使用locate命令:
locate <文件名>
<文件名>:指定要查找的文件名。與find不同,locate命令使用基于數據庫的搜索,因此速度較快。
七、三次握手和四次揮手
1.三次握手
1.第一次握手(SYN):客戶端向服務器發送一個帶有 SYN(同步)標志的包,用于請求建立連接。發送方選擇一個初始的序列號(Sequence Number)作為起始值,并將 SYN 標志置為1。
2.第二次握手(SYN+ACK):服務器收到客戶端的 SYN 包后,確認收到,并向客戶端發送一個帶有 SYN 和 ACK(應答)標志的包。服務器也會為自己選取一個初始的序列號,并將客戶端的序列號加1作為確認號(Acknowledgment Number)。
3.第三次握手(ACK):客戶端收到服務器的 SYN+ACK 包后,向服務器發送一個帶有 ACK 標志的包作為確認。該包中的序列號被設置為收到的確認號加1。
2.四次揮手
1.第一步(FIN1):
主動關閉連接的一方(稱為發起者)向對方發送一個帶有 FIN(Finish)標志的 TCP 報文段。
發起者不再發送數據,但仍可以接收對方發送的數據。
2.第二步(ACK1):
接收到 FIN 的一方(稱為被動關閉者)收到 FIN 報文后,向發起者發送一個確認應答(ACK)報文,確認已收到 FIN。
被動關閉者仍可以發送剩余數據,直到發送和接收緩沖區中的數據都被傳輸完成。
3.第三步(FIN2):
被動關閉者發送一個帶有 FIN 標志的報文段,表示它也希望關閉連接。
被動關閉者不再發送數據,但仍可以接收來自發起者的數據。
4.第四步(ACK2):
發起者接收到被動關閉者的 FIN 后,向被動關閉者發送一個確認應答,確認收到 FIN。
發起者等待一段時間,以確保對方收到確認應答。
八、半關閉狀態
半關閉(Half-closed)狀態是指在 TCP 連接中,一方關閉了它的輸出流(發送數據),但仍然可以接收對方發送的數據。
九、字節流和數據報
字節流(TCP):
字節流是 TCP 中的傳輸方式,它將數據視為連續的字節流,沒有明確的消息邊界。
TCP 將數據劃分為一個個的字節,并以無結構的方式在連接上進行傳輸。
發送方將數據以字節流的形式發送給接收方,接收方接收到字節后按照順序重新組裝成完整的數據。
具有可靠性和順序性,TCP 通過序列號、確認號和重傳機制來保證數據的可靠性和正確的順序。
數據報(UDP):
數據報是 UDP 中的傳輸方式,它將數據視為獨立的數據包,每個數據包之間是獨立的。
UDP 將數據劃分為一個個固定大小的數據報(通常稱為 UDP 數據報或者 UDP 包)進行傳輸。
每個數據報都有自己的頭部信息,包括源端口、目標端口和長度等,用于標識和組裝數據。
數據報發送時不保證順序和可靠性,接收方無法確保接收到的數據報的順序和完整性。
總結
本篇文章就講解到這里。