mysql面试题九(SQL优化)

目录

1.一条 SQL 是如何执行的

2.索引失效的几种情况

3.EXPLAIN

4.Where 子句如何优化

5.超大分页或深度分页如何处理

6.大表查询如何优化

7.分库分表

基本概念

分库分表方法

水平拆分

垂直拆分

分库分表后的注意事项


1.一条 SQL 是如何执行的

在MySQL中,一条SQL语句从提交到服务器到最终返回结果,会经历一系列复杂的内部处理过程。以下是SQL语句在MySQL中执行的基本步骤概述:

  1. 连接器

    • 客户端应用程序(如数据库管理工具、应用程序代码等)与MySQL服务器建立连接。连接器负责验证用户的登录凭据(用户名、密码),以及与客户端保持通信通道。
  2. 查询缓存(MySQL 8.0之前)

    • 对于SELECT查询(不涉及数据修改的查询),在较早版本的MySQL(如8.0之前的版本)中,连接器会先检查查询缓存。如果查询语句与缓存中的某个条目匹配且数据未过期,查询结果可以直接从缓存返回给客户端,避免了进一步的处理。然而,由于查询缓存的局限性(如易受数据变更影响导致缓存失效、管理成本高等),MySQL 8.0版本及以后已移除了查询缓存功能。
  3. 分析器

    • 如果查询缓存不适用或未命中,MySQL会将接收到的SQL语句交给分析器。分析器首先进行词法分析,将SQL语句拆解成一个个有意义的单词(token),如标识符、关键词、操作符等。接着进行语法分析,根据MySQL的语法规则检查这些单词组成的序列是否符合SQL语法规则。如果SQL语句的语法错误,此时会返回错误信息。
  4. 优化器

    • 通过语法分析的SQL语句,会被优化器接手。优化器负责确定最优的执行计划,即如何最高效地获取所需数据。这包括选择合适的索引、决定表的连接顺序和方式(如Nested Loop Join、Hash Join、Merge Join)、评估是否需要进行全表扫描等。优化器基于统计信息、成本模型等进行决策,旨在最小化查询的执行时间和资源消耗。
  5. 执行器

    • 有了执行计划之后,执行器开始执行查询。它与存储引擎交互,调用相应的接口来访问数据。对于SELECT查询,执行器按计划读取数据并返回给客户端;对于INSERT、UPDATE、DELETE等写操作,执行器会根据计划修改数据,并确保事务的ACID特性得到保证。
  6. 权限校验

    • 在查询执行过程中,尤其是在涉及到特定表或列的操作时,执行器会与系统权限模块协作,检查当前用户是否有执行该操作的权限。如果没有相应权限,查询会被终止,并返回权限错误。
  7. 存储引擎

    • MySQL支持多种存储引擎(如InnoDB、MyISAM等)。执行器与具体的存储引擎交互,执行实际的数据读写操作。存储引擎负责管理数据的物理存储、索引结构、锁机制、事务支持等。
  8. 日志模块

    • 对于涉及数据更改的SQL语句,MySQL会记录相应的日志。例如,InnoDB存储引擎使用redo log(重做日志)保证 crash-safe 能力,binlog(二进制日志)用于复制和备份。这些日志在语句执行过程中或完成后被写入,以确保数据的一致性和可恢复性。
  9. 结果返回与清理

    • 执行完毕后,执行器将查询结果返回给客户端。如果是SELECT查询,结果集可能会被压缩后再传输。完成所有操作后,若连接不再需要,连接器会负责断开连接,释放相关资源。

综上所述,一条SQL语句在MySQL中执行的过程涉及多个组件的协作,包括连接管理、查询解析与优化、权限验证、数据访问、日志记录以及结果返回等环节,确保了SQL语句的正确执行和数据的安全访问。

