微服务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.mzph.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;带有传统软件…