DevOps全面綜述:從概念到實踐

来源:https://www.cnblogs.com/xfuture/p/18228538
-Advertisement-
Play Games

這篇文章詳盡介紹了DevOps的背景、核心實踐、工具和技術,探討了團隊協作、文化建設及組織變革,旨在幫助企業高效實現持續交付和創新。 關註作者,分享互聯網架構、雲服務技術的全維度知識。作者擁有10+年互聯網服務架構、AI產品研發經驗、團隊管理經驗,同濟本復旦碩博,復旦機器人智能實驗室成員,阿裡雲認證 ...


這篇文章詳盡介紹了DevOps的背景、核心實踐、工具和技術,探討了團隊協作、文化建設及組織變革,旨在幫助企業高效實現持續交付和創新。

關註作者,分享互聯網架構、雲服務技術的全維度知識。作者擁有10+年互聯網服務架構、AI產品研發經驗、團隊管理經驗,同濟本復旦碩博,復旦機器人智能實驗室成員,阿裡雲認證的資深架構師,項目管理專業人士,上億營收AI產品研發負責人

一、背景與概述

file

1.1 DevOps的起源與發展

DevOps(Development and Operations的縮寫)是軟體工程領域中的一種文化和實踐方法,旨在促進開發團隊與運維團隊之間的協作,從而實現更高效、更可靠的軟體交付。DevOps起源於敏捷軟體開發方法論,併在過去十年中迅速發展成為一種廣泛採用的實踐。

DevOps的起源可以追溯到2009年,比利時的一次名為“DevOpsDays”的會議。會議的主要發起人Patrick Debois希望通過這次會議來解決開發和運維之間的隔閡問題。會議的成功標志著DevOps概念的誕生。此後,隨著雲計算、容器技術和持續交付(Continuous Delivery)的興起,DevOps逐漸成為企業實現數字化轉型的關鍵驅動力。

1.2 DevOps的基本原則與目標

DevOps的核心目標是通過優化開發和運維之間的協作,提升軟體交付速度、質量和可靠性。為了實現這一目標,DevOps提出了一系列的基本原則:

  1. 持續集成與持續交付(CI/CD)
    持續集成(Continuous Integration, CI)是一種軟體開發實踐,開發者頻繁地將代碼集成到主幹中,並通過自動化測試來確保代碼質量。持續交付(Continuous Delivery, CD)則是在CI的基礎上,進一步實現軟體的自動化部署。CI/CD能夠顯著縮短交付周期,降低發佈風險,提高軟體的可用性和穩定性。

  2. 基礎設施即代碼(IaC)
    基礎設施即代碼(Infrastructure as Code, IaC)是指使用代碼化的方式來管理和配置基礎設施資源。這種方法使得基礎設施的管理變得更加靈活和自動化,減少了人為錯誤,提高了環境的一致性。常見的IaC工具包括Terraform、Ansible和Puppet等。

  3. 監控與日誌記錄
    高效的監控和日誌記錄是DevOps的重要組成部分。通過實時監控系統性能和收集日誌數據,團隊可以及時發現和解決潛在問題,確保系統的穩定運行。常用的監控工具包括Prometheus、Grafana和ELK Stack(Elasticsearch, Logstash, Kibana)等。

  4. 自動化測試
    自動化測試是確保軟體質量的關鍵。通過編寫自動化測試用例,開發者可以在每次代碼變更時進行全面的測試,從而快速發現和修複缺陷。自動化測試涵蓋單元測試、集成測試和端到端測試等多個層次。

  5. 文化和協作
    DevOps不僅是一套技術實踐,更是一種文化變革。它強調團隊之間的協作和透明度,鼓勵開發者和運維人員共同承擔責任,推動持續改進。成功的DevOps實施通常伴隨著組織結構和流程的調整,以打破傳統的“信息孤島”,促進跨職能團隊的協作。

1.3 DevOps的價值與影響

