SpringBoot + Spring Cloud Alibaba + Nacos實現服務管理

1、參考文檔

Spring Cloud Alibaba參考文檔 https://spring-cloud-alibaba-group.github.io/github-pages/hoxton/zh-cn/index.html
Spring Cloud Alibaba官方文檔 https://github.com/alibaba/spring-cloud-alibaba/wiki/

2、引入 Alibaba 依賴

每個 SpringBoot 都有對應的 Spring Cloud 以及 Spring Cloud Alibaba 版本,為了避免依賴沖突,引入依賴前請查閱 版本說明。
以下是 SpringBoot 2.6.11 對應的版本依賴。
https://github.com/alibaba/spring-cloud-alibaba/wiki/版本說明

<properties><spring.boot.version>2.6.11</spring.boot.version><spring.cloud.version>2021.0.4</spring.cloud.version><spring.cloud.alibaba.version>2021.0.4.0</spring.cloud.alibaba.version>
</properties><dependencyManagement><dependencies><!-- spring boot --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>${spring.boot.version}</version><type>pom</type><scope>import</scope></dependency><!-- spring cloud --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>${spring.cloud.version}</version><type>pom</type><scope>import</scope></dependency><!-- spring cloud alibaba --><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-dependencies</artifactId><version>${spring.cloud.alibaba.version}</version><type>pom</type><scope>import</scope></dependency></dependencies>
</dependencyManagement>

依賴引入后,若無爆紅,terminal 執行命令:

mvn clean install

有 finish 提示代表項目依賴成功引入。

回到頂部

3、啟動 Nacos 服務

Nacos 是動態的服務注冊與發現、配置管理平臺,想詳細了解 Nacos 請查閱 Nacos 控制臺手冊,這里粗略地給出壓縮包方式的安裝步驟。

3.1、下載

壓縮包下載地址:https://github.com/alibaba/nacos/releases。

選擇 .zip 后綴文件進行下載,下載完成后解壓:

在這里插入圖片描述

3.2、啟動

解壓完成后, 進入 bin 目錄, cmd 執行命令:

  • ?Linux/Unix/Mac:sh startup.sh -m standalone,
  • 如果是 ubuntu 系統或提示報錯,執行bash startup.sh -m standalone (standalone 代表著單機模式運行,非集群模式)。
  • Windows: startup.cmd -m standalone

3.3、訪問

啟動成功訪問地址:http://localhost:8848/nacos
配置中心界面如下圖:
在這里插入圖片描述到這里 Nacos 啟動步驟結束。

4、創建 nacos-provider 服務提供者

在上文講到 nacos 有服務發現的功能,在這里需要兩個角色

nacos-provider: 注冊進入 nacos-server, 對外暴露服務
nacos-consumer: 注冊進入 nacos-server, 調用 nacos-provider的服務。

4.1、引入依賴

首先創建 nacos-provider模塊,由于使用了多模塊聚合項目,這里直接添加spring-cloud-starter-alibaba-nacos-discovery 依賴:

<!-- nacos服務發現 -->
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

4.2、配置 yml 文件

配置 yml 首先需要知道每個參數代表的含義,下面是配置列表:

配置項Key默認值說明
服務端地址spring.cloud.nacos.discovery.server-addrNacos Server
服務名spring.cloud.nacos.discovery.service${spring.application.name}注冊的服務名
權重spring.cloud.nacos.discovery.weight1取值范圍 1 到 100數值越大,權重越大
網卡名spring.cloud.nacos.discovery.network-interface當IP未配置時
注冊的IP地址spring.cloud.nacos.discovery.ip優先級最高
注冊的IP地址類型spring.cloud.nacos.discovery.ip-typeIPv4可以配置IPv4和IPv6兩種類型,如果網卡同類型IP地址存在多個,希望制定特定網段地址,可使用spring.cloud.inetutils.preferred-networks配置篩選地址
注冊的端口spring.cloud.nacos.discovery.port-1默認情況下不用配置,會自動探測
命名空間spring.cloud.nacos.discovery.namespace常用場景之一是不同環境的注冊的區分隔離,例如開發測試環境和生產環境的資源(如配置、服務)隔離等
AccessKeyspring.cloud.nacos.discovery.access-key當要上阿里云時,阿里云上面的一個云賬號名
SecretKeyspring.cloud.nacos.discovery.secret-key當要上阿里云時,阿里云上面的一個云賬號密碼
Metadataspring.cloud.nacos.discovery.metadata使用Map格式配置,用戶可以根據自己的需要自定義一些和服務相關的元數據信息
日志文件名spring.cloud.nacos.discovery.log-name
集群spring.cloud.nacos.discovery.cluster-nameDEFAULTNacos集群名稱
接入點spring.cloud.nacos.discovery.endpoint地域的某個服務的入口域名,通過此域名可以動態地拿到服務端地址
是否集成Ribbonribbon.nacos.enabledtrue一般都設置成true即可
是否開啟Nacos Watchspring.cloud.nacos.discovery.watch.enabledtrue可以設置成false來關閉 watch

接下來配置 yml 文件:

server:port: 9001
spring:application:## 指定服務名稱,在nacos中的名字name: nacos-providercloud:nacos:discovery:# nacos的服務地址,nacos-server中IP地址:端口號server-addr: 127.0.0.1:8848
management:endpoints:web:exposure:## yml文件中存在特殊字符,必須用單引號包含,否則啟動報錯include: '*'

4.3、開啟服務發現
在啟動類添加@EnableDiscoveryClient開啟服務發現的功能:

@SpringBootApplication
@EnableDiscoveryClient
public class ProviderApplication {public static void main(String[] args) {SpringApplication.run(ProviderApplication.class, args);}}

4.4、編寫測試接口
作為服務提供者,需要提供接口給服務消費者,下面是隨意編寫的測試接口:

@RestController
@RequestMapping("/nacos")
public class NacosController {@GetMapping("/test")public String test(){return "成功訪問服務者接口";}
}

4.5、啟動項目
項目啟動成功后,訪問 nacos控制臺 -> 服務管理 -> 服務列表,可以看到 nacos-provider已成功注冊進來:
在這里插入圖片描述
5、創建 nacos-consumer 服務消費者
既然已經有了服務提供者,那么相應的就需要消費者去消費暴露出來的接口,nacos-consumer的創建步驟與nacos-provider類似。

5.1、引入依賴

<!-- nacos服務發現 -->
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

5.2、配置 yml 文件

server:port: 9002
spring:application:name: nacos-consumercloud:nacos:discovery:# nacos的服務地址server-addr: 127.0.0.1:8848
management:endpoints:web:exposure:## yml文件中存在特殊字符,必須用單引號包含,否則啟動報錯include: '*'
#調用的微服務名稱,這里指服務提供者
service-url:nacos-provider: http://nacos-provider

5.3、開啟服務發現
同樣在啟動類添加@EnableDiscoveryClient開啟服務發現:

@SpringBootApplication
@EnableDiscoveryClient
public class ConsumerApplication {public static void main(String[] args) {SpringApplication.run(ConsumerApplication.class, args);}
}

5.4、編寫測試接口
在 Spring Cloud Nacos 2021 以后就沒有在默認使用 Ribbon 作為負載均衡器了,而且在Cloud官網中也推薦使用LoadBalancer 作為負載均衡器,對此先引入依賴:

引入 LoadBalancer依賴:

<!--loadbalancer負載均衡器-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency> 

創建RestTemplate,如下:

@Configuration
public class RestTemplateConfig {/*** 注入 RestTemplate* * @return*/
@Bean
public RestTemplate restTemplate(){return new RestTemplate();
}
``
編寫接口調用 nacos-provider服務暴露出來的接口:
``
@RestController
@RequestMapping("/nacos")
public class NacosController {@Autowiredprivate RestTemplate restTemplate;@Autowiredprivate LoadBalancerClient loadBalancerClient;@Value("${service-url.nacos-provider}")private String serviceUrl;@GetMapping("/getMessage")public String test(){//使用 LoadBalanceClient 和 RestTemplate 結合的方式來訪問ServiceInstance serviceInstance = loadBalancerClient.choose(serviceUrl);//調用 nacos-provider 的接口String url = String.format("http://%s:%s/nacos/test",serviceInstance.getHost(),serviceInstance.getPort());return restTemplate.getForObject(url,String.class);}
}

5.5、啟動項目
啟動 nacos-consumer服務,可以看得到服務提供者與服務消費者都已經注冊進來:
在這里插入圖片描述
接下來要做的事情是調用 nacos-consumer的接口,輸入地址:

http://localhost:9002/nacos/getMessage:

在這里插入圖片描述

成功調用 nacos-provider接口。

6、Nacos Config 服務配置中心

6.1、引入依賴

Nacos 不只有服務注冊與發現的功能,還擁有配置管理的功能, 下面是配置管理的參數列表及代表的含義:

配置項Key默認值說明
服務端地址spring.cloud.nacos.config.server-addrNacos Server 啟動監聽的ip地址和端口
配置對應的DataId spring.cloud.nacos.config.name先取 prefix,再取 name,最后取 spring.application.name
配置對應的DataId spring.cloud.nacos.config.prefix先取 prefix,再取 name,最后取 spring.application.name
配置內容編碼spring.cloud.nacos.config.encode讀取的配置內容對應的編碼
GROUPspring.cloud.nacos.config.groupDEFAULT_GROUP配置對應的組
文件擴展名spring.cloud.nacos.config.fileExtensionproperties配置項對應的文件擴展名,目前支持 properties 和 yaml(yml)
獲取配置超時時間spring.cloud.nacos.config.timeout3000客戶端獲取配置的超時時間(毫秒)
接入點spring.cloud.nacos.config.endpoint地域的某個服務的入口域名,通過此域名可以動態地拿到服務端地址
命名空間spring.cloud.nacos.config.namespace常用場景之一是不同環境的配置的區分隔離,例如開發測試環境和生產環境的資源(如配置、服務)隔離等
AccessKeyspring.cloud.nacos.config.accessKey當要上阿里云時,阿里云上面的一個云賬號名
SecretKeyspring.cloud.nacos.config.secretKey當要上阿里云時,阿里云上面的一個云賬號密碼
Nacos Server 對應的 context pathspring.cloud.nacos.config.contextPathNacos Server 對外暴露的 context path
集群spring.cloud.nacos.config.clusterName配置成Nacos集群名稱
共享配置spring.cloud.nacos.config.sharedDataids共享配置的 DataId, “,” 分割
共享配置動態刷新spring.cloud.nacos.config.refreshableDataids共享配置中需要動態刷新的 DataId, “,” 分割
自定義 Data Id 配置spring.cloud.nacos.config.extConfig屬性是個集合,內部由 Config POJO 組成。Config 有 3 個屬性,分別是 dataId, group 以及 refresh

同上面的步驟類似,這里首先要做的一步是引入依賴, 使用 group ID 為 com.alibaba.cloud 和 artifact ID 為 spring-cloud-starter-alibaba-nacos-config 的 starter:

<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>

從 SpringCloud 2020 版本開始bootstrap 文件便失效了,需要手動導入相應的依賴:

<!-- bootstrap 文件生效 -->
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>

bootstrap.properties/yml文件優先級高于 application.properties/yml。

6.2、配置 yml 文件
在 bootstrap.yml添加以下配置:

server:port: 9003spring:application:name: nacos-config# 當前環境,這個和dataId有關-> ${prefix}-${spring.profiles.active}.${file-extension}profiles:active: devcloud:nacos:config:# nacos的地址,作為配置中心server-addr: 127.0.0.1:8848## 配置內容的數據格式,目前只支持 properties 和 yaml 類型,這個和dataId有關-> ${prefix}-${spring.profiles.active}.${file-extension}file-extension: properties
management:endpoints:web:exposure:# yml文件中存在特殊字符,必須用單引號包含,否則啟動報錯include: '*'

6.3、dataId 的含義
dataId 是一個配置的唯一標識,格式如下:

${prefix}-${spring.profiles.active}.${file-extension}

prefix:前綴,默認是spring.cloud.nacos.config.prefix的值,再是 spring.cloud.nacos.config.name的值, 最后是 spring.application.name的值。
spring.profiles.active: 即為當前環境對應的 profile。當 spring.profiles.active 為空時,對應的連接符 - 也將不存在,dataId 的拼接格式變成 p r e f i x . {prefix}. prefix.{file-extension}。
file-exetension 為配置內容的數據格式,可以通過配置項 spring.cloud.nacos.config.file-extension 來配置。目前只支持 properties 和 yaml 類型。
6.4、Nacos 添加配置
在 Nacos 中 添加一個 user.age配置,如下圖:
在這里插入圖片描述

填寫完后點擊發布保存配置,如下圖:
在這里插入圖片描述

6.5、獲取 Nacos 配置
新建一個 entity 用于接收配置:

@Component
public class ConfigUser {@Value("${user.age}")private Integer age;public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}
}

新建一個 controller, 用于測試:

@RestController
@RequestMapping("/config")
public class NacosConfigController {@Autowiredprivate ConfigUser configUser;@GetMapping("/test")public String test() {return "current user age is:" + configUser.getAge();}
}

啟動項目,訪問 http://localhost:9003/config/test 接口,成功讀取到配置信息:
在這里插入圖片描述
6.6、動態刷新配置
我們肯定不想每次配置完都重啟項目,想要實現動態刷新需要添加注解@RefreshScope,將注解標注在對應的類上,如下:

@Component
@RefreshScope
public class ConfigUser {@Value("${user.age}")private Integer age;public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}
}

