当前位置: 首页 > news >正文

MySQL 学习(十)执行一条查询语句的内部执行过程、MySQL分层

目录

    • 一、MySQL 执行流程图
    • 二、MySQL的分层
      • 2.1 连接阶段
      • 2.2 查询缓存阶段(Query Cache,MySQL 8.0已移除)
      • 2.3 解析与预处理阶段(词法分析、语法分析、预处理器)
      • 2.4 查询优化阶段
      • 2.5 执行引擎阶段
    • 三、常见面试题
      • 3.1 MySQL提示`不存在此列`是执行到哪个节点报出的?
      • 3.2 MySQL查询缓存的功能有何优缺点
      • 3.3 如何关闭MySQL的查询缓存功能

一、MySQL 执行流程图

如下是 MySQL 执行流程图:

在这里插入图片描述

  1. 客户端(运行程序)先通过 连接器 连接到 MySQL 服务器。MySQL 中建立一个新的线程来对连接进行半双工通信。
  2. 连接器通过数据库权限身份验证后,如果数据库缓存开启,先查询 数据库缓存 是否存在(之前执行过相同条件的 SQL 查询)。如果有缓存会直接返回缓存中的数据,如果没有则会进入分析器。
  3. 进入 分析器 后会对查询语句进行语法的分析,判断该查询语句 SQL 是否存在语法错误,如果存在查询语法错误,会直接返回给客户端错误,如果正确会进入优化器。
  4. 进入 优化器 后会对查询语句进行优化,如:如果一条语句用到了多个索引会判断那个索引性能更好。
  5. 最终会进入 执行器,开始执行查询语句,根据语句中的表结构使用对应的 存储引擎 进行查询,直到查询出满足条件的所有数据,然后进行返回。

二、MySQL的分层

大体来说,MySQL 可以分为 Server层 和 存储引擎 两部分:

  • Server层:包括 连接器、查询缓存、分析器、优化器、执行器。

  • 存储引擎:负责数据的存储和提取。其架构模式是插件式的,支持 InnoDB、MyISAM、Memory 等多种存储模式。

    现如今最常用的存储引擎是 InnoDB,它从 MySQL 5.5.5 开始成为默认存储引擎。也就是说当我们不指定存储引擎时默认使用的就是 InnoDB,我们也可以在 create table 时通过 engine=memory 来执行存储引擎。

从 MySQL 执行流程图中可以看出,不同的存储引擎共用同一个 Server 层,也就是连接器到执行器那一部分。

2.1 连接阶段

首先,我们需要连接上数据库,这时候接待我们的就是 连接器。连接器主要负责的工作就是跟客户端 建立连接、获取权限、维持和管理连接。连接命令如下:

mysql -h$ip -P$port -u$user -p
# $ip: 服务器IP
# $port: MySQL端口号
# $user: 用户名
  • 如果用户名或密码不对:则会收到一个 Access denied for user 错误,然后客户端程序结束执行。
  • 如果用户名密码认证通过:连接器则会去权限表中查询该用户所拥有的权限,这个连接里的权限逻辑判断,全都依赖于此时读到的权限。

这就意味着,当一个用户成功建立连接后,即使使用管理员账户对其权限做了修改,也不会立即生效,只有重新建立连接后才会使用新的权限设置。

2.2 查询缓存阶段(Query Cache,MySQL 8.0已移除)

连接建立成功后,如果缓存开关打开,会先查询缓存。MySQL 拿到一个 SQL 语句之后会先到缓存看看是否在此之前执行过这条语句,之前执行的语句会以 key-value 的形式直接缓存在内存中。

  • key 是查询语句,value 是查询结果。

如果你的查询能在缓存中找到相应的 key,则直接返回其对应的 value 给客户端。

如果语句不在查询缓存中,就会继续执行后面的阶段。执行完成后,执行结果会被存入查询缓存中。你可以看到,如果命中缓存,MySQL 不需要执行后面的复杂操作,就可以执行返回结果,这个效率会很高。

补充1: 可以通过如下命令查看是否开启查询缓存:

SHOW VARIABLES LIKE 'query_cache%';

在这里插入图片描述

