計算機網絡編程和并發的知識

OSI七層協議

OSI(Open Systems Interconnection)模型是一個七層的網絡通信模型,用于標準化不同層級的網絡通信。從下到上分別是:

  1. 物理層(Physical Layer):負責在物理媒介上傳輸原始的比特流。
  2. 數據鏈路層(Data Link Layer):負責在相鄰網絡設備之間傳輸幀,處理MAC地址。
  3. 網絡層(Network Layer):負責數據包從源到宿的傳輸和路由選擇。
  4. 傳輸層(Transport Layer):負責提供端到端的數據傳輸服務,如TCP和UDP。
  5. 會話層(Session Layer):負責建立、管理和終止應用程序之間的會話。
  6. 表示層(Presentation Layer):負責數據的表示、編碼和轉換,確保一個系統的應用層所發送的信息能被另一個系統的應用層讀取。
  7. 應用層(Application Layer):為應用軟件提供網絡服務。

C/S和B/S架構

  • C/S架構(Client/Server):客戶端/服務器架構,客戶端通過請求服務器來獲取資源或處理信息。C/S架構通常用于桌面應用程序。

  • B/S架構(Browser/Server):瀏覽器/服務器架構,用戶通過瀏覽器訪問服務器上的資源或服務。B/S架構通常用于Web應用程序。

三次握手、四次揮手流程

  • 三次握手:建立TCP連接的過程,包括:

    1. 客戶端發送SYN(同步序列編號)報文給服務器,請求建立連接。
    2. 服務器收到SYN后,發送SYN-ACK(同步確認)報文回應客戶端。
    3. 客戶端收到SYN-ACK后,發送ACK(確認)報文完成連接建立。
  • 四次揮手:TCP連接的終止過程,包括:

    1. 客戶端發送FIN(結束)報文給服務器,請求關閉連接。
    2. 服務器收到FIN后,發送ACK報文回應客戶端,并準備關閉。
    3. 服務器發送FIN報文給客戶端,請求關閉其到客戶端的連接。
    4. 客戶端收到服務器的FIN后,發送ACK報文回應服務器,并正式關閉連接。

ARP協議

ARP(Address Resolution Protocol)協議用于將網絡層的IP地址解析為數據鏈路層的MAC地址,以便于在局域網內發送數據幀。

TCP和UDP的區別

  • TCP(Transmission Control Protocol):傳輸控制協議,提供可靠的、面向連接的、基于字節流的傳輸服務。
  • UDP(User Datagram Protocol):用戶數據報協議,提供快速但不可靠的、無連接的傳輸服務。

局域網和廣域網

  • 局域網(LAN, Local Area Network):覆蓋較小地理范圍(如一個辦公室或校園)的計算機網絡。
  • 廣域網(WAN, Wide Area Network):覆蓋廣泛地理范圍的計算機網絡,如跨國或全球網絡。

基于TCP協議的通信更可靠的原因

TCP協議提供超時重傳、數據校驗、流量控制和有序傳輸等機制,確保數據正確、完整地發送到接收端。

Socket

Socket是一種通信抽象,用于實現網絡通信。基于TCP協議的套接字通信流程包括:

  1. 服務器創建套接字,并綁定到端口上監聽。
  2. 服務器接受客戶端的連接請求。
  3. 客戶端創建套接字,并連接到服務器的IP地址和端口。
  4. 雙方通過套接字進行數據傳輸。
  5. 數據傳輸完成后,任一方可以關閉連接。

粘包問題

粘包是指在使用TCP協議傳輸數據時,多個數據包被一起傳輸,接收方無法區分數據包界限的現象。

造成粘包的原因

  • 應用程序寫入的數據小于套接字緩沖區的大小,導致多次寫操作將數據累計在緩沖區中,一次讀操作就讀取了多次寫入的數據。

發生粘包的情況

  • 當發送的數據小于TCP緩沖區的大小。
  • 當TCP底層將多次發送的數據合并為一次發送。
  • 當接收方的讀取速度小于發送方。

IO多路復用的作用

IO多路復用(如select、poll、epoll)允許單個進程或線程監視多個輸入源(如文件描述符),并在有數據可讀或可寫時得到通知。它的作用包括:

  • 提高程序的并發能力,用單個線程處理多個IO操作。
  • 減少資源消耗,避免為每個IO操作創建線程。
  • 提升性能,特別是當處理大量并發連接時。

什么是防火墻以及作用?

防火墻是一種網絡安全系統,用于監控進出網絡流量并根據預定的安全規則進行過濾。其作用主要包括:

  • 防止未經授權的訪問:確保只有合法的流量能夠進入或離開網絡。
  • 過濾內容:阻止惡意軟件、垃圾郵件等。
  • 管理流量:控制數據流,優化網絡性能。

