容器技術 20 年:顛覆、重構與重塑軟件世界的力量

目錄

容器技術發展史

虛擬化技術向容器技術轉變

Docker的橫空出世

容器編排技術與Kubernetes

微服務的出現與Istio

工業標準的容器運行時

容器技術與 DevOps 的深度融合?

無服務架構推波助瀾

展望未來發展方向


從 20 世紀硬件虛擬化的笨重,到操作系統虛擬化的輕量探索,容器技術歷經蛻變。2013 年 Docker 橫空出世,以 “一次構建,到處運行” 的創舉打破環境壁壘,開啟容器黃金時代。隨后,Docker Compose、Kubernetes、Istio 等技術相繼涌現,從多容器管理到集群編排,再到微服務治理,不斷突破應用部署與運維的邊界。如今,容器與 DevOps 深度融合,Serverless 架構異軍突起,共同重塑軟件開發生態。本文將帶你穿越容器技術發展的關鍵節點,揭秘其如何以顛覆性力量推動云計算與數字化

容器技術發展史

虛擬化技術向容器技術轉變

在電子計算機剛出現時,由于硬件成本高昂,人們試圖尋找能夠多用戶共享計算資源的方式,以提高資源利用率和降低成本。在 20 世紀 60 年代,基于硬件技術的主機虛擬化技術出現了。一臺物理主機可以被劃分為若干個小的機器,每個機器的硬件互不共享,并可以安裝各自的操作系統來使用。20 世紀 90 年代后期,X86 架構的硬件虛擬化技術逐漸興起,可在同一臺物理機上隔離多個操作系統實例,帶來了很多的優點,目前絕大多數的數據中心都采用了硬件虛擬化技術。

雖然硬件虛擬化提供了分隔資源的能力,但是采用虛擬機方式隔離應用程序時,效率往往較低,畢竟還要在每個虛擬機中安裝或復制一個操作系統實例,然后把應用部署到其中。因此人們探索出一種更輕量的方案 —— 操作系統虛擬化,使面向應用的管理更便捷。所謂操作系統虛擬化,就是由操作系統創建虛擬的系統環境,使應用感知不到其他應用的存在,仿佛在獨自占有全部的系統資源,從而實現應用隔離的目的。在這種方式中不需要虛擬機,也能夠實現應用彼此隔離,由于應用是共享同一個操作系統實例的,因此比虛擬機更節省資源,性能更好。操作系統虛擬化在不少系統里面也被稱為容器(Container)

操作系統虛擬化最早出現在 2000 年,FreeBSD 4.0 推出了 Jail。Jail 加強和改進了用于文件系統隔離的 chroot 環境。到了 2004 年,Sun 公司發布了 Solaris 10 的 Containers,包括 Zones 和 Resource management 兩部分。Zones 實現了命名空間隔離和安全訪問控制,Resource management 實現了資源分配控制。2007 年,Control Groups(簡稱 cgroups)進入 Linux 內核,可以限定和隔離一組進程所使用的資源(包括 CPU、內存、I/O 和網絡等)。

Docker的橫空出世

Docker詳細學習地址:

Docker容器云介紹及基礎應用-CSDN博客

2013 年,Docker 公司發布 Docker 開源項目,中文名為“碼頭工人”。提供了一系列簡便的工具鏈來使用容器。Docker 出現之前,開發者和運維人員面臨著諸多挑戰。應用在開發環境中運行良好,但是部署到測試環境或者生產環境時,卻常常出現各種問題,這就是所謂的 環境不一致” 問題。不同環境中的操作系統版本、依賴庫版本、系統配置等差異,都可能導致應用無法正常運行。而且傳統的應用打包和部署方式非常繁瑣,需要手動安裝各種依賴,配置環境變量等。Docker 的出現很好地解決了這些問題。它采用了一種將應用及其依賴打包成一個可移植的鏡像的方式,這個鏡像包含了運行應用所需的所有文件系統、庫、環境變量等,實現了 一次構建,到處運行”。這樣無論在開發、測試還是生產環境,只要有 Docker 運行時,應用都能以相同的方式運行。

