無縫部署您的應用程序:將 Jenkins Pipelines 與 ArgoCD 集成

在 DevOps 領域,自動化是主要目標之一。這包括自動化軟件部署方式。與其依賴某人在部署軟件的機器上進行 rsync/FTP/編寫軟件,不如使用 CI/CD 的概念。

CI,即持續集成,是通過代碼提交創建工件的步驟。這可以是 Docker 鏡像,使用 Git 倉庫主分支中的提交進行部署。

CD,即持續部署/交付,是部署工件的步驟。這可以是任何操作,例如在機器上運行 docker pull 和 docker run 的部署系統,指示 AWS Lambda 將代碼更新到 S3 存儲桶中的最新代碼,或者指示 Kubernetes 集群更新現有部署以使用新鏡像。

在本文中,我將快速介紹如何設置觸發 ArgoCD 的 Jenkins 流水線。ArgoCD 是一個基于 Git 倉庫中的清單更新 Kubernetes 集群的 CD 工具。它可以部署標準 Kubernetes 清單,并使用 Kustomize 更新清單或 Helm 圖表。

先決條件

要將 Jenkins 與 ArgoCD 結合使用,您需要執行以下操作:-

  • 在 Jenkins 工作器/運行器上安裝 argocd-cli
  • 在 ArgoCD 中創建一個 Jenkins 部署角色,該角色有權更新應用程序
  • 在基于 Git 的版本控制系統中,ArgoCD 可以訪問一個或多個代碼庫(例如 GitHub、Gitlab、Gitea 或無前端的 Git)
  • Jenkins 工作器/運行器需要能夠通過 API 訪問 ArgoCD,因此請確保設置了正確的防火墻規則

?安裝ArgoCD CLI

我們使用 Packer 為 Jenkins 工作器配置/準備鏡像。因此,添加其他工具非常簡單。但是,如果您運行的是靜態工作器,則只需確保 argocd 二進制文件安裝在 Jenkins 用戶可運行的位置即可。例如:

$ pwd
/home/jenkins## Download the tool 
$ curl -LO https://github.com/argoproj/argo-cd/releases/download/v1.2.0/argocd-linux-amd64 ## Move it to the /usr/local/bin
$ sudo mv argocd-linux-amd64 /usr/local/bin/argocd## Ensure it is exectutable
$ sudo chmod 755 /usr/local/bin/argocd## Check it works
$ argocd version
argocd: v1.2.0+674978cBuildDate: 2019-09-04T21:26:04ZGitCommit: 674978cd587701b39e81fce6d5c960b6d76d5882GitTreeState: cleanGoVersion: go1.12.6Compiler: gcPlatform: linux/amd64
argocd-server: v1.2.0+674978cBuildDate: 2019-09-04T21:27:17ZGitCommit: 674978cd587701b39e81fce6d5c960b6d76d5882GitTreeState: cleanGoVersion: go1.12.6Compiler: gcPlatform: linux/amd64Ksonnet Version: 0.13.1

ArgoCD Jenkins 部署角色


要在 ArgoCD 中創建部署角色,請轉到 ArgoCD 儀表板,點擊側邊欄上的齒輪圖標(進入設置),然后轉到“項目”。
在“項目中”,選擇您的應用程序正在運行的項目。如果您尚未創建任何項目,則默認為“默認”。
在項目中,轉到“角色”,然后點擊“添加角色”。

?在角色中,您可以為角色指定您想要的名稱和描述,以便將來更容易理解其用途。您可以在此處應用細粒度的策略來定義 Jenkins 可以執行的操作(例如,僅創建、僅更新、僅同步現有應用程序)。或者,您可以授予其完全訪問權限,但顯然在生產環境中不建議這樣做。)

完成上述所有操作后,您需要創建一個 JWT(JSON Web Token)。它用于對用戶進行身份驗證,確保只有客戶端(在本例中為 Jenkins)才能承擔此角色并使用其權限。這可以在 Web UI 中完成,也可以通過 CLI 完成。

要從 CLI 創建 JWT,您需要執行 argocd proj role create-token {PROJECT-NAME} {PROJECT-ROLE} 命令,示例如下:

$ argocd proj role create-token default jenkins-deploy-role
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpYXQiOjE1Njg3MjEyMjEsImlzcyI6ImFyZ29jZCIsIm5iZiI6MTU2ODcyMTIyMSwic3ViIjoicHJvajpkZWZhdWx0OmplbmtpbnMtZGVwbG95LXJvbGUifQ.UyXNZtdbDyllzGl7PbLPhMgqNMFE1oJqONaLHV8RK-k

