微服務day03-Nacos配置管理與Nacos集群搭建

一.Nacos配置管理

Nacos不僅可以作為注冊中心,可以進行配置管理

1.1 統一配置管理

統一配置管理可以實現配置的熱更新(即不用重啟當服務發生變更時也可以直接更新)
dataId格式:服務名-環境名.yaml,分組一般使用默認即可,配置內容只寫有熱更新需求的配置

在這里插入圖片描述

1.2 拉取配置文件

在沒有nacos配置文件時,項目啟動順序為:
項目啟動>>>讀取本地配置文件>>>創建spring容器>>>加載bean
在有nacos配置文件之后,項目啟動順序為:
項目啟動>>>讀取nacos配置文件>>>讀取本地配置文件>>>創建spring容器>>>加載bean
此時出現了一個問題:**讀取nacos配置文件需要知道nacos配置文件的地址,而這個地址應該在application.yml中,這是否造成了沖突?**因此需要將nacos配置的地址提前,此時使用bootstrap.yml引導文件,該文件的優先級還要高于application.yml
執行步驟
1.在相應的服務中導入依賴比如user-service:

<!--nacos配置管理依賴-->
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>

2.導入并編寫bootstrap.yml(該引導文件中會指明nacos配置文件所在位置)

spring:application:name: userserviceprofiles:active: dev # 環境cloud:nacos:server-addr: localhost:8848 # nacos地址config:file-extension: yaml # 文件后綴名

3.刪除application.yml中與bootstrap.yml中重復的配置

#  application:
#    name: userservice # user服務名稱
#  cloud:
#    nacos:
#      server-addr: localhost:8848 # nacos服務地址
#      discovery:
#        cluster-name: SH # 集群名稱

4.驗證是否真的讀取到nacos配置文件:
在UserController中添加內容:

 	@Value("${pattern.dateformat}")  //讀取nacos配置文件中的內容,并將內容注入到dateformat中;private String dateformat;@GetMapping("/now")public String now(){return LocalDateTime.now().format(DateTimeFormatter.ofPattern(dateformat));}

修改之后啟動user-service,訪問http://localhost:8081/user/now,結果:
在這里插入圖片描述

1.3 配置文件熱更新

Nacos中的配置文件變更之后,微服務無需重啟就可以感知。不過需要通過下面2種配置實現:
方式一
??在@Value注入的變量所在類上添加注解@RefreshScope

@Slf4j
@RestController
@RequestMapping("/user")
@RefreshScope
public class UserController {@Autowiredprivate UserService userService;@Value("${pattern.dateformat}")private String dateformat;@GetMapping("/now")public String now(){return LocalDateTime.now().format(DateTimeFormatter.ofPattern(dateformat));}
}

修改之前
在這里插入圖片描述

熱更新之后:
在這里插入圖片描述

方式二
使用@ConfigurationProperties(prefix = “pattern”)注解,單獨配置一個屬性類,讀取配置文件中的內容:
1.新建config.PatternProperties屬性類

@Data
@Component
@ConfigurationProperties(prefix = "pattern")
public class PatternProperties {private String dateformat;
}

2.將PatternProperties bean注入到UserController中:

@Slf4j
@RestController
@RequestMapping("/user")
//@RefreshScope
public class UserController {@Autowiredprivate UserService userService;@Autowiredprivate PatternProperties patternProperties;//    @Value("${pattern.dateformat}")
//    private String dateformat;@GetMapping("/now")public String now(){return LocalDateTime.now().format(DateTimeFormatter.ofPattern(patternProperties.getDateformat()));}
}

最終實現效果同上

1.4 配置管理-多環境配置共享

微服務啟動時會從nacos讀取多個配置文件:

  • [spring.application.name]-[spring-profiles.active].yaml,例如userservice-dev.yaml,這個是區分環境的。
  • [spring.application.name].yaml,例如userservice.yaml,這個不區分環境,多環境共性。
    無論profiles如何變化,[spring.application.name].yaml該文件一定會被加載,因此多環境共享分配置可以寫入這個文件。
    執行步驟
    1.添加共享配置
    在這里插入圖片描述
    2.采用第二種方式讀入nacos配置文件屬性
@Data
@Component
@ConfigurationProperties(prefix = "pattern")
public class PatternProperties {private String dateformat;private String envShareValue;
}

編寫測試接口

