微服務項目中的注冊中心——Nacos配置

從零開始:Nacos服務注冊與配置中心實戰教程

Nacos(Dynamic Naming and Configuration Service)是阿里巴巴開源的服務發現、配置管理工具,集注冊中心與配置中心于一體,廣泛應用于微服務架構。本文將從環境搭建到實戰配置,帶你快速掌握Nacos的核心用法。

一、Nacos簡介

Nacos主要提供兩大核心功能:

  • 服務注冊與發現:替代Eureka、Consul等,支持服務自動注冊、健康檢查、負載均衡。
  • 動態配置管理:集中管理配置文件,支持動態更新無需重啟服務,多環境配置隔離。

本文基于Nacos 2.1.0版本(當前穩定版),兼容Spring Cloud Alibaba 2.2.x及以上。

二、Nacos服務端部署

1. 單機版部署(開發環境)

方式1:Docker快速部署(推薦)
# 拉取鏡像
docker pull nacos/nacos-server:v2.1.0-slim
1.創建掛載目錄
mkdir -p /mydata/nacos/logs/                      #新建logs目錄
mkdir -p /mydata/nacos/conf/						#新建conf目錄

ps:這一步是添加映射文件夾,將宿主機的文件映射到nacos容器中,你可以在配置好nacos后再這兩個文件夾下查看日志和配置

2.啟動nacos并復制文件到宿主機,關閉容器
docker run -d --name nacos-server -p 8848:8848 nacos/nacos-server:v2.3.1

這一步是先隨便啟動一下nacos然后nacos容器當中的配置文件和日志復制到我們剛才創建的目錄下,為我們以后的掛載做準備

3.刪除剛才隨便創建的nacos服務
docker rm -f nacos
4.配置MySQL,將nacos按照生產環境標準去配置,默認為內置數據庫(不推薦)

直接在你的服務器mysql數據庫創建一個nacos-mysql-config的數據庫,然后執行下面的語句即可