DevOps的實施為企業帶來了諸多顯著的價值和影響:

  1. 加速交付周期
    通過自動化和持續集成,DevOps顯著縮短了軟體交付的周期,使企業能夠更快速地響應市場需求和客戶反饋。

  2. 提升軟體質量
    自動化測試和持續監控確保了軟體的高質量和高可靠性,減少了生產環境中的故障和停機時間。

  3. 提高團隊效率
    DevOps促進了開發和運維團隊之間的協作,減少了溝通障礙和重覆勞動,提高了整體團隊的效率和生產力。

  4. 增強客戶滿意度
    更快速的交付、更高的可靠性和更及時的響應能力,顯著提升了客戶的滿意度和信任度。

  5. 支持創新
    DevOps為企業提供了更高的靈活性和敏捷性,使其能夠更快地嘗試新技術和新業務模式,推動創新發展。

通過深入理解DevOps的起源、基本原則和核心價值,我們可以更好地實施和推廣這一重要的技術實踐,為企業的數字化轉型和持續創新提供堅實的基礎。在接下來的章節中,我們將詳細探討DevOps的核心實踐、工具和技術,進一步揭示其在實際應用中的具體方法和最佳實踐。

二、核心實踐

2.1 持續集成(CI)

持續集成(Continuous Integration, CI)是一種軟體開發實踐,旨在通過頻繁地將代碼集成到主幹分支來快速檢測並修複問題,從而提高軟體開發效率和質量。在持續集成過程中,開發者會頻繁地將代碼提交到版本控制系統中,每次提交都會觸發自動化構建和測試流程,以確保新代碼與現有代碼的相容性。

2.1.1 核心概念

  • 自動化構建:每次代碼提交後,系統會自動進行構建,生成可執行的應用程式或庫。這一步驟通常包括編譯代碼、打包依賴項和生成工件。
  • 自動化測試:在構建完成後,系統會自動運行預定義的測試套件,以驗證代碼的正確性。這些測試通常包括單元測試、集成測試和回歸測試。
  • 快速反饋:持續集成的一個重要目標是提供快速反饋。通過及時發現和修複代碼中的問題,開發者可以更快地迭代和改進代碼。

2.1.2 實踐方法

  • 頻繁提交代碼:開發者應當頻繁地將代碼提交到版本控制系統中,每次提交的代碼改動應當儘可能小且獨立。
  • 維護綠色主幹:主幹分支應始終保持可構建和通過所有測試。任何導致構建失敗的提交都應立即修複。
  • 自動化構建和測試工具:選擇和配置適當的工具來實現自動化構建和測試。例如,Jenkins、Travis CI 和 CircleCI 是常見的 CI 工具。

2.2 持續交付(CD)

持續交付(Continuous Delivery, CD)是持續集成的延伸,旨在通過自動化部署流水線,將軟體交付到生產環境中,使其隨時處於可發佈狀態。持續交付不僅關註代碼的集成和測試,還包括發佈管理和部署自動化。

2.2.1 核心概念

  • 部署流水線:部署流水線是持續交付的核心,包含從代碼提交到軟體發佈的所有自動化流程。每個流水線階段都包括構建、測試、部署和驗證。
  • 自動化部署:通過自動化工具,將構建好的應用程式部署到不同的環境中(例如開發、測試和生產環境)。
  • 可發佈的工件:每個版本的代碼都應生成一個可發佈的工件,這些工件應經過充分測試,確保其質量和穩定性。

2.2.2 實踐方法

  • 部署策略:採用藍綠部署、金絲雀發佈和滾動更新等策略,確保新版本的平滑發佈和回滾。
  • 環境一致性:通過基礎設施即代碼(IaC)確保不同環境的一致性,避免環境差異導致的問題。
  • 自動化測試覆蓋:在部署流水線的每個階段執行全面的自動化測試,包括功能測試、性能測試和安全測試。

2.3 基礎設施即代碼(IaC)

基礎設施即代碼(Infrastructure as Code, IaC)是指使用代碼來定義和管理計算基礎設施。IaC 使得基礎設施的配置和部署像應用程式代碼一樣可版本控制、可審計和可自動化。