2.索引失效的几种情况

  1. 数据类型不匹配

    • 当查询条件中的数据类型与索引列的数据类型不一致,或者转换可能导致索引无法精确匹配时,索引可能失效。例如,对整型索引列使用字符串类型的值进行查询,或对日期索引列使用错误的格式。
    • 数据类型出现隐式转化。如 varchar 不加单引号的话可能会自动转换为 int 型,使索引无效,产生全表扫描;
  2. 不遵循最左前缀原则

    • 对于复合索引(包含多个列的索引),查询必须从索引的第一列开始,并按照索引定义的列顺序进行。如果查询条件没有以索引的第一列开头,或者跳过了索引中间的列,索引可能无法被充分利用。
  3. 在索引列上使用 IS NULL 或 IS NOT NULL操作。最好给列设置默认值。
  4. 使用NOT!=<>操作符

    • 对于某些类型的索引(如B树索引),使用NOT!=<>操作符时,MySQL可能无法有效地利用索引进行查询。因此对它的处理只会产生全表扫描。 优化方法: key<>0 改为 key>0 or key<0。
  5. 使用OR连接多个条件

    • or 语句前后没有同时使用索引。当 or 左右查询字段只有一个是索引,该索引失效,只有左右查询字段均为索引时,才会生效;
  6. 前导模糊查询

    • 使用LIKE操作符进行查询时,如果查询模式以通配符%开头(如LIKE '%value%'),索引通常无法发挥作用,因为这种模式不满足最左前缀匹配原则。
  7. 对索引进行表达式计算或函数操作

    • 如果查询条件包含对索引列进行数学运算、函数调用(如CONCAT()SUBSTRING(),日期函数等)或类型转换,索引通常无法被直接使用,因为索引存储的是原始值而非计算后的结果。
  8. 索引列包含大量重复值

    • 当索引列的值分布非常集中,尤其是存在大量重复值时,即使查询使用了索引列,MySQL可能判断全表扫描比使用索引更为高效
  9. 索引列使用范围查询后紧跟非索引列查询

    • 当索引列使用范围查询(如><BETWEEN等)后,如果紧随其后的查询条件包含未被索引的列,那么索引可能只对范围查询部分有效,后续的查询条件可能导致索引失效。
  10. 索引未被更新或维护

    • 如果数据发生改变(如插入、更新或删除)后,对应的索引没有及时更新,或者索引由于长时间未进行优化(如重建、修复)而导致统计数据过时或索引结构损坏,都可能导致索引无法正常工作。

3.EXPLAIN

EXPLAIN是MySQL提供的一种用于分析SQL查询执行计划的命令。通过在查询语句前添加EXPLAIN关键字,可以获取到MySQL对这条查询的详细执行信息,包括访问哪些表、采用何种连接类型、使用哪些索引、是否进行排序和分组、估计的行数、是否使用临时表等。这些信息有助于理解查询的执行流程,识别潜在性能瓶颈,并据此进行优化。

以下是对EXPLAIN输出结果中各字段的简要解释:

  • id:查询执行的顺序号。相同id表示这部分查询是一个执行单元,从上到下执行。id值越大,执行优先级越高,越先被执行。

  • select_type:查询类型。常见的有SIMPLE(简单查询,无子查询或UNION)、PRIMARY(外部查询,最外层的SELECT)、SUBQUERY(子查询中的第一个SELECT)、DEPENDENT SUBQUERY(子查询依赖于外部查询的结果)、UNION(UNION中的第二个或后续SELECT)等。

  • table:查询涉及的表名。如果查询使用了别名,这里显示的是别名。

  • type:访问类型,即MySQL决定如何查找表中的行。从最优到最差依次为:system > const > eq_ref > ref > fulltext > ref_or_null > index_merge > unique_subquery > index_subquery > range > index > ALL。一般来说,最好能尽可能接近"system"或"const"。

  • possible_keys:查询可能使用的索引。如果为空,表示没有可用的索引。

  • key:实际使用的索引。如果没有使用索引,显示为NULL。

  • key_len:使用的索引长度,用于估算索引中使用的字节数。这可以帮助判断是否使用了索引的一部分(前缀索引)或者是否完全使用了索引。

  • ref:哪个列或常量与索引进行了比较。

  • rows:MySQL根据统计信息估算的需要读取的行数。这个值越小越好。

  • filtered(MySQL 5.7.8及以上版本):一个百分比值,表示存储引擎认为需要访问的行数占总行数的比例。结合rows字段,可以更准确地预估查询的实际工作量。

  • Extra:包含其他额外信息,如是否使用了覆盖索引(Using index)、是否使用了临时表(Using temporary)、是否进行了文件排序(Using filesort)、是否进行了全表扫描(Using where; Using index)等。