傳統虛擬機技術是虛擬出一套硬件后,在其上運行一個完整操作系統,在該系統上再運行所需應用進程; 容器內的應用進程直接運行于宿主的內核,容器內沒有自己的內核 且也沒有進行硬件虛擬 。因此容器要比傳統虛擬機更為輕便。 每個容器之間互相隔離,每個容器有自己的文件系統 ,容器之間進程不會相互影響,能區分計算資源。新老技術對比:

從架構上來看,Docker 采用了客戶端 - 服務器(C/S)架構。Docker 客戶端負責與 Docker 守護進程(Docker daemon)進行通信。用戶通過客戶端發送各種命令,比如構建鏡像、運行容器、管理容器等。Docker 守護進程則負責實際執行這些命令,它運行在宿主機上,管理容器的生命周期,包括創建容器、啟動容器、停止容器、銷毀容器等。

Docker 還使用了聯合文件系統(Union File System)來管理鏡像和容器的文件系統。鏡像由一系列的只讀層組成,而容器則在鏡像的基礎上添加了一個可寫層,這樣可以在多個容器之間共享鏡像的只讀層,節省存儲空間,同時也能保證每個容器都有自己獨立的可寫空間來存儲運行時產生的數據。

容器編排技術與Kubernetes

隨著容器化應用場景的日益復雜,單個容器往往難以滿足需求,開發者經常需要部署多個相互關聯的容器來構成完整的應用系統,例如一個 Web 應用可能需要一個數據庫容器、一個緩存容器以及 Web 服務器容器等協同工作。在這種情況下,管理多個容器就變得非常繁瑣,需要分別啟動、停止、配置各個容器,還要確保它們之間的網絡通信和依賴關系正確設置。

2014 年,Docker Compose 應運而生,它允許用戶通過一個 YAML 文件來定義多容器的應用,并通過一條命令就可以實現對這些容器的統一編排管理,比如一鍵啟動、停止、重啟整個應用的所有容器,極大地簡化了多容器應用的部署和運維流程 。

DockerCompose學習地址:

Docker-Compose基礎學習_docker compose 學習-CSDN博客

例如一個典型的電商項目,通過 Docker Compose 可以輕松定義數據庫容器(如 MySQL)、應用后端容器(如基于 Node.js 或 Python Flask 的服務)以及前端容器(如 Nginx 用于靜態資源服務)之間的關系和配置,包括端口映射、環境變量設置、數據卷掛載等,讓開發者能專注于業務邏輯開發,而不用在復雜的容器管理上耗費過多精力。

同樣在 2014 年,Kubernetes 由谷歌團隊發起開源項目。谷歌內部長期使用 Borg 系統來管理大規模的容器化工作負載,在實踐中積累了大量關于容器編排和集群管理的經驗。隨著容器技術在開源社區的興起,谷歌希望將這些經驗分享出來,打造一個能在大規模生產環境中高效管理容器化應用的開源平臺。當時,雖然 Docker 解決了應用打包和運行的標準化問題,但在容器集群的自動化部署、擴縮容、負載均衡以及故障恢復等方面還存在不足。

Kubernetes 應運而生。

Kubernetes詳細學習地址:(匠心巨作)

Kubernetes完整詳細學習筆記_kubernetes 最新學習資料-CSDN博客

它采用主從架構,主要由控制平面(Control Plane)和工作節點(Worker Nodes)兩部分組成。