重啟項目完畢,修改 Nacos 中的 user.age=20,然后訪問接口:
在這里插入圖片描述

執行結果
在這里插入圖片描述
發現配置自動更新了。6.7、多環境隔離(NameSpace)
正常的業務開發分為以下三個環境:
···
dev:本地開發環境
test:測試環境
prod:生產環境
···
雖然 dataId能夠唯一的區分每一個配置文件,但是當微服務配置多了,很難查找每個環境的配置,因此有了 NameSpace即命名空間來隔離每個環境的配置。

我們創建了以下三個命名空間:
在這里插入圖片描述

注意:上圖中的命名空間ID是系統自動生成的唯一 ID,后續指定不同的Namespace 就用這個 ID。

Nacos 默認的命名空間是 public, 在 test命名空間添加 user.age=30的配置,如下圖:

image-20230710152838546
bootstrap.yml 修改配置如下:

spring:application:name: nacos-config# 當前環境,這個和dataId有關-> ${prefix}-${spring.profiles.active}.${file-extension}profiles:active: testcloud:nacos:config:# nacos的地址,作為配置中心server-addr: 127.0.0.1:8848# 配置內容的數據格式,目前只支持 properties 和 yaml 類型,這個和dataId有關-> ${prefix}-${spring.profiles.active}.${file-extension}file-extension: properties# 命名空間IDnamespace: f633bb70-eb73-4944-b752-ad8f03881181

配置完畢,重啟項目訪問 http://localhost:9003/config/test 接口,如下:
在這里插入圖片描述
成功讀取配置。

6.8、不同業務隔離(Group)
不同的微服務可能有著不同的配置,例如商品系統與訂單系統通過分庫分別訪問不同的數據庫,意味著有不同的數據庫配置,此時就需要根據Group即組進行配置的區分,
例如Goods_Group、Order_Group, 默認的是 DEFAULT_GROUP。