select、poll、epoll 模型的區別?

  • select 模型

    • 基于文件描述符的數組。
    • 每次調用都需要遍歷整個數組,檢查哪些文件描述符處于就緒狀態。
    • 有最大文件描述符限制(通常為1024)。
  • poll 模型

    • 與select類似,但使用鏈表結構,沒有數量限制。
    • 同樣需要在每次調用時遍歷整個鏈表。
  • epoll 模型

    • 基于事件的I/O通知機制。
    • 僅返回那些狀態發生變化的文件描述符。
    • 沒有數量限制,且效率比select和poll高。

進程、線程、協程的區別以及應用場景?

  • 進程

    • 操作系統進行資源分配和調度的基本單位。
    • 擁有獨立的內存空間。
    • 適用于執行獨立運行的程序。
  • 線程

    • 進程中的一個執行流,共享進程的資源。
    • 適用于執行多任務并行操作。
  • 協程

    • 用戶態的輕量級線程,由程序控制。
    • 適用于I/O密集型任務,避免線程的創建和銷毀開銷。

GIL鎖是什么?

GIL(Global Interpreter Lock)是Python解釋器中的全局解釋器鎖,它確保在任意時刻,只有一個線程執行Python字節碼。GIL鎖的主要作用是簡化CPython實現中對象的內存管理和同步問題。

Python中如何使用線程池和進程池?

Python的concurrent.futures模塊提供了ThreadPoolExecutorProcessPoolExecutor來創建線程池和進程池。

from concurrent.futures import ThreadPoolExecutor, ProcessPoolExecutor# 使用線程池
with ThreadPoolExecutor(max_workers=5) as executor:results = list(executor.map(lambda x: x*x, range(10)))# 使用進程池
with ProcessPoolExecutor(max_workers=5) as executor:results = list(executor.map(lambda x: x*x, range(10)))

threading.local的作用?

threading.local()用于創建線程局部數據,每個線程都有自己的獨立副本,互不影響。常用于線程中的變量隔離。

進程之間如何進行通信?

進程間通信(IPC)可以通過以下方式:

  • 管道(Pipes):用于父子進程或兄弟進程間通信。
  • 消息隊列(Message Queues):用于在進程間發送消息。
  • 共享內存(Shared Memory):允許多個進程訪問同一塊內存區域。
  • 套接字(Sockets):用于進程間網絡通信。

什么是并發和并行?

  • 并發

    • 兩個或多個事件在同一時間段內發生。
    • 在多線程環境中,多個任務交替執行。
  • 并行

    • 兩個或多個事件同時發生。
    • 在多核處理器上,多個任務可以真正地同時運行。

進程鎖和線程鎖的作用?

  • 進程鎖

    • 確保多個進程在訪問共享資源時的互斥。
  • 線程鎖

    • 確保同一進程內多個線程在訪問共享資源時的互斥。

解釋什么是異步非阻塞?

異步非阻塞指的是在程序執行過程中,當遇到需要等待的操作(如I/O)時,不會阻塞當前執行的線程或進程,而是允許其他任務繼續執行。這樣可以提高程序的響應性和效率,特別是在I/O密集型應用中。

路由器和交換機的區別:

  • 路由器

    • 工作在OSI模型的網絡層。
    • 負責在不同網絡之間轉發數據包,并進行路徑選擇。
    • 可以連接不同的網絡,如局域網和互聯網。
    • 具有IP地址分配和網絡地址轉換(NAT)功能。
  • 交換機

    • 工作在OSI模型的數據鏈路層。
    • 負責在局域網內部轉發數據幀。
    • 通過MAC地址表來決定數據幀的去向。
    • 不具備跨網絡的路由功能。

什么是域名解析?

域名解析是將人類可讀的域名(如www.example.com)轉換為機器可讀的IP地址的過程。這一過程通常由DNS(域名系統)服務器完成。

如何修改本地hosts文件?

  • 在Windows系統中,hosts文件通常位于C:\Windows\System32\drivers\etc\
  • 在Unix-like系統中,hosts文件通常位于/etc/hosts

使用文本編輯器(如記事本、Notepad++或vim)打開hosts文件,添加或修改條目,例如:

 

192.168.1.100 example.com

然后保存文件,并根據需要重啟網絡服務或刷新DNS緩存。

生產者消費者模型應用場景及優勢:

應用場景

  • 任務隊列處理,如Web服務器處理用戶請求。
  • 日志處理,生產者生成日志,消費者負責寫入存儲。
  • 多級數據處理流程。