控制平面是 Kubernetes 集群的大腦,負責管理和控制整個集群,主要包含以下核心組件:

  • API Server:作為 Kubernetes 集群的統一入口,提供 RESTful API 接口,接收并處理來自客戶端和其他組件的請求,是集群中所有資源操作的唯一入口。所有對資源(如創建、更新、刪除 Pod、Service 等)的操作都需要通過 API Server 進行。它還負責驗證和授權請求,確保只有合法的操作才能執行。
  • etcd:是一個高可用的鍵值對存儲數據庫,用于保存 Kubernetes 集群的所有配置信息和狀態數據,如集群的節點信息、Pod 的定義和狀態、Service 的配置等。它采用分布式一致性算法,保證數據在多個節點之間的一致性和可靠性,是 Kubernetes 集群正常運行的基礎
  • Scheduler負責將待調度的 Pod 分配到合適的工作節點上。它會根據一系列的調度策略和算法,評估各個工作節點的資源情況(如 CPU、內存使用量)、節點標簽、Pod 的親和性和反親和性等條件,選擇最適合運行 Pod 的節點,確保集群資源的合理利用。
  • Controller Manager包含多個控制器,每個控制器負責管理 Kubernetes 集群中特定資源的生命周期,例如 Node Controller 管理節點的添加、刪除和狀態更新;Pod Controller 確保 Pod 按照期望的狀態運行,當 Pod 出現故障時進行重啟或重建;Service Controller 負責管理 Service 資源,實現服務發現和負載均衡等功能 。這些控制器通過持續監控集群狀態,并與 API Server 交互來執行相應的操作,使集群始終保持在用戶期望的狀態。

工作節點是運行容器化應用的地方,主要包含以下組件:

  • kubelet:是工作節點上的核心代理,負責與控制平面通信,接收并執行 API Server 分配給該節點的任務。它管理 Pod 的生命周期,包括創建、啟動、停止 Pod,以及管理 Pod 中的容器,如拉取鏡像、啟動容器、監控容器狀態等。同時,kubelet 會將節點和 Pod 的狀態信息匯報給 API Server,以便控制平面實時掌握集群運行情況。
  • kube - proxy是工作節點上實現服務發現和負載均衡的組件。它通過在節點上創建和管理 iptables 或 IPVS 規則,將訪問 Service 的流量轉發到后端對應的 Pod 上,確保客戶端能夠正確訪問到服務 。無論是內部服務之間的調用,還是外部客戶端對服務的訪問,kube - proxy 都起到了關鍵的流量轉發作用。
  • Container Runtime負責運行容器,常見的容器運行時包括 Docker、containerd、CRI - O 等。Kubernetes 通過容器運行時接口(CRI)與不同的容器運行時進行交互,實現對容器的創建、運行和管理,使得 Kubernetes 能夠支持多種容器運行時環境,提高了系統的靈活性和兼容性。

Kubernetes 通過控制平面和工作節點各組件之間的緊密協作,實現了容器集群的自動化管理,能自動完成容器的部署、調度到集群中的不同節點上,根據業務負載動態調整容器實例數量,還具備自我修復能力,當某個容器出現故障時能自動重啟或遷移到其他健康節點 。以一個大型互聯網公司的在線業務為例,在業務高峰時段(如電商的促銷活動期間),Kubernetes 能根據事先設定的規則,快速啟動更多的應用容器實例來應對流量洪峰,保障服務的可用性和性能;而在業務低谷期,又能自動減少容器實例,節約計算資源。如今,Kubernetes 已經成為容器編排領域的事實標準,被廣泛應用于各類企業級場景。

微服務的出現與Istio

隨著容器化應用場景的日益復雜,單個容器往往難以滿足需求,開發者經常需要部署多個相互關聯的容器來構成完整的應用系統,此時微服務架構應運而生。傳統的單體應用將所有功能模塊打包在一起,隨著業務規模的擴大,代碼會變得臃腫,開發、維護和擴展都非常困難,而且一個小功能的修改可能需要重新部署整個應用。微服務架構將應用拆分成多個小型、獨立運行的服務每個服務專注于完成單一功能,如用戶服務、訂單服務、支付服務等。這些服務可以使用不同的編程語言、框架和數據庫,通過輕量級的通信機制(如 HTTP/REST)進行交互 。微服務架構解決了單體應用的擴展性差、維護困難等問題,使得團隊可以并行開發不同的服務,加快開發速度;同時,某個服務出現故障不會影響整個應用,提高了系統的容錯性和可靠性;并且可以根據業務需求對單個服務進行獨立的擴展和升級。?

