nginx相關面試題30道

一、基礎概念與核心特性

1. 什么是 Nginx?它的主要用途有哪些?

答案
Nginx 是一款高性能的開源 Web 服務器、反向代理服務器及負載均衡器,基于事件驅動的異步非阻塞架構,擅長處理高并發場景。
主要用途

  • 靜態資源服務(HTML/CSS/JS/ 圖片等)
  • 反向代理與負載均衡(分發請求到后端服務器集群)
  • API 網關(處理動態請求轉發)
  • 緩存服務(通過proxy_cachefastcgi_cache加速動態內容)
  • 實時消息代理(支持 WebSocket 長連接)
2. Nginx 相比 Apache 的核心優勢是什么?

答案

對比維度NginxApache
架構單主進程 + 多 worker 進程(異步非阻塞)多進程 / 線程(同步阻塞,如 prefork/worker)
高并發性能支持數萬并發連接,內存占用低并發能力較低,內存占用高
靜態資源處理原生高效,無需插件需要mod_static等插件
動態請求處理需配合 FastCGI/Proxy 轉發給后端可通過模塊(如mod_php)直接處理
配置靈活性基于模塊化設計,配置簡潔模塊化豐富但配置較復雜

解析:Nginx 的異步非阻塞模型(基于 epoll/kqueue)避免了多線程 / 進程的上下文切換開銷,適合高并發、低延遲場景;Apache 則在需要復雜模塊(如 PHP 解析)時更便捷。

3. 解釋 Nginx 的 Master-Worker 進程模型及其作用

