【liunx】web高可用---nginx

NGINX簡介

Nginx(發音為 “engine x”)是一款由俄羅斯程序員 Igor Sysoev 開發的?輕量級、高性能的 HTTP 和反向代理服務器,同時也是一個 IMAP/POP3/SMTP 代理服務器。自 2004 年首次發布以來,Nginx 憑借其?高并發處理能力、低內存消耗和穩定性,成為全球最受歡迎的 Web 服務器之一,廣泛應用于靜態資源服務、反向代理、負載均衡、API 網關等場景

NGINX安裝

源碼編譯

#解壓壓縮包
tar zxf nginx-1.24.0.tar.gzcd nginx-1.24.0
#編譯
./configure  --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_ssl_module --
with-http_v2_module --with-http_realip_module --with-http_stub_status_module --with-pcre --
with-stream --with-stream_ssl_module --with-stream_realip_module
make
make install

使用make和makeinstall編譯和安裝

驗證版本以及編譯參數

查看版本信息

自定義版本(在編譯前編輯文件)

#編輯版本相關文件
[root@Webserver nginx-1.26.1]# vim src/core/nginx.h#define NGINX_VERSION      ""       
#define NGINX_VER          "xixihaha/" NGINX_VERSION

重新編譯后查看版本信息

平滑升級

服務器運行時要進行升級,此時不能停止服務器,我們可以進行平滑升級---即不停止服務器的情況下進行升級

將新版本編譯和make后不用makeinstall

[root@Nginx sbin]# cd /usr/local/nginx/sbin/
[root@Nginx sbin]# cp -p nginx nginx.old
[root@Nginx sbin]# /usr/bin/cp -f /mnt/nginx-1.26.1/objs/nginx /usr/local/nginx/sbin/nginx
[root@Nginx sbin]# ps aux | grep nginx
root       37705  0.0  0.1   9868  2052 ?        Ss   16:04   0:00 nginx: master process ./nginx
nginx      37706  0.0  0.2  14200  5124 ?        S    16:04   0:00 nginx: worker process
root       40854  0.0  0.1   6408  2304 pts/0    S+   16:20   0:00 grep --color=auto nginx
[root@Nginx sbin]# kill -USR2 37705
[root@Nginx sbin]# kill -WINCH 37705
[root@Nginx sbin]# ps aux | grep nginx
root       37705  0.0  0.1   9868  2564 ?        Ss   16:04   0:00 nginx: master process ./nginx
root       40857  0.0  0.3   9876  6528 ?        S    16:20   0:00 nginx: master process ./nginx
nginx      40858  0.0  0.2  14208  4996 ?        S    16:20   0:00 nginx: worker process
root       40862  0.0  0.1   6408  2304 pts/0    S+   16:21   0:00 grep --color=auto nginx
[root@Nginx sbin]# nginx -V
nginx version: nginx/1.26.1
built by gcc 11.4.1 20231218 (Red Hat 11.4.1-3) (GCC)
built with OpenSSL 3.0.7 1 Nov 2022
TLS SNI support enabled
configure arguments: --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_ssl_module --with-http_v2_module ip_module --with-http_stub_status_module --with-http_gzip_static_module --with-pcre --with-stream --with-stream_ssl_modm_realip_module

使用sysstemctl控制nginx