2.3.1 核心概念

  • 聲明式與命令式:IaC 有兩種主要實現方式:聲明式和命令式。聲明式 IaC 描述了目標狀態(例如,使用 Terraform),而命令式 IaC 則描述了實現目標狀態的步驟(例如,使用 Ansible)。
  • 可重覆性和一致性:通過 IaC,基礎設施配置可以重覆執行,確保不同環境之間的一致性,減少人為錯誤。
  • 版本控制:IaC 腳本應存儲在版本控制系統中,與應用程式代碼一起管理,以實現審計和回滾。

2.3.2 實踐方法

  • 選擇適當的工具:常見的 IaC 工具包括 Terraform、Ansible、Puppet 和 Chef。選擇適合團隊需求和技術棧的工具。
  • 模塊化和重用:編寫模塊化的 IaC 代碼,使得不同項目和環境可以重用相同的配置。
  • 自動化流水線集成:將 IaC 集成到持續交付流水線中,實現基礎設施的自動化部署和管理。

2.4 監控與日誌記錄

高效的監控和日誌記錄是確保系統穩定性和性能優化的關鍵。通過持續監控系統指標和收集日誌數據,團隊可以及時發現和解決潛在問題。

2.4.1 核心概念

  • 監控:監控包括實時跟蹤系統性能指標(如 CPU 使用率、記憶體使用率、響應時間和錯誤率)和業務指標(如交易量和用戶活動)。常用的監控工具包括 Prometheus、Grafana 和 Datadog。
  • 日誌記錄:日誌記錄是指收集和存儲系統生成的日誌數據,以便進行故障排除和審計。日誌管理工具如 ELK Stack(Elasticsearch, Logstash, Kibana)和 Splunk 可以幫助團隊集中管理和分析日誌數據。
  • 告警和通知:通過設置告警規則,當系統指標超過預定義的閾值時,自動發送通知,提醒團隊採取行動。

2.4.2 實踐方法

  • 建立監控儀錶盤:使用 Grafana 等工具創建可視化儀錶盤,實時展示關鍵性能指標。
  • 集中日誌管理:配置 Logstash 或 Fluentd 將日誌數據集中收集到 Elasticsearch 中,並使用 Kibana 進行分析和可視化。
  • 自動化告警:設置告警規則和通知策略,通過電子郵件、簡訊或即時通訊工具(如 Slack)及時通知團隊。

2.5 自動化測試

自動化測試是確保軟體質量和穩定性的關鍵實踐。通過編寫自動化測試用例,開發團隊可以在每次代碼變更時快速檢測和修複缺陷。

2.5.1 核心概念

  • 測試金字塔:測試金字塔是指將自動化測試分為不同層次,從下至上分別為單元測試、集成測試和端到端測試。單元測試覆蓋最小的代碼單元,執行速度最快;集成測試驗證多個模塊的協同工作;端到端測試則模擬用戶操作,驗證整個系統的功能。
  • 測試覆蓋率:測試覆蓋率是指被自動化測試覆蓋的代碼比例。高覆蓋率的測試可以更有效地檢測缺陷。
  • 持續測試:在持續集成和持續交付流水線中集成自動化測試,實現代碼變更後的持續驗證。

2.5.2 實踐方法

  • 編寫高質量測試用例:確保測試用例覆蓋關鍵功能和邊界條件,並保持測試的獨立性和可維護性。
  • 使用適當的測試框架:選擇適合項目需求的測試框架和工具,如 JUnit、TestNG、Selenium 和 Cypress。
  • 集成測試報告:配置持續集成工具生成測試報告,併在每次構建後自動發送給團隊,確保所有成員瞭解測試結果。

通過詳細探討DevOps的核心實踐,我們可以更好地理解和實施這些技術,從而提升軟體開發和運維的效率和質量。在下一章節中,我們將深入探討DevOps所使用的工具和技術,進一步揭示其在實際應用中的具體方法和最佳實踐。

三、工具和技術

file