答案

  • Master 進程
    • 讀取并驗證配置文件(nginx.conf
    • 管理 Worker 進程(啟動 / 停止 / 重啟 / 平滑升級)
    • 監聽端口,將請求分發到 Worker 進程
  • Worker 進程
    • 實際處理客戶端請求,單進程支持數千并發連接
    • 通過worker_connections控制單個進程最大連接數
    • 多 Worker 進程間通過負載均衡(如輪詢)處理請求

優勢:Master 負責管理,Worker 專注處理請求,實現資源隔離與高效并發。

4. 什么是反向代理?反向代理與正向代理的區別?

答案

  • 反向代理:位于服務器端,代理后端集群接收客戶端請求,隱藏真實服務器地址。例如 Nginx 接收請求后轉發到 Tomcat/Node.js 服務器。
  • 正向代理:位于客戶端側,代理客戶端向目標服務器發送請求(如瀏覽器通過代理訪問外網)。
    核心區別
  • 反向代理代理的是服務器,客戶端不知道真實后端;正向代理代理的是客戶端,服務器不知道真實客戶端 IP。
5. 簡述 Nginx 處理 HTTP 請求的流程

答案

  1. 客戶端發送請求到 Nginx 監聽端口(如 80/443)。
  2. Master 進程接收請求,分配給某個 Worker 進程。
  3. Worker 進程根據server塊和location匹配規則處理請求:
    • 若為靜態資源,直接讀取文件返回(如root/alias指定路徑)。
    • 若為動態請求,通過proxy_pass/fastcgi_pass轉發到后端服務器。
  4. 后端服務器處理請求并返回結果,Nginx 將響應返回給客戶端(可能經過緩存、壓縮等處理)。

二、配置與優化

6. 如何配置 Nginx 監聽多個端口?如何指定域名綁定?

答案

server {listen 80;          # 監聽80端口listen 443 ssl;     # 監聽443端口并啟用HTTPSserver_name example.com www.example.com;  # 綁定域名# 配置HTTPS證書ssl_certificate /path/to/cert.pem;ssl_certificate_key /path/to/key.pem;
}
7. 如何實現 URL 重寫(Rewrite)?舉例說明場景

答案
使用rewrite指令結合正則表達式實現重寫,場景如:

  • 強制 HTTPS:
    server {listen 80;server_name example.com;rewrite ^(.*)$ https://$server_name$1 permanent;  # 301重定向
    }
    
  • 路徑跳轉:
    location /old-path/ {rewrite ^/old-path/(.*)$ /new-path/$1 break;  # 內部重寫,不返回客戶端
    }
    

指令說明permanent(301)、redirect(302)、break(內部跳轉)。

8. 如何配置 Nginx 禁止特定 IP 訪問?

答案
使用ngx_http_access_module模塊:

location / {deny 192.168.1.100;  # 禁止單個IPdeny 192.168.1.0/24; # 禁止IP段allow all;           # 允許其他IP
}
9. 如何優化 Nginx 的靜態資源訪問性能?

答案

  • 開啟sendfile高效傳輸:
    http {sendfile on;  # 直接通過內核傳輸文件,減少用戶態/內核態拷貝tcp_nopush on; # 合并TCP包,減少網絡IO
    }
    
  • 配置緩存頭(Cache-Control/Expires):
    location ~* \.(js|css|png|jpg)$ {expires 7d;  # 瀏覽器緩存7天add_header Cache-Control "public";
    }
    
  • 啟用 Gzip 壓縮:
    gzip on;
    gzip_types text/css application/javascript;
    
10. 如何限制客戶端請求頻率(限流)?

答案
使用ngx_http_limit_req_module模塊(漏桶算法):

http {limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;  # 按IP限流,每秒1請求server {location / {limit_req zone=one burst=5 nodelay;  # 突發請求允許5個排隊}}
}

Nginx 的驚群問題(Thundering Herd Problem)及解決方案

什么是驚群問題?

????????當多個進程(如 Nginx 的 Worker 進程)同時監聽同一個端口時,若有新的連接請求到達,所有等待該端口的進程會被同時喚醒,但最終只有一個進程能成功處理連接,其他進程會重新進入休眠狀態。這種現象稱為?驚群效應(Thundering Herd Problem)。
影響:頻繁的進程上下文切換會消耗 CPU 資源,降低服務器性能,尤其在高并發場景下更為明顯。

Nginx 驚群問題的觸發場景

Nginx 使用?Master-Worker 多進程模型

  • Master 進程:負責管理 Worker 進程,監聽端口并分配連接。
  • Worker 進程:多個 Worker 進程共同監聽 Master 進程打開的端口,等待處理客戶端請求。
    在舊版本的 Nginx(或未優化配置時),當新連接到達時,所有 Worker 進程會被喚醒并競爭處理連接,導致驚群效應。
解決方案:利用?SO_REUSEPORT?套接字選項

現代操作系統(如 Linux 3.9+、FreeBSD 10+)支持?SO_REUSEPORT?選項,允許?多個套接字綁定到同一 IP 地址和端口,內核會自動將連接請求分發到不同的 Worker 進程,避免驚群問題。

配置步驟
  1. 在 Nginx 配置中啟用?use_reuseport

    worker_processes 4;  # 設置合理的 Worker 進程數(建議等于 CPU 核心數)
    worker_rlimit_nofile 65535;  # 調整文件描述符限制events {worker_connections 1024;  # 每個 Worker 進程的最大連接數use epoll;  # 使用高效的事件驅動模型(Linux 推薦 epoll)multi_accept on;  # 一次盡可能多地接受新連接(可選優化)
    }http {# 在 http 塊或 server 塊中添加:server {listen 80 reuseport;  # 關鍵配置:啟用 SO_REUSEPORTserver_name example.com;# ... 其他配置}
    }
    
    • listen 80 reuseport:告訴內核使用?SO_REUSEPORT?選項綁定端口,每個 Worker 進程獨立監聽自己的套接字。
    • worker_processes?需大于 1,否則無需處理驚群問題。
  2. 驗證配置生效
    重啟 Nginx 后,通過?ss -ltnp | grep nginx?查看端口監聽情況,應看到每個 Worker 進程獨立監聽端口:

    tcp    LISTEN     0      128       :::80                    :::*                   users:(("nginx",pid=1234,fd=6),("nginx",pid=1235,fd=6),("nginx",pid=1236,fd=6),("nginx",pid=1237,fd=6))
    

    每個 Worker 進程對應一個獨立的監聽套接字(fd=6?是示例文件描述符)。

其他優化:accept_mutex?鎖(舊方案)

在不支持?SO_REUSEPORT?的系統中,Nginx 默認通過?accept_mutex?互斥鎖?緩解驚群問題:

?
  • 多個 Worker 進程競爭一把鎖,只有獲得鎖的進程才能處理新連接,減少同時喚醒的進程數。
  • 配置示例(默認開啟,無需手動設置):
    events {accept_mutex on;  # 啟用互斥鎖(默認 on)accept_mutex_delay 50ms;  # 鎖競爭失敗后的等待時間(默認 50ms)
    }
    
    缺點:鎖競爭仍會帶來一定性能損耗,不如?SO_REUSEPORT?高效。