#編輯/lib/systemd/system/nginx.service文件
[root@Webserver ~]# cd /lib/systemd/system
[root@Webserver system]# vim nginx.service
#配置文件內容
[Unit]
Description=The NGINX HTTP and reverse proxy server
After=syslog.target network.target remote-fs.target nss-lookup.target[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid   #指定pid
ExecStartPre=/usr/local/nginx/sbin/nginx -t    #在主服務啟動之前執行的命令
ExecStart=/usr/local/nginx/sbin/nginx   #啟動服務的核心進程
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true[Install]
WantedBy=multi-user.target

NGINX核心配置

nginx主配置文件

main block:主配置段,即全局配置段#事件驅動相關的配置
event {
...
}#http/https 作為web服務器相關配置段
http {
...
}#默認配置文件不包括下面兩個部分
#mail 作為郵件服務器相關配置段
mail {
...
}#stream 反向代理相關配置段
stream {
...
}

全局配置參數

/usr/local/nginx/conf/nginx.conf

http塊參數


[root@nginx ~]# vim /usr/local/nginx/conf/nginx.conf
http {#在響應報文中將指定的文件擴展名映射至MIME對應的類型include       mime.types;				#可以識別文本,圖像,音頻,視頻等其他的數據default_type  application/octet-stream;	#沒有識別的默認類型,例如php,ngxin不識別需要安裝php才能渲染呈現log_format  main  '$remote_addr - $remote_user [$time_local] "$request" ''$status $body_bytes_sent "$http_referer" ''"$http_user_agent" "$http_x_forwarded_for"';access_log  logs/access.log  main;		#使用定義為main的日志格式,存放在根目錄的logs/access.log中sendfile        on;						#零拷貝功能,sendfile系統調用在兩個文件描述符之間直接傳遞數據(完全在內核中操作)#tcp_nopush     on;#keepalive_timeout  0;keepalive_timeout  65;					#長連接超時時間,單位是s#gzip  on;								#開啟壓縮功能server {#web服務配置}include "/usr/local/nginx/conf.d/*.conf";	#導入其他路徑的配置文件,子配置文件#要放在默認發布文件目錄下,不然會覆蓋默認

核心配置塊

c10k高并發

[root@Webserver ~]# vim /usr/local/nginx/conf/nginx.conf

[root@Webserver ~]#vim /usr/local/nginx/conf/nginx.conf

image-20250724153054696

[root@Webserver ~]#vim /etc/security/limits.conf

image-20250724164908954

安裝測試壓力工具以及測試

[root@Nginx sbin]# dnf install httpd-tools -y
[root@Nginx sbin]# ab -n 100000 -c 5000 http://172.25.254.10/index.html

基于域名的web站點發布

root和alias

root:指定web的家目錄,在定義location的時候,文件的絕對路徑等于 root+location

示例:

alias:定義路徑別名,會把訪問的路徑重新定義到其指定的路徑,文檔映射的另一種機制;僅能用于 location上下文,此指令使用較少

示例:

location詳細使用

location指令用于匹配請求 URI,其匹配規則可分為匹配模式和優先級兩部分

匹配模式符號規則優先級
精確匹配=規則:僅匹配與uri完全一致的請求,不包含子路徑最優先
前綴匹配^~規則:匹配以uri為前綴的請求,一旦匹配成功,不再檢查正則匹配其次
正則匹配

~或~*

~是區分大小寫的

~*是不區分大小寫的

規則:按正則表達式匹配 URI,僅匹配完整路徑中符合正則的部分再其次
一般匹配無符號規則:匹配以uri為前綴的請求,但優先級低于正則匹配,會先檢查正則匹配再判斷最不優先

示例:

假設配置如下

location = / { ... }          # 1. 精確匹配 /
location ^~ /static/ { ... }   # 2. 前綴匹配 /static/ 及子路徑
location ~ \.php$ { ... }      # 3. 正則匹配 .php 結尾的請求
location /test { ... }         # 4. 普通前綴匹配 /test 及子路徑

當訪問/時匹配精準匹配

當訪問/static/css/style.css匹配前綴匹配

當訪問/index.php時會匹配正則匹配

當訪問/test/abc會匹配普通匹配

賬戶認證

賬戶認證是一種通過用戶名和密碼驗證訪問者身份的安全機制,常用于限制對特定網頁、目錄或整個網站的訪問,適用于內部系統、后臺管理界面等需要權限控制的場景

配置文件:

image-20250726124442872

實驗效果:

image-20250726124622186

自定義錯誤頁面

自定義錯誤頁面是指通過配置 Nginx,將默認的錯誤提示頁面(如 404、500 等)替換為自定義設計的頁面,以提升用戶體驗、保持網站風格一致性,甚至傳遞品牌信息或引導用戶操作

創建錯誤頁面

image-20250726125100092

子配置文件內容:

image-20250726125252436

效果:

image-20250726125457994

自定義錯誤日志

自定義錯誤日志是指通過配置,對錯誤日志的存儲路徑、記錄格式、日志級別等進行個性化設置,以便更高效地監控、排查和分析服務器運行過程中出現的錯誤

配置文件:

image-20250726125715881

效果:

image-20250726125907600

檢測文件是否存在

當檢測的文件不存在時會顯示指定的內容

image-20250726130507071

image-20250726130721118

測試效果:

image-20250726130735777

長連接

長連接(Persistent Connection)是指客戶端與服務器建立一次 TCP 連接后,可在該連接上發送多個 HTTP 請求,而無需每次請求都重新建立連接,從而減少連接建立 / 關閉的開銷,提升通信效率。這一機制在 HTTP/1.1 中默認啟用,是優化 Web 性能的重要手段

長連接一般在主配置文件中配置

NGINX高級配置

nginx狀態頁

狀態頁是 Nginx 提供的一個內置功能,用于展示當前 Nginx 服務器的實時運行狀態信息,如連接數、請求處理情況、worker 進程狀態等。它通過?ngx_http_stub_status_module?模塊實現,是監控 Nginx 性能和排查問題的重要工具

[root@Webserver ~]# vim /usr/local/nginx/conf.d/jie.conf
location /status {stub_status;auth_basic "login pwsswd";auth_basic_user_file /usr/local/nginx/.htpasswd;}

image-20250726151336937

測試:

image-20250726151406406

壓縮功能

通過對發送給客戶端的數據進行壓縮,有效減少數據傳輸量,進而提升網站訪問速度,優化用戶體驗,同時還能降低服務器帶寬消耗

? [root@Webserver ~]# vim /usr/local/nginx/conf/nginx.confkeepalive_timeout ?60;keepalive_requests 120;gzip  on;gzip_comp_level 4;gzip_disable "MSIE [1-6]\.";gzip_min_length 4k;gzip_vary on;

image-20250726151602315

測試效果:

NGINX變量使用

使用nginx的變量需要在編譯時添加模塊

常用內置變量

$remote_addr客戶端的 IP 地址
$args請求中的查詢字符串(即 URL 中?后面的部分)
$document_root當前請求對應的 Nginx 配置中的root指令指定的文檔根目錄
$document_uri$request_uri類似,是當前請求的 URI,不包含域名部分
$host請求頭中的Host字段值
$http_user_agent客戶端的用戶代理字符串,包含客戶端的瀏覽器、操作系統等信息
$request_filename當前請求的文件路徑,結合rootalias指令生成
$scheme請求使用的協議,通常是http?或?https
$http_cookie客戶端發送的Cookie請求頭內容
$cookie_key2獲取客戶端Cookie中名為key2?的值
$http_Accept客戶端發送的Accept請求頭內容,表明客戶端能夠接受的響應內容類型

自定義變量

Nginx Rewrite相關功能

riwrite簡介

  • Nginx服務器利用 ngx_http_rewrite_module 模塊解析和處理rewrite請求

  • 此功能依靠 PCRE(perl compatible regular expression),因此編譯之前要安裝PCRE庫

  • rewrite是nginx服務器的重要功能之一,用于實現URL的重寫,URL的重寫是非常有用的功能

  • 比如它可以在我們改變網站結構之后,不需要客戶端修改原來的書簽,也無需其他網站修改我們的 鏈接,就可以設置為訪問

  • 另外還可以在一定程度上提高網站的安全性。

ngx_http_rewrite_module 模塊指令

if

if?指令用于根據指定條件執行一系列重寫或配置操作,類似于編程語言中的條件判斷語句。它允許根據請求的屬性(如 URL、請求頭、變量等)動態調整 Nginx 的處理邏輯,是實現 URL 重寫、訪問控制、動態配置等功能的核心工具

set

set?指令用于定義或修改變量,這些變量可在后續的配置邏輯(如?if?判斷、rewrite?重寫、請求頭設置等)中引用,是實現動態配置和邏輯處理的重要工具

break

break?指令用于終止當前作用域內的重寫規則(rewrite)執行,并停止后續其他重寫相關指令的處理,直接按當前 URI 繼續處理請求。它的核心作用是控制重寫流程,避免不必要的規則重復執行

return

return?指令用于直接終止請求處理流程,并向客戶端返回指定的 HTTP 狀態碼、重定向 URL 或響應內容。它是實現跳轉、訪問控制、錯誤處理等功能的常用指令,作用于請求處理的任意階段,一旦執行就會立即結束當前請求的處理

常用狀態碼:

200:成功(常用于返回簡單響應內容)

301:永久重定向(瀏覽器會緩存跳轉關系,適合永久遷移的 URL)

302:臨時重定向(默認,瀏覽器不緩存,適合臨時跳轉)

403:禁止訪問(常用于權限控制)

404:資源不存在(可自定義錯誤頁面或直接返回)

503:服務暫時不可用(常用于過載保護或維護)

示例:

強制使用加密的https
server {listen 80;server_name example.com;# 所有 HTTP 請求永久重定向到 HTTPSreturn 301 https://www.jie.org;
}

rewrite

通過正則表達式的匹配來改變URI,可以同時存在一個或多個指令,按照順序依次對URI進行匹配, rewrite主要是針對用戶請求的URL或者是URI做具體處理

正則表達式:

. #匹配除換行符以外的任意字符
\w #匹配字母或數字或下劃線或漢字
\s #匹配任意的空白符
\d #匹配數字
\b #匹配單詞的開始或結束
^ #匹配字付串的開始
$ #匹配字符串的結束
* #匹配重復零次或更多次
+ #匹配重復一次或更多次
? #匹配重復零次或一次
(n) #匹配重復n次
{n,} #匹配重復n次或更多次
{n,m} #匹配重復n到m次
*? #匹配重復任意次,但盡可能少重復
+? #匹配重復1次或更多次,但盡可能少重復
?? #匹配重復0次或1次,但盡可能少重復
{n,m}? #匹配重復n到m次,但盡可能少重復
{n,}? #匹配重復n次以上,但盡可能少重復
\W #匹配任意不是字母,數字,下劃線,漢字的字符
\S #匹配任意不是空白符的字符
\D #匹配任意非數字的字符
\B #匹配不是單詞開頭或結束的位置
[^x] #匹配除了x以外的任意字符
[^jie] #匹配除了jie 這幾個字母以外的任意字符

rewrite flag 使用介紹

用于控制重寫規則執行后的處理流程,決定是否繼續執行其他規則、是否重新匹配?location?等。合理使用?flag?可以精準控制 URL 重寫的邏輯,避免不必要的規則循環或錯誤跳轉

redirect;
#臨時重定向,重寫完成后以臨時重定向方式直接返回重寫后生成的新URL給客戶端
#由客戶端重新發起請求;使用相對路徑,或者http://或https://開頭,狀態碼:302permanent;
#重寫完成后以永久重定向方式直接返回重寫后生成的新URL給客戶端
#由客戶端重新發起請求,狀態碼:301break;
#重寫完成后,停止對當前URL在當前location中后續的其它重寫操作
#而后直接跳轉至重寫規則配置塊之后的其它配置,結束循環,建議在location中使用
#適用于一個URL一次重寫last;
#重寫完成后,停止對當前URI在當前location中后續的其它重寫操作,
#而后對新的URL啟動新一輪重寫檢查,不建議在location中使用
#適用于一個URL多次重寫,要注意避免出現超過十次以及URL重寫后返回錯誤的給用戶

redirect與permanent區別

redirect(臨時重定向瀏覽器會臨時記錄新 URL,但下次請求原 URL 時,仍會向服務器確認最新地址。搜索引擎不會更新原 URL 的索引,仍會保留原 URL 的權重和排名。通常指HTTP 302 Found(或 307 Temporary Redirect)狀態碼,表示請求的資源臨時轉移到了新的 URL。

permanent(永久重定向)瀏覽器會永久緩存新 URL,下次請求原 URL 時,會直接跳轉到新地址,不再向服務器確認。搜索引擎會更新索引,將原 URL 的權重和排名轉移到新 URL,原 URL 會逐漸從搜索結果中消失。對應HTTP 301 Moved Permanently狀態碼,表示請求的資源永久轉移到了新的 URL。

動靜分離

兩臺后端服務器一臺靜態一臺動態

配置文件

image-20250727151523622

緩存

配置方法:

image-20250727160633315

image-20250727160653469

測試效果:

緩存前:

image-20250727160709216

緩存后:

image-20250727160731119

二次開發

編譯 ??

[root@Webserver openresty-1.25.3.1]# ./configure --prefix=/usr/local/openresty --user=nginx --group=nginx --with-http_ssl_module --with-http_v2_module --with-http_realip_module --with-http_stub_status_module --with-http_gzip_static_module --with-pcre --with-stream --with-stream_ssl_module --with-stream_realip_module[root@Webserver openresty-1.25.3.1]# gmake && gmake install

image-20250729165648388

訪問效果:

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

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

相關文章

FPGA+護理:跨學科發展的探索(二)

FPGA護理:跨學科發展的探索(二) 系列文章目錄 FPGA護理:跨學科發展的探索(一) 文章目錄FPGA護理:跨學科發展的探索(二)系列文章目錄引言三、FPGA 在精神醫學護理中的應用…

localforage的數據倉庫、實例、storeName和name的概念和區別

在 localForage 中,數據倉庫、實例、storeName 和 name 是核心概念,用于管理底層存儲(IndexedDB/WebSQL/localStorage)。以下是詳細解釋和區別: 1. 數據倉庫 (Database) 定義:指底層的物理數據庫&#xff…

使用MAS(Microsoft Activation Scripts)永久獲得win10專業版和office全套

文章目錄Microsoft Activation Scripts簡介下載地址使用方法Microsoft Activation Scripts簡介 MAS是Microsoft Activation Scripts縮寫。 主要提供如下功能: 使用該腳本可以永久獲得win10專業版和office全套(可選) 下載地址 https://pan…

零 shot 語義+在線閉環:深度學習讓機器人學會“主動”

來gongzhonghao【圖靈學術計算機論文輔導】,快速拿捏更多計算機SCI/CCF發文資訊~在當下,機器人與深度學習的融合正成為AI領域的核心發展趨勢,相關研究在頂會頂刊上熱度居高不下。從ICLR到CoRL,諸多前沿成果不斷涌現&am…

Nginx學習筆記(三)——在 CentOS 7 中配置阿里云鏡像源

📚 Nginx學習筆記(三)——在 CentOS 7 中配置阿里云鏡像源 在 CentOS 7 中配置阿里云鏡像源可顯著提升軟件安裝和更新的速度,以下是詳細操作步驟: 🔧 配置阿里云鏡像源步驟 1?? 備份原有源配置 sudo mv /…

WebSocket--簡單介紹

一、什么是 WebSocket?定義:WebSocket 是一種在單個 TCP 連接上進行全雙工通信的協議。作用:實現客戶端(瀏覽器)和服務器之間的實時、雙向通信。優勢:連接保持,通信實時性強(不像 HT…

【STM32 LWIP配置】STM32H723ZG + Ethernet +LWIP 配置 cubemx

STM32H723ZG LAN8742 Ethernet LWIP 配置 cubemx 🌞這邊記錄一下這塊mcu 配置以太網的過程,IDE是KEIL MDK,其實就是在下面多次提到的blog的基礎上 在scatter file進行配置 首先,如果想要簡單一點 直接去cubemx 那邊獲取相關的例…

EI檢索-學術會議 | 人工智能、虛擬現實、可視化

第五屆人工智能、虛擬現實與可視化國際學術會議(AIVRV 2025)定于2025年9月5-7日在中國 成都召開。人工智能正驅動各行業智能化轉型,提升效率與質量;虛擬現實技術以其沉浸感重塑教育、娛樂、醫療等領域體驗;可視化技術…

力扣(H指數)

一、題目分析 (一)問題描述 給定一個整數數組 citations,其中 citations[i] 表示研究者的第 i 篇論文被引用的次數。我們需要計算并返回該研究者的 H 指數。根據維基百科定義:H 指數代表“高引用次數”,一名科研人員的…

標準io(1)

標準I/O基礎概念標準I/O&#xff08;Standard Input/Output&#xff09;是C語言提供的一組高級文件操作函數&#xff0c;位于<stdio.h>頭文件中。與低級I/O&#xff08;如Unix的系統調用read/write&#xff09;相比&#xff0c;標準I/O引入了緩沖機制&#xff0c;能顯著提…

線性代數1000題學習筆記

1000題線代基礎第一章1-101000題線代基礎第二章1-171000題線代基礎第三章1-11

LeetCode算法日記 - Day 8: 串聯所有單詞的子串、最小覆蓋子串

目錄 1.串聯所有單詞的子串 1.2 解法 1.3 代碼實現 2. 最小覆蓋子串 2.1 題目解析 2.2 解法 2.3 代碼實現 1.串聯所有單詞的子串 30. 串聯所有單詞的子串 - 力扣&#xff08;LeetCode&#xff09; 給定一個字符串 s 和一個字符串數組 words。 words 中所有字符串 長度…

linux實戰:基于Ubuntu的專業相機

核心組件就是QTimerOpenCV的組合方案攝像頭啟停控制用QPushButton實現&#xff0c;幀顯示必須用QLabel而不能用普通控件&#xff0c;視頻流刷新用QTimer比多線程更簡單想快速實現攝像頭控制功能&#xff0c;核心組件就是QTimerOpenCV的組合方案。攝像頭啟停控制用QPushButton實…

《深度剖析前端框架中錯誤邊界:異常處理的基石與進階》

錯誤邊界作為一種特殊的組件機制&#xff0c;正悄然重塑著應用應對異常的底層邏輯。它并非簡單的代碼片段組合&#xff0c;而是一套貫穿組件生命周期的防護體系&#xff0c;其核心價值在于將局部錯誤的影響牢牢鎖定在可控范圍內&#xff0c;避免整個應用陷入不可挽回的崩潰狀態…

6GB顯存玩轉SD微調!LoRA-scripts本地部署教程,一鍵煉出專屬AI畫師

一、介紹LoRA-scripts&#xff08;又名 SD-Trainer&#xff09;&#xff0c;是一個專為訓練低秩自適應&#xff08;LoRA&#xff09;模型設計的開源工具集主要應用于Stable Diffusion等AI繪圖模型的微調&#xff0c;幫助用戶高效創建定制化風格、角色或概念的輕量級模型。目前已…

探索AI的數學奇跡:Gemini 2.5 Pro如何摘得IMO金牌

?? 引言:從人類天才到AI奇才的跨越 想象一下,一個AI模型坐在國際數學奧林匹克(IMO)的考場里,手里拿著筆(好吧,其實是處理token),面對那些讓高中生們頭疼不已的難題。它不是靠死記硬背,而是通過深思熟慮的推理,一步步攻克難關。這聽起來像科幻小說,但2025年,這已…

MCP學習與實踐

目錄 1.MCP簡介 1.1 MCP是什么 1.2 MCP與Agent關系&#xff1a; 1.3 MCP的架構 2. MCP原理 2.1 MCP 工作過程 2.2 MCP 通訊方式 2. MCP使用 2.1 cursor中增加MCP-SSE(高德地圖MCP) 2.2 cursor中增加MCP-STDIO&#xff08;12306-MCP&#xff09; 本文詳細講解了什么是…

MySQL(187)如何使用pt-query-digest進行查詢分析?

使用 pt-query-digest 工具可以幫助分析 MySQL 查詢的性能&#xff0c;找出慢查詢、頻繁查詢以及消耗資源較多的查詢&#xff0c;從而為優化提供依據。以下是詳細深入的使用 pt-query-digest 進行查詢分析的步驟和相關示例。 一、安裝 pt-query-digest pt-query-digest 是 Perc…

分享一個基于Python和Hadoop的的電信客戶特征可視化分析平臺 基于Spark平臺的電信客服數據存儲與處理系統源碼

&#x1f495;&#x1f495;作者&#xff1a;計算機源碼社 &#x1f495;&#x1f495;個人簡介&#xff1a;本人八年開發經驗&#xff0c;擅長Java、Python、PHP、.NET、Node.js、Spark、hadoop、Android、微信小程序、爬蟲、大數據、機器學習等&#xff0c;大家有這一塊的問題…

初識STL

一 、STL的誕生在C發展早期&#xff0c;程序員在不同的項目中需要反復編寫相似的數據結構和算法。重復開發帶來以下問題&#xff1a;代碼冗余&#xff1a;每個項目都要重新實現基本數據結構和算法維護困難&#xff1a;不同人編寫的代碼風格不一致&#xff0c;難以維護效率低下&…