3.1 源代碼管理工具

3.1.1 Git

Git是目前最流行的分散式版本控制系統,廣泛用於源代碼管理和版本控制。它的設計初衷是為了高效地處理大型項目,特別是在分散式團隊環境中。

核心概念
  • 分散式版本控制:每個開發者的工作目錄都是一個完整的代碼倉庫,包括代碼的所有版本歷史。這種結構使得Git特別適合於分散式開發團隊。
  • 分支與合併:Git的分支(branch)模型非常靈活,支持輕量級的分支操作,使得團隊可以方便地進行並行開發和功能分離。合併(merge)操作則將不同分支的工作成果整合在一起。
  • 暫存區:Git引入了暫存區(staging area)的概念,允許開發者在提交(commit)代碼之前對其進行整理和校驗。
實踐方法
  • 工作流:採用合適的Git工作流(如Git Flow、GitHub Flow或GitLab Flow)來規範團隊的開發和發佈流程。
  • 代碼審查:使用Pull Request或Merge Request進行代碼審查,確保代碼質量和一致性。
  • 持續集成:將Git倉庫與CI工具集成,每次代碼提交自動觸發構建和測試。

3.2 CI/CD工具

3.2.1 Jenkins

Jenkins是一個開源的自動化伺服器,廣泛用於實現持續集成和持續交付。它支持通過插件擴展功能,適用於各種構建、部署和自動化任務。

核心概念
  • 管道(Pipeline):Jenkins Pipeline是用於定義持續集成和持續交付過程的腳本化工具,支持複雜的構建流程和多階段管道。
  • 插件系統:Jenkins擁有豐富的插件生態系統,可以與各種工具和服務集成,如Git、Docker、Kubernetes等。
  • 分散式構建:Jenkins支持分散式構建,可以將構建任務分配到多個節點上執行,提高構建速度和效率。
實踐方法
  • 管道腳本:編寫聲明式或腳本式的Jenkins Pipeline,以定義和自動化CI/CD流程。
  • 管理插件:選擇和配置適當的插件,以擴展Jenkins的功能並集成所需工具。
  • 監控和通知:配置Jenkins監控構建狀態,並通過郵件、Slack等工具發送通知。

3.2.2 Travis CI

Travis CI是一款基於雲的持續集成服務,特別適用於開源項目。它與GitHub緊密集成,支持多語言、多平臺的構建和測試。

核心概念
  • YAML配置文件:Travis CI使用.travis.yml文件定義構建和測試流程,配置簡單直觀。
  • 自動化測試:每次代碼提交或Pull Request都會觸發自動化測試,確保代碼質量。
  • 多語言支持:Travis CI支持多種編程語言和框架,適用於不同技術棧的項目。
實踐方法
  • 配置文件編寫:根據項目需求編寫.travis.yml文件,定義構建、測試和部署步驟。
  • 集成GitHub:將GitHub倉庫與Travis CI連接,自動觸發構建和測試。
  • 測試報告:配置測試報告和覆蓋率工具,將結果集成到Travis CI中。

3.3 配置管理工具

3.3.1 Ansible

Ansible是一種簡單而強大的開源自動化工具,用於配置管理、應用部署和任務自動化。它採用無代理(agentless)的架構,通過SSH進行操作。

核心概念
  • 劇本(Playbook):Ansible使用YAML格式的劇本來定義自動化任務和配置,結構清晰易讀。
  • 模塊(Module):Ansible提供了大量預定義的模塊,用於管理系統資源、應用和服務。
  • 清單(Inventory):清單文件列出了需要管理的主機和組,Ansible會根據清單執行相應的任務。
實踐方法
  • 編寫劇本:根據需求編寫Ansible劇本,定義任務和配置。
  • 管理清單:維護清單文件,列出需要管理的主機和組。
  • 自動化流程:將Ansible集成到CI/CD流程中,實現自動化配置和部署。

3.3.2 Puppet

Puppet是一種流行的配置管理工具,使用聲明式語言來定義系統配置。它採用客戶端-伺服器架構,通過Puppet Master和Puppet Agent進行通信。