使用EXPLAIN的示例:

EXPLAIN SELECT * FROM employees e JOIN departments d ON e.dept_id = d.id WHERE e.salary > 50000;

运行上述命令后,MySQL将返回一个表格,展示对查询的执行计划分析结果。通过解读这些信息,可以了解MySQL如何执行查询,识别是否存在全表扫描、未使用索引等问题,进而针对性地优化查询或调整索引策略。

4.Where 子句如何优化

优化WHERE子句是提高SQL查询性能的关键步骤之一。以下是一些建议和策略,帮助您优化WHERE子句以提高查询效率:

  1. 使用索引

    • 确保WHERE子句中涉及的列已被正确索引。对于频繁查询且数据范围筛选明显的列,创建合适的索引(如单列索引、复合索引、全文索引等),并遵循最左前缀原则。使用EXPLAIN分析查询计划,确认索引是否被正确使用。
  2. 避免全表扫描

    • 尽可能减少对大数据表的全表扫描。如果查询条件能限定在一个较小的数据范围内,通过索引快速定位数据,可显著提高查询速度。避免在WHERE子句中使用无法利用索引的操作,如对非索引列的范围查询、非索引列的IN列表查询等。
  3. 简化条件表达式

    • 减少复杂的逻辑表达式和嵌套查询。尽量将OR条件改写为UNIONIN子查询,因为OR可能导致索引失效。避免在WHERE子句中使用否定条件(如NOT IN!=),它们往往难以利用索引。
  4. 避免使用函数和表达式

    • 不要在WHERE子句中对索引列使用函数或表达式,因为这会导致索引失效。如果必须使用函数或表达式,考虑是否能在查询外先计算好值,然后作为常量传入查询。
  5. 合理使用INEXISTS

    • 当需要检查某列值是否在一组值中时,使用IN通常比多次OR条件更高效。对于关联子查询,当只需要判断是否存在匹配记录时,使用EXISTS通常比INJOIN更高效。
  6. 避免在关联查询中使用!=<>

    • 在多表关联查询中,避免在ONWHERE子句中使用!=<>比较关联键,因为这可能导致无法使用索引。改用LEFT JOIN ... IS NULLNOT EXISTS等方法来实现相同的效果。
  7. 减少NULL值的处理

    • NULL值在索引中处理起来较为复杂,可能导致索引部分失效。尽量避免在频繁查询的列中使用NULL,并在设计表结构时考虑使用默认值或空字符串代替。对于必须存在的NULL值,可以创建NULL友好索引(如FULLTEXT索引、SPATIAL索引等)或使用COALESCE()IFNULL()等函数转换为非NULL值进行查询。
  8. 避免在索引列上使用LIKE通配符

    • 对于LIKE查询,尽量避免在索引列上使用前导通配符(如'%value%'),因为这会导致索引失效。如果必须使用LIKE,尝试将通配符置于模式末尾(如'value%'),并确保模式足够短以利用索引。
  9. 批量处理

    • 如果需要对大量数据进行过滤,考虑将多次单个查询合并为一次批量查询,利用INJOIN处理,减少网络通信开销和数据库服务器的压力。
  10. 定期维护索引和统计信息

    • 定期对表进行分析(如ANALYZE TABLE),更新索引统计信息,确保优化器能做出准确的成本估算。定期检查并重建(如OPTIMIZE TABLE)或修复(如REPAIR TABLE)索引,保持索引结构健康。

