SpringBoot使用Nacos进行application.yml配置管理
Nacos是阿里巴巴开源的一个微服务配置管理和服务发现的解决方案。它提供了动态服务发现、配置管理和 服务管理平台。Nacos的核心功能包括服务发现、配置管理和动态服务管理,使得微服务架构下的服务治理 变得简单高效。
Nacos的设计基于服务注册与发现、配置管理、动态服务管理等核心功能,通过简单的API和配置,实现了服 务的注册与发现、配置的集中管理和动态更新。Nacos使用Raft协议保证配置的一致性,同时支持多种配置 格式,如properties、yaml等。
目录
一、准备
二、nacos管理application.yml配置
1.nacos上新建命令空间和新建配置
2.SpringBoot项目配置改造
pom文件引入依赖
新建bootstrap.yml文件
原yml文件改造
3.启动类注解
4.使用配置
5.测试
一、准备
首先需要在本地电脑上进行Nacos服务部署,默认端口是8848,部署成功之后,就可以去浏览器输入localhost:8848进入nacos管理平台。
二、nacos管理application.yml配置
1.nacos上新建命令空间和新建配置
首先,新建命名空间(如已存在则忽略),注意:命名空间ID可不填,不填则自动生成:
然后,进到nacos的管理页面,在Nacos控制台的左侧导航栏进入配置列表,转到“配置管理”页面,点击“+”来添加一个新的配置。
- Data ID:统一按照这个格式来: 服务名 - 环境 . 后缀名。主要是因为后面要导入的bootstrap.yaml Spring默认的读取格式就是这样的。
- Group:分组可以自定义,没有需求可以选择默认分组DEFAULT_GROUP。
- 命名空间:设置的命名空间ID。
- 配置格式:yaml。
在配置内容区域,输入你想要暴露给Spring Boot应用的配置信息。可以从SpringBoot获取yml配置信息,将需要配置到config的信息复制配置到配置内容中。
至此,nacos侧配置项已完成,接下来进行SpringBoot项目配置改造。
2.SpringBoot项目配置改造
pom文件引入依赖
首先修改Spring Boot项目的pom.xml文件,在pom.xml文件中添加Nacos Config和Nacos Discovery的依赖。
<!--nacos配置管理依赖-->
<dependencies> <!-- Nacos Config --> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> <version>2021.1</version> </dependency> <!-- Nacos Discovery --> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> <version>2021.1</version> </dependency>
</dependencies>
<!--spring cloud从2021.0.5版本起,Spring Cloud将不再默认启用bootstrap,需要手动添加依赖。不引入bootstrap.properties/yml不生效-->
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>
新建bootstrap.yml文件
Spring引入了一种新的配置文件:bootstrap.yaml。它的读取流程如下:启动项目 --> 读取bootstrap.yaml文件 --> 找到nacos中,对应的配置文件 --> 读取本地 application.yaml文件 —> 创建容器 加载bean …
因此,我们需要在bootstrap.yml文件中配置Nacos服务器地址和命名空间等信息,在spring中nacos配置中心的配置前缀是spring.cloud.nacos.config。
spring: application: name: demo-app cloud: nacos: discovery: server-addr: localhost:8848 # Nacos服务地址 namespace: your-namespace-id # Nacos命名空间ID config: server-addr: localhost:8848 # Nacos作为配置中心地址 namespace: your-namespace-id # Nacos命名空间ID group: your-group # 配置分组名称 data-id: your-data-id # 配置ID,通常与spring.application.name相同 extension-configs: - data-id: another-data-id # 另一个配置ID group: ANOTHER_GROUP # 另一个配置分组名称refresh: true file-extension: yaml # 配置文件格式,默认为properties
或在bootstrap.properties文件中配置Nacos服务器地址和命名空间等信息
# bootstrap.properties
spring.cloud.nacos.config.server-addr=127.0.0.1:8848
spring.cloud.nacos.config.namespace=your-namespace
spring.cloud.nacos.config.group=DEFAULT_GROUP
spring.cloud.nacos.config.data-id=your-data-id
spring.cloud.nacos.config.extension-configs[0].data-id=another-data-id
spring.cloud.nacos.config.extension-configs[0].group=ANOTHER_GROUP
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
然后,新建两个文件bootstrap-dev.yaml和bootstrap-prod.yaml,文件内容如下,两个文件内容格式是一样的。
spring: cloud: nacos: discovery: server-addr: localhost:8848 # Nacos服务地址 namespace: your-namespace-id # Nacos命名空间ID group: your-group # 配置分组名称 config: server-addr: localhost:8848 # Nacos作为配置中心地址 namespace: your-namespace-id # Nacos命名空间ID group: your-group # 配置分组名称
在Nacos的配置中,discovery和config是两个核心组件,它们各自承担着不同的职责。
(1)Discovery(服务发现):
Discovery的主要作用是实现服务的自动注册与发现。当服务提供者启动后,它会自动将自己的服务信息注册到Nacos中。而服务消费者则可以通过Nacos查询和发现可用的服务提供者。这样,服务消费者就能够动态地获取到服务提供者的网络位置(如IP和端口),从而实现服务的调用。
服务发现在微服务架构中非常重要,因为它允许服务之间动态地相互发现和通信,而无需硬编码服务地址。这使得服务能够更灵活地部署和扩展,同时也提高了系统的可用性和容错性。
(2)Config(配置管理):
Config的主要作用是实现配置信息的集中管理和动态更新。在微服务架构中,通常会有许多服务共享一些公共的配置信息,如数据库连接信息、缓存配置等。Config允许将这些配置信息统一存储在Nacos中,并通过配置中心进行管理和分发。当配置信息发生变化时,Config能够实时地将最新的配置推送给服务消费者,从而实现配置的动态更新。
配置管理在微服务架构中同样非常重要,因为它允许开发人员在不重启服务的情况下更新配置信息。这大大提高了系统的灵活性和可维护性,同时也降低了运维成本。
(3)区别:
- 服务发现(Discovery) 专注于服务的注册与发现,解决的是服务之间的通信问题。它使得服务能够动态地发现和调用其他服务,而无需硬编码服务地址。
- 配置管理(Config) 专注于配置信息的集中管理和动态更新,解决的是配置信息的共享和更新问题。它允许开发人员在不重启服务的情况下实时更新配置信息,从而提高了系统的灵活性和可维护性。
原yml文件改造
可以保留程序启动端口。
server:port:1839
3.启动类注解
在Spring Boot启动类上添加 @EnableDiscoveryClient 和 @EnableConfigServer 注解,开启服务发现和配置管理功能。
@SpringBootApplication
@EnableDiscoveryClient
@EnableConfigServer
public class YourApplication {public static void main(String[] args) {SpringApplication.run(YourApplication.class, args);}
}
4.使用配置
在Spring Boot应用中,可以直接通过 @Value 或 @ConfigurationProperties 注解注入Nacos中的配置。@ConfigurationProperties和@Value注解用于获取配置文件中的属性定义并绑定到Java Bean或属性中。
通过@Value(“ x x x x ” ) 可以获取属性文件中对应的值,但是如果属性文件中没有这个属性,则会报错。可以通过赋予默认值解决这个问题,如 @ V a l u e ( “ {xxxx}”)可以获取属性文件中对应的值,但是如果属性文件中没有这个属性,则会报错。可以通过赋予默认值解决这个问题,如@Value(“ xxxx”)可以获取属性文件中对应的值,但是如果属性文件中没有这个属性,则会报错。可以通过赋予默认值解决这个问题,如@Value(“{xxxx:yyyy}”)。
@ConfigurationProperties注解对属性绑定遵循relaxed bind rule【暂且翻译为松散绑定规则】,并不需要精确匹配。所谓的宽松绑定原则是指:并不是 JavaBean 中的属性必须要和配置文件中的一致才能绑定数据,context-path 也能绑定到 contextPath 属性上。比如对属性【app.username】,通过【app.userName】、【app.user-name】、【app.user_name】、【app.USER_NAME】、【app.USER-NAME】等都可匹配,我们可理解为模糊匹配。
@RestController
public class ConfigController {@Value("${your.config.key}")private String configValue;@GetMapping("/config")public String getConfig() {return configValue;}
}@Data // 需要提供默认的构造函数,以及get/setter方法
@ConfigurationProperties("my.service")
public class MyProperties {// 我们可以简单地用一个值初始化一个字段来定义一个默认值private boolean enabled = true;private InetAddress remoteAddress;private final Security security = new Security();@Datapublic static class Security {private String username;private String password;// 如果这个属性配置的话,默认是“USER”private List<String> roles = new ArrayList<>(Collections.singleton("USER"));}
}
在配置文件中进行如下配置,
my:service:enabled: trueremoteAddress: 127.0.0.1security:username: csxpassword: passwoedroles:- role1- role2
your:config:key:ccvvv
5.测试
最后,可以尝试启动项目程序,看看是否能启动成功。如果启动成功则说明成功了。
通过整合Nacos,Spring Boot项目能够轻松实现配置的动态管理和服务的自动发现。Nacos的简单易用和强大的功能使其成为微服务架构中不可或缺的一部分。通过本文的介绍和示例代码,读者应该能够掌握Spring Boot与Nacos的集成方法,并在实际项目中高效利用Nacos进行服务配置管理。
相关文章:
SpringBoot使用Nacos进行application.yml配置管理
Nacos是阿里巴巴开源的一个微服务配置管理和服务发现的解决方案。它提供了动态服务发现、配置管理和 服务管理平台。Nacos的核心功能包括服务发现、配置管理和动态服务管理,使得微服务架构下的服务治理 变得简单高效。 Nacos的设计基于服务注册与发现、配置管理、动…...
JavaScript中的symbol类型的意义和使用
JavaScript 中的Symbol类型是 ES6(ECMAScript 2015)引入的一种原始数据类型,它表示独一无二的值。下面详细介绍 Symbol 的意义和使用方法。 意义 1. 避免属性名冲突 在 JavaScript 中,对象的属性名通常是字符串。当多个模块或者…...
C++ 设计模式-状态模式
火箭状态模式,涵盖发射、多级分离、入轨、返航、紧急状态等流程,以及状态间的转换逻辑: 状态设计 状态列表: IdleState(待机)PreparingState(准备)LaunchingState(发射中)FirstStageSeparatingState(一级分离)SecondStageSeparatingState(二级分离)ThirdStageSep…...
verilog基础知识
一,Verilog和VHDL区别 全世界高层次数字系统设计领域中,应用Verilog和VHDL的比率是80%和20%;这两种语言都是用于数字电路系统设计的硬件描述语言, 而且都已经是 IEEE 的标准。 VHDL 是美国军方组织开发的,VHDL1987年成为标准;Verilog 是由一个公司的私有财产转化而来,…...
14.8 Auto-GPT 自主智能体设计解密:构建具备长期记忆的智能决策系统
Auto-GPT 自主智能体设计解密:构建具备长期记忆的智能决策系统 关键词:Auto-GPT 架构设计、自主智能体开发、LangChain Agents、长期记忆系统、工具链编排 1. 自主智能体的核心架构设计 Auto-GPT 系统架构图解: #mermaid-svg-NuDU1eo6sXqhA6Ve {font-family:"trebuch…...
ubuntu安装docker docker/DockerHub 国内镜像源/加速列表【持续更新】
ubuntu安装docker & docker镜像代理【持续更新】 在Ubuntu上安装Docker,你可以选择两种主要方法:从Ubuntu的仓库安装,或者使用Docker的官方仓库安装。下面我会详细解释这两种方法。 方法一:从Ubuntu的仓库安装Docker 这种方…...
模拟实现分布式文件存储
Q1:如何解决海量数据存的下的问题 传统做法是在单机存储。但是随着数据变多,会遇到存储瓶颈。 单机纵向扩展:内存不够加内存,磁盘不够加磁盘。有上限限制,不能无限制加下去。 多机横向扩展:采用多台机器存储&#x…...
HW面试经验分享 | 北京蓝中研判岗
目录: 所面试的公司介绍 面试官的问题: 1、面试官先就是很常态化的让我做了一个自我介绍 2、自我介绍不错,听你讲熟悉TOP10漏洞,可以讲下自己熟悉哪些方面吗? 3、sql注入原理可以讲下吗? 4、sql注入绕WAF有…...
HarmonyOS学习第3天: 环境搭建开启鸿蒙开发新世界
一、引言 在数字化时代,操作系统作为连接用户与硬件设备的桥梁,其重要性不言而喻。HarmonyOS 作为华为公司推出的面向全场景的分布式操作系统,以其创新的理念和卓越的性能,正逐渐在全球范围内崭露头角。它打破了设备之间的界限&a…...
基于STM32与BD623x的电机控制实战——从零搭建无人机/机器人驱动系统
系列文章目录 1.元件基础 2.电路设计 3.PCB设计 4.元件焊接 5.板子调试 6.程序设计 7.算法学习 8.编写exe 9.检测标准 10.项目举例 11.职业规划 文章目录 一、为什么选择这两个芯片?1.1 STM32微控制器1.2 ROHM BD623x电机驱动 二、核心控制原理详解2.1 H桥驱动奥…...
【react18】如何使用useReducer和useContext来实现一个todoList功能
重点知识点就是使用useReducer来攻坚小型的公共状态管理,useImmerReducer来实现数据的不可变 实现效果 实现代码 项目工程结构 App.js文件 import logo from "./logo.svg"; import "./App.css"; import TodoLists from "./comps/TodoLi…...
Java多线程三:补充知识
精心整理了最新的面试资料,有需要的可以自行获取 点击前往百度网盘获取 点击前往夸克网盘获取 Lambda表达式 简介: 希腊字母表中排序第十一位的字母,英语名称为Lambda避免匿名内部类定义过多其实质属于函数式编程的概念 为什么要使用lam…...
go WEB框架
推荐选型 https://chat.deepseek.com/a/chat/s/e6061607-8f33-4768-a5f0-8970cb1ffefd echo github:https://github.com/labstack/echo wiki:https://echo.labstack.com/docs/quick-start block:https://blog.csdn.net/qq_38105536/artic…...
【Python爬虫(27)】探索数据可视化的魔法世界
【Python爬虫】专栏简介:本专栏是 Python 爬虫领域的集大成之作,共 100 章节。从 Python 基础语法、爬虫入门知识讲起,深入探讨反爬虫、多线程、分布式等进阶技术。以大量实例为支撑,覆盖网页、图片、音频等各类数据爬取ÿ…...
渲染 101 支持 3ds Max 的渲染器及其优势
在 3ds Max 创作流程里,渲染环节对最终成果的呈现效果起着决定性作用,渲染 101 云渲染平台则为 3ds Max 用户提供了全面且高效的渲染解决方案。 支持的渲染器 V-Ray 渲染器 在 3ds Max 中应用广泛,具备全局光照、光线追踪技术,…...
在 Java 中使用 `if` 语句实现双重判定
关于在 Java 中使用 if 语句实现双重判定,并使用 Eclipse 和 JUnit4 进行单元测试的详细介绍: --- ### 一、双重判定的实现 **双重判定**指在 if 语句中通过逻辑运算符组合两个条件。常用方式: - **逻辑与 &&**:两个条件…...
Ollama 安装
Ollama 支持多种操作系统,包括 macOS、Windows、Linux 以及通过 Docker 容器运行。 Ollama 对硬件要求不高,旨在让用户能够轻松地在本地运行、管理和与大型语言模型进行交互。 CPU:多核处理器(推荐 4 核或以上)。GPU…...
Docker Swarm 内置的集群编排
在现代容器化应用中,容器编排(Container Orchestration)是至关重要的,它负责自动化容器的部署、扩展、负载均衡和管理。Docker Swarm 是 Docker 提供的原生集群管理和容器编排工具,允许用户通过 Docker CLI 在多个 Doc…...
AF3 _build_query_to_hit_index_mapping函数解读
AlphaFold3 中templates模块的_build_query_to_hit_index_mapping函数是将原始查询序列(original_query_sequence)中的索引与hit 序列(hit_sequence)中的索引进行映射。 在蛋白质序列比对(如 HHsearch)中,hit 是与查询序列部分匹配的区域。由于存在缺口(-)和部分比对…...
Windows 中的启动项如何打开?管理电脑启动程序的三种方法
在日常使用电脑时,我们经常会发现一些应用程序在开机时自动启动,这不仅会拖慢系统的启动速度,还可能占用不必要的系统资源。幸运的是,通过几个简单的步骤,你可以轻松管理这些开机自启的应用程序。接下来,我…...
科普:“git“与“github“
Git与GitHub的关系可以理解为:Git是一种软件工具,而GitHub则是一个在线平台,它们是“一家子”。二者的关联最直接体现在你通过Git在GitHub仓库中clone软件包到你的机器中来。 具体来说: 一、Git 定义:Git是一个开源的…...
module ‘cv2.dnn‘ has no attribute ‘DictValue‘解决办法
module ‘cv2.dnn‘ has no attribute ‘DictValue‘解决办法 pip install opencv-python4.7.0.72 -i https://pypi.tuna.tsinghua.edu.cn/simple 测试: python -c"import cv2"...
国产编辑器EverEdit - 语法着色及嵌入式多语言着色
1 文档-着色及语法相关 1.1 应用场景 在编辑代码文件或脚本文件过程中,如果对语法着色、模式等文件进行了修改,需要立即生效时,可以通过文档-高级功能下的重新加载功能,立即生效相关配置。 1.2 使用方法 1.2.1 重新加载着色 着…...
设计模式教程:解释器模式(Interpreter Pattern)
1. 什么是解释器模式? 解释器模式(Interpreter Pattern)是一种行为型设计模式,通常用于处理语言(例如数学表达式、SQL查询等)中的语法和解释。该模式定义了一个文法,并通过解释器类来解释文法中…...
Three.js 快速入门教程【六】相机控件 OrbitControls
系列文章目录 Three.js 快速入门教程【一】开启你的 3D Web 开发之旅 Three.js 快速入门教程【二】透视投影相机 Three.js 快速入门教程【三】渲染器 Three.js 快速入门教程【四】三维坐标系 Three.js 快速入门教程【五】动画渲染循环 Three.js 快速入门教程【六】相机控件 Or…...
【git】合并多个提交记录
1.说明 有时候因为某些小修改会导致代码多了很多不必要的提交,如果希望合并这些commit记录,我们可以使用rebase或者reset命令完成合并 2.rebase 这种方式是通过变基操作完成的,它适用于已经push到远程的情况,当我们变基好了之后…...
题海拾贝:【枚举】P2010 [NOIP 2016 普及组] 回文日期
Hello大家好!很高兴我们又见面啦!给生活添点passion,开始今天的编程之路! 我的博客:<但凡. 我的专栏:《编程之路》、《数据结构与算法之美》、《题海拾贝》 欢迎点赞,关注! 1、题…...
SQL Server 链接服务器 MySQL 详细步骤
目录 前言 一、准备工作 1. 确认需求 2. 获取权限 二、安装必要的驱动程序和工具 1.下载并安装MySQL ODBC驱动: 2.安装 SQL Server 和 MySQL 的管理工具: 三、配置 SQL Server 以连接到MySQL 1.执行创建链接服务器的T-SQL语句: 2.配…...
Java集合框架之List接口详解
目录 一、List接口概述 二、List接口常见实现类 三、List接口特有方法: 1.元素操作 2. 查找元素位置 3. 子列表与不可变列表 四、List特有迭代器:ListIterator 1.特有的迭代方式 2.ListIterator接口中的常用方法: ⑴.void add(E e):在光标位置插入元素。(会移动…...
【大语言模型_4】源码编译vllm框架cpu版
背景: 通过官方提供的pip install vllm安装的vllm框架不支持cpu加载模型。因此需要本地编译。 系统环境 操作系统:欧拉2203 python版本:3.10 编译步骤 一、安装gcc/g/cmake 1、下载源码:https://github.com/vllm-project/vllm 安…...
城市地质安全专题连载⑦ | 加强国土空间规划管控,规避城市地质安全风险
作者 | 徐海洋 在国土空间规划中,地质调查扮演着先导性和基础性的角色。它如同一把无形的尺子,衡量着每一寸土地的开发潜力与安全边界,不仅为城市规划提供了科学依据,还在规避地质安全风险、优化资源配置方面发挥着关键作用。然而…...
Go入门之函数
func subn1(x, y int) int {sub : x - yreturn sub } 函数参数简写,可以省略前边的,和后边的类型一样 func addn1(x ...int) int {sum : 0for _, v : range x {sum v}return sum } 求可变参数的核,表示传参的个数不确定 func addn1(x int…...
前端如何把SEO优化做到极致✅
在前端🚀如何把SEO优化做到极致✅ SEO 是 Search Engine Optimization 的缩写,即搜索引擎优化。它是一种通过调整网站的内容、结构、外部链接等方面的优化手段,来提高网站在搜索引擎中的自然排名,以求得获得更多的流量࿰…...
【Linux】多线程 -> 线程同步与基于BlockingQueue的生产者消费者模型
线程同步 条件变量 当一个线程互斥地访问某个变量时,它可能发现在其它线程改变状态之前,它什么也做不了。 例如:一个线程访问队列时,发现队列为空,它只能等待,直到其它线程将一个节点添加到队列中。这…...
Openssl交叉编译
在 OpenSSL 交叉编译中,linux-aarch64是一个用于指定目标平台的配置选项,表示目标是 X86 架构的 64位系统。这个选项可以从 OpenSSL 的 ./Configure 命令支持的平台列表中获取。 你可以通过运行以下命令查看 OpenSSL 支持的所有平台配置选项:…...
基于Ubuntu系统的docker环境对MySQL8.0.36主从部署
1. 环境准备 1、1 前言 本文基于Ubuntu系统的docker环境对MySQL8.0.36进行2台物理服务器的主从部署。1.2 服务器硬件环境准备 准备2台物理服务器192.168.8.6 和 192.168.8.9。 2台物理服务器在同一个局域网环境下,可以相互网络通信。 服务器操作系统版本:Ubuntu 24.04.1 L…...
吃一堑长一智
工作中经历,有感触记录下 故事一 以前在一家公司时,自己是一名开发人员,遇到问题请教领导解决方案,当时领导给了建议,后来上线后出问题了,背了锅。心里想的是领导说这样做的呀,为什么出问题还…...
详解Nginx 配置
一、Nginx 介绍 Nginx 是一款轻量级的 Web 服务器 / 反向代理服务器及电子邮件(IMAP/POP3)代理服务器。它由俄罗斯的程序设计师 Igor Sysoev 所开发,自 2004 年发布以来,凭借其高性能、低内存消耗、高并发处理能力等特点…...
《深度揭秘:DeepSeek如何解锁自然语言处理密码》
在人工智能蓬勃发展的当下,自然语言处理(NLP)成为了连接人类与机器的关键桥梁。作为该领域的佼佼者,DeepSeek以其卓越的语义理解和生成能力,备受瞩目。今天,就让我们深入探寻DeepSeek在自然语言处理中实现语…...
备战蓝桥杯 -牛客
习题-[NOIP2006]明明的随机数 1046-习题-[NOIP2006]明明的随机数_2021秋季算法入门班第一章习题:模拟、枚举、贪心 思路:这道题用stl的set,今天写这道题复习了一下set的用法: s.find(a) s.end()的意思是判断元素a是否存在于集…...
Pandas:从一个DataFrame中直接索引赋值到另一个索引位置出错的Bug及其解决方案
这里写自定义目录标题 动机代码1,这个代码是有问题的代码2,这个代码是我调试代码。拆分代码,最后找到问题所在,这个代码是正确的代码3。本以为找到问题所在之后,又稍微修改了下代码 2,这个代码还是没问题的…...
电脑想安装 Windows 11 需要开启 TPM 2.0 怎么办?
尽管 TPM 2.0 已经内置在许多新电脑中,但很多人并不知道如何激活这一功能,甚至完全忽略了它的存在。其实,只需简单的几步操作,你就能开启这项强大的安全特性,为你的数字生活增添一层坚固的防护屏障。无论你是普通用户还…...
请谈谈 Vue 中的响应式原理,如何实现?
一、Vue2响应式原理:Object.defineProperty的利与弊 实现原理: // 数据劫持核心实现 function defineReactive(obj, key, val) {const dep new Dep(); // 依赖收集容器Object.defineProperty(obj, key, {get() {if (Dep.target) { // 当前Watcher实例…...
深入解析浏览器渲染全流程:从URL输入到页面渲染的底层原理与性能优化(附实战代码)
本文以https://example.com为例,逐层剖析浏览器从输入URL到页面渲染的完整链路,涵盖DNS解析、TCP/TLS握手、HTTP请求、DOM/CSSOM构建等核心阶段,结合代码示例与性能调优技巧,助你掌握浏览器底层运行机制。 一、导航阶段࿱…...
vue 识别 <think></think>
在 Vue.js 中处理自定义标签或者在 HTML 中嵌入特定标记(例如 )通常涉及到两个方面:模板语法和组件化。 模板语法 Vue 使用基于 HTML 的模板语法来声明式地将 DOM 绑定至底层数据。默认情况下,Vue 会忽略未知元素,除非…...
Three.js 快速入门教程【一】开启你的 3D Web 开发之旅
系列文章目录 Three.js 快速入门教程【一】开启你的 3D Web 开发之旅 Three.js 快速入门教程【二】透视投影相机 Three.js 快速入门教程【三】渲染器 Three.js 快速入门教程【四】三维坐标系 Three.js 快速入门教程【五】动画渲染循环 Three.js 快速入门教程【六】相机控件 Or…...
ubuntu 执行 sudo apt-get update 报错
记录一下,遇到这个问题了,网络上看到的解决办法,亲测有效 执行sudo apt-get update ,却报以下错误,“SECURITY: URL redirect target contains control characters rejecting ” 经检查发现,/etc/apt/source.list 下的…...
YOLOv11-ultralytics-8.3.67部分代码阅读笔记-loaders.py
loaders.py ultralytics\data\loaders.py 目录 loaders.py 1.所需的库和模块 2.class SourceTypes: 3.class LoadStreams: 4.class LoadScreenshots: 5.class LoadImagesAndVideos: 6.class LoadPilAndNumpy: 7.class LoadTensor: 8.def autocast_list(source…...
ubuntu24基于虚拟机无法从主机拖拽文件夹
以下是解决问题的精简步骤: 安装 open-vm-tools-desktop: bash复制 sudo apt-get install open-vm-tools-desktop 重启虚拟机后,文字复制粘贴功能可正常工作。 禁用 Wayland: 编辑 /etc/gdm3/custom.conf 文件: bash复…...
二叉树(数据结构)
二叉树 二叉树也是用过递归定义的结构 先序遍历又称前序遍历 按照先序遍历的方法去手算处理这个二叉树 先A B C 再 A B D E C(也就是把B换成BDE再放进去) 再 A B D E C F 看这个插入的方法要掌握像二叉树这样向一个…...