優勢

  • 降低系統耦合度,生產者和消費者可以獨立開發和優化。
  • 提高系統性能和吞吐量,通過緩沖區來平衡生產和消費速度。
  • 易于擴展,可以根據需要增加更多的生產者或消費者。

什么是CDN?

CDN(內容分發網絡)是一種分布式網絡,通過將內容緩存到離用戶更近的服務器上,使用戶可以更快地獲取內容,提高訪問速度和系統可用性。

LVS是什么及作用?

LVS(Linux Virtual Server)是一個開源的Linux負載均衡解決方案。它的作用是:

  • 在多個服務器之間分配網絡流量和請求,提高系統的擴展性和可用性。
  • 提供故障轉移和高可用性支持。

Nginx是什么及作用?

Nginx是一個高性能的HTTP和反向代理服務器,它的作用包括:

  • 作為Web服務器,處理HTTP請求。
  • 作為反向代理,將請求轉發到后端服務器。
  • 提供負載均衡功能,分配請求到多個后端服務。
  • 提供靜態文件服務,優化響應速度。

Keepalived是什么及作用?

Keepalived是一個高可用性解決方案,它的作用是:

  • 監控系統中的關鍵服務,并在服務失敗時自動進行故障轉移。
  • 管理并維護虛擬IP地址,確保高可用性。
  • 與LVS等負載均衡器配合使用,實現自動故障轉移和負載均衡。

haproxy是什么以及作用?

haproxy 是一個非常流行的開源負載均衡器和代理服務器,它的作用包括:

  • 負載均衡:將進入的網絡流量分發到多個后端服務器,以提高應用程序的可用性和響應速度。
  • 高可用性:提供故障轉移支持,如果主服務器失敗,它可以自動切換到備用服務器。
  • 代理:支持多種協議(如HTTP、TCP等),可以作為反向代理來接收客戶端請求并轉發到適當的后端服務。
  • SSL/TLS 卸載:可以處理SSL握手,減輕后端服務器的負擔。
  • 監控和統計:提供實時監控和統計信息,幫助管理員了解流量和性能狀態。

什么是負載均衡?

負載均衡是一種將網絡流量和用戶請求分散到多個服務器或資源的技術,目的是:

  • 提高性能:通過分散請求,避免單個服務器過載。
  • 提高可用性:如果一個服務器失敗,請求可以被重定向到其他服務器。
  • 增強擴展性:通過增加更多的服務器來處理更多的請求。

什么是RPC及應用場景?

RPC(遠程過程調用)是一種允許程序調用另一個地址空間(通常是共享網絡的另一臺機器上)的子程序或服務的技術,而不需要程序員了解底層網絡細節。

應用場景

  • 分布式計算:在分布式系統中,RPC用于不同節點之間的服務調用。
  • 微服務架構:微服務之間通過RPC進行通信。
  • 客戶端-服務器應用程序:客戶端通過RPC調用服務器上的服務。

簡述 asyncio模塊的作用和應用場景。

asyncio 是Python的一個庫,用于編寫單線程并發代碼,使用基于協程的async/await語法。

作用

  • 支持異步I/O操作,允許程序在等待I/O操作完成時釋放執行權。
  • 允許并發執行多個操作,提高程序性能。

應用場景

  • I/O密集型任務,如Web爬蟲、網絡請求等。
  • 并發處理大量連接,如Web服務器、聊天服務等。

簡述 gevent模塊的作用和應用場景。

gevent 是一個基于協程的Python網絡庫,它使用基于greenlet的輕量級并發來實現異步操作。

作用

  • 提供一種簡單的方式來編寫異步代碼。
  • 通過協程實現非阻塞的網絡通信。

應用場景

  • 需要處理大量并發連接的Web應用。
  • I/O密集型任務,如Web服務、實時通信等。

Twisted框架的使用和應用?

Twisted 是一個事件驅動的網絡編程框架,它支持多種協議,包括TCP、UDP、HTTP等。

使用

  • 通過異步的回調和協程來處理事件和I/O操作。
  • 支持多種網絡協議,可以用于構建客戶端和服務器應用程序。

應用場景

  • 構建高性能的服務器,如游戲服務器、即時通訊服務器等。
  • 編寫需要處理多種協議的客戶端應用程序。
  • 用于實現復雜的網絡通信和協議交互。

HTTP協議的認識