通过以上策略优化WHERE子句,可以有效提高查询性能,降低数据库服务器负载,提升应用程序响应速度。记得在修改查询后使用EXPLAIN分析查询计划,验证优化效果。

5.超大分页或深度分页如何处理

处理超大分页或深度分页时,由于涉及大量数据的检索和排序,传统基于LIMITOFFSET的分页方式往往会面临性能瓶颈。以下是一些优化超大分页或深度分页的方法:

  1. Keyset(Cursor-Based)分页

    • 使用有序的唯一键或索引来实现分页。首次查询时,获取指定数量的记录以及最后一个记录的排序键值。后续分页时,直接使用这个键值作为起始点进行查询,而不是使用OFFSET。这样可以避免跳跃式读取大量无关数据,显著减少IO和CPU负担。

    示例:

    -- 第一页
    SELECT * FROM table ORDER BY sort_column LIMIT 10;
    
    -- 第二页,假设上一页最后一条记录的sort_column值为last_value
    SELECT * FROM table WHERE sort_column > last_value ORDER BY sort_column LIMIT 10;
  2. 优化LIMITOFFSET查询

    • 避免使用大数值的OFFSET。当OFFSET值较大时,可以尝试改写查询,利用索引来直接定位数据。例如,如果表有连续的主键或唯一索引,且数据按主键递增排列,可以利用主键值直接跳过不需要的数据。

    示例:

    -- 原查询:SELECT * FROM table LIMIT 1000000, 10
    -- 优化为:SELECT * FROM table WHERE id > 1000000 LIMIT 10
  3. 利用索引覆盖(Index Covering)

    • 创建覆盖索引来包含查询所需的所有列,使得查询仅需从索引中获取数据,无需回表,从而减少IO。如果查询结果集可以完全由索引提供,性能将大大提升。
  4. 子查询优化

    • 使用子查询预先筛选出需要的记录范围,然后再进行主查询,避免在大表上直接进行排序和分页。

    示例:

    -- 原查询:SELECT * FROM table ORDER BY sort_column LIMIT 1000000, 10
    -- 优化为:SELECT * FROM (
        SELECT id FROM table ORDER BY sort_column LIMIT 1000000, 10
    ) AS subquery
    JOIN table ON table.id = subquery.id;
  5. 复合索引优化

    • 根据查询条件和排序需求,创建复合索引来同时涵盖筛选条件和排序字段,减少排序开销。
  6. 基于索引的再排序

    • 如果必须对大量数据进行排序,考虑在索引中预先存储排序后的数据,或者在查询时仅对索引进行排序,避免对整个数据集进行排序。
  7. 利用PREPARE语句

    • 对于频繁执行的分页查询,使用PREPARE语句预编译查询计划,可以减少解析和优化的时间。
  8. 数据分片(Sharding)

    • 如果数据规模极其庞大,考虑使用分片技术将数据分散到多个物理节点上。这样,分页查询仅需在单个分片上执行,显著减小数据处理量。
  9. 缓存策略

    • 对于访问频繁且结果集相对固定的分页查询,可以利用缓存(如Redis、Memcached等)存储部分或全部结果,减少数据库查询压力。特别是对于较深的分页,缓存前几页或者最近访问过的页面可以显著提升用户体验。
  10. 应用层面分页

    • 如果业务允许,将分页操作移到应用层面。例如,先获取所有符合条件的ID列表(使用索引来快速获取),然后在应用中进行分页。这种方法适用于数据总量大但实际展示数据量小的场景。

综上所述,处理超大分页或深度分页时,应结合具体业务场景和数据特点,灵活运用上述策略进行优化。关键在于减少不必要的数据访问、排序和传输,以及合理利用索引来加速查询。同时,持续监控查询性能,根据实际情况调整优化措施。

6.大表查询如何优化

可以从分库分表、读写分离以及缓存三个维度分别阐述