重点关注以下参数:

  • query_cache_type:缓存类型
    • OFF(0):完全关闭
    • ON(1):开启所有符合条件的查询缓存
    • DEMAND(2):仅缓存有 SQL_CACHE 提示的查询

补充2: 可以通过如下命令查看缓存的运行状态:

SHOW STATUS LIKE 'Qcache%';

在这里插入图片描述

主要指标说明:

  • Qcache_free_blocks:空闲内存块数
  • Qcache_free_memory:空闲内存量
  • Qcache_hits:缓存命中次数
  • Qcache_inserts:被加入到缓存的查询数量
  • Qcache_lowmem_prunes:因内存不足被删除的缓存数量

生产环境建议:

  1. 对于MySQL 5.7及以下版本:

    • 查询缓存适用于读多写少的场景
    • 高并发写入环境建议关闭(query_cache_size=0)
  2. 监控缓存效率:

    -- 计算缓存命中率
    SELECT (Qcache_hits/(Qcache_hits+Com_select))*100 AS hit_percentage
    FROM information_schema.GLOBAL_STATUS
    WHERE variable_name IN ('Qcache_hits','Com_select');
    
    • 命中率低于20%建议关闭查询缓存
  3. 重要参数调整:

    [mysqld]
    query_cache_size = 64M      # 根据内存调整
    query_cache_limit = 2M      # 限制大结果集缓存
    query_cache_min_res_unit = 4K
    

2.3 解析与预处理阶段(词法分析、语法分析、预处理器)

如果没有命中缓存,则真正开始执行语句了。

分析器首先进行 词法分析:我们输入的 SQL 是由多个字符串组成的,MySQL 需要识别出来里面的字符串分别是什么。

其次,需要对 SQL 进行 语法分析:根据词法分析的结果,语法分析器会根据语法规则来判断我们输入的这条 SQL 是否满足 MySQL 的语法规则。如果我们的语法不对的话,我们会受到 MySQL 的错误提示 You have an error in you SQL syntax

最后,使用 预处理器 对 SQL 进行处理:检查表和列是否存在、检查当前用户权限、展开 * 为所有列名。

例如要确认我们是否有操作这个表的执行权限:

  • 如果没有权限则会返回没有权限的报错。如下所示:
mysql> select * from T where ID=10;ERROR 1142 (42000): SELECT command denied to user 'b'@'localhost' for table 'T'
  • 如果有权限,再继续进入优化阶段。

2.4 查询优化阶段

经过了分析器,MySQL 知道我们要做什么了,在它开始执行之前,还需要先经过 优化器 的处理,主要包含下面三块内容:

  1. 查询重写
    • 优化器进行等价变换
    • 例如将WHERE 1=1 AND id>10简化为WHERE id>10
  2. 生成执行计划
    • 基于成本估算选择最优执行方案
    • 决定:
      • 在表里面有多个索引的时候,决定使用哪个索引;
      • 决定多表时各个表的连接顺序;
      • 是否使用临时表;
      • 是否使用文件排序等。
  3. 执行计划缓存(MySQL 8.0+)
    • 对预处理语句缓存执行计划

例如下面这个SQL:

select * from t1 join t2 using(ID) where t1.c=10 and t2.d=20;

补充:using() 等价于 on,即当 t1表 于 t2表 关联的字段相同时,using(field) 和 t1.field = t2.field 等价。

根据上面的SQL,我们可以得出两种方案:

  1. 既可以先从表t1里面取出 c=10 的 ID 值,再根据 ID 值取关联到表 t2,再判断 t2 里面的 d值是否等于20;
  2. 也可以先从表t2里面取出d=20的记录的ID值关联到表t1,再判断 t1 里面的 c值是否等于10。

这两种执行方法的逻辑和结果都是一样的,但是之心效率会有所不同,优化器的作用就是决定选择哪种方案。

2.5 执行引擎阶段

mysql> select * from T where ID=10;