HTTP(超文本傳輸協議)是一種用于分布式、協作式、超媒體信息系統的應用層協議。它是萬維網數據通信的基礎。以下是HTTP協議的一些關鍵特點:

  • 無狀態性:HTTP協議本身是無狀態的,這意味著每個請求都是獨立的,服務器不會保存之前請求的狀態。
  • 請求-響應模型:HTTP通信采用請求-響應模型。客戶端發送一個請求到服務器,服務器響應該請求并返回一個響應。
  • 方法:HTTP定義了一系列的方法,如GET、POST、PUT、DELETE等,以表示不同的操作。
  • 狀態碼:HTTP使用狀態碼來表示請求的結果,例如200表示成功,404表示未找到,500表示服務器錯誤等。
  • 頭信息:HTTP消息包含頭部信息,它提供了關于請求或響應的元數據,如內容類型、緩存控制、認證信息等。
  • 連接:HTTP/1.1支持持久連接,允許在同一個TCP連接上發送多個HTTP請求和響應,以減少連接建立和關閉的開銷。
  • 安全性:HTTP協議本身不提供安全特性,但可以通過HTTPS(HTTP over SSL/TLS)來保證數據傳輸的安全性。

Websocket協議的認識

WebSocket是一種網絡通信協議,提供了在單個TCP連接上進行全雙工通信的能力。以下是WebSocket的一些關鍵特點:

  • 全雙工通信:WebSocket允許服務器和客戶端之間雙向交互,服務器可以隨時發送數據給客戶端。
  • 持久連接:與HTTP不同,WebSocket建立連接后,該連接會保持開放,直到客戶端或服務器端明確關閉它。
  • 適用于實時應用:WebSocket非常適合需要實時通信的應用,如在線游戲、聊天應用、實時數據更新等。
  • 較少的開銷:與HTTP請求相比,WebSocket通信減少了每次通信所需的開銷,因為它不需要重復進行握手過程。
  • 基于TCP:WebSocket依賴于TCP協議,保證了數據傳輸的可靠性。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/42648.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/42648.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/42648.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

springcloud 面試經常被問問題

Spring Cloud 是一個基于 Spring Boot 的微服務架構解決方案,包含了許多用于構建和管理微服務的工具和框架。在面試中,與 Spring Cloud 相關的問題通常會涉及其核心概念、組件、常用模式和解決方案。以下是一些在 Spring Cloud 面試中經常被問到的問題及…

Linux系統(Centos)下MySQL數據庫中文亂碼問題解決

問題描述:在進行數據庫使用過程中,數據庫里的數據中文都顯示亂碼。操作數據庫的時候,會出現中文亂碼問題。 解決方法如下: 第一步:打開虛擬機進入系統,啟動MySQL。 第二步:連接登錄MySQL輸入…

Java面試題系列 - 第4天

題目:深入理解Java泛型與類型擦除 背景說明:Java泛型是Java SE 5引入的一種新特性,它允許在編譯時檢查類型安全,并且所有的強制轉換都是自動和隱式的,提高了代碼的重用率。然而,Java泛型的實現背后有一個重…

執行力不足是因為選擇模糊

選擇模糊:執行力不足的根源 選擇模糊是指在面對多個選項時,缺乏明確的目標和方向。這種模糊感會導致猶豫不決,進而影響我們的執行力。 選擇模糊的表現: 目標不明確,不知道應該做什么。優先級混亂,不清楚…

Docker-12 Docker常用命令

一、查看docker版本信息 docker version # 查看Docker版本信息二、啟動/停止docker 服務 systemctl start docker # 啟動 docker 服務 systemctl stop docker # 停止 docker 服務三、鏡像命令 docker images # 查看鏡像 docker search 鏡像名稱 # 搜索鏡像…

分布式技術棧、微服務架構 區分

1.分布式技術棧 這些技術棧都是為了更好的開發分布式架構的項目。 (大營銷平臺的系統框架如下圖,擴展的分布式技術棧) (1)Dubbo——分布式技術棧 DubboNacos注冊中心是應用可以分布式部署,并且提供RPC接…

BOM和DOM

關于DOM、BOM和diff算法 瀏覽器對象模型(Browser Object Model,簡稱BOM)和文檔對象模型(Document Object Model,簡稱DOM)是Web開發中的兩個核心概念,它們都與瀏覽器和網頁的交互有關。以下是BOM…

Codeforces Round 955 E. Number of k-good subarrays【分治、記憶化】

E. Number of k-good subarrays 題意 定義 b i t ( x ) bit(x) bit(x) 為 x x x 的二進制表示下 1 1 1 的數量 一個數組的子段被稱為 k ? g o o d k-good k?good 的當且僅當:對于這個子段內的每個數 x x x,都有 b i t ( x ) ≤ k bit(x) \leq k…