核心概念
  • 清單(Manifest):Puppet使用清單文件(Manifest)定義系統配置,使用Puppet DSL(Domain Specific Language)編寫。
  • 模塊(Module):模塊是Puppet的可重用單元,包含類和定義,用於管理特定資源和服務。
  • 報告與日誌:Puppet生成詳細的報告和日誌,記錄配置應用過程中的狀態和結果。
實踐方法
  • 編寫清單:使用Puppet DSL編寫清單文件,定義系統配置和資源管理。
  • 創建模塊:編寫和維護Puppet模塊,實現配置的重用和分享。
  • 集成Puppet:將Puppet與CI/CD流程集成,實現自動化配置管理。

3.3.3 Chef

Chef是一種配置管理工具,使用Ruby編寫的DSL來定義基礎設施配置。它採用客戶端-伺服器架構,通過Chef Server和Chef Client進行通信。

核心概念
  • 食譜(Recipe):Chef使用食譜(Recipe)定義系統配置和資源管理,食譜由資源和提供者組成。
  • 運行列表(Run List):運行列表是節點在配置過程中執行的食譜和角色的順序列表。
  • 數據包(Data Bag):數據包用於存儲全局配置數據,供食譜在運行時使用。
實踐方法
  • 編寫食譜:使用Chef DSL編寫食譜,定義系統配置和資源管理。
  • 管理運行列表:配置運行列表,確保節點按順序執行食譜和角色。
  • 數據包管理:創建和維護數據包,存儲全局配置數據。

3.4 容器與編排

3.4.1 Docker

Docker是一種開源容器化平臺,通過容器技術實現應用程式的輕量級、可移植和一致的運行環境。Docker在開發、測試和生產環境中廣泛應用,顯著提高了部署和管理效率。

核心概念
  • 鏡像(Image):Docker鏡像是包含應用程式及其依賴項的只讀模板,用於創建Docker容器。
  • 容器(Container):Docker容器是運行中的應用實例,基於鏡像創建,具有獨立的文件系統和資源隔離。
  • Dockerfile:Dockerfile是用於構建鏡像的腳本文件,包含一系列指令,定義鏡像的構建過程。
實踐方法
  • 編寫Dockerfile:根據應用需求編寫Dockerfile,定義鏡像構建步驟。
  • 構建和管理鏡像:使用docker build命令構建鏡像,使用docker push命令將鏡像推送到鏡像倉庫。
  • 運行和管理容器:使用docker run命令啟動容器,使用docker-compose編排和管理多容器應用。

3.4.2 Kubernetes

Kubernetes是一個開源的容器編排平臺,用於自動化容器化應用的部署、擴展和管理。它通過集群管理和自動化調度,提供高可用性和彈性。

核心概念
  • 節點(Node):Kubernetes集群由多個節點組成,每個節點運行一個或多個容器。
  • Pod:Pod是Kubernetes中最小的部署單元,包含一個或多個緊密相關的容器,具有共用的網路和存儲。
  • 服務(Service):服務定義了一組Pod的訪問策略,通過負載均衡和服務發現,實現應用的高可用性和可擴展性。
  • 控制器(Controller):控制器管理Pod的生命周期,常見的控制器包括Deployment、StatefulSet和DaemonSet。
實踐方法
  • 部署配置:編寫Kubernetes配置文件(YAML格式),定義Pod、Service和Controller等資源。
  • 管理集群:使用kubectl命令行工具管理Kubernetes集群,執行部署、擴展和更新操作。
  • 監控與調試:集成監控工具(如Prometheus和Grafana)和日誌工具(如ELK Stack),監

四、DevOps文化與組織

file

4.1 團隊協作與溝通

DevOps不僅僅是一套技術實踐,更是一種文化變革。其核心是打破開發(Development)與運維(Operations)之間的隔閡,促進跨職能團隊的協作與溝通,從而實現持續交付和高效運營。