7.分库分表

MySQL分库分表是一种数据库水平扩展策略,用于应对随着数据量增长导致单个数据库实例性能瓶颈的问题。分库分表的主要目的是通过将数据分散存储在多个数据库或多个表中,降低单个数据库的压力,提高查询性能、并发处理能力和系统的整体可伸缩性。以下是MySQL分库分表的基本概念、方法和注意事项:

基本概念

  • 分库:将原本存储在单一数据库中的数据,按照一定规则划分到多个独立的数据库中。每个数据库称为一个分片或分库,它们通常部署在不同的服务器或集群上,以实现资源的分布式处理。

  • 分表:在单个数据库内部,将一张大表按照某种规则切分为多个小表,这些小表被称为子表或分表。每个子表存储原表的一部分数据,从而降低单表的数据量和索引大小。

分库分表方法

水平拆分

  • 水平拆分是最常用的分库分表方式,适用于数据量大且表结构相同的场景。将数据行按照某一列(如用户ID、时间戳等)的值进行切分,将不同范围的数据分布到不同的数据库或表中。

    • 哈希分片:根据某一列的值通过哈希函数计算出分布位置,确保数据均匀分布。例如,对用户ID取模,将其映射到不同的数据库或表。

    • 范围分片:按照某一列的值的自然区间(如时间范围、地理位置区域等)划分数据。例如,按年份或月份将订单表拆分为多个表。

    • 列表分片:根据某一列的特定值列表进行分配,适用于数据有明显业务分组的情况。例如,按用户所属的地区或部门划分数据。

垂直拆分

  • 垂直拆分是根据表中列的相关性,将一张包含多种类型数据的大表拆分为多张结构更紧凑的小表,通常用于减少单表的宽度和索引大小。

    • 按业务拆分:将不同业务相关的列分离到不同的表或数据库,如将用户基本信息与用户行为记录分开存储。

    • 按访问频率拆分:将经常一起访问且访问频次较高的列放在同一张表,将访问较少的列放入另一张表。

分库分表后的注意事项

  1. 数据路由:需要设计一套数据路由机制,根据分片规则自动将查询请求发送到正确的数据库或表。这通常通过中间件(如ShardingSphere、MyCat等)或自定义应用逻辑实现。

  2. 跨库/表查询:分库分表后,原本简单的跨表查询可能变为复杂的分布式查询。需要避免或尽量减少这类查询,或者通过应用层拼接、物化视图、分布式查询引擎等方式解决。

  3. 事务处理:分库分表后,跨分片的事务处理变得复杂。可能需要引入分布式事务解决方案(如两阶段提交、柔性事务等)或调整业务逻辑以适应分布式环境下的事务一致性要求。

  4. 数据同步与备份:分库分表后,数据备份和恢复、实时同步等运维操作需要考虑多个数据库或表。可能需要使用专门的数据库复制工具(如MySQL Replication、Percona XtraDB Cluster等)或分布式数据同步框架。

  5. 数据均衡与扩容:随着数据增长,可能需要重新调整分片规则或增加新的分片。这要求分片策略具备良好的可扩展性,并配合数据迁移工具实现数据的动态迁移。

  6. 全局唯一ID生成:在分库分表环境中,需要确保跨分片的主键或其他唯一标识符全局唯一。可以使用雪花算法、UUID、分布式ID生成服务等方案生成唯一ID。

总的来说,MySQL分库分表是一种应对海量数据存储和访问的有效手段,但同时也增加了系统复杂性。实施分库分表时,应充分评估业务需求、数据特性和未来扩展预期,制定合理的分片策略,并配套相应的数据路由、事务处理、运维管理等解决方案。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/584753.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Linux下软硬链接和动静态库制作详解

目录 前言 软硬链接 概念 软链接的创建 硬链接的创建 软硬链接的本质区别 理解软链接 理解硬链接 小结 动静态库 概念 动静态库的制作 静态库的制作 动态库的制作 前言 本文涉及到inode和地址空间等相关概念&#xff0c;不知道的小伙伴可以先阅读以下两篇文章…