在微服務架構中,服務之間的通信管理、流量控制、安全防護等問題變得至關重要。2017 年,Istio 作為一個開源的服務網格(Service Mesh)項目發布,為解決這些問題提供了強大的解決方案。Istio 的核心是通過在服務之間注入代理(通常是 Envoy 代理)來實現對服務間通信的統一管理。它主要由數據平面和控制平面組成。?

數據平面由一系列的 Envoy 代理組成,這些代理部署在每個服務實例旁邊,負責處理服務之間的所有網絡通信,包括請求的轉發、負載均衡、熔斷、限流等操作 。例如,當一個服務調用另一個服務時,請求會先發送到本地的 Envoy 代理,Envoy 代理根據配置的負載均衡策略將請求轉發到目標服務的 Envoy 代理,再由目標服務的 Envoy 代理將請求傳遞給實際的服務實例。?

控制平面則負責管理和配置數據平面,主要包含 Pilot、Mixer 和 Galley 等組件。Pilot 負責將用戶定義的流量管理規則(如路由規則、熔斷策略等)轉換為 Envoy 代理可以理解的配置,并下發到各個 Envoy 代理,實現對服務間流量的精確控制;Mixer 提供了策略執行和遙測功能,用于控制服務的訪問權限,收集服務的調用次數、延遲、吞吐量等指標數據,方便進行監控和計費;Galley 則負責驗證和處理用戶定義的配置,確保配置的正確性和一致性 。

通過 Istio,開發人員無需在每個服務中編寫復雜的代碼來實現服務治理功能,就可以輕松實現服務間的流量管理、故障恢復、安全認證和監控等,極大地降低了微服務架構的運維和管理難度,提升了微服務應用的可觀測性和安全性。例如,在電商大促期間,通過 Istio 可以靈活地調整流量分配,將更多流量導向核心服務;當某個服務出現異常時,Istio 能自動進行熔斷,防止故障擴散,保障整個系統的穩定性 。

工業標準的容器運行時

containerd 最早于 2015 年出現在 Docker Engine 中,后來為了使 Docker Engine 更加輕量、快速和健壯,2016 年 Docker 將 containerd 從 daemon

dockerd中獨立出來,并完成與 daemon 的集成。獨立后的 containerd 全面支持 OCI(Open Container Initiative)資源的啟動和生命周期管理,這意味著它可以支持除 runc(其前身是 Docker 中的 libcontainer,后來捐贈給 LF)以外的其他 OCI 實現,增強了容器運行時的可擴展性和兼容性 。

2017 年 Docker 將 containerd 捐獻給 CNCF,并在 2019 年 2 月 containerd 從 CNCF 畢業,其健壯性得到了業界廣泛認可。containerd 在架構上負責處理容器的創建、運行、停止等核心操作,它接收來自上層(如 Docker Engine 或 Kubernetes 等)的請求,不會直接去操作容器(避免因自身故障影響容器運行),而是先創建一個 container - shim 進程,由 container - shim 調用 runc cli 來運行容器,并通過 Unix domain socket 暴露 API 給 containerd 用于容器管理,同時提供鏡像拉取、刪除、檢查、存儲等功能,是容器技術生態中底層且關鍵的一環 。

? 時至今日, Containerd 已經成為一個工業級的容器運行時了,甚至已經有了 solgen : 超簡單!超健壯!超強移植性!當然,為了讓 Docker 以為自己不會搶飯碗, Containerd 聲稱自己的設計的主要目的是為了嵌入到更大的系統中(暗指 Kubernetes),而不是直接由開發人員或者終端用戶使用。事實上呢,Containerd 基本啥都干了,開發人員或者終端用可以在宿主機中管理完整的容器生命周期,包括鏡像的傳輸和存儲、容器的執行和管理、依賴文件的存儲和網絡等等。