在 nacos添加配置user.age=40,命名空間為test, 分組為Goods_Group:
在這里插入圖片描述
在 bootstrap.yml指定分組,配置如下:

spring:application:name: nacos-config# 當前環境,這個和dataId有關-> ${prefix}-${spring.profiles.active}.${file-extension}profiles:active: testcloud:nacos:config:# nacos的地址,作為配置中心server-addr: 127.0.0.1:8848# 配置內容的數據格式,目前只支持 properties 和 yaml 類型,這個和dataId有關-> ${prefix}-${spring.profiles.active}.${file-extension}file-extension: properties# 指定命名空間IDnamespace: f633bb70-eb73-4944-b752-ad8f03881181# 指定分組group: Goods_Group

重啟項目后再次訪問 http://localhost:9003/config/test 接口,如下:
在這里插入圖片描述
讀取配置成功。

6.9、共享配置
當微服務數量增多,一般會有相同的配置,那如何把相同的配置提取出來實現共享呢?

在 Nacos添加 share-config1.properties及share-config2-properties配置,如下:
在這里插入圖片描述
注意:dataId的后綴一定要為properties或 yml。

share-config1.properties的配置為 user.name=lin
share-config2.properties的配置為 user.age=50
新建module,命名為nacos-config-share,依賴同nacos-config一樣。

bootstrap.yml配置如下:

server:port: 9004spring:application:name: nacos-config-sharecloud:nacos:config:# nacos的地址,作為配置中心server-addr: 127.0.0.1:8848## 共享配置,List集合,可以配置多個shared-configs:## dataId:配置文件的dataId,必須帶有后綴- dataId: share-config1.properties## refresh:指定是否能夠動態刷新,默認是falserefresh: true- dataId: share-config2.properties## 指定配置文件的分組,默認是DEFAULT_GROUPgroup: Goods_Group
management:endpoints:web:exposure:# yml文件中存在特殊字符,必須用單引號包含,否則啟動報錯include: '*'

可以看到:

通過 spring.cloud.nacos.config.shared-configs[n].data-id 來支持多個共享 Data Id 的配置。
通過 spring.cloud.nacos.config.shared-configs[n].group 來配置自定義 Data Id 所在的組,不明確配置的話,默認是 DEFAULT_GROUP。
通過 spring.cloud.nacos.config.shared-configs[n].refresh 來控制該Data Id在配置變更時,是否支持應用中動態刷新,默認false。
新建 entity,用于接收共享配置,如下:

@Component
@RefreshScope
public class ConfigUser {@Value("${user.name}")private String name;@Value("${user.age}")private Integer age;public String getName() {return name;}public void setName(String name) {this.name = name;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}
}

新建controller,用于接收共享配置,如下:

@RestController
@RequestMapping("/config")
public class NacosConfigShareController {@Autowiredprivate ConfigUser configUser;@GetMapping("/test")public String test() {return "current user name is:" + configUser.getName() + " , and age is:" + configUser.getAge();}
}

啟動項目,訪問 http://localhost:9004/config/test, 如下:
在這里插入圖片描述
成功訪問到 share-config1.properties及 share-config2.properties的共享配置。

到這里 Nacos的基本用法介紹完畢,了解更多詳細信息參考官方Nacos config文檔。

參考文檔:

https://github.com/alibaba/spring-cloud-alibaba/wiki/
https://juejin.cn/post/6990146025545531405#heading-31
https://developer.aliyun.com/article/1082538

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

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

相關文章

css中2D和3D的區別

CSS中2D和3D的主要區別在于&#xff1a; 維度不同&#xff1a;2D是二維平面&#xff0c;3D是三維空間。可視角度不同&#xff1a;2D只能從一個平面角度看&#xff0c;而3D可以在多個角度上觀察。技術難度不同&#xff1a;3D效果需要更復雜的技術支持&#xff0c;如矩陣變換&am…

javascript實現Stack(棧)數據結構