比如在上面这个例子中的表T中ID字段是没有索引的,那么执行器的流程是这样的:

  1. 用 InnoDB 引擎接口取这个表的第一行,判断 ID 是否为 10,如果不是则跳过,如果是则将这行存在结果集中。
  2. 调用引擎接口取下一行,重复相同的逻辑判断,直到取到这个表的最后一行。
  3. 执行器将上述遍历过程的所有满足条件的行组成记录集作为结果集返回给客户端。

三、常见面试题

3.1 MySQL提示不存在此列是执行到哪个节点报出的?

此错误是执行到分析器阶段爆出的,因为MySQL会在分析器阶段价差SQL语句的正确性

3.2 MySQL查询缓存的功能有何优缺点

MySQL查询缓存功能是在连接器之后发生的,它的优点是效率高,如果已经有缓存则会直接返回结果。查询缓存的缺点是失效太频繁导致缓存命中率比较低,任何更新表操作都会情况缓存查询,因此导致查询效率非常容易失效

3.3 如何关闭MySQL的查询缓存功能

MySQL查询缓存默认是开启的,配置 query_cache_type 参数为 OFF(0)DEMAND(2)(按需使用)关闭缓存。MySQL8.0之后直接删除了查询缓存的功能。

整理完毕,完结撒花~🌻





参考地址:

1.MySQL执行一条查询语句的内部执行过程,https://zhuanlan.zhihu.com/p/309241412

2.MySQL实战 | MySQL逻辑架构—一条查询SQL是如何执行的,https://cloud.tencent.com/developer/article/2177898

相关文章:

MySQL 学习(十)执行一条查询语句的内部执行过程、MySQL分层

目录 一、MySQL 执行流程图二、MySQL的分层2.1 连接阶段2.2 查询缓存阶段(Query Cache,MySQL 8.0已移除)2.3 解析与预处理阶段(词法分析、语法分析、预处理器)2.4 查询优化阶段2.5 执行引擎阶段 三、常见面试题3.1 MyS…...

C语言中的指定初始化器

什么是指定初始化器? C99标准引入了一种更灵活、直观的初始化语法——指定初始化器(designated initializer), 可以在初始化列表中直接引用结构体或联合体成员名称的语法。通过这种方式,我们可以跳过某些不需要初始化的成员,并且可以以任意顺序对特定成员进行初始化。这…...

什么是 NB-IoT ?窄带IoT 应用

物联网使各种应用能够与大量无线通信设备进行连接和通信。它有望为智能城市、公用事业、制造设施、农业应用、远程工业机械等提供动力。这些应用均可使用窄带物联网(NB-IoT )网络协议。 例如,智能城市可使用 NB-IoT 监控整个城市的街道照明、…...

CSRF 和 XSS 攻击分析与防范

CSRF 和 XSS 攻击分析与防范 CSRF (跨站请求伪造) 什么是 CSRF? CSRF (Cross-Site Request Forgery) 是一种攻击方式,攻击者诱使用户在已登录目标网站的情况下,执行非预期的操作。 攻击流程: 用户登录可信网站 A在不登出 A 的…...

Window下Jmeter多机压测方法

1.概述 Jmeter多机压测的原理,是通过单个jmeter客户端,控制多个远程的jmeter服务器,使他们同步的对服务器进行压力测试。 以此方式收集测试数据的好处在于: 保存测试采样数据到本地机器通过单台机器管理多个jmeter执行引擎测试…...

Apache RocketMQ ACL 2.0 全新升级

📖知识延伸:本文相关知识库已收录至「RocketMQ 中文社区」,同步更新更多进阶内容 引言 RocketMQ 作为一款流行的分布式消息中间件,被广泛应用于各种大型分布式系统和微服务中,承担着异步通信、系统解耦、削峰填谷和消…...

第九讲 | 模板进阶

模板进阶 一、非类型模板参数1、模板参数的分类2、应用场景3、array4、注意 二、模板的特化1、概念2、函数模板特化3、类模板特化(1)、全特化:全部模板参数都特化成具体的类型(2)、偏/半特化:部分模板参数特…...

联合建模组织学和分子标记用于癌症分类|文献速递-深度学习医疗AI最新文献