vue 设置输入框只能输入数字且只能输入小数点后两位,并且不能输入减号

<el-input v-model.trim"sb.price" placeholder"现价" class"input_w3" oninput"valuevalue.replace(/[^0-9.]/g,).replace(/\.{2,}/g,.).replace(/^(\-)*(\d)\.(\d\d).*$/,$1$2.$3)"/> 嘎嘎简单、、、、、、、、、

RAPTOR:索引树状 RAG,使用树结构来捕捉文本的高级和低级细节

RAPTOR&#xff1a;索引树状 RAG&#xff0c;使用树结构来捕捉文本的高级和低级细节 提出背景使用树结构来捕捉文本的高级和低级细节递归摘要RAPTOR 递归树结构的构建 树遍历或压缩树检索 语义关联性检索对比 RAG、知识图谱树遍历检索和压缩树检索 提出背景 论文&#xff1…

西门子PCU50.3数控面板维修6FC5220-0AA31-2AA0

西门子数控面板维修&#xff0c;西门子工控机触摸屏维修6FC5247-0AA00-0AA3 西门子数控机床维修包括&#xff1a;840C/CE、840Di/DSL、840Di SL、802C S、802D SL、810D/DE、820D SL、S120数控电路板、数控伺服驱动模块、控制模块修、电源模块&#xff0c;西门子数控机床控制面…

SQL Sever无法连接服务器

SQL Sever无法连接服务器&#xff0c;报错证书链是由不受信任的颁发机构颁发的 解决方法&#xff1a;不用ssl方式连接 1、点击弹框中按钮“选项” 2、连接安全加密选择可选 3、不勾选“信任服务器证书” 4、点击“连接”&#xff0c;可连接成功

国内各种免费AI聊天机器人(ChatGPT)推荐(上)

作者主页&#xff1a;点击&#xff01; 国内免费AI推荐专栏&#xff1a;点击&#xff01; 创作时间&#xff1a;2024年4月27日11点25分 欢迎来到AI聊天机器人推荐系列的第一篇文章&#xff01; 在这个系列中&#xff0c;我将引领您探索国内各种AI聊天机器人的精彩世界。 从…

西瓜书学习——决策树形状、熵和决策树的本质

文章目录 决策树形状监督学习算法分类与回归 熵信息熵香农熵 (Shannon Entropy) - H(X)联合熵 (Joint Entropy) - H(X, Y)条件熵 (Conditional Entropy) - H(Y|X)互信息 (Mutual Information) - I(X; Y)相对熵 (Relative Entropy) / KL散度 (Kullback-Leibler Divergence) - DK…

[SpringBoot] JWT令牌——登录校验

JWT&#xff08;JSON Web Token&#xff09;是一种用于在网络应用之间传递信息的开放标准&#xff08;RFC 7519&#xff09;。它由三部分组成&#xff1a;头部&#xff08;header&#xff09;、载荷&#xff08;payload&#xff09;和签名&#xff08;signature&#xff09;。J…

【redis】初始redis和分布式系统的基本知识

˃͈꒵˂͈꒱ write in front ꒰˃͈꒵˂͈꒱ ʕ̯•͡˔•̯᷅ʔ大家好&#xff0c;我是xiaoxie.希望你看完之后,有不足之处请多多谅解&#xff0c;让我们一起共同进步૮₍❀ᴗ͈ . ᴗ͈ აxiaoxieʕ̯•͡˔•̯᷅ʔ—CSDN博客 本文由xiaoxieʕ̯•͡˔•̯᷅ʔ 原创 CSDN 如…

iOS ------ Method Swizzling (动态方法交换)

一&#xff0c;Method Swizzling 简介 Method&#xff08;方法&#xff09;对应的是objc_method结构体&#xff1b;而objc_method结构体中包含了SEL method_name(方法名&#xff09;&#xff0c;IMP method_imp&#xff08;方法实现&#xff09; // objc_method 结构体 typed…