將令牌添加到 Jenkins


要將令牌添加到 Jenkins 本身(以便在流水線中使用),首先轉到您的 Jenkins 實例,然后在側邊欄上找到“憑據”,然后選擇“系統”,再選擇“全局憑據”。點擊添加憑據,如下圖所示。

允許ArgoCD 訪問代碼庫

ArgoCD 需要訪問的代碼庫是托管 Kubernetes 清單的代碼庫。您可以將清單與代碼放在同一個代碼庫中,也可以將它們放在一個完全獨立的代碼庫中。

您可以通過多種方式進行設置。您可以使用 SSH 或 HTTPS 連接到您的版本控制系統。我選擇了 SSH。

再次轉到 ArgoCD 的“設置”頁面,但不要點擊“項目”,而是點擊“代碼庫”。在這里,點擊“使用 SSH 連接代碼庫”。

??

ninjamac@192 ~ % ssh-keygen -o -f argocd-deploy -C "argocd@example.com"
Generating public/private ed25519 key pair.
Enter passphrase for "argocd-deploy" (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in argocd-deploy
Your public key has been saved in argocd-deploy.pub
The key fingerprint is:
SHA256:nAuYAjALq9QIGII14J1vtjZfEboOQE4+Q985bu5BjuU argocd@example.com
The key's randomart image is:
+--[ED25519 256]--+
|@+o              |
|O++..            |
|++ B     .       |
|o.* oo..o..      |
|. .*o=.BS.       |
|   .* O.o..      |
|     * E..       |
|    . B o        |
|      .=         |
+----[SHA256]-----+

獲取私鑰(在本例中為 argocd-deploy)的內容,并將其粘貼到 ArgoCD 的 SSH 私鑰數據字段中。提供 Kubernetes 清單所在倉庫的 URL(如果您使用 HTTPS 連接,則為 HTTPS URL;如果使用 SSH 連接,則為 SSH URL)。

您需要公鑰(在本例中為 argocd-deploy.pub)來在您選擇的 Git 服務器中設置部署密鑰。

防火墻規則


您的 Jenkins 工作器/運行器需要能夠訪問 ArgoCD API。我們將其暴露在 TCP:443 端口(即標準 HTTPS)上,因此您需要確保您的防火墻允許其通過。

Kubernetes 清單


如上所述,您可以使用標準 Kubernetes 清單、Kustomize 和/或 Helm 圖表來部署您的應用程序。我使用 Kustomize 來更新 Kubernetes 部署中使用的 Docker 鏡像哈希值。如果沒有 Kustomize,即使您的 Docker 鏡像倉庫(私有或公共)中有新的鏡像可用,部署也不會更新。

這是因為 Kubernetes API 認為部署沒有發生變化。標簽與以前相同,因此它不知道需要執行任何操作。

從 Kubernetes v1.15 版本開始,它們現在支持滾動重啟。與 ImagePullPolicy: Always 結合使用,這將強制部署獲取新鏡像。

在 Kubernetes v1.15 之前的版本中,Deployment 永遠不會更新。使用 :latest 并非最佳實踐,因此引用實際哈希值可能是一個好主意。

清單示例


我最基本的 Kubernetes 清單如下:-

## ------------------- Debian Deployment ------------------- #kind: Deployment
apiVersion: apps/v1
metadata:labels:k8s-app: debian-testname: debian-test
spec:replicas: 1revisionHistoryLimit: 10selector:matchLabels:k8s-app: debian-testtemplate:metadata:labels:k8s-app: debian-testspec:containers:- name: debian-testimage: docker.io/rockwang415/k8s-debian-test:latest imagePullPolicy: Alwaysresources:requests:memory: "64Mi"cpu: "250m"limits:memory: "128Mi"cpu: "500m"ports:- containerPort: 80protocol: TCPlivenessProbe:httpGet:scheme: HTTPpath: /port: 80initialDelaySeconds: 30timeoutSeconds: 30---
## ------------------- Debian Service ------------------- #kind: Service
apiVersion: v1
metadata:labels:k8s-app: debian-testname: debian-test
spec:ports:- port: 80targetPort: 80type: NodePortselector:k8s-app: debian-test

我們使用?Docker 鏡像倉庫來存放鏡像。如您所見,上面的鏡像標簽為 :latest。不過,我們也使用 Kustomize 來根據部署情況進行更改。我們的 kustomization.yaml 文件非常簡單:-

resources:
- debian-test.yaml


從 v1.2.0 開始,ArgoCD 可以原生地利用 Kustomize(如果您指定了正確的參數),因此無需在此 YAML 文件中添加任何其他內容。

Jenkins Pipeline


現在所有先決條件都已滿足,您已將 ArgoCD 連接到您的倉庫并創建了清單,接下來您可以創建一個 Jenkinsfile 來部署應用程序。

pipeline {agent {node {label 'testing'}}stages {       stage('Prepare') {steps {checkout([$class: 'GitSCM',branches: [[name: "origin/master"]],doGenerateSubmoduleConfigurations: false,submoduleCfg: [],userRemoteConfigs: [[url: 'ssh://git@git.example.com/argocd-test/argocd-test.git']]])}}stage('Docker_Build') {steps {// Build the Docker imagesh '''# Login to Docker registrydocker login -u <docker-username> -p <docker-password> <docker-registry-url># Build the imagedocker build . -t k8s-debian-test'''}}stage('Deploy_K8S') {steps {withCredentials([string(credentialsId: "jenkins-argocd-deploy", variable: 'ARGOCD_AUTH_TOKEN')]) {sh '''ARGOCD_SERVER="argocd-prod.example.com"APP_NAME="debian-test-k8s"CONTAINER="k8s-debian-test"REGION="eu-west-1"# Tag the docker imagedocker tag $CONTAINER:latest <docker-registry-url>/$CONTAINER:latest# Push the image to Docker registrydocker push <docker-registry-url>/$CONTAINER:latestIMAGE_DIGEST=$(docker image inspect <docker-registry-url>/$CONTAINER:latest -f '{{join .RepoDigests ","}}')# Customize image ARGOCD_SERVER=$ARGOCD_SERVER argocd --grpc-web app set $APP_NAME --kustomize-image $IMAGE_DIGEST# Deploy to ArgoCDARGOCD_SERVER=$ARGOCD_SERVER argocd --grpc-web app sync $APP_NAME --forceARGOCD_SERVER=$ARGOCD_SERVER argocd --grpc-web app wait $APP_NAME --timeout 600'''}}}}
}

docker hub 登錄


這用于登錄 docker hub,檢索 Docker 鏡像(例如,基礎 Debian 鏡像),然后根據我們的 Dockerfile 進行標記和推送。如果您使用的是標準鏡像或您自己的私有鏡像倉庫,則可以忽略這些部分。

鏡像摘要


由于某種原因,Docker 鏡像摘要并不總是顯示在 docker images --digests 中。相反,我們會檢查最新推送到 docker hub的鏡像,并檢索 .RepoDigests 標簽。這將提供以下內容:

ninjamac@192 ~ % docker image inspect rockwang415/k8s-debian-test -f '{{join .RepoDigests ","}}'
rockwang415/k8s-debian-test@sha256:b662d828445b39ac0a659ec77b629a75d1b298a6c76afdf5296cff64806fc638

ArgoCD


由于我們的 ArgoCD API 和儀表板位于 AWS 應用負載均衡器前端,我們目前在所有 ArgoCD 命令前都添加了 --grpc-web 前綴,例如 argocd --grpc-web app sync TEST --force。這是因為 AWS 應用負載均衡器默認不支持 GRPC。如果您在 ArgoCD 前端的負載均衡器/入口支持 GRPC,請從所有命令中移除該前綴。

自定義鏡像

ARGOCD_SERVER=$ARGOCD_SERVER argocd --grpc-web app set $APP_NAME --kustomize-image $IMAGE_DIGEST


上述命令將 Kubernetes 清單中的鏡像設置為生成的鏡像摘要變量。由于 ArgoCD 默認支持 Kustomize,它可以自行操作清單。這意味著我們不會因為鏡像標簽始終不變而導致 Deployment 始終不更新。

這是一個非常棒的功能,意味著我們不需要像 ArgoCD 一樣在 Jenkins 工作進程中同時運行 Kustomize 二進制文件。

同步應用程序

ARGOCD_SERVER=$ARGOCD_SERVER argocd --grpc-web app sync $APP_NAME --force
ARGOCD_SERVER=$ARGOCD_SERVER argocd --grpc-web app wait $APP_NAME --timeout 600

?上述代碼只是要求 ArgoCD 觸??發 Kubernetes 部署應用程序。在 ArgoCD 中,這將使用 Git 倉庫中的 Manifest 文件,該文件已通過 Kustomize 更新以使用新的鏡像標簽。然后,它將根據 Jenkins 生成的鏡像部署應用程序的新版本。

運行Jenkins Pipeline?

下面是運行后的結果

Kubernetes Output

Pre-ArgoCD Run

kubectl get pods
NAME                                     READY   STATUS      RESTARTS   AGE
debian-test-8648f969ff-hrsvp             1/1     Running     0          4d22h

Post-ArgoCD Run

kubectl get pods
NAME                                     READY   STATUS      RESTARTS   AGE
debian-test-7664c648bb-sq6h7             1/1     Running     0          22s

Jenkins Console Output - ArgoCD


+ ARGOCD_SERVER=argocd-prod.example.com argocd \ --grpc-web app set debian-test-k8s \ --kustomize-image rockwang415/k8s-debian-test@sha256:###SHA256-IMAGE-HASH###+ ARGOCD_SERVER=argocd-prod.example.com argocd --grpc-web app sync debian-test-k8s --force
TIMESTAMP                  GROUP        KIND   NAMESPACE                  NAME    STATUS   HEALTH        HOOK  MESSAGE
2025-05-017T13:05:27+00:00   apps  Deployment     default           debian-test    Synced  Healthy              
2025-05-017T13:05:27+00:00            Service     default           debian-test    Synced  Healthy              
2025-05-017T13:05:27+00:00   apps  Deployment     default           debian-test  OutOfSync  Healthy              Name:               debian-test-k8s
Project:            default
Server:             https://kubernetes.default.svc
Namespace:          default
URL:                https://argocd-prod.example.com/applications/debian-test-k8s
Repo:               git@git.example.com:yeti/argocd-test.git
Target:             HEAD
Path:               yaml
Sync Policy:        <none>
Sync Status:        Synced to HEAD (f5f91ad)
Health Status:      ProgressingOperation:          Sync
Sync Revision:      f5f91ad16296ecab90f337e5dbf3f4f927b61799
Phase:              Succeeded
Start:              2025-05-01 13:05:27 +0000 UTC
Finished:           2025-05-01 13:05:29 +0000 UTC
Duration:           2s
Message:            successfully synced (all tasks run)GROUP  KIND        NAMESPACE  NAME         STATUS  HEALTH       HOOK  MESSAGEService     default    debian-test  Synced  Healthy            service/debian-test unchanged
apps   Deployment  default    debian-test  Synced  Progressing        deployment.apps/debian-test configured
+ ARGOCD_SERVER=argocd-prod.example.com argocd --grpc-web app wait debian-test-k8s --timeout 600
TIMESTAMP                  GROUP        KIND   NAMESPACE                  NAME    STATUS   HEALTH            HOOK  MESSAGE
2025-05-01T13:05:29+00:00            Service     default           debian-test    Synced  Healthy                  service/debian-test unchanged
2025-05-01T13:05:29+00:00   apps  Deployment     default           debian-test    Synced  Progressing              deployment.apps/debian-test configuredName:               debian-test-k8s
Project:            default
Server:             https://kubernetes.default.svc
Namespace:          default
URL:                https://argocd-prod.example.com/applications/debian-test-k8s
Repo:               git@git.example.com:yetiops/argocd-test.git
Target:             HEAD
Path:               yaml
Sync Policy:        <none>
Sync Status:        Synced to HEAD (f5f91ad)
Health Status:      HealthyOperation:          Sync
Sync Revision:      f5f91ad16296ecab90f337e5dbf3f4f927b61799
Phase:              Succeeded
Start:              2025-05-01 13:05:27 +0000 UTC
Finished:           2025-05-01 13:05:29 +0000 UTC
Duration:           2s
Message:            successfully synced (all tasks run)GROUP  KIND        NAMESPACE  NAME         STATUS  HEALTH   HOOK  MESSAGEService     default    debian-test  Synced  Healthy        service/debian-test unchanged
apps   Deployment  default    debian-test  Synced  Healthy        deployment.apps/debian-test configured

ArgoCD Dashboard

?總結


我們為什么要使用 Jenkins 和 ArgoCD?Jenkins 非常擅長構建工件、整合代碼提交,并接受來自 GitHub 或 GitLab 等平臺的 Webhook 來啟動作業。然而,ArgoCD 能夠更好地控制鏡像的部署方式,因為所有內容都可以在原生 Kubernetes 清單中描述。

這消除了將 Kubernetes 直接暴露給 Jenkins 的需要,也無需操作 kubectl 命令來部署(或使用額外的插件)。

ArgoCD 還為我們提供了部署進度的實時視圖,以及在需要時可以回滾到的位置。它還以 Kubernetes 為中心(即部署和服務如何關聯)的方式展示它們,因此開發人員和運維團隊可以更輕松地了解所有內容是如何關聯的。

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

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

相關文章

4.2.3 Thymeleaf標準表達式 - 5. 片段表達式

在本次實戰中&#xff0c;我們通過 Thymeleaf 的片段表達式實現了模板的模塊化和復用。首先&#xff0c;我們定義了一個導航欄片段 navbar&#xff0c;并通過參數 activeTab 動態高亮當前激活的標簽。然后&#xff0c;我們在多個頁面&#xff08;如主頁、關于頁和聯系頁&#x…

網安面試經(1)

1.說說IPsec VPN 答&#xff1a;IPsec VPN是利用IPsec協議構建的安全虛擬網絡。它通過加密技術&#xff0c;在公共網絡中創建加密隧道&#xff0c;確保數據傳輸的保密性、完整性和真實性。常用于企業分支互聯和遠程辦公&#xff0c;能有效防范數據泄露與篡改&#xff0c;但部署…

【C++/Qt shared_ptr 與 線程池】合作使用案例

以下是一個結合 std::shared_ptr 和 Qt 線程池&#xff08;QThreadPool&#xff09;的完整案例&#xff0c;展示了如何在多線程任務中安全管理資源&#xff0c;避免內存泄漏。 案例場景 任務目標&#xff1a;在后臺線程中處理一個耗時的圖像檢測任務&#xff0c;任務對象通過 …

【Unity】 HTFramework框架(六十五)ScrollList滾動數據列表

更新日期&#xff1a;2025年5月16日。 Github 倉庫&#xff1a;https://github.com/SaiTingHu/HTFramework Gitee 倉庫&#xff1a;https://gitee.com/SaiTingHu/HTFramework 索引 一、ScrollList滾動數據列表二、使用ScrollList1.快捷創建ScrollList2.ScrollList的屬性3.自定義…

經典案例 | 筑基與躍升:解碼制造企業產供銷協同難題

引言 制造企業如何在投產初期突破管理瓶頸&#xff0c;實現高效運營&#xff1f;G公司作為某大型集團的新建子公司&#xff0c;面對產供銷流程缺失、跨部門協同低效等難題&#xff0c;選擇與AMT企源合作開展流程優化。 項目通過端到端流程體系搭建、標準化操作規范制定及長效管…

【Python 操作 MySQL 數據庫】

在 Python 中操作 MySQL 數據庫主要通過 pymysql 或 mysql-connector-python 庫實現。以下是完整的技術指南&#xff0c;包含連接管理、CRUD 操作和最佳實踐&#xff1a; 一、環境準備 1. 安裝驅動庫 pip install pymysql # 推薦&#xff08;純Python實現&#xff0…

記錄vsCode連接gitee并實現項目拉取和上傳

標題 在 VSCode 中上傳代碼到 Gitee 倉庫 要在 VSCode 中將代碼上傳到 Gitee (碼云) 倉庫&#xff0c;你可以按照以下步驟操作&#xff1a; 準備工作 確保已安裝 Git確保已安裝 VSCode擁有 Gitee 賬號并創建了倉庫 可以參考該文章的部分&#xff1a;idea實現與gitee連接 操…

【信息系統項目管理師】第6章:項目管理概論 - 31個經典題目及詳解

更多內容請見: 備考信息系統項目管理師-專欄介紹和目錄 文章目錄 第一節 PMBOK的發展【第1題】【第2題】【第3題】【第4題】【第5題】【第6題】第二節 項目基本要素【第1題】【第2題】【第3題】【第4題】【第5題】【第6題】【第7題】【第8題】【第9題】【第10題】第三節 項目經…

簡單介紹C++中線性代數運算庫Eigen

Eigen 是一個高性能的 C 模板庫&#xff0c;專注于線性代數、矩陣和向量運算&#xff0c;廣泛應用于科學計算、機器學習和計算機視覺等領域。以下是對 Eigen 庫的詳細介紹&#xff1a; 1. 概述 核心功能&#xff1a;支持矩陣、向量運算&#xff0c;包括基本算術、矩陣分解&…

生產級編排AI工作流套件:Flyte全面使用指南 — Core concepts Launch plans

生產級編排AI工作流套件&#xff1a;Flyte全面使用指南 — Core concepts Launch plans Flyte 是一個開源編排器&#xff0c;用于構建生產級數據和機器學習流水線。它以 Kubernetes 作為底層平臺&#xff0c;注重可擴展性和可重復性。借助 Flyte&#xff0c;用戶團隊可以使用 P…

Python 之類型注解

類型注解允許開發者顯式地聲明變量、函數參數和返回值的類型。但是加不加注解對于程序的運行沒任何影響&#xff08;是非強制的&#xff0c;且類型注解不影響運行時行為&#xff09;&#xff0c;屬于 有了挺好&#xff0c;沒有也行。但是大型項目按照規范添加注解的話&#xff…

rocketmq并發消費

netty的handler 在netty的網絡模型中&#xff0c;在想bootstrap設置handler時&#xff0c; 都是在等待 事件 的到來&#xff0c;才會被調用的方法&#xff0c;都是被動的&#xff0c; 服務端等待 request 的到來&#xff0c;進行read, 然后主動調用writeAndFlush寫出去。 客戶…

React 播客專欄 Vol.9|React + TypeScript 項目該怎么起步?從 CRA 到配置全流程

&#x1f44b; 歡迎回到《前端達人 React 播客書單》第 9 期&#xff08;正文內容為學習筆記摘要&#xff0c;音頻內容是詳細的解讀&#xff0c;方便你理解&#xff09;&#xff0c;請點擊下方收聽 你是不是常在網上看到 .tsx 項目、Babel、Webpack、tsconfig、Vite、CRA、ESL…

【PmHub后端篇】PmHub中基于自定義注解和AOP的服務接口鑒權與內部認證實現

1 引言 在現代軟件開發中&#xff0c;尤其是在微服務架構下&#xff0c;服務接口的鑒權和內部認證是保障系統安全的重要環節。本文將詳細介紹PmHub中如何利用自定義注解和AOP&#xff08;面向切面編程&#xff09;實現服務接口的鑒權和內部認證&#xff0c;所涉及的技術知識點…

芯片測試之X-ray測試

原理&#xff1a; X-ray是利用陰極射線管產生高能量電子與金屬靶撞擊&#xff0c;在撞擊過程中&#xff0c;因電子突然減速&#xff0c;其損失的動能會以X-Ray形式放出。而對于樣品無法以外觀方式觀測的位置&#xff0c;利用X-Ray穿透不同密度物質后其光強度的變化&#xff0c;…

QBasic 一款古老的編程語言在現代學習中的價值(附程序)

QBasic&#xff08;Quick Beginner’s All-purpose Symbolic Instruction Code&#xff09;是微軟公司于 1991 年推出的一款簡單易學的編程語言&#xff0c;作為BASIC語言的變種&#xff0c;它曾廣泛應用于教育領域和初學者編程入門。盡管在當今Python、Java等現代編程語言主導…

【八股戰神篇】Java高頻基礎面試題

1 面向對象編程有哪些特性&#xff1f; 面向對象編程&#xff08;Object-Oriented Programming&#xff0c;簡稱 OOP&#xff09;是一種以對象為核心的編程范式&#xff0c;它通過模擬現實世界中的事物及其關系來組織代碼。OOP 具有三大核心特性&#xff1a;封裝、繼承、多態。…

科學養生指南:解鎖健康生活新方式

在快節奏的現代生活中&#xff0c;健康養生成為人們關注的焦點。想要擁有良好的身體狀態&#xff0c;無需依賴復雜的傳統理論&#xff0c;通過科學的生活方式&#xff0c;就能輕松實現養生目標。? 規律運動是健康的基石。每周進行 150 分鐘以上的中等強度有氧運動&#xff0c…

OpenCV閾值處理完全指南:從基礎到高級應用

引言 閾值處理是圖像處理中最基礎、最常用的技術之一&#xff0c;它能夠將灰度圖像轉換為二值圖像&#xff0c;為后續的圖像分析和處理奠定基礎。本文將全面介紹OpenCV中的各種閾值處理方法&#xff0c;包括原理講解、代碼實現和實際應用場景。 一、什么是閾值處理&#xff1…

Java8到24新特性整理

本文整理了 Java 8 至 Java 24 各版本的新特性&#xff0c;內容包括每個版本的新增功能分類&#xff08;如語法增強、性能優化、工具支持等&#xff09;、詳細的代碼示例&#xff0c;并結合官方文檔資料&#xff0c;分析每項特性的應用場景及優缺點。Java 8 發布于 2014 年&…