核心概念

  • 跨職能團隊:DevOps提倡形成由開發、運維、測試、安全等不同角色組成的跨職能團隊,確保各方面的專業知識和技能能夠融合在一起,共同完成從開發到運營的全生命周期管理。
  • 持續反饋:通過持續集成和持續交付,團隊可以快速獲得反饋,及時發現和解決問題。這種持續反饋機制有助於提高整個團隊的響應速度和改進效率。
  • 透明度和信任:DevOps文化強調透明度和信任。團隊成員應當共用信息和知識,建立開放的溝通渠道,減少信息孤島和溝通障礙。

實踐方法

  • 每日站會:通過每日站會(Daily Stand-up)或Scrum會議,團隊成員分享工作進展、計劃和障礙,促進信息共用和問題解決。
  • 共用工具和平臺:使用共用的工具和平臺(如JIRA、Confluence、Slack等),記錄和跟蹤任務、文檔和溝通,提高協作效率。
  • 持續改進:定期舉行回顧會議(Retrospective),總結經驗教訓,提出改進建議,推動團隊的持續改進。

4.2 DevOps文化建設

DevOps文化的建設是一個長期的過程,需要企業從組織結構、管理模式和員工心態等多個方面進行調整和優化。

核心概念

  • 領導支持:成功的DevOps實施需要企業高層領導的支持和推動。領導層應當明確DevOps的戰略目標和優先順序,為團隊提供必要的資源和授權。
  • 變革管理:DevOps是一場文化變革,涉及到企業的方方面面。變革管理方法(如ADKAR模型)可以幫助團隊順利應對和適應變革。
  • 學習和發展:企業應當鼓勵員工不斷學習和提升技能,通過培訓、研討會、社區活動等方式,培養團隊的DevOps能力。

實踐方法

  • 設立DevOps領導職位:指定DevOps負責人或團隊,統籌規劃和推動DevOps實踐的實施和優化。
  • 培訓和教育:定期組織內部培訓和外部學習,幫助團隊成員掌握DevOps工具和方法,提升整體技能水平。
  • 獎勵和認可:建立激勵機制,對在DevOps實踐中表現突出的團隊和個人給予獎勵和認可,鼓勵積极參与和貢獻。

4.3 組織變革與角色轉變

實施DevOps通常需要對組織結構和角色職責進行調整,以適應新的工作方式和流程。

核心概念

  • 職責融合:DevOps強調開發與運維的職責融合,打破傳統的部門壁壘。開發人員需要瞭解運維知識,運維人員需要參與開發過程。
  • 新角色引入:DevOps引入了一些新的角色,如Site Reliability Engineer(SRE)、DevOps Engineer等,這些角色在跨職能團隊中扮演著關鍵的橋梁作用。
  • 流程自動化:通過自動化工具和流程,減少人為干預,提高工作效率和一致性。

實踐方法

  • 重新定義角色職責:根據DevOps實踐的需求,重新定義和分配團隊成員的角色和職責,確保每個環節都有明確的責任人。
  • 建立跨職能團隊:組建由開發、運維、測試、安全等不同職能人員組成的團隊,共同負責從開發到運營的全生命周期管理。
  • 推動流程自動化:引入和推廣自動化工具和流程,實現持續集成、持續交付和持續監控,減少人為錯誤,提高效率和一致性。

4.4 文化變革的挑戰與解決方案

儘管DevOps帶來了顯著的優勢,但在實踐過程中,企業可能會面臨各種挑戰。理解這些挑戰並採取相應的解決方案,是成功實施DevOps的關鍵。

核心概念

  • 文化抵觸:傳統的企業文化可能與DevOps的協作、透明和持續改進理念相衝突,導致實施過程中的阻力。
  • 技能缺乏:實施DevOps需要團隊具備廣泛的技能,從開發、運維到安全和自動化,不同領域的知識交叉和融合是一個挑戰。
  • 工具複雜性:DevOps工具鏈複雜多樣,選擇和集成適合企業需求的工具需要深入的瞭解和規劃。