容器技術與 DevOps 的深度融合?

DevOps 是一種強調開發(Development)和運維(Operations)協同合作的文化、理念和實踐方法,旨在縮短系統開發周期,提高軟件交付頻率和質量,實現業務的快速迭代和持續創新。容器技術與 DevOps 理念天然契合,從多個維度為 DevOps 的落地提供了強大支持,推動了軟件開發和交付流程的變革。

在持續集成(Continuous Integration,CI)環節,容器技術的鏡像特性發揮了關鍵作用。開發人員可以將應用代碼及其依賴打包成容器鏡像,每次代碼提交后,CI 系統可以基于該鏡像快速構建、測試應用。由于容器鏡像的一致性,無論是在開發人員的本地環境、CI 服務器環境還是后續的測試和生產環境,應用的運行環境都是一致的,這有效避免了 “在我的機器上能運行,在其他環境卻不行” 的問題,極大地提高了測試的準確性和效率。同時,容器鏡像的分層存儲機制使得鏡像的構建和更新速度更快,當代碼僅有少量改動時,只需更新相應的層,無需重新構建整個鏡像,加快了 CI 流程。?

在持續交付(Continuous Delivery,CD)階段,容器的輕量化和可移植性優勢明顯。基于容器部署的應用可以輕松地在不同環境(如開發、測試、預生產、生產環境)之間遷移。Kubernetes 等容器編排工具與 CD 流水線集成后,可以實現應用的自動化部署、擴縮容和回滾。例如,當 CD 流水線檢測到新的容器鏡像通過了所有測試后,Kubernetes 可以按照預先定義的部署策略,將新的容器實例快速部署到生產環境中,并且在出現問題時,能夠迅速回滾到之前的穩定版本,保障業務的連續性。?

容器技術還促進了開發和運維團隊之間的協作。在傳統模式下,開發和運維團隊可能使用不同的工具和技術棧,導致溝通成本高、協作效率低。而容器技術提供了統一的標準化運行環境,開發團隊以容器鏡像的形式交付應用,運維團隊基于容器和容器編排工具進行部署和管理,雙方使用相同的技術語言和操作方式,減少了因環境差異和技術理解不同產生的矛盾,增強了團隊間的協作效率和信任度。?

此外,容器技術與 DevOps 結合,有助于實現更精細的監控和日志管理。在容器化應用中,每個容器都是一個獨立的運行單元,通過容器運行時和編排工具,可以方便地收集容器的資源使用情況(如 CPU、內存、網絡流量)、運行狀態等指標數據。同時,容器內應用產生的日志也可以通過標準化的方式進行收集、存儲和分析。這些監控和日志數據為開發和運維人員提供了豐富的信息,幫助他們快速定位和解決問題,優化應用性能,進一步推動應用的持續改進和優化,實現 DevOps 所追求的持續反饋和持續改進的閉環。

無服務架構推波助瀾

Serverless(無服務器架構)在云計算領域逐漸興起。它最早可追溯到 2006 年亞馬遜云科技發布的第一個無服務器架構的存儲服務 Amazon S3,2012 年 Ken Form 在文章中首次提出 “serverless” 概念,2014 年亞馬遜云科技推出的 Amazon Lambda 服務普及了這一計算模型 。Serverless 以平臺即服務(PaaS)為基礎,為開發者提供了一種微型架構,其架構主要由事件源、函數計算服務和后端服務三大部分組成。

事件源是觸發 Serverless 函數執行的起點,可以是多樣化的。例如,在云存儲場景中,文件上傳到指定的存儲桶可以作為事件源;在數據庫領域,數據的插入、更新或刪除操作也能觸發相應的函數;此外,HTTP 請求、消息隊列中的消息到達等都可以作為事件源 。事件源將事件信息發送給函數計算服務,從而啟動函數的執行流程。