@GetMapping("/prop")
public PatternProperties prop(){return patternProperties;
}

重啟配置類,訪問結果:dev
在這里插入圖片描述
訪問結果:test
在這里插入圖片描述

配置文件訪問優先級
遠程

1.5 配置管理-nacos集群搭建

nacos在生產環境中必定是集群形式,搭建集群的基本步驟:

  • 搭建數據庫,初始化數據庫表結構
  • 下載nacos安裝包
  • 配置nacos
  • 啟動nacos集群
  • nginx反向代理

1.新建數據庫nacos,初始化數據庫表結構(如果你使用的其他版本的nacos,記得使用里邊自帶的sql腳本初始化數據庫)

-- 新建查詢
CREATE TABLE `config_info` (`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',`data_id` varchar(255) NOT NULL COMMENT 'data_id',`group_id` varchar(255) DEFAULT NULL,`content` longtext NOT NULL COMMENT 'content',`md5` varchar(32) DEFAULT NULL COMMENT 'md5',`gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '創建時間',`gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改時間',`src_user` text COMMENT 'source user',`src_ip` varchar(50) DEFAULT NULL COMMENT 'source ip',`app_name` varchar(128) DEFAULT NULL,`tenant_id` varchar(128) DEFAULT '' COMMENT '租戶字段',`c_desc` varchar(256) DEFAULT NULL,`c_use` varchar(64) DEFAULT NULL,`effect` varchar(64) DEFAULT NULL,`type` varchar(64) DEFAULT NULL,`c_schema` text,PRIMARY KEY (`id`),UNIQUE KEY `uk_configinfo_datagrouptenant` (`data_id`,`group_id`,`tenant_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='config_info';/******************************************/
/*   數據庫全名 = nacos_config   */
/*   表名稱 = config_info_aggr   */
/******************************************/
CREATE TABLE `config_info_aggr` (`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',`data_id` varchar(255) NOT NULL COMMENT 'data_id',`group_id` varchar(255) NOT NULL COMMENT 'group_id',`datum_id` varchar(255) NOT NULL COMMENT 'datum_id',`content` longtext NOT NULL COMMENT '內容',`gmt_modified` datetime NOT NULL COMMENT '修改時間',`app_name` varchar(128) DEFAULT NULL,`tenant_id` varchar(128) DEFAULT '' COMMENT '租戶字段',PRIMARY KEY (`id`),UNIQUE KEY `uk_configinfoaggr_datagrouptenantdatum` (`data_id`,`group_id`,`tenant_id`,`datum_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='增加租戶字段';/******************************************/
/*   數據庫全名 = nacos_config   */
/*   表名稱 = config_info_beta   */
/******************************************/
CREATE TABLE `config_info_beta` (`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',`data_id` varchar(255) NOT NULL COMMENT 'data_id',`group_id` varchar(128) NOT NULL COMMENT 'group_id',`app_name` varchar(128) DEFAULT NULL COMMENT 'app_name',`content` longtext NOT NULL COMMENT 'content',`beta_ips` varchar(1024) DEFAULT NULL COMMENT 'betaIps',`md5` varchar(32) DEFAULT NULL COMMENT 'md5',`gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '創建時間',`gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改時間',`src_user` text COMMENT 'source user',`src_ip` varchar(50) DEFAULT NULL COMMENT 'source ip',`tenant_id` varchar(128) DEFAULT '' COMMENT '租戶字段',PRIMARY KEY (`id`),UNIQUE KEY `uk_configinfobeta_datagrouptenant` (`data_id`,`group_id`,`tenant_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='config_info_beta';/******************************************/
/*   數據庫全名 = nacos_config   */
/*   表名稱 = config_info_tag   */
/******************************************/
CREATE TABLE `config_info_tag` (`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',`data_id` varchar(255) NOT NULL COMMENT 'data_id',`group_id` varchar(128) NOT NULL COMMENT 'group_id',`tenant_id` varchar(128) DEFAULT '' COMMENT 'tenant_id',`tag_id` varchar(128) NOT NULL COMMENT 'tag_id',`app_name` varchar(128) DEFAULT NULL COMMENT 'app_name',`content` longtext NOT NULL COMMENT 'content',`md5` varchar(32) DEFAULT NULL COMMENT 'md5',`gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '創建時間',`gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改時間',`src_user` text COMMENT 'source user',`src_ip` varchar(50) DEFAULT NULL COMMENT 'source ip',PRIMARY KEY (`id`),UNIQUE KEY `uk_configinfotag_datagrouptenanttag` (`data_id`,`group_id`,`tenant_id`,`tag_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='config_info_tag';/******************************************/
/*   數據庫全名 = nacos_config   */
/*   表名稱 = config_tags_relation   */
/******************************************/
CREATE TABLE `config_tags_relation` (`id` bigint(20) NOT NULL COMMENT 'id',`tag_name` varchar(128) NOT NULL COMMENT 'tag_name',`tag_type` varchar(64) DEFAULT NULL COMMENT 'tag_type',`data_id` varchar(255) NOT NULL COMMENT 'data_id',`group_id` varchar(128) NOT NULL COMMENT 'group_id',`tenant_id` varchar(128) DEFAULT '' COMMENT 'tenant_id',`nid` bigint(20) NOT NULL AUTO_INCREMENT,PRIMARY KEY (`nid`),UNIQUE KEY `uk_configtagrelation_configidtag` (`id`,`tag_name`,`tag_type`),KEY `idx_tenant_id` (`tenant_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='config_tag_relation';/******************************************/
/*   數據庫全名 = nacos_config   */
/*   表名稱 = group_capacity   */
/******************************************/
CREATE TABLE `group_capacity` (`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主鍵ID',`group_id` varchar(128) NOT NULL DEFAULT '' COMMENT 'Group ID,空字符表示整個集群',`quota` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '配額,0表示使用默認值',`usage` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '使用量',`max_size` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '單個配置大小上限,單位為字節,0表示使用默認值',`max_aggr_count` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '聚合子配置最大個數,,0表示使用默認值',`max_aggr_size` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '單個聚合數據的子配置大小上限,單位為字節,0表示使用默認值',`max_history_count` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '最大變更歷史數量',`gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '創建時間',`gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改時間',PRIMARY KEY (`id`),UNIQUE KEY `uk_group_id` (`group_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='集群、各Group容量信息表';/******************************************/
/*   數據庫全名 = nacos_config   */
/*   表名稱 = his_config_info   */
/******************************************/
CREATE TABLE `his_config_info` (`id` bigint(64) unsigned NOT NULL,`nid` bigint(20) unsigned NOT NULL AUTO_INCREMENT,`data_id` varchar(255) NOT NULL,`group_id` varchar(128) NOT NULL,`app_name` varchar(128) DEFAULT NULL COMMENT 'app_name',`content` longtext NOT NULL,`md5` varchar(32) DEFAULT NULL,`gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,`gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,`src_user` text,`src_ip` varchar(50) DEFAULT NULL,`op_type` char(10) DEFAULT NULL,`tenant_id` varchar(128) DEFAULT '' COMMENT '租戶字段',PRIMARY KEY (`nid`),KEY `idx_gmt_create` (`gmt_create`),KEY `idx_gmt_modified` (`gmt_modified`),KEY `idx_did` (`data_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='多租戶改造';/******************************************/
/*   數據庫全名 = nacos_config   */
/*   表名稱 = tenant_capacity   */
/******************************************/
CREATE TABLE `tenant_capacity` (`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主鍵ID',`tenant_id` varchar(128) NOT NULL DEFAULT '' COMMENT 'Tenant ID',`quota` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '配額,0表示使用默認值',`usage` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '使用量',`max_size` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '單個配置大小上限,單位為字節,0表示使用默認值',`max_aggr_count` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '聚合子配置最大個數',`max_aggr_size` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '單個聚合數據的子配置大小上限,單位為字節,0表示使用默認值',`max_history_count` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '最大變更歷史數量',`gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '創建時間',`gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改時間',PRIMARY KEY (`id`),UNIQUE KEY `uk_tenant_id` (`tenant_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='租戶容量信息表';CREATE TABLE `tenant_info` (`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',`kp` varchar(128) NOT NULL COMMENT 'kp',`tenant_id` varchar(128) default '' COMMENT 'tenant_id',`tenant_name` varchar(128) default '' COMMENT 'tenant_name',`tenant_desc` varchar(256) DEFAULT NULL COMMENT 'tenant_desc',`create_source` varchar(32) DEFAULT NULL COMMENT 'create_source',`gmt_create` bigint(20) NOT NULL COMMENT '創建時間',`gmt_modified` bigint(20) NOT NULL COMMENT '修改時間',PRIMARY KEY (`id`),UNIQUE KEY `uk_tenant_info_kptenantid` (`kp`,`tenant_id`),KEY `idx_tenant_id` (`tenant_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='tenant_info';CREATE TABLE `users` (`username` varchar(50) NOT NULL PRIMARY KEY,`password` varchar(500) NOT NULL,`enabled` boolean NOT NULL
);CREATE TABLE `roles` (`username` varchar(50) NOT NULL,`role` varchar(50) NOT NULL,UNIQUE INDEX `idx_user_role` (`username` ASC, `role` ASC) USING BTREE
);CREATE TABLE `permissions` (`role` varchar(50) NOT NULL,`resource` varchar(255) NOT NULL,`action` varchar(8) NOT NULL,UNIQUE INDEX `uk_role_permission` (`role`,`resource`,`action`) USING BTREE
);INSERT INTO users (username, password, enabled) VALUES ('nacos', '$2a$10$EuWPZHzz32dJN7jexM34MOeYirDdFAZm2kuWj7VEOJhhZkDrxfvUu', TRUE);INSERT INTO roles (username, role) VALUES ('nacos', 'ROLE_ADMIN');

2.安裝nacos(略)

3.配置nacos(由于是集群,所以我們配置多份),配置多份可以采用解壓一次,配置一次,復制兩份,再依次修改。(因為內存吃緊的原因,我用2個nacos作為集群;)

  • 將nacos/conf/cluster.conf.example重命名為cluster.conf,然后修改為,表示2臺機器(這里是只有一臺機器所以用兩個不同的端口號來模擬兩臺機器,注意盡量使用你的本機IP地址),cmd》》ipconfig可以查看本機IP地址。我的本機IP地址為10.81.62.166,所以cluster.conf中寫的內容是:
10.81.62.166:8848
10.81.62.166:8858
  • 修改nacos/conf/application.properties,添加數據庫配置

1.打開數據源

在這里插入圖片描述

spring.datasource.platform=mysql

2.指定數據庫的數量

在這里插入圖片描述

db.num=1

3.指定數據庫連接信息
在這里插入圖片描述

db.url.0=jdbc:mysql://127.0.0.1:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user.0=root
db.password.0=你的密碼

4.將nacos文件夾復制2份
在這里插入圖片描述

5.分別修改三個nacos中的application.properties中的server-port,server-port對應的是你在cluster.conf中配置的內容,比如讓nacos1中的server-port=8848,讓nacos2中的server-port=8858。

6.啟動startup.cmd,這次是集群啟動(默認),區別之前的單點啟動,共同點是都要進入bin目錄再打開cmd窗口.注意目錄中不能出現中文目錄。

//單點啟動
startup.cmd -m standalone
//集群啟動
startup.cmd 

nacos1集群啟動效果:
在這里插入圖片描述
nacos2集群啟動效果:
在這里插入圖片描述
可能遇到的問題1
由于vmware虛擬網卡的存在,nacos啟動時會獲取虛擬網卡的IP地址而不會讀取cluster.conf中IP地址。我之前明明配置好了IP地址,但是一直讀取的確實192.168.11.11這個地址,后來發現這是一個虛擬網卡IP地址,于是禁用了虛擬網絡,恢復了正常。

7.配置nginx

  • 將Nginx解壓到一個沒有中文的目錄
  • 修改conf/nginx.conf文件,配置如下,將如下配置內容復制到conf/nginx.conf中的任何一個位置即可(只要包含在http下):
	upstream nacos-cluster {server 10.81.62.166:8848;server 10.81.62.166:8858;}server {listen       8088;server_name  localhost;location /nacos {proxy_pass http://nacos-cluster;}}

可能遇到的問題2
nginx進行反向代理的配置時,一個http中只能有一個server{},所以像視頻中老師那樣直接復制進去是不行的,需要刪除之前的server即可。保存之后重啟nginx,打開對應的端口。
在這里插入圖片描述
Nacos集群啟動成功

8.修改代碼中配置文件
由于部署了集群,因此訪問地址發生了變更,修改bootstrap.yml文件中server-addr為nginx監聽端口

spring:cloud:nacos:server-addr: localhost:8088 # nacos地址

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

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

相關文章

InnoDB高級特性篇(5)-使用InnoDB的全文索引

InnoDB是MySQL數據庫的一個關系型存儲引擎。它提供了很多強大的功能&#xff0c;其中一個重要的功能是全文索引。全文索引允許我們在文本數據中進行高效的搜索&#xff0c;以找到包含特定關鍵詞的記錄。在本文中&#xff0c;我們將詳細介紹如何在InnoDB中使用全文索引。 首先&…

藍橋杯備戰刷題two(自用)

1.楊輝三角形 #include<iostream> using namespace std; #define ll long long const int N2e510; int a[N]; //1 0 0 0 0 0 0 //1 1 0 0 0 0 0 //1 2 1 0 0 0 0 //1 3 3 1 0 0 0 //1 4 6 4 1 0 0 //1 5 10 10 5 1 //前綴和思想 //第一列全為1,第二列為從0開始遞增1的序…

信息檢索(七):Transformer Memory as a Differentiable Search Index

Transformer Memory as a Differentiable Search Index 摘要1. 引言2. 相關工作3. 可微搜索索引3.1 索引策略3.1.1 索引方法3.1.2 文檔表示策略 3.2 用于檢索的 Docids 表示3.3 訓練和優化 4. 實驗4.1 基線4.2 實驗結果 5. 結論參考資料 原文鏈接&#xff1a;https://proceedin…

Revit-二開之創建線性尺寸標注-(5)

創建線性尺寸標注 對應的Revit界面的按鈕 線性尺寸標注源碼 本篇文章實現的邏輯是從rvt文章中拾取一面墻,然后對墻添加再水平方向上的線性尺寸標注 protected override Result OnExecute(ExternalCommandData commandData, ref string message, ElementSet elements

LeetCode 刷題 [C++] 第55題.跳躍游戲

題目描述 給你一個非負整數數組 nums &#xff0c;你最初位于數組的 第一個下標 。數組中的每個元素代表你在該位置可以跳躍的最大長度。 判斷你是否能夠到達最后一個下標&#xff0c;如果可以&#xff0c;返回 true &#xff1b;否則&#xff0c;返回 false 題目分析 題目中…

2.1 mov、add和sub加減指令實操體驗

匯編語言 1. mov操作 1.1 mov移動值 mov指令把右邊的值移動到左邊 mount c d:masm c: debug r ax 0034 r 073f:0100 mov ax,7t1.2 mov移動寄存器的值 把右邊寄存器的值賦值給左邊的寄存器 a 073f:0105 mov bx,axt1.3 mov高八位&#xff08;high&#xff09;和低八位&am…

設計模式——中介者模式(mediator pattern)

概述 如果在一個系統中對象之間的聯系呈現為網狀結構&#xff0c;如下圖所示。對象之間存在大量的多對多聯系&#xff0c;將導致系統非常復雜&#xff0c;這些對象既會影響別的對象&#xff0c;也會被別的對象所影響&#xff0c;這些對象稱為同事對象&#xff0c;它們之間通過彼…

json---->如何把對象以json的形式傳遞給后端?

把對象以json的形式傳遞有很多種&#xff0c;先寫一種&#xff0c;后期再補充 &#x1f64c;&#x1f64c;&#x1f64c;&#x1f64c;&#x1f64c;&#x1f64c;&#x1f64c;&#x1f64c;&#x1f64c;&#x1f64c;&#x1f64c;&#x1f64c;&#x1f64c;&#x1f64c;&…

?用細節去解釋,如何打造一款行政旗艦車型

高山行政加長版應該是這個級別里最大的幾款 MPV 之一了&#xff0c;對于一款較大的車型&#xff0c;其最重要的是解決行駛的便利性。 這次我們就試試魏牌高山行政加長版&#xff0c;從產品本身出發看幾個緯度的細節&#xff1a; 行政該如何定義加長后產品的功能變化加長之后到…

Ladder類創建梯形對象共享一個下底

package Absent;public class Chapter5 {public static void main(String[] args) {Ladder.bottom100;Ladder ladderOnenew Ladder();Ladder ladderTwonew Ladder();ladderOne.top23;ladderTwo.top34;System.out.println("ladderOne的上底&#xff1a;"ladderOne.get…

代碼隨想錄算法訓練營(動態規劃9)|198.打家劫舍 213.打家劫舍II 337.打家劫舍III

今天就是打家劫舍的一天,微笑 198.打家劫舍 leetcode題目鏈接 視頻講解 文章講解 動規五部曲分析如下&#xff1a; 確定dp數組&#xff08;dp table&#xff09;以及下標的含義 dp[i]&#xff1a;考慮下標i&#xff08;包括i&#xff09;以內的房屋&#xff0c;最多可以偷竊…

Java 數組(詳細)

目錄 一、數組的概述 1. 數組的理解&#xff1a; 2. 數組相關的概念&#xff1a; 3. 數組的特點&#xff1a; 4. 數組的分類&#xff1a; 5.數據結構&#xff1a; 二、一維數組 1. 一維數組的聲明與初始化 2. 一維數組元素的引用&#xff1a; 3. 數組的屬性&#xff1…

Scikit-Learn邏輯回歸

Scikit-Learn邏輯回歸 1、邏輯回歸概述1.1、邏輯回歸1.2、邏輯回歸的優缺點1.3、邏輯回歸與線性回歸2、邏輯回歸的原理2.1、邏輯回歸的概念與原理2.2、邏輯回歸的損失函數2.3、梯度下降法求解邏輯回歸的最優解3、Scikit-Learn邏輯回歸3.1、決策邊界3.2、Scikit-Learn邏輯回歸AP…

【Java數據結構 -- 二叉樹+樹的深度優先遍歷】

二叉樹 1. 二叉樹1.1 二叉樹的介紹1.2 兩種特殊的二叉樹1.3 二叉樹的性質1.4 二叉樹的存儲 2. 二叉樹的基本操作2.1 二叉樹的創建2.2 二叉樹的優先遍歷2.3 遞歸實現二叉樹遍歷2.4 用非遞歸實現二叉樹遍歷 1. 二叉樹 1.1 二叉樹的介紹 二叉樹是一種數據結構&#xff0c;一顆二…

【python、nlp、transformer】transformer學習部分

注&#xff1a; 此博文僅為了解transformer架構&#xff0c;如果使用&#xff0c;建議直接調用庫就行了 Transformer的優勢 相比之前占領市場的LSTM和GRU模型&#xff0c;Transformer有兩個顯著的優勢&#xff1a; 1. Transformer能夠利用分布式GPU進行并行訓練&#xff0c…

小朋友來自多少小區 - 華為OD統一考試(C卷)

OD統一考試&#xff08;C卷&#xff09; 分值&#xff1a; 100分 題解&#xff1a; Java / Python / C 題目描述 幼兒園組織活動&#xff0c;老師布置了一個任務&#xff1a; 每個小朋友去了解與自己同一個小區的小朋友還有幾個。 我們將這些數量匯總到數組 garden 中。 請…

數據庫-第四/五章 數據庫安全性和完整性【期末復習|考研復習】

前言 總結整理不易&#xff0c;希望大家點贊收藏。 給大家整理了一下計數據庫系統概論中的重點概念&#xff0c;以供大家期末復習和考研復習的時候使用。 參考資料是王珊老師和薩師煊老師的數據庫系統概論(第五版)。 文章目錄 前言4 第四章 數據庫安全性4.1 數據庫安全性定義4.…

學生宿舍管理小程序|基于微信小程序的學生宿舍管理系統設計與實現(源碼+數據庫+文檔)

學生宿舍管理小程序目錄 目錄 基于微信小程序的學生宿舍管理系統設計與實現 一、前言 二、系統功能設計 三、系統實現 1、管理員模塊的實現 &#xff08;1&#xff09;學生信息管理 &#xff08;2&#xff09;公告信息管理 &#xff08;3&#xff09;宿舍信息管理 &am…

git clone http/https 報錯 10054/443 問題

文章目錄 錯誤解決方案1 關閉http和https代理2 設置自己的代理 錯誤 錯誤 Failed to connect to github.com port 443: Timed out OpenSSL SSL_read: Connection was reset, errno 10054 一般都是網絡問題 解決方案 1 關閉http和https代理 git config --global --unset htt…

《系統架構設計師教程(第2版)》第5章-軟件工程基礎知識-05-凈室軟件工程(CSE)

文章目錄 1. 概述2. 理論基礎2.1 函數理論2.2 抽樣理論 3. 技術手段3.1 增量式開發3.2 基于函數的規范與設計3.3 正確性驗證3.4 統計測試 (Statistically Based Testing) 和軟件認證 4. 應用與缺點1&#xff09;太理論化2&#xff09;缺少傳統模塊測試3&#xff09;帶有傳統軟件…