上一篇文章我們理解了List這種數據結構&#xff0c;知道了它的特點和一些使用場景&#xff0c;這篇文章我們就來看一下棧這種數據結構&#xff0c;這里的棧可不是客棧哦&#xff0c;哈哈 棧其實和List非常像&#xff0c;使用javascript實現都是基于數組來實現 嘗試理解Stack …

6種常見的JS模塊打包器

前言 JS模塊打包器是一種工具&#xff0c;它可以將多個JS文件或模塊合并成一個或多個輸出文件&#xff0c;以便在瀏覽器或其他環境中使用。 JS模塊打包器的作用有&#xff1a; 優化代碼&#xff1a;通過壓縮、混淆、刪除無用代碼等方式&#xff0c;減少代碼的體積和復雜度&…

windows系統和虛擬機上ubuntu系統通過虛擬串口進行通信

本文的目的是實現windows系統和虛擬機上安裝的ubuntu通過串口進行通信。為了直觀觀測串口收發數據的內容&#xff0c;需要在windows系統和ubuntu系統使用串口助手來進行監聽。windows系統端用的監聽工具是串口助手SSCOM&#xff0c;ubuntu系統端使用的串口助手是CuteCom。 ubu…

OpenCL學習筆記(一)開發環境搭建(win10+vs2019)

前言 異構編程開發&#xff0c;在高性能編程中有重要的&#xff0c;筆者本次只簡單介紹下&#xff0c;如何搭建簡單的開發環境&#xff0c;可以供有需要的小伙伴們開發測試使用 一、獲取opencl的sdk庫 1.使用cuda庫 若本機有Nvidia的顯卡&#xff0c;在安裝cuda庫后&#x…

如何提高大模型在超長上下文的表現?Claude實驗表明加一句prompt立即提升效果~

本文來自DataLearnerAI官方網站&#xff1a;如何提高大模型在超長上下文的表現&#xff1f;Claude實驗表明加一句prompt立即提升效果~ | 數據學習者官方網站(Datalearner)https://www.datalearner.com/blog/1051701947131881 Claude 2.1版本的模型上下文長度最高拓展到200K&am…

【Flink系列四】Window及Watermark

3.1、window 在 Flink 中 Window 可以將無限流切分成有限流&#xff0c;是處理有限流的核心組件&#xff0c;現在 Flink 中 Window 可以是時間驅動的&#xff08;Time Window&#xff09;&#xff0c;也可以是數據驅動的&#xff08;Count Window&#xff09;。 Flink中的窗口…

c jpeg YUV圖片幀分割成 8*8 塊 ,與逆向把8*8還原為幀

1. 正向分割為若干8*8 塊 下面的程序為通用程序&#xff0c;可以分割任意塊 #include <stdlib.h> #include <string.h> #include <stdio.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <stdlib.h>…

如果微軟20年前開發.net core,JAVA會不會和IE一樣倒下了

可以跨平臺&#xff0c;大量類庫&#xff0c;微軟親自操刀&#xff0c;性能一流&#xff0c;因為沒有做跨平臺&#xff0c;.NET被 python,javascript等搶了一半以上市場。 如果微軟早早的推出類似.net core這樣的跨平臺語言&#xff0c;.net程序猿還會出在這樣的尷尬局面嗎眾所…

Java基礎-開發流程以及HelloWorld程序

目錄 1. Java的開發流程2. HelloWorld 1. Java的開發流程 開發Java程序&#xff0c;需要三個步驟&#xff1a;編寫代碼&#xff0c;編譯代碼&#xff0c;運行代碼 2. HelloWorld 編寫代碼 public class HelloWorld {public static void main(String[] args) {System.out.pri…

Ribbon 饑餓加載

Ribbon默認是采用懶加載&#xff0c;即第一次訪問時才會去創建LoadBalanceClient&#xff0c;請求時間會很長而饑餓加載則會在項目啟動時創建&#xff0c;降低第一次訪問的耗時&#xff0c;通過下面配置開啟饑餓加載: 一、懶加載 Ribbon 默認為懶加載即在首次啟動Application…