函數計算服務是 Serverless 架構的核心部分,負責接收來自事件源的請求,執行開發者編寫的函數代碼,并管理函數的運行環境。它具備自動彈性擴展能力,能夠根據事件的流量自動調整計算資源的分配 。當有大量事件同時觸發函數執行時,函數計算服務可以快速啟動更多的計算實例來處理請求,確保服務的性能和響應速度;而在事件較少時,又能自動減少資源占用,節省成本。函數計算服務還提供了諸如日志記錄、監控指標收集、錯誤處理等功能,方便開發者對函數的運行情況進行跟蹤和調試。

后端服務為函數提供支持和數據存儲功能。后端服務涵蓋多種類型,包括數據庫服務(如關系型數據庫、NoSQL 數據庫)用于存儲和檢索數據;消息隊列服務用于實現異步通信和解耦;文件存儲服務用于存儲文件等 。函數在執行過程中,可以根據業務需求與后端服務進行交互,例如從數據庫中讀取數據進行處理,將處理結果寫入數據庫,或者向消息隊列發送消息等 。

在 Serverless 架構下,終端客戶無需部署、配置或管理服務器服務,代碼運行所需的服務器資源都由云端平臺自動提供。例如開發者只需編寫云函數,并選擇觸發函數運行的事件(如上傳文件到云存儲、數據庫數據變更等),系統會自動處理底層的服務器選擇、部署、容錯、監控、日志等運維操作 。Serverless 架構具有諸多優勢,如用戶無需管理服務器,可將精力集中在業務代碼編寫上;按實際使用的資源(如函數執行時間)付費,相比傳統云計算按預留資源收費更加經濟;具備自動持續擴容能力,能輕松應對流量的大幅波動;內置高可用和容錯機制,保障服務穩定性 。

Serverless 不僅應用于計算領域,還逐漸成為云原生數據庫、云原生數據分析乃至人工智能的標配,推動著云計算向更加便捷、高效、低成本的方向發展。

展望未來發展方向

展望未來,容器技術有望在多個方面持續創新。安全性方面,隨著容器應用在企業核心業務中的深入,對容器安全隔離、鏡像安全掃描、運行時安全監測等技術的需求將更加強烈,相關技術將不斷演進以應對日益復雜的安全威脅 。性能優化上,進一步提升容器的啟動速度、資源利用效率,減少容器運行時的開銷仍是重要方向,例如通過優化容器運行時的內核機制、文件系統和網絡協議棧等 。與新興技術的融合也將是趨勢,如結合人工智能技術實現容器資源的智能調度和應用性能的自動優化;在邊緣計算場景中,容器技術將助力實現應用在邊緣節點的快速部署和高效運行,滿足實時性、低帶寬等特殊需求 。

此外,容器生態系統將更加完善,不同工具和平臺之間的兼容性、互操作性會進一步提升,降低開發者使用容器技術構建和運維應用的門檻,使容器技術在更多領域得到更廣泛的應用,持續推動軟件開發生命周期和云計算產業的變革 。

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

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

相關文章

集成釘釘消息推送功能

1. 概述 本文檔詳細描述了在若依框架基礎上集成釘釘消息推送功能的開發步驟。該功能允許系統向指定釘釘用戶發送文本和富文本消息通知。 2. 環境準備 2.1 釘釘開發者賬號配置 登錄釘釘開發者平臺:https://open.dingtalk.com/創建/選擇企業內部應用獲取以下關鍵信…

【行為型之訪問者模式】游戲開發實戰——Unity靈活數據操作與跨系統交互的架構秘訣

文章目錄 🧳 訪問者模式(Visitor Pattern)深度解析一、模式本質與核心價值二、經典UML結構三、Unity實戰代碼(游戲物品系統)1. 定義元素與訪問者接口2. 實現具體元素類3. 實現具體訪問者4. 對象結構管理5. 客戶端使用 …