Hadoop概述

大数据处理技术 对大数据技术的基本概念进行简单介绍&#xff0c;包括分布式计算、服务器集群和 Google 的 3 个大数据技术。 分布式计算 对于如何处理大数据&#xff0c;计算机科学界有两大方向。 第一个方向是集中式计算&#xff0c;就是通过不断增加处理器的数量来增强单…

开源项目介绍-01:AAMED-master 圆和椭圆检测

前言: AAMED: Arc Adjacency Matrix based Fast Ellipse Detection :基于弧邻接矩阵的快速椭圆检测 1 下载 GitHub - Li-Zhaoxi/AAMED: Arc Adjacency Matrix based Fast Ellipse Detection 开源项目,支持windows 和 Linux的,然后,有C++,Python,Matlab的几个版本。 Git…

SQL底层执行过程

MySQL 的查询流程 客户端请求连接器 负责与客户端的通信,是半双工模式&#xff08;半双工(Half Duplex)数据传输指数据可以在一个信号载体的两个方向上传输,但是不能同时传输。&#xff09;&#xff0c;验证请求用户的账户和密码是否正确&#xff0c;③如果用户的账户和密码验…

模型量化与量化在LLM中的应用 | 得物技术

一、模型推理优化 随着模型在各种场景中的落地实践&#xff0c;模型的推理加速早已成为AI工程化的重要内容。而近年基于Transformer架构的大模型继而成为主流&#xff0c;在各项任务中取得SoTA成绩&#xff0c;它们在训练和推理中的昂贵成本使得其在合理的成本下的部署实践显得…

Git 如何修改已经推送的错误提交信息(有图有真相)

解决方案一&#xff1a;修改最新的提交信息 首先&#xff0c;我们来考虑最简单的情况&#xff1a;如果你在最近一次提交时输入了错误的提交信息&#xff0c;并且还没有进行下一次提交&#xff0c;那么你可以使用如下命令来修改最新的提交信息&#xff1a; $ git commit --ame…

VSCode SSH连接远程主机失败,显示Server status check failed - waiting and retrying

vscode ssh连接远程主机突然连接不上了&#xff0c;终端中显示&#xff1a;Server status check failed - waiting and retrying 但是我用Xshell都可以连接成功&#xff0c;所以不是远程主机的问题&#xff0c;问题出在本地vscode&#xff1b; 现象一&#xff1a; 不停地输入…

CPU架构

一、CPU组成 CPU内部由ALU&#xff08;算术逻辑单元&#xff09;、CU&#xff08;控制器&#xff09;、寄存器&#xff08;PC、IR、PSW、DR、通用寄存器等&#xff09;、中断系统组成&#xff0c;外部通过总线与控制总线、数据总线、地址总线进行相连&#xff0c;对数据和程序…

【保姆级讲解如何安装与配置Xcode】

&#x1f308;个人主页: 程序员不想敲代码啊 &#x1f3c6;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f44d;点赞⭐评论⭐收藏 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff0c;让我们共…

第十二章 案例二:配置Trunk,实现相同VLAN的跨交换机通信

1、实验环境 公司的员工人数已达到 100 人&#xff0c;其网络设备如图12.13所示&#xff0c;现在的网络环境导致广播较多网速慢&#xff0c;并且也不安全&#xff0c;公司希望按照部门划分网络&#xff0c;并且能够保证一定的网络安全性 图12.13 实验案例二拓扑图 其网络规划…

环境安装:python环境迁移(无网和有网)

前言 环境部署或迁移是一项简单而又考验应对能力的一项工作&#xff0c;需要考虑到网络环境的情况&#xff0c;无网环境下需要采取离线方式进行操作&#xff0c;有网环境则可以直接通过在线安装完成。 在进行Python环境迁移时&#xff0c;需要注意保持环境的一致性&#xff0c;…