/** Copyright 1999-2018 Alibaba Group Holding Ltd.** Licensed under the Apache License, Version 2.0 (the "License");* you may not use this file except in compliance with the License.* You may obtain a copy of the License at**      http://www.apache.org/licenses/LICENSE-2.0** Unless required by applicable law or agreed to in writing, software* distributed under the License is distributed on an "AS IS" BASIS,* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.* See the License for the specific language governing permissions and* limitations under the License.*//******************************************/
/*   表名稱 = config_info                  */
/******************************************/
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(128) DEFAULT NULL COMMENT 'group_id',`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 COMMENT 'app_name',`tenant_id` varchar(128) DEFAULT '' COMMENT '租戶字段',`c_desc` varchar(256) DEFAULT NULL COMMENT 'configuration description',`c_use` varchar(64) DEFAULT NULL COMMENT 'configuration usage',`effect` varchar(64) DEFAULT NULL COMMENT '配置生效的描述',`type` varchar(64) DEFAULT NULL COMMENT '配置的類型',`c_schema` text COMMENT '配置的模式',`encrypted_data_key` text NOT NULL COMMENT '密鑰',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';/******************************************/
/*   表名稱 = 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(128) 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 COMMENT 'app_name',`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='增加租戶字段';/******************************************/
/*   表名稱 = 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 '租戶字段',`encrypted_data_key` text NOT NULL 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';/******************************************/
/*   表名稱 = 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';/******************************************/
/*   表名稱 = 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 COMMENT 'nid, 自增長標識',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';/******************************************/
/*   表名稱 = 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容量信息表';/******************************************/
/*   表名稱 = his_config_info              */
/******************************************/
CREATE TABLE `his_config_info` (`id` bigint(20) unsigned NOT NULL COMMENT 'id',`nid` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT 'nid, 自增標識',`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',`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',`op_type` char(10) DEFAULT NULL COMMENT 'operation type',`tenant_id` varchar(128) DEFAULT '' COMMENT '租戶字段',`encrypted_data_key` text NOT NULL 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='多租戶改造';/******************************************/
/*   表名稱 = 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 COMMENT 'username',`password` varchar(500) NOT NULL COMMENT 'password',`enabled` boolean NOT NULL COMMENT 'enabled'
);CREATE TABLE `roles` (`username` varchar(50) NOT NULL COMMENT 'username',`role` varchar(50) NOT NULL COMMENT 'role',UNIQUE INDEX `idx_user_role` (`username` ASC, `role` ASC) USING BTREE
);CREATE TABLE `permissions` (`role` varchar(50) NOT NULL COMMENT 'role',`resource` varchar(128) NOT NULL COMMENT 'resource',`action` varchar(8) NOT NULL COMMENT 'action',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');
4.正式啟動nacos
# 啟動容器(單機模式,默認內存模式)
docker run -d  \--name nacos \-p 8848:8848 \-p 9848:9848 \-p 9849:9849 \--privileged=true \-e JVM_XMS=256m \-e JVM_XMX=256m \-e JVM_XMN=128m \-e MODE=standalone \-e SPRING_DATASOURCE_PLATFORM=mysql \-e MYSQL_SERVICE_HOST=修改為你的數據庫地址 \-e MYSQL_SERVICE_PORT=3306 \-e MYSQL_SERVICE_DB_NAME=nacos-mysql-config \-e MYSQL_SERVICE_USER=root \-e MYSQL_SERVICE_PASSWORD=修改為你的數據庫密碼 \-e NACOS_AUTH_TOKEN=修改為你加密后的token要求在加密前在32位以上 \-e NACOS_AUTH_IDENTITY_KEY=nacos \-e NACOS_AUTH_IDENTITY_VALUE=secret \-v /mydata/nacos/logs/:/home/nacos/logs \-v /mydata/nacos/conf/:/home/nacos/conf/ \--restart=always \nacos/nacos-server:v2.1.0-slim
5.放通你的防火墻對應的8848,9848,9849端口

這部分不過多說了,網上有很多教程,請你參考配置即可

6.訪問你的nacos服務

這時候你的nacos服務應該說是已經啟動好了,請你修改以下url就訪問你的nacos服務了用戶名和密碼均為:nacos

http://你的IP地址:8848/nacos
方式2:源碼包部署
  1. 從Nacos官網下載2.1.0版本壓縮包。
  2. 解壓后進入bin目錄,執行啟動命令:
    # Linux/Mac
    sh startup.sh -m standalone
    # Windows
    cmd startup.cmd -m standalone
    

2. 驗證服務端是否啟動

訪問控制臺:http://服務器IP:8848/nacos,默認賬號密碼:nacos/nacos
若能登錄,說明服務端部署成功。

三、客戶端集成(Spring Cloud)

1. 引入依賴(Maven)

pom.xml中添加:

<!-- 服務發現依賴 -->
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId><version>2.2.7.RELEASE</version>
</dependency><!-- 配置中心依賴(如需動態配置) -->
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId><version>2.2.7.RELEASE</version>
</dependency>

2. 服務注冊配置(application.yml)

spring:cloud:nacos:discovery:server-addr: xxxxxx:8848  # 服務端地址正確# 用戶名密碼:使用Nacos默認或服務端配置的賬號(Docker未修改,默認是nacos/nacos)username: nacospassword: nacossecret-key: NWY0ZGNjM2IxxxxxxxxxxxxxxxxN2RlYjg4MmNmOTk=access-key: nacosconfig:server-addr: xxxxxxxxxxxx:8848group: DEFAULT_GROUPfile-extension: yml#讀取配置中心文件配置config:import:- optional:nacos:${spring.application.name}.${spring.cloud.nacos.config.file-extension}

參考我的配置:
image

3. 啟動類添加注解

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;@SpringBootApplication
@EnableDiscoveryClient  // 開啟服務注冊發現(Spring Cloud 2020+可省略)
public class EBuiltAuthenticApplication {public static void main(String[] args) {SpringApplication.run(EBuiltAuthenticApplication.class, args);}
}

啟動服務后,在Nacos控制臺的「服務列表」中可看到注冊的服務,說明集成成功。

四、動態配置中心使用

1. 添加配置文件(bootstrap.yml)

注意:配置中心需使用bootstrap.yml(加載優先級高于application.yml):

spring:application:name: e-built-authenticcloud:nacos:config:server-addr: 43.138.10.233:8848  # 配置中心地址file-extension: yaml  # 配置文件格式(yaml/xml/properties)group: DEFAULT_GROUP  # 配置分組(默認DEFAULT_GROUP)namespace:  # 命名空間(用于多環境隔離,默認public)# 認證配置(同服務注冊)username: nacospassword: nacos

2. 在Nacos控制臺添加配置

  1. 進入控制臺「配置管理」→「配置列表」,點擊「+」新建配置:
    • Data ID:e-built-authentic.yaml(格式:服務名.文件格式)
    • Group:DEFAULT_GROUP(與客戶端配置一致)
    • 配置內容:
      user:name: nacos-testage: 18
      

3. 客戶端獲取動態配置

import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
@RefreshScope  // 開啟動態刷新配置
public class ConfigController {@Value("${user.name:default}")private String userName;@GetMapping("/user/name")public String getUserName() {return userName;}
}
  • 訪問/user/name,返回nacos-test,說明配置生效。
  • 在Nacos控制臺修改user.name的值,無需重啟服務,再次訪問即可獲取新值。

五、常見問題與解決方案

1. 服務注冊失敗:Client not connected

  • 原因:網絡不通或端口未開放。
  • 解決
    • 開放Nacos端口:8848(HTTP)、9848-9849(gRPC)。
    • 檢查云服務器安全組、防火墻是否放行上述端口。
    • 驗證命令:telnet 服務器IP 8848(能連接則網絡正常)。

2. 認證失敗:authentication failed

  • 原因:客戶端與服務端認證參數不匹配。
  • 解決:確保客戶端access-key/secret-key與服務端NACOS_AUTH_IDENTITY_KEY/NACOS_AUTH_TOKEN一致。

3. 配置不生效:@Value獲取為默認值

  • 原因Data IDGroup與客戶端配置不一致。
  • 解決Data ID必須為「服務名.文件格式」(如e-built-authentic.yaml),Group需與客戶端group配置一致。

六、生產環境注意事項

  1. 集群部署:生產環境需部署Nacos集群,避免單點故障。
  2. 數據持久化:默認使用內存存儲,生產需配置MySQL持久化(修改conf/application.properties)。
  3. 安全加固
    • 開啟認證(NACOS_AUTH_ENABLE=true)。
    • 自定義復雜的NACOS_AUTH_TOKEN
    • 限制客戶端IP訪問(通過安全組或Nacos權限控制)。
  4. 版本兼容:Spring Cloud Alibaba與Nacos版本需嚴格匹配(參考官方兼容性文檔)。

七、總結

Nacos作為微服務架構的核心組件,簡化了服務注冊發現與配置管理流程。本文從部署到實戰,覆蓋了開發環境的核心配置,掌握這些內容后,可進一步探索Nacos的高級特性(如配置灰度發布、服務路由等)。

如果在使用中遇到其他問題,歡迎在評論區交流~


本文同步發布于個人技術博客,轉載請注明出處。更多微服務相關教程,敬請關注后續更新!

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

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

相關文章

日期格式化成英文月,必須指定語言環境

如果不指定Locale.ENGLISH 在有些JDK下 輸出6月 INV USD 314,791.77,DUE 25-07 [PAID USD 503,389.56 ON 2025-07-16]Mar INV USD 52,042.00,DUE 25-07 [PAID USD 52,042.00 ON 2025-08-11]所以必…

【6】Transformers快速入門:Transformer 的注意力層 是啥?

一句話看懂注意力層作用&#xff1a;讓 AI 像人一樣 “抓重點” &#xff08;比如讀“貓追老鼠”&#xff0c;自動聚焦 “追” 這個動作&#xff0c;忽略無關詞&#xff09;1. 為什么需要注意力&#xff1f; 問題場景&#xff08;翻譯例子&#xff09;&#xff1a; 英文&#x…

集合,完整擴展

目錄 前言&#xff1a; 一、List接口 1.1 ArrayList 1.2 LinkedList 1.3 Vector 二、Set接口 2.1 HashSet 2.2 TreeSet 2.3 LinkedHashSet 三、應用選擇 前言&#xff1a; 本篇文章重點梳理 List 接口和 Set 接口的核心內容&#xff0c;結合代碼案例幫大家吃透它們的…

【doris基礎與進階】3-Doris安裝與部署

安裝前的準備 在windows系統上通過vmwareubuntu 22.04的方式進行安裝&#xff0c;由于資源有限&#xff0c;在同1臺機器上同時安裝fe和be&#xff08;broker本次不安裝&#xff0c;極簡化安裝&#xff09;&#xff0c;安裝版本為2.1.10&#xff0c;2.x版本架構不會有大的變化&a…

關于數據結構6-哈希表和5種排序算法

哈希表1哈希算法將數據通過哈希算法映射成一個鍵值&#xff0c;存取都在同一個位置實現數據的高效存儲和查找&#xff0c;將時間復雜度盡可能降低至O(1)2哈希碰撞多個數據通過哈希算法得到的鍵值相同&#xff0c;成為產生哈希碰撞3哈希表&#xff1a;構建哈希表存放0-100之間的…

AWT與Swing深度對比:架構差異、遷移實戰與性能優化

全面對比分析Java AWT與Swing GUI框架的架構差異、性能表現和適用場景&#xff0c;提供完整的AWT到Swing遷移實戰指南&#xff0c;包含15代碼示例、性能測試數據、最佳實踐建議&#xff0c;助你做出明智的技術選型和實現平滑遷移。 Java AWT, Swing, GUI框架對比, 代碼遷移, 性…

git倉庫檢測工具

介紹 Gitleaks 是一款用于檢測git 倉庫、文件以及任何你想通過 git 傳遞的信息(例如密碼、API 密鑰和令牌)的工具stdin。如果你想了解更多關于檢測引擎工作原理的信息,請查看這篇博客:正則表達式(幾乎)就是你所需要的一切。 ? ~/code(master) gitleaks git -v○│╲│…

【4】Transformers快速入門:自然語言模型 vs 統計語言模型

一句話關系總結 統計語言模型 自然語言模型的“數學基礎” &#xff08;就像加減乘除是數學的基礎&#xff0c;統計模型是AI學說話的基礎工具&#xff09;區別對比表&#xff08;小白版&#xff09;維度統計語言模型自然語言模型本質用數學公式算句子概率用神經網絡模仿人腦理…

[激光原理與應用-252]:理論 - 幾何光學 - 傳統透鏡焦距固定,但近年出現的可變形透鏡(如液態透鏡、彈性膜透鏡)可通過改變自身形狀動態調整焦距。

一、液態透鏡&#xff1a;電潤濕效應驅動曲率變化基本結構液態透鏡由兩種互不相溶的液體&#xff08;如導電水溶液與絕緣硅油&#xff09;封裝在透明圓筒形容器中構成。容器壁經疏水處理&#xff0c;使水溶液呈圓頂型聚集在中心&#xff0c;與硅油形成凸狀曲面。工作原理電潤濕…

wordpress數據庫導入時的#1044錯誤

在wordpress網站數據庫文件.sql導入到數據庫時&#xff0c;發生錯誤&#xff0c;錯誤提示如下&#xff1a;#1044 – Access denied for user ‘wodepress_com’’localhost’ to database ‘wodepress’。 這個錯誤表明用戶wodepress_com沒有權限訪問數據庫wodepress。以下是解…

微服務ETCD服務注冊和發現

1.什么是注冊中心 注冊中心主要有三種角色&#xff1a; 服務提供者&#xff08;RPC Server&#xff09;&#xff1a;在啟動時&#xff0c;向 Registry 注冊自身服務&#xff0c;并向 Registry 定期發送心跳匯報存活狀態。 服務消費者&#xff08;RPC Client&#xff09;&…

計算機網絡---默認網關(Default Gateway)

一、默認網關的定義 默認網關&#xff08;Default Gateway&#xff09;是一個網絡設備&#xff08;通常是路由器、防火墻或三層交換機&#xff09;的IP地址&#xff0c;它是本地網絡中的設備訪問其他網絡&#xff08;如外網、其他子網&#xff09;時&#xff0c;數據報文的“第…

OpenBMC中libgpio架構與驅動交互全解析:從硬件映射到應用控制

1. libgpio概述與核心定位 libgpio作為OpenBMC中GPIO管理的核心庫&#xff0c;扮演著連接硬件驅動與上層應用的橋梁角色。它通過標準化的接口抽象了不同硬件平臺的GPIO操作細節&#xff0c;使得電源控制、傳感器監控等關鍵功能能夠以統一的方式訪問GPIO資源。 1.1 libgpio在Ope…

開放原子開源生態大會:麒麟信安加入openEuler社區AI聯合工作組,聚焦操作系統開源實踐與行業賦能

7月23日&#xff0c;由開放原子開源基金會主辦的2025開放原子開源生態大會在京開幕&#xff0c;大會以“開源賦能產業&#xff0c;生態共筑未來”為主題。工業和信息化部副部長熊繼軍、北京市人民政府副秘書長許心超出席大會并致辭。作為開放原子開源基金會黃金捐贈人和開源重要…

Lyapunov與SAC算法的數學結構對比:從二次漂移到TD損失

一、李雅普諾夫優化中二次漂移函數的推導 李雅普諾夫優化的核心是通過設計 “李雅普諾夫函數” 和 “漂移項”&#xff0c;保證系統狀態收斂到穩定點。以下以線性時不變系統為例&#xff08;非線性系統推導邏輯類似&#xff0c;僅動力學方程更復雜&#xff09;&#xff0c;推導…

WireShark:非常好用的網絡抓包工具

文章目錄一、寫在前面二、安裝三、使用1、入門使用&#xff08;1&#xff09;打開軟件&#xff08;2&#xff09;右鍵網卡&#xff0c;Start Capture(開始捕獲)2、界面詳細介紹3、過濾器設置一、寫在前面 Wireshark是使用最廣泛的一款「開源抓包軟件」&#xff0c;常用來檢測網…

WEB技術演進史:從C/S到微服務架構

WEB技術 HTTP協議和B/S 結構 操作系統有進程子系統&#xff0c;使用多進程就可以充分利用硬件資源。進程中可以多個線程&#xff0c;每一個線程可以被CPU調度執行&#xff0c;這樣就可以讓程序并行的執行。這樣一臺主機就可以作為一個服務器為多個客戶端提供計算服務。 客戶端…

win11中Qt5.14.0+msvc2019+opencv4.9配置

本文主要研究由msvc編譯的opencv在QT中的配置&#xff0c;opencv可以是官網直接下載的版本&#xff0c;也可以是msvc(例如vs2019)通過cmake編譯 contrib功能的opencv版本&#xff0c;這2種版本對qt版本沒有嚴格要求&#xff0c;但是若在cmake中選擇了with_qt功能&#xff0c;那…

【listlist模擬】

list&list模擬1.list使用2、list模擬附錄1.list使用 list常見接口不做介紹&#xff0c;跟前面vector有相似之處&#xff0c;跟數據結構list基本一樣。 ?因為list使用帶頭的雙向循環鏈表實現的&#xff0c;不能用小標訪問&#xff0c;只能用迭代器或范圍for訪問 list有成…

在CentOS 7上將PostgreSQL數據庫從默認路徑遷移到自定義目錄

在CentOS 7上將PostgreSQL數據庫從默認路徑遷移到自定義目錄&#xff0c;需遵循以下步驟。假設原數據目錄為“/var/lib/pgsql/12/data”&#xff0c;目標目錄為“/new/path/pgdata”。 1、步驟概覽 停止PostgreSQL服務創建新目錄并設置權限復制數據文件&#xff08;保留權限&am…