SQL:MySQL函數:日期函數(Date Functions)

目錄 時間是數據的一種類型 🧰 MySQL 常用時間函數大全 🟦 1. 獲取當前時間/日期 🟦 2. 日期運算(加減) 🟦 3. 時間差計算 🟦 4. 格式化日期 🟦 5. 提取時間部分 &#x1f7…

【MySQL】數據表更新數據

個人主頁:Guiat 歸屬專欄:MySQL 文章目錄 1. 數據更新基礎1.1 更新操作的重要性1.2 更新語句基本結構1.3 更新操作注意事項 2. 基本更新操作2.1 基本UPDATE語法2.2 使用表達式更新數據2.3 使用LIMIT限制更新行數2.4 NULL值處理 3. 高級更新技術3.1 使用子…

【更新】全國省市縣-公開手機基站數據集(2006-2025.3)

手機基站是現代通信網絡中的重要組成部分,它們為廣泛的通信服務提供基礎設施。隨著數字化進程的不斷推進,手機基站的建設與布局對優化網絡質量和提升通信服務水平起著至關重要的作用,本分享數據可幫助分析移動通信網絡的發展和優化。本次數據…

藍橋杯12屆國B 純質數

題目描述 如果一個正整數只有 1 和它本身兩個約數,則稱為一個質數(又稱素數)。 前幾個質數是:2,3,5,7,11,13,17,19,23,29,31,37,??? 。 如果一個質數的所有十進制數位都是質數,我們稱它為純質數。例如&#xff1…

騰訊多模態定制化視頻生成框架:HunyuanCustom

HunyuanCustom 速讀 一、引言 HunyuanCustom 是由騰訊團隊提出的一款多模態定制化視頻生成框架。該框架旨在解決現有視頻生成方法在身份一致性(identity consistency)和輸入模態有限性方面的不足。通過支持圖像、音頻、視頻和文本等多種條件輸入,HunyuanCustom 能…

力扣top100 矩陣置零

開辟數組來標記元素為0的行和列&#xff0c;然后將對應的行和列的元素全部置為0&#xff1b; class Solution { public:void setZeroes(vector<vector<int>>& matrix) {int n matrix.size();int m matrix[0].size();vector<int> l(m),r(n);for(int i …

Python知識框架

一、Python基礎語法 變量與數據類型 變量命名規則 基本類型&#xff1a;int, float, str, bool, None 復合類型&#xff1a;list, tuple, dict, set 類型轉換與檢查&#xff08;type(), isinstance()&#xff09; 運算符 算術運算符&#xff1a;, -, *, /, //, %, ** 比較…

華為OD機試真題——單詞接龍(首字母接龍)(2025A卷:100分)Java/python/JavaScript/C/C++/GO最佳實現

2025 A卷 100分 題型 本專欄內全部題目均提供Java、python、JavaScript、C、C++、GO六種語言的最佳實現方式; 并且每種語言均涵蓋詳細的問題分析、解題思路、代碼實現、代碼詳解、3個測試用例以及綜合分析; 本文收錄于專欄:《2025華為OD真題目錄+全流程解析+備考攻略+經驗分…

微信小程序智能商城系統(uniapp+Springboot后端+vue管理端)

一、系統介紹 本智能商城系統是基于當今主流技術棧開發的一款多端商城解決方案&#xff0c;主要包括微信小程序前端、SpringBoot 后端服務以及 Vue 管理后臺三大部分。系統融合了線上商城的核心功能&#xff0c;支持商品瀏覽、下單、支付、訂單管理等操作&#xff0c;適用于中小…

Python筆記:c++內嵌python,c++主窗口如何傳遞給腳本中的QDialog,使用的是pybind11