解決方案

  • 領導推動變革:企業高層領導應當積極支持和推動DevOps變革,營造開放和信任的文化氛圍。
  • 漸進式實施:採用漸進式的實施策略,從小規模試點開始,逐步推廣和優化,積累經驗和成果。
  • 持續培訓和學習:通過持續的培訓和學習,提升團隊的技能水平和DevOps能力,建立內部知識分享和交流機制。
  • 選擇適合的工具:根據企業的實際需求和技術棧,選擇和集成適合的DevOps工具,並確保工具鏈的可擴展性和靈活性。

如有幫助,請多關註
TeahLead KrisChang,10+年的互聯網和人工智慧從業經驗,10年+技術和業務團隊管理經驗,同濟軟體工程本科,復旦工程管理碩士,阿裡雲認證雲服務資深架構師,上億營收AI產品業務負責人。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 什麼是心跳包(心跳機制) 先看一下wiki上的說法: 心跳包(英語:Heartbeat)在電腦科學中指一種周期性的信號,通過硬體或軟體的形式來檢測行為的正常與否,或者與電腦系統是否一致。[1] 通常,機器間會每隔幾秒鐘發送一次心跳包。 如果接收終端沒有在指定時間內(通常是幾個心跳包發送的時間間隔 ...
  • 前言 觀察者模式(Observer Pattern)是一種行為型設計模式,它定義了一種一對多的依賴關係,當一個對象的狀態發生改變時,其所有依賴者都會收到通知並自動更新。 在觀察者模式中,有兩種主要的角色: 觀察者(Observer):觀察者是一個介面或抽象類,它定義了一個更新的介面,使得被觀察者在狀 ...
  • 今年3月份開始,就接到通知, 根據《關於開展有關人群第二劑次脊髓灰質炎滅活疫苗補種工作的通知》國疾控衛免發〔2024〕1號文件要求,在2016年3月1日至2019年9月30日之間出生的兒童,凡無接種禁忌者,需補齊2劑次脊髓灰質炎滅活疫苗。由於我家一直是異地打針【在外漂打工,懂的都懂】,疫苗本上信息又 ...
  • 01- 你們項目中哪裡用到了Redis ? 在我們的項目中很多地方都用到了Redis , Redis在我們的項目中主要有三個作用 : 使用Redis做熱點數據緩存/介面數據緩存 使用Redis存儲一些業務數據 , 例如 : 驗證碼 , 用戶信息 , 用戶行為數據 , 數據計算結果 , 排行榜數據等 ...
  • 多項分佈是二項分佈的推廣,描述了在n次試驗中k種不同事件出現次數的概率分佈。參數包括試驗次數n、結果概率列表pvals(和為1)和輸出形狀size。PMF公式展示了各結果出現次數的概率。NumPy的`random.multinomial()`可生成多項分佈數據。練習包括模擬擲骰子和抽獎活動。解決方案... ...
  • 前言 大家好,我是老馬。很高興遇到你。 作為一個 java 開發者,工作中一直在使用 nginx。卻發現一直停留在使用層面,無法深入理解。 有一天我在想,為什麼不能有一個 java 版本的 nginx 呢? 一者是理解 nginx 的設計靈魂,再者 java 開發者用 java 語言的伺服器不是更加 ...
  • 引言 傳統的併發控制手段,如使用synchronized關鍵字或者ReentrantLock等互斥鎖機制,雖然能夠有效防止資源的競爭衝突,但也可能帶來額外的性能開銷,如上下文切換、鎖競爭導致的線程阻塞等。而此時就出現了一種樂觀鎖的策略,以其非阻塞、輕量級的特點,在某些場合下能更好地提升併發性能,其中 ...
  • OFD(Open Fixed-layout Document )是我國自主制定的一種開放版式文件格式標準。OFD文檔具有不易被篡改、格式獨立、版式固定等特點,目前常用於政府公文、金融、電子發票等領域。 如果想要通過Python將Office文檔(如Word、Excel或PowerPoint)及PDF ...
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...