鴻蒙開發管理:【@ohos.account.distributedAccount (分布式帳號管理)】

分布式帳號管理 本模塊提供管理分布式帳號的一些基礎功能,主要包括查詢和更新帳號登錄狀態。 說明: 本模塊首批接口從API version 7開始支持。后續版本的新增接口,采用上角標單獨標記接口的起始版本。開發前請熟悉鴻蒙開發指導文檔&#xff…

自動化設備上位機設計 四

目錄 一 設計原型 二 后臺代碼 一 設計原型 二 后臺代碼 using SimpleTCP; using SqlSugar; using System.Text;namespace 自動化上位機設計 {public partial class Form1 : Form{SqlHelper sqlHelper new SqlHelper();SqlSugarClient dbContent null;bool IsRun false;i…

C# 命名規范

開頭bool類型的變量常用縮寫 變量命名規范camelCase: 私有字段,局部變量,入參PascalCase: 命名空間、類名,方法名snake_ case、 kebab_case: 不使用 一般方法名稱遵守PascalCase命名規范例外情況: 異步方法異步方法例外情況 合理選擇單詞選擇…

【CSS】縮寫屬性place-items

place-items 是 CSS 中的一個簡寫屬性,它允許在相關的布局(如 Grid 或 Flexbox)中同時沿著塊級和內聯方向對齊元素。這個屬性是 align-items 和 justify-items 屬性的簡寫形式。如果未提供第二個值,則第一個值將作為第二個值的默認…

論文翻譯 | (DSP)展示-搜索-預測:為知識密集型自然語言處理組合檢索和語言模型

摘要 檢索增強式上下文學習已經成為一種強大的方法,利用凍結語言模型 (LM) 和檢索模型 (RM) 來解決知識密集型任務。現有工作將這些模型結合在簡單的“檢索-讀取”流程中,其中 RM 檢索到的段落被插入到 LM 提示中。 為了充分發揮凍結 LM 和 RM 的…

ARM/Linux嵌入式面經(十一):地平線嵌入式實習

地平線嵌入式實習面經 1.自我介紹 等著,在給大哥們準備了。 2.spi與iic協議可以連接多個設備嗎?最多多少個?通訊時序。 這是幾個問題,在回答的時候。不要一問就開口,花幾秒鐘沉吟思考整理一下自己的思路。 這個問題問了幾個點?每個點的回答步驟。 是我的話,我會采用以…

# Sharding-JDBC 從入門到精通(9)- 綜合案例(二)添加商品

Sharding-JDBC 從入門到精通(9)- 綜合案例(二)添加商品 一、Sharding-JDBC 綜合案例-添加商品-dao 1、在 shopping 子工程(子模塊)中,創建 dao 接口類 ProductDao.java /*** dbsharding\sh…

基于深度學習LightWeight的人體姿態之行為識別系統源碼

一. LightWeight概述 light weight openpose是openpose的簡化版本,使用了openpose的大體流程。 Light weight openpose和openpose的區別是: a 前者使用的是Mobilenet V1(到conv5_5),后者使用的是Vgg19(前10…

哈希表——C語言

哈希表(Hash Table)是一種高效的數據結構,能夠在平均情況下實現常數時間的查找、插入和刪除操作。 哈希表的核心是哈希函數,哈希函數是一個將輸入數據(通常稱為“鍵”或“key”)轉換為固定長度的整數的函數…

Efficient Contrastive Learning for Fast and Accurate Inference on Graphs

發表于:ICML24 推薦指數: #paper/??? 創新點一顆星,證明三顆星(證明的不錯,值得借鑒,但是思路只能說還行吧) 如圖, 本文采取的創新點就是MLP用原始節點,GCN用鄰居節點的對比學習.這樣,可以加快運算速度 L E C L ? 1 ∣ V ∣ ∑ v ∈ V 1 ∣ N ( v ) ∣ ∑ u ∈ N ( v )…

一篇文章Scala語言入門

Scala是一種現代編程語言,它結合了面向對象編程和函數式編程的特性,使得編寫簡潔、可擴展和高效的代碼成為可能。 1. 什么是Scala? Scala(Scalable Language)是一種面向對象和函數式編程語言。它運行在JVM&#xff0…

k8s 部署 springboot 項目內存持續增長問題分析解決

寫在前面 工作中遇到,請教公司前輩解決,簡單整理記憶博文內容涉及一次 GC 問題的分析以及解決理解不足小伙伴幫忙指正 😃,生活加油 99%的焦慮都來自于虛度時間和沒有好好做事,所以唯一的解決辦法就是行動起來,認真做完…