三、負載均衡與代理

11. Nginx 支持哪些負載均衡算法?如何配置?

答案

  • 輪詢(默認):依次分配請求到后端服務器。
    upstream backend {server 192.168.1.1;server 192.168.1.2;
    }
    
  • 權重輪詢(weight:按權重分配,適用于性能不均的服務器。
    server 192.168.1.1 weight=3;  # 權重3(默認1)
    
  • IP 哈希(ip_hash:相同 IP 固定訪問同一服務器(解決 Session 問題)。
    upstream backend {ip_hash;server 192.168.1.1;
    }
    
  • 最少連接(least_conn:分配給當前連接最少的服務器。
    upstream backend {least_conn;server 192.168.1.1;
    }
    
  • URL 哈希(需自定義模塊,如ngx_http_upstream_hash_module:按 URL 哈希值分配。
12. 如何實現后端服務器的健康檢查?

答案
使用ngx_http_proxy_moduleproxy_next_upstream指令,配置失敗重試:

upstream backend {server 192.168.1.1 max_fails=3 fail_timeout=30s;  # 3次失敗則標記為不可用,30s后重試server 192.168.1.2;
}
location / {proxy_pass http://backend;proxy_next_upstream error timeout http_502 http_504;  # 失敗時轉發到下一臺服務器
}

?

13. 反向代理時如何傳遞客戶端真實 IP?

答案
默認 Nginx 傳遞的X-Forwarded-For可能被多級代理修改,需配置:

location / {proxy_pass http://backend;proxy_set_header X-Real-IP $remote_addr;       # 傳遞真實客戶端IPproxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;  # 保留代理鏈IP
}
14. 如何配置 Nginx 作為 WebSocket 代理?

答案
需在proxy_pass中設置 WebSocket 協議頭:

location /ws/ {proxy_pass http://websocket-server;proxy_http_version 1.1;proxy_set_header Upgrade $http_upgrade;proxy_set_header Connection "upgrade";
}
15. 什么是動靜分離?如何實現?

答案
動靜分離:將靜態資源(如圖片、JS)與動態請求(如 API)分離處理,靜態資源由 Nginx 直接響應,動態請求轉發給后端服務器。
實現方式

server {location /static/ {root /var/www/app;  # 直接返回靜態文件autoindex on;       # 開啟目錄瀏覽(可選)}location /api/ {proxy_pass http://backend-api;  # 轉發動態請求}
}

四、高級特性與故障處理

16. 如何配置 Nginx 的 HTTP 緩存(Proxy Cache)?

答案
使用ngx_http_proxy_cache_module模塊:

http {proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m max_size=10g inactive=60m;proxy_cache_key $scheme$host$request_uri;  # 緩存鍵規則server {location / {proxy_pass http://backend;proxy_cache my_cache;          # 啟用緩存proxy_cache_valid 200 302 1h;  # 200/302響應緩存1小時proxy_cache_valid 404 1m;      # 404響應緩存1分鐘}}
}
17. 常見的 502 Bad Gateway 錯誤原因及解決方法?

答案
原因

  • 后端服務器宕機或未啟動
  • 后端服務請求超時(Nginx 等待后端響應超時)
  • 負載均衡配置錯誤(如upstream服務器地址錯誤)
  • 后端服務連接數耗盡

解決方法

  1. 檢查后端服務狀態(systemctl status tomcat等)。
  2. 調整 Nginx 超時參數:
    proxy_connect_timeout 10s;    # 連接后端超時
    proxy_read_timeout 30s;       # 讀取后端響應超時
    
  3. 增加后端服務器節點或優化服務性能。
18. 如何查看 Nginx 的實時并發連接數?

答案

  • 使用nginx -s status(需配置stub_status模塊):
    location /status {stub_status on;access_log off;
    }
    
    訪問http://your-nginx/status查看:
    Active connections: 123  
    server accepts handled requests  10000 10000 20000  
    Reading: 2 Writing: 50 Waiting: 71  # Waiting為空閑keep-alive連接
    
  • 命令行工具:netstat -ant | grep :80 | wc -l(統計 80 端口連接數)。
19. 如何實現 Nginx 配置的平滑重啟?

答案

  • 驗證配置正確性:nginx -t
  • 平滑重啟(不中斷現有連接):
    nginx -s reload  # 重新加載配置
    nginx -s reopen  # 重新打開日志文件
    
  • 原理:Master 進程生成新 Worker 進程,舊 Worker 處理完剩余請求后退出。
20. 如何禁止 Nginx 記錄特定 URL 的訪問日志?

答案
location中關閉日志記錄:

location /static/ {root /var/www/static;access_log off;  # 關閉該路徑的訪問日志
}

五、擴展與實戰

21. 如何為 Nginx 添加自定義模塊?

答案

  1. 下載 Nginx 源碼并解壓:
    wget http://nginx.org/download/nginx-1.24.0.tar.gz
    tar -zxvf nginx-1.24.0.tar.gz
    
  2. 編譯時添加模塊(以ngx_http_sub_module為例):
    cd nginx-1.24.0
    ./configure --add-module=/path/to/module
    make && make install
    
  3. 重啟 Nginx 使模塊生效。
22. 如何配置 Nginx 支持 HTTP/2?

答案

  1. 確保編譯時啟用ngx_http_v2_module(默認開啟)。
  2. 配置 HTTPS 并啟用 HTTP/2:
    server {listen 443 ssl http2;  # 聲明HTTP/2server_name example.com;ssl_certificate /path/to/cert.pem;ssl_certificate_key /path/to/key.pem;# 其他HTTPS優化配置(如TLS版本、加密算法)
    }
    
23. 如何實現 Nginx 的請求體大小限制?

答案
通過client_max_body_size指令限制(默認 1MB):

http {client_max_body_size 10m;  # 允許最大請求體10MBserver {location /upload/ {client_max_body_size 50m;  # 針對特定路徑單獨配置}}
}
24. 解釋 Nginx 中rootalias的區別

答案

  • root:將請求路徑拼接到配置路徑后查找文件。
    例:root /var/www; location /static/?→ 訪問/static/test.js對應文件/var/www/static/test.js
  • alias:直接替換請求路徑為配置路徑。
    例:alias /var/www/static/; location /static/?→ 訪問/static/test.js對應文件/var/www/static/test.js
    關鍵區別alias會覆蓋location路徑,root則拼接路徑;alias后需加?/root無需。
25. 如何配置 Nginx 的跨域資源共享(CORS)?

答案
使用add_header添加 CORS 響應頭:

location /api/ {proxy_pass http://backend;add_header Access-Control-Allow-Origin *;         # 允許所有來源add_header Access-Control-Allow-Methods "GET, POST, OPTIONS";add_header Access-Control-Allow-Headers "DNT,User-Agent,Content-Type";if ($request_method = 'OPTIONS') {return 204;  # 處理預檢請求}
}

六、性能與安全

26. 如何優化 Nginx 的 SSL/TLS 性能?

答案

  • 啟用 TLS 1.3(比 1.2 更快):
    ssl_protocols TLSv1.3 TLSv1.2;
    
  • 選擇高效加密算法:
    ssl_ciphers ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384;
    ssl_prefer_server_ciphers on;
    
  • 開啟會話緩存(減少握手次數):
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 10m;
    
27. 如何防范 Nginx 的 CC 攻擊(分布式請求偽造)?

答案

  • 限制同一 IP 的并發連接數(ngx_http_limit_conn_module):
    limit_conn_zone $binary_remote_addr zone=conn_limit:10m;
    server {location / {limit_conn conn_limit 10;  # 單個IP最多10個連接limit_conn_status 429;     # 超出限制返回429}
    }
    
  • 結合 WAF(如 ModSecurity)或云防護服務。
28. 解釋 Nginx 中worker_rlimit_nofile的作用

答案
該指令用于設置 Worker 進程的最大打開文件數,解決 “Too many open files” 錯誤。

worker_rlimit_nofile 65535;  # 單個Worker進程最多打開65535個文件描述符

場景:高并發場景下,需確保該值大于worker_connections(默認 1024)。

29. 如何實現 Nginx 的請求日志切割?

答案

  • 手動切割
    mv /var/log/nginx/access.log /var/log/nginx/access.log.`date +%Y%m%d`
    kill -USR1 `cat /var/run/nginx.pid`  # 通知Nginx重新生成日志文件
    
  • 自動切割(通過 cron 任務)
    0 0 * * * mv /var/log/nginx/access.log /var/log/nginx/access.log.$(date +\%Y\%m\%d) && /usr/sbin/nginx -s reopen
    
30. 簡述 Nginx 在微服務架構中的應用場景

答案

  • API 網關:統一入口,處理請求路由、限流、認證。
  • 靜態資源服務器:獨立部署,減輕后端壓力。
  • 服務網格邊緣代理:配合 Istio/Linkerd 處理南北向流量。
  • 灰度發布:通過權重輪詢或流量鏡像實現分批次發布。

0voice · GitHub?

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

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

相關文章

數據庫實驗報告 數據定義操作 3

實驗報告(第3次) 實驗名稱 數據定義操作 實驗時間 10月12日1-2節 一、實驗內容 1、本次實驗是用sql語句創建庫和表,語句是固定的,要求熟記這些sql語句。 二、源程序及主…

霍夫圓變換全面解析(OpenCV)

文章目錄 一、霍夫圓變換基礎1.1 霍夫圓變換概述1.2 圓的數學表達與參數化 二、霍夫圓變換算法實現2.1 標準霍夫圓變換算法流程2.2 參數空間的表示與優化 三、關鍵參數解析3.1 OpenCV中的HoughCircles參數3.2 參數調優策略 四、Python與OpenCV實現參考4.1 基本實現代碼4.2 改進…

記錄一次修改nacos安全問題導致服務調用出現404

1、nacos默認值修改 nacos.core.auth.plugin.nacos.token.secret.key**** nacos.core.auth.server.identity.key******** nacos.core.auth.server.identity.value************ 重啟nacos, 這時候微服務的token認證會立即失效,等待自動重連認證或者手動重啟服務 2、…

Python面試總結

hello,大家好,我是potato,我總結一下最近的面試遇到的問題~ 1.Python開發(軟通動力) 自我介紹主要問了項目(YOLOv11)項目遇到的難點和解決方法is,列表和元組的區別Python多線程有什么問題?Pyt…

5.18 day24

知識點回顧: 元組可迭代對象os模塊 作業:對自己電腦的不同文件夾利用今天學到的知識操作下,理解下os路徑。 元組 元組的特點: 有序,可以重復,這一點和列表一樣 元組中的元素不能修改,這一點…

Uniapp中小程序調用騰訊地圖(獲取定位地址)

1、先配置權限: 這是上圖的代碼: "permission": { "scope.userLocation": { "desc": "你的位置信息將用于小程序位置接口的效果展示" } } 第二步:寫代碼: //下面是uniapp的模版代碼 主…

寫spark程序數據計算( 數據庫的計算,求和,匯總之類的)連接mysql數據庫,寫入計算結果

1. 添加依賴 在項目的 pom.xml&#xff08;Maven&#xff09;中添加以下依賴&#xff1a; xml <!-- Spark SQL --> <dependency> <groupId>org.apache.spark</groupId> <artifactId>spark-sql_2.12</artifactId> <version>3.3.0…

nginx服務器實驗

1.實驗要求 1&#xff09;在Nginx服務器上搭建LNMP服務&#xff0c;并且能夠對外提供Discuz論壇服務。 在Web1、Web2服務器上搭建Tomcat 服務。 2&#xff09;為nginx服務配置虛擬主機&#xff0c;新增兩個域名 www.kgc.com 和 www.benet.com&#xff0c;使用http://www.kgc.…

Spring Boot 與 RabbitMQ 的深度集成實踐(一)

引言 ** 在當今的分布式系統架構中&#xff0c;隨著業務復雜度的不斷提升以及系統規模的持續擴張&#xff0c;如何實現系統組件之間高效、可靠的通信成為了關鍵問題。消息隊列作為一種重要的中間件技術&#xff0c;應運而生并發揮著舉足輕重的作用。 消息隊列的核心價值在于其…

c++多線程debug

debug demo 命令行查看 ps -eLf|grep cam_det //查看當前運行的輕量級進程 ps -aux | grep 執行文件 //查看當前運行的進程 ps -aL | grep 執行文件 //查看當前運行的輕量級進程 pstree -p 主線程ID //查看主線程和新線程的關系 查看線程棧結構 pstack 線程ID 步驟&…

10.7 LangChain v0.3架構大升級:模塊化設計+多階段混合檢索,開發效率飆升3倍!

LangChain v0.3 技術生態與未來發展 關鍵詞:LangChain Chains, Agents 架構, Retrieval Strategy, LangGraph, 模塊化設計 3. LangChain 項目:Chains, Agents, Retrieval Strategy LangChain v0.3 通過 Chains-Agents-Retrieval 三位一體的技術棧,構建起完整的大模型應用開…

分布式 ID 生成的五種方法:優缺點與適用場景

0.簡介 在分布式系統中&#xff0c;生成全局唯一的id是一個常見的需求。由于分布式系統的特性&#xff08;多節點&#xff0c;網絡分區&#xff0c;時鐘不同步等&#xff09;&#xff0c;傳統的單機ID生成方式不再適用&#xff0c;所以一些分布式生成方式應運而生&#xff0c;…

基于單片機路燈自動控制儀仿真設計

標題:基于單片機路燈自動控制儀仿真設計 內容:1.摘要 本設計旨在解決傳統路燈控制方式效率低、能耗大的問題&#xff0c;開展了基于單片機的路燈自動控制儀仿真設計。采用單片機作為核心控制單元&#xff0c;結合光照傳感器、時鐘模塊等硬件&#xff0c;運用相關軟件進行編程和…

計算機網絡-MPLS VPN基礎概念

前面幾篇文章我們學習了MPLS的標簽轉發原理&#xff0c;有靜態標簽分發和LDP動態標簽協議&#xff0c;可以實現LSR設備基于標簽實現數據高效轉發。現在開始學習MPLS在企業實際應用的場景-MPLS VPN。 一、MPLS VPN概念 MPLS&#xff08;多協議標簽交換&#xff09;位于TCP/IP協…

LWIP的Socket接口

Socket接口簡介 類似于文件操作的一種網絡連接接口&#xff0c;通常將其稱之為“套接字”。lwIP的Socket接口兼容BSD Socket接口&#xff0c;但只實現完整Socket的部分功能 netconn是對RAW的封裝 Socket是對netconn的封裝 SOCKET結構體 struct sockaddr { u8_t sa_len; /* 長…

windows 安裝gdal實現png轉tif,以及柵格拼接

windows 安裝gdal實現png轉tif&#xff0c;以及柵格拼接 一、安裝gdal 網上有很多安裝gdal的方法&#xff0c;此處通過osgeo4w安裝gdal 1.下載osgeo4w 下載地址 https://trac.osgeo.org/osgeo4w/ 2、安裝osgeo4w exe文件安裝&#xff0c;前面部分很簡單&#xff0c;就不再…

Node.js 源碼概覽

Node.js 是一個基于 Chrome V8 引擎的 JavaScript 運行時環境&#xff0c;它的源碼結構相當龐大且復雜。下面我將為你講解 Node.js 源碼的主要結構和關鍵組成部分。 源碼結構 Node.js 的主要源碼目錄結構如下&#xff1a; node/ ├── lib/ # JavaScript 核心模…

Linux :線程 【生產者消費者模型】

Linux &#xff1a;線程 【生產者消費者模型與信號量】 &#xff08;一&#xff09;生產消費模型1、生產消費模式概念2、生產者消費者之間的關系3、生產者消費者模型優點 &#xff08;二&#xff09;基于BlockingQueue的生產者消費者模型1、基于阻塞隊列模型2、模擬實現基于阻塞…

mac本地docker鏡像上傳指定虛擬機

在Mac本地將Docker鏡像上傳至指定虛擬機的完整步驟 1. 在Mac本地保存Docker鏡像為文件 通過docker save命令將鏡像打包為.tar文件&#xff0c;便于傳輸至虛擬機。 # 示例&#xff1a;保存名為"my_image"的鏡像到當前目錄 docker save -o my_image.tar my_image:ta…

C++跨平臺開發經驗與解決方案

在當今軟件開發領域&#xff0c;跨平臺開發已成為一個重要的需求。C作為一種強大的系統級編程語言&#xff0c;在跨平臺開發中扮演著重要角色。本文將分享在實際項目中的跨平臺開發經驗和解決方案。 1. 構建系統選擇 CMake的優勢 跨平臺兼容性好 支持多種編譯器和IDE 強大…