Title 题目 Joint modeling histology and molecular markers for cancer classification 联合建模组织学和分子标记用于癌症分类 01 文献速递介绍 癌症是对人类致命的恶性肿瘤,早期准确诊断对癌症治疗至关重要。目前,病理诊断仍是癌症诊断的金标准…...

会计要素+借贷分录+会计科目+账户,几个银行会计的重要概念

1.借贷分录还是借贷分路 正确表述是“借贷分录”。 “分录”即会计分录,它是指预先确定每笔经济业务所涉及的账户名称,以及计入账户的方向和金额的一种记录,简称分录。 在借贷记账法下,会计分录通过“借”和“贷”来表示记账方向…...

【C++】set和multiset的常用接口详解

前⾯我们已经接触过STL中的部分容器如:string、vector、list、deque、array、forward_list等,本篇文章将介绍一下map和multiset的使用。 1. 序列式容器和关联式容器 在介绍set之前我们先简单介绍一下什么是序列式容器和关联式容器。 前⾯我们已经接触过S…...

PostgreSQL 联合索引生效条件

最近面试的时候,总会遇到一个问题 在 PostgreSQL 中,联合索引在什么条件下会生效? 特此记录~ 前置信息 数据库版本 PostgreSQL 14.13, compiled by Visual C build 1941, 64-bit 建表语句 CREATE TABLE people (id SERIAL PRIMARY KEY,c…...

聊聊redisson的lockWatchdogTimeout

序 本文主要研究一下redisson的lockWatchdogTimeout lockWatchdogTimeout redisson/src/main/java/org/redisson/config/Config.java private long lockWatchdogTimeout 30 * 1000;/*** This parameter is only used if lock has been acquired without leaseTimeout param…...

数据结构第七章(三)-树形查找:红黑树

树形查找(二) 红黑树一、红黑树1.定义2.黑高3.性质 二、插入1.插入步骤2.举例 总结 红黑树 红黑树来喽~ 我们在上一篇说了二叉排序树(BST)和平衡二叉树(AVL),那么既然都有这两个了,…...

C++篇——多态

目录 引言 1,什么是多态 2. 多态的定义及实现 2_1,多态的构成条件 2_2,虚函数 2_3,虚函数的重写 2_4,虚函数重写的两个例外 2_4_1,协变(基类与派生类虚函数返回值类型不同) 2_4_2. 析构函数的重写(基类…...

AI实时对话的通信基础,WebRTC技术综合指南

在通过您的网络浏览器进行音频和视频通话、屏幕共享或实时数据传输时,您可能并不常思考其背后的技术。推动这些功能的核心力量之一就是WebRTC。2011年由谷歌发布的这个开源项目,如今已发展成为一个高度全面且不断扩展的生态系统。尤其是在AI技术大幅突破…...

【寻找Linux的奥秘】第五章:认识进程

请君浏览 前言1. 冯诺依曼体系结构数据流动 2. 操作系统(Operating System)2.1 概念2.2 设计OS的目的2.3 如何理解“管理”2.4 系统调用和库函数概念 3. 进程3.1 基本概念3.1.1 查看进程3.1.2 创建进程 3.2 进程状态3.2.1 简单介绍3.2.2 运行&&阻…...

uniapp微信小程序-长按按钮百度语音识别回显文字

流程图&#xff1a; 话不多说&#xff0c;上代码&#xff1a; <template><view class"content"><view class"speech-chat" longpress"startSpeech" touchend"endSpeech"><view class"animate-block" …...

支付宝创建商家订单收款码(统一收单线下交易预创建).net开发的软件附带大型XML文件可以删除吗?AlipaySDKNet.OpenAPI.xml

支付宝创建商家订单收款码&#xff08;统一收单线下交易预创建&#xff09;一个程序55MB&#xff0c;XML就带了35MB AlipaySDKNet.OpenAPI.xml&#xff0c;BouncyCastle.Crypto.xml 支付宝店铺收款码创建的程序&#xff0c;这些文件可以不用吗 在支付宝店铺收款码创建的程序中…...

Profinet转Ethernet/IP网关模块通信协议适配配置

案例背景 在某自动化生产车间中&#xff0c;现有控制系统采用了西门子 S7 - 1500 PLC 作为主要控制器&#xff0c;负责生产流程的核心控制。同时&#xff0c;由于部分设备的历史原因&#xff0c;存在使用 AB 的 PLC 进行特定环节控制的情况。为了实现整个生产系统的信息交互与…...

4.6/Q1,GBD数据库最新文章解读

文章题目&#xff1a;Global burden, subtype, risk factors and etiological analysis of enteric infections from 1990-2021: population based study DOI&#xff1a;10.3389/fcimb.2025.1527765 中文标题&#xff1a;1990-2021 年肠道感染的全球负担、亚型、危险因素和病因…...

数字孪生技术:开启未来的“镜像”技术

想象一下&#xff0c;你拥有一个与现实世界一模一样的 “数字分身”&#xff0c;它不仅长得像你&#xff0c;行为举止、思维方式也和你毫无二致&#xff0c;甚至能提前预知你的下一步行动。这听起来像是科幻电影里的情节&#xff0c;但数字孪生技术却让它在现实中成为了可能。数…...

Java 序列化(Serialization)

一、理论说明 1. 序列化的定义 Java 序列化是指将对象转换为字节流的过程&#xff0c;以便将其存储到文件、数据库或通过网络传输。反序列化则是将字节流重新转换为对象的过程。通过实现java.io.Serializable接口&#xff0c;类可以被标记为可序列化的&#xff0c;该接口是一…...

Python解析Excel入库如何做到行的拆分

我们读取解析Excel入库经常会遇到这种场景&#xff0c;那就是行的拆分&#xff0c;如图&#xff1a; 比如我们入库&#xff0c;要以name为主键&#xff0c;可是表格name的值全是以逗号分割的多个&#xff0c;这怎么办呢&#xff1f;这就必须拆成多行了啊。 代码如下&#xff…...

信创国产化监控 | 达梦数据库监控全解析

达梦数据库&#xff08;DM Database&#xff09;是国产数据库的代表产品之一&#xff0c;在政府、金融、电信、能源等多个关键行业应用广泛&#xff0c;它具有高兼容性、高安全性、高可用性、高性能、自主可控等特点。随着国产化替代进程加速&#xff0c;达梦数据库在关键信息基…...

Parsec解决PnP连接失败的问题

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、准备环境二、DMZ三、端口映射1.Parsec设置固定端口2.路由器设置端口转发3.重启被控端Parsec四、多少一句1.有光猫管理员账号2.没有光猫管理员账号总结 前言…...

LLM笔记(二)LLM数据基础

核心目标: 构建 LLM 的数据基础&#xff0c;将原始文本转化为模型可处理的、包含丰富语义和结构信息的数值形式。 一、 环境与库准备 (Environment & Libraries): 必要库确认: 在开始之前&#xff0c;确保 torch (PyTorch深度学习框架) 和 tiktoken (OpenAI的高效BPE分词…...

让三个线程(t1、t2、t3)按顺序依次打印 A、B、C

public class ThreadWait {private static final Object lock = new Object();private static boolean t1Output=true;private static boolean t2Output=false;private static boolean t3Output=false;public static void main(String[] args) {//线程1new Thread(new Runnable…...

2、ubantu系统配置OpenSSH | 使用vscode或pycharm远程连接

1、OpenSSH介绍 OpenSSH&#xff08;Open Secure Shell&#xff09;是一套基于SSH协议的开源工具&#xff0c;用于在计算机网络中提供安全的加密通信。它被广泛用于远程系统管理、文件传输和网络服务的安全隧道搭建&#xff0c;是保护网络通信免受窃听和攻击的重要工具。 1.1…...

idea启动报错:java: 警告: 源发行版 11 需要目标发行版 11(亲测解决)

引起原因 idea的jdk没有替换干净 1.配置project file–Project Structrue–Project 2.配置Modules-Sources file–Project Structrue–Modules-Sources 改为jdk11 3.配置Modules-Dependencies file–Project Structrue–Modules-Dependencies...

Pycharm IDEA加载大文件时报错:The file size exceeds configured limit

解决方案&#xff1a;配置一下idea.properties文件 文件里面写入代码&#xff1a; idea.max.intellisense.filesize50000重启IDEA即可&#xff1b;...

视频分辨率增强与自动补帧

一、视频分辨率增强 1.传统分辨率增强方法 传统的视频分辨率增强方法主要基于插值技术。这些方法通过对低分辨率视频帧中已知像素点的分布规律和相邻像素之间的相关性进行分析&#xff0c;在两者之间插入新的像素点以达到增加视频分辨率的目的。例如&#xff0c;最近邻插值算…...

深度学习让鱼与熊掌兼得

通常,一个大的复杂的模型的loss会低,但是拟合方面不够,小的模型在拟合方面更好,但是loss高,我们可以通过深度学习来得到一个有着低loss的小模型 我们之前学过,peacewise linear可以用常数加上一堆这个阶梯型函数得到,然后因为peacewise linear可以逼近任何function,所以理论上…...

面试 Linux 运维相关问题

标题Q1Shell脚本是什么、它是必需的吗? Shell脚本是一种用于自动化执行命令行任务的脚本程序&#xff0c;通常运行在Unix/Linux系统的Shell环境中&#xff08;如Bash&#xff09;。它通过将多个命令、逻辑控制&#xff08;如条件判断、循环&#xff09;和系统功能整合到一个文…...

阿里巴巴 1688 数据接口开发指南:构建自动化商品详情采集系统

在电商行业数据驱动决策的趋势下&#xff0c;高效获取商品详情数据成为企业洞察市场、优化运营的关键。通过阿里巴巴 1688 数据接口构建自动化商品详情采集系统&#xff0c;能够快速、精准地采集海量商品信息。本文将从开发准备、接口分析、代码实现等方面&#xff0c;详细介绍…...

python的宫崎骏动漫电影网站管理系统

目录 技术栈介绍具体实现截图系统设计研究方法&#xff1a;设计步骤设计流程核心代码部分展示研究方法详细视频演示试验方案论文大纲源码获取/详细视频演示 技术栈介绍 Django-SpringBoot-php-Node.js-flask 本课题的研究方法和研究步骤基本合理&#xff0c;难度适中&#xf…...

答题pk小程序道具卡的获取与应用

道具卡是答题PK小程序中必不可少的一项增加趣味性的辅助应用&#xff0c;那么道具卡是如何获取与应用的呢&#xff0c;接下来我们来揭晓答案&#xff1a; 一、道具卡的获取&#xff1a; 签到获取&#xff1a;在每日签到中签到不仅可获得当日的签到奖励积分&#xff0c;同时连…...

从零开始创建一个 Next.js 项目并实现一个 TodoList 示例

Next.js 是一个基于 React 的服务端渲染框架&#xff0c;它提供了很多开箱即用的功能&#xff0c;如自动路由、API 路由、静态生成、增量静态再生等。本文将带你一步步创建一个 Next.js 项目&#xff0c;并实现一个简单的 TodoList 功能。 效果地址 &#x1f9f1; 安装 Next.j…...

全面掌握JSR303校验:从入门到实战

一、JSR303校验简介 JSR303是Java EE 6中的一项规范&#xff0c;全称为"Bean Validation 1.0"&#xff0c;它定义了一套基于注解的JavaBean校验机制。通过简单的注解&#xff0c;我们可以优雅地完成参数校验工作&#xff0c;避免在业务代码中编写大量的校验逻辑。 …...

「Java EE开发指南」如何使用MyEclipse的可视化JSF编辑器设计JSP?(二)

Visual JSF Designer&#xff08;可视化JSF设计器&#xff09;的目标是使创建JSF应用程序的特定于组件工作更容易可视化&#xff0c;在本教程中&#xff0c;您将使用可视化设计器设计JSF登录页面。您将学习如何&#xff1a; 创建一个JSF项目创建一个新的JSF页面设计JSF页面 该…...

Python 翻译词典小程序

一、概述 本工具是基于Python开发的智能翻译系统&#xff0c;采用有道词典进行翻译&#xff0c;并具有本地词典缓存以及单词本功能。 版本号&#xff1a;v1.0 (2025-05-15) 二、核心功能说明 1. 基础翻译功能 即时翻译&#xff1a;输入英文单词自动获取中文释义 词性识别&…...

kafka调优

以下是 Kafka 性能调优的核心策略与参数配置建议&#xff0c;综合生产环境和硬件层面的优化方案&#xff0c;覆盖生产者、消费者、Broker 三个关键组件&#xff1a; 一、生产者调优 批量发送优化 • batch.size&#xff1a;增大批量消息大小&#xff08;默认 16KB&#xff0c;建…...

【hadoop】sqoop案例 hive->mysql

将temperature.log中的气象数据导入到Hive的temperature表中&#xff0c; 根据气象站id分组计算每个气象站30年来的*最高*气温&#xff0c; 然后将统计结果导出到MySQL当中。 思路&#xff1a; 1.在hive中创建表 2.数据导入到表中 3.计算后的结果写入另外的表 4.用sqoop导出…...

Git/GitLab日常使用的命令指南来了!

在 GitLab 中拉取并合并代码的常见流程是通过 Git 命令来完成的。以下是一个标准的 Git 工作流&#xff0c;适用于从远程仓库&#xff08;如 GitLab&#xff09;拉取代码、切换分支、合并更新等操作。 &#x1f310; 一、基础命令&#xff1a;拉取最新代码 # 拉取远程仓库的所…...

遗传算法求解旅行商问题分析

目录 一、问题分析 二、实现步骤 1&#xff09;初始化种群 2&#xff09;计算适应度 3&#xff09;选择操作 4&#xff09;交叉操作 5&#xff09;变异操作 三、求解结果 四、总结 本文通过一个经典的旅行商问题&#xff0c;详细阐述在实际问题中如何运用遗传算法来进…...

【Hadoop】伪分布式安装

【Hadoop】伪分布式安装 什么是 Hadoop 伪分布式安装&#xff1f; Hadoop 伪分布式安装&#xff08;Pseudo-Distributed Mode&#xff09; 是一种在单台机器上模拟分布式集群环境的部署方式。它是介于 本地模式&#xff08;Local Mode&#xff09; 和 完全分布式模式&#xf…...

微服务概述

什么是微服务 微服务是一个架构方案,属于分布式架构的一种。 微服务提倡将模块以独立服务的方式独立管理,整个项目依靠多个小型的服务(单独进程)同时运作来支撑,单个服务只关注自己的业务实现并且有专业的团队进行开发。服务之间使用轻量的协议进行消息传送,并且对于单个…...

【网工】华为配置基础篇①

目录 ■华为设备登录配置 ■VLAN与VLANIF地址配置 ■DHCP配置命令 ■ACL访问控制列表配置 ■NAT地址转换配置 ■华为设备登录配置 <AR> system-view //进入系统模式 [AR]sysname Huawei //设备命名为Huawei [Huawei] telnet server enable //开启设备telnet功…...

React19源码系列之 Diff算法

在之前文章中root.render执行的过程&#xff0c;beginWork函数是渲染过程的核心&#xff0c;其针对不同类型的fiber进行不同的更新处理&#xff0c;在FunctionComponent&#xff08;函数组件&#xff09;中&#xff0c;会针对新旧fiber进行对比处理生成新fiber。因此此次就详细…...

华为2024年报:鸿蒙生态正在取得历史性突破

华为于2025年03月31日发布2024年年度报告。报告显示&#xff0c;华为经营结果符合预期&#xff0c;实现全球销售收入 8,621 亿元人民币&#xff0c;净利润 626 亿元人民币。2024 年研发投入达到 1,797 亿元人民币&#xff0c;约占全年收入的 20.8%&#xff0c;近十年累计投入的…...

如何在Firefox火狐浏览器里-安装梦精灵AI提示词管理工具

第一步&#xff1a;进入《梦精灵跨平台AI提示词管理工具》官网 梦精灵 跨平台AI提示词管理助手 - 官网梦精灵是一款专为AI用户打造的跨平台提示词管理插件&#xff0c;支持一键收藏、快速复制、智能分类等功能&#xff0c;适用于即梦、豆包、Kimi、DeepSeek等多个AI平台&…...