代碼隨想錄二刷 |二叉樹 | 二叉樹的層序遍歷

代碼隨想錄二刷 &#xff5c;二叉樹 &#xff5c; 二叉樹的層序遍歷 題目描述解題思路代碼實現 題目描述 102.二叉樹的層序遍歷 給你二叉樹的根節點 root &#xff0c;返回其節點值的 層序遍歷 。 &#xff08;即逐層地&#xff0c;從左到右訪問所有節點&#xff09;。 示例…

Flask 最佳實踐(一)

Flask是一個輕量級而強大的Python Web框架&#xff0c;它的簡潔性和靈活性使其成為許多開發者的首選。然而&#xff0c;為了確保項目的可維護性和可擴展性&#xff0c;我們需要遵循一些最佳實踐。本文將探討Flask中一些關鍵的最佳實踐。 1. 項目結構 構建一個清晰的項目結構是…

Java實現Socket聊天室

一、網絡編程是什么&#xff1f; 在網絡通信協議下&#xff0c;不同計算機上運行的程序&#xff0c;進行數據傳輸。 應用場景&#xff1a;即時通訊、網游對戰、金融證券、國際貿易、郵件、等等。 不管是什么場景&#xff0c;都是計算機與計算機之間通過網絡進行數據傳輸。 …

軟件測試之接口測試自動化(詳解版)

本著以和大家交流如何實現高效的接口測試為出發點&#xff0c;本文包含了我在接口測試領域的一些方法和心得&#xff0c;希望大家一起討論和分享&#xff0c;內容包括但不僅限于&#xff1a; 服務端接口測試介紹接口測試自動化介紹接口測試自動化實踐關于接口測試自動化的思考…

質量工程化,交付快速化

質量和速度之間權衡讓人很難取舍&#xff0c;而通過推進質量工程&#xff0c;以系統化的方式識別和優化系統痛點&#xff0c;可以幫助團隊構建既快又好的精益軟件生產系統。原文: Quality Engineered, Speed Delivered 所有人都想要更快的速度。 但需要解決復雜問題: 權衡質量會…

Kotlin(十四) 擴展函數和運算符重載

目錄 擴展函數 語法結構 代碼示例 運算符重載 語法結構 一元操作符 二元操作符 數值類型操作符 等于和不等于操作符 比較操作符 調用操作符 擴展函數 語法結構 對于擴張函數的語法結構其實很簡單&#xff0c;你想在那個類中添加擴張函數&#xff0c;那么你就用該類…

6. Zigzag Conversion

按照下標找規律注意leetcode的運行輸出&#xff0c;如果其中一組用例出現死循環&#xff0c;輸出結果會在一個文件&#xff0c;即部分測試用例正確&#xff0c;部分錯誤且出現死循環&#xff0c;則需辨別輸出結果屬于哪一份測試用例 class Solution { public:string convert(s…

(二)五種最新算法(SWO、COA、LSO、GRO、LO)求解無人機路徑規劃MATLAB

一、五種算法&#xff08;SWO、COA、LSO、GRO、LO&#xff09;簡介 1、蜘蛛蜂優化算法SWO 蜘蛛蜂優化算法&#xff08;Spider wasp optimizer&#xff0c;SWO&#xff09;由Mohamed Abdel-Basset等人于2023年提出&#xff0c;該算法模型雌性蜘蛛蜂的狩獵、筑巢和交配行為&…

w3school學習筆記3(NumPy)

系列文章目錄 文章目錄 系列文章目錄前言一、NumPy簡介二、NumPy入門三、NumPy創建四、NumPy數組索引五、NumPy數組裁切六、NumPy數據類型七、NumPy副本/視圖八、NumPy數據形狀九、NumPy數組重塑十、NumPy數組迭代總結 前言 一、NumPy簡介 1、什么是Numpy&#xff1f; NumPy是…