1. 問題描述 用的是python 3.8.20, qt版本使用的是5.15.2, PySide的版本是5.15.2, pybind11的版本為2.13.6 網上說在python腳本中直接用PySide2自帶的QWinWidget&#xff0c;如from PySide2.QtWinExtras import QWinWidget&#xff0c;但我用的版本中說沒有QWinWidget&#x…

軟考軟件設計師中級——軟件工程筆記

1.軟件過程 1.1能力成熟度模型&#xff08;CMM&#xff09; 軟件能力成熟度模型&#xff08;CMM&#xff09;將軟件過程改進分為以下五個成熟度級別&#xff0c;每個級別都定義了特定的過程特征和目標&#xff1a; 初始級 (Initial)&#xff1a; 軟件開發過程雜亂無章&#xf…

C# SQLite基本使用示例

目錄 1 基本使用流程 1.1 步驟1&#xff1a;添加SQLite依賴 1.2 ?步驟2&#xff1a;建立連接 1.3 步驟3&#xff1a;執行SQL命令 1.4 步驟4&#xff1a;查詢數據 1.5 步驟5&#xff1a;使用事務 2 SQLite基本使用示例 2.1 準備工作 2.2 完整示例 2.3 案例代碼解析 …

視頻圖像壓縮領域中 DCT 的 DC 系數和 AC 系數詳解

引言 在數字圖像與視頻壓縮領域&#xff0c;離散余弦變換&#xff08;Discrete Cosine Transform, DCT&#xff09;憑借其卓越的能量集中特性&#xff0c;成為JPEG、MPEG等國際標準的核心技術。DCT通過將空域信號映射到頻域&#xff0c;分離出DC系數&#xff08;直流分量&…

對抗系統熵增:從被動救火到主動防御的穩定性實戰

&#x1f4d5;我是廖志偉&#xff0c;一名Java開發工程師、《Java項目實戰——深入理解大型互聯網企業通用技術》&#xff08;基礎篇&#xff09;、&#xff08;進階篇&#xff09;、&#xff08;架構篇&#xff09;清華大學出版社簽約作家、Java領域優質創作者、CSDN博客專家、…

java 中 DTO 和 VO 的核心區別

DTO 和 VO 的核心區別 特性DTO&#xff08;數據傳輸對象&#xff09;VO&#xff08;視圖對象&#xff09;設計目的服務層與外部系統&#xff08;如前端、其他服務&#xff09;之間的數據傳輸為前端展示層定制數據&#xff0c;通常與 UI 強綁定數據內容可能包含業務邏輯需要的字…

數據結構【二叉樹的遍歷實現】

&#x1f4d8;考研數據結構基礎&#xff1a;二叉樹的存儲、遍歷與隊列輔助實現詳 在數據結構的學習中&#xff0c;二叉樹作為一種結構清晰、應用廣泛的樹形結構&#xff0c;是考研計算機專業課中重點內容之一。本文將以實際代碼為基礎&#xff0c;介紹二叉樹的存儲結構、遍歷方…

無人機俯視風光攝影Lr調色預設,手機濾鏡PS+Lightroom預設下載!

調色詳情 無人機俯視風光攝影 Lr 調色是利用 Adobe Lightroom 軟件&#xff0c;對無人機從俯視角度拍攝的風光照片進行后期處理的調色方式。通過調整色彩、對比度、光影等多種參數&#xff0c;能夠充分挖掘并強化畫面獨特視角下的壯美與細節之美&#xff0c;讓原本平凡的航拍風…

【springcloud學習(dalston.sr1)】Eureka服務端集群的搭建(含源代碼)(二)

該系列項目整體介紹及源代碼請參照前面寫的一篇文章【springcloud學習(dalston.sr1)】項目整體介紹&#xff08;含源代碼&#xff09;&#xff08;一&#xff09; 這篇文章主要介紹多個eureka服務端的集群環境是如何搭建的。 &#xff08;一&#xff09;eureka的簡要說明 Eu…