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

第二部分:进阶主题 14 . 性能优化 --[MySQL轻松入门教程]

MySQL性能优化是一个广泛的话题,它涉及到数据库设计、查询语句的编写、索引的使用、服务器配置等多个方面。下面是一些常见的MySQL性能优化策略:

1. 数据库和表结构优化

下面是三个关于MySQL数据库和表结构优化的具体示例:

示例 1: 合理选择数据类型

场景: 假设你有一个用户表users,其中包含用户的ID、姓名、电子邮件地址、性别等信息。性别通常只有两个值(或者加上未知/其他),这时使用TINYINT或枚举ENUM('male', 'female', 'other')比使用VARCHAR更合适。

CREATE TABLE users (id INT AUTO_INCREMENT PRIMARY KEY,name VARCHAR(255) NOT NULL,email VARCHAR(255) NOT NULL UNIQUE,gender ENUM('male', 'female', 'other') DEFAULT 'other',-- other columns...
);

优化点: 使用合适的最小化数据类型可以减少存储空间,提高I/O效率。

示例 2: 使用适当的索引

场景: 如果你的应用程序经常根据用户的电子邮件地址来查找用户记录,那么在email字段上创建一个唯一索引是合理的。

CREATE UNIQUE INDEX idx_email ON users (email);

优化点: 索引能够加速查询速度,特别是对于频繁搜索的列。这里使用了唯一索引,不仅加速了查找还确保了邮箱地址的唯一性。

示例 3: 分区表

场景: 对于一个日志记录表logs,假设它包含了大量按时间戳排序的日志条目,并且大部分查询都是针对最近的数据。你可以根据日期对表进行分区,这样可以快速定位到特定时间段内的日志,而不需要扫描整个表。

-- 创建日志记录表 `logs`
CREATE TABLE logs (-- 日志ID,自动递增主键,用于唯一标识每一条日志记录log_id INT AUTO_INCREMENT PRIMARY KEY,-- 日志消息内容,不允许为空message TEXT NOT NULL,-- 日志创建时间戳,记录日志的时间,不允许为空created_at DATETIME NOT NULL
)
-- 根据 `created_at` 字段的时间戳对表进行范围分区
PARTITION BY RANGE (UNIX_TIMESTAMP(created_at)) (-- 分区 p_2023 包含所有创建时间在 2024 年 1 月 1 日之前的日志记录PARTITION p_2023 VALUES LESS THAN (UNIX_TIMESTAMP('2024-01-01')),-- 分区 p_2024 包含所有创建时间在 2024 年 1 月 1 日至 2025 年 1 月 1 日之间的日志记录PARTITION p_2024 VALUES LESS THAN (UNIX_TIMESTAMP('2025-01-01')),-- 分区 p_future 包含所有创建时间在 2025 年 1 月 1 日之后的日志记录PARTITION p_future VALUES LESS THAN MAXVALUE
);

优化点: 分区可以帮助管理大型数据集,使得查询更加高效,尤其是在处理时间序列数据时。此外,删除旧的日志数据也变得更加简单,只需删除对应的分区即可。

这些示例展示了如何通过合理选择数据类型、添加索引以及分区策略来优化MySQL中的表结构。每个示例都针对性地解决了不同的性能问题,从而提高了系统的整体效率。

2. 索引优化

索引优化是提高MySQL查询性能的关键步骤之一。以下是三个具体的索引优化示例,涵盖了不同场景下的最佳实践:

示例 1: 使用复合索引来覆盖查询

场景: 假设有一个电子商务平台的订单表orders,其中包含用户ID(user_id)、订单状态(status)、订单日期(order_date)等字段。如果经常需要根据用户ID和订单状态来查询订单信息,那么可以创建一个复合索引来加速这类查询。

CREATE INDEX idx_user_status ON orders (user_id, status);

优化点: 复合索引可以同时利用多个列进行快速查找。当查询条件完全匹配索引的前缀时,MySQL可以直接从索引中获取数据,而不需要回表查询,这就是所谓的“覆盖索引”。

示例 2: 避免在频繁更新的列上创建索引

场景: 在同一个订单表orders中,假设订单状态(status)会随着订单处理过程不断变化。在这种情况下,不建议在这个列上创建索引,因为每次状态更新都会导致索引的重新组织,增加了写入成本。

优化点: 对于那些频繁更新或插入的列,应该谨慎创建索引,尤其是单列索引。这可以帮助减少不必要的索引维护开销,提升写操作的性能。

示例 3: 使用索引选择性来优化索引

场景: 考虑到用户登录系统时需要验证用户名和密码。如果用户名(username)具有较高的唯一性(即高选择性),则可以在该列上创建索引来加速登录验证过程。

CREATE UNIQUE INDEX idx_username ON users (username);

优化点: 索引的选择性是指索引列中不同值的数量与总行数的比例。选择性越高,索引的效果越好。因此,优先为那些具有高选择性的列创建索引,可以显著提高查询效率。对于低选择性的列(如性别、是否激活等),创建索引可能不会带来明显的性能提升,反而会增加存储和维护成本。

这三个示例展示了如何通过合理设计和使用索引来优化MySQL数据库的性能。每个例子都针对不同的问题提出了有效的解决方案,从而提高了系统的响应速度和资源利用率。

3. 查询优化

优化MySQL查询可以显著提升数据库的性能,以下是三个具体的查询优化示例,涵盖不同场景下的最佳实践:

示例 1: 使用EXPLAIN分析查询计划

场景: 假设你有一个产品表products,并且你想查找特定类别的所有产品。你可以使用EXPLAIN来查看查询执行计划,以确保你的查询是高效的。

-- 分析查询计划
EXPLAIN SELECT * FROM products WHERE category_id = 5;-- 优化后的查询(假设我们只关心某些列)
EXPLAIN SELECT id, name, price FROM products WHERE category_id = 5;

优化点: EXPLAIN命令可以帮助你理解MySQL如何执行查询,包括它选择了哪些索引、是否进行了全表扫描等。通过检查EXPLAIN输出,你可以发现潜在的问题,并进行相应的调整,比如选择更合适的索引或减少返回的列数。

示例 2: 避免不必要的SELECT *

场景: 在一个包含用户信息的表users中,如果你只需要获取用户的ID和姓名,而不是整个记录,那么应该明确列出所需的字段,而不是使用SELECT *

-- 不推荐:检索所有字段,可能导致不必要的I/O操作
SELECT * FROM users WHERE status = 'active';-- 推荐:只检索需要的字段
SELECT id, name FROM users WHERE status = 'active';

优化点: 只请求你需要的数据可以减少服务器的处理负担和网络传输量,尤其是在表结构复杂或者数据量大的情况下。这不仅提高了查询速度,还减少了内存和CPU资源的消耗。

示例 3: 使用适当的连接类型(JOIN)

场景: 假设你有两个表——订单表orders和客户表customers,并且你想获取每个订单对应的客户信息。使用内连接(INNER JOIN)通常是正确的选择,因为它只返回两个表中都存在的匹配行。

-- 不推荐:使用笛卡尔积(CROSS JOIN),可能导致大量无用的数据组合
SELECT o.id, c.name 
FROM orders o, customers c 
WHERE o.customer_id = c.id;-- 推荐:使用内连接(INNER JOIN),确保只获取有效的匹配项
SELECT o.id, c.name 
FROM orders o 
INNER JOIN customers c ON o.customer_id = c.id;

优化点: 选择正确的连接类型对于查询性能至关重要。不适当的连接可能会导致大量的额外计算和不必要的数据检索。内连接通常是最有效的方式,除非有特殊需求,否则应避免使用笛卡尔积或其他类型的外连接(如LEFT JOIN、RIGHT JOIN),除非确实需要那些未匹配的行。

这三个示例展示了如何通过分析查询计划、限制查询范围以及选择正确的连接方式来优化MySQL查询。每个例子都针对常见的性能瓶颈提供了实用的解决方案,帮助提高查询效率和系统响应速度。

4. 配置参数调整

调整MySQL的配置参数是优化数据库性能的重要步骤之一。以下是三个具体的配置参数调整示例,它们分别针对不同的优化目标:

示例 1: 调整InnoDB缓冲池大小 (innodb_buffer_pool_size)

场景: InnoDB缓冲池是MySQL用于缓存表数据和索引的最大内存区域。如果你的应用程序主要是读取密集型,并且服务器有足够的RAM,增加缓冲池的大小可以显著提高查询性能。

# my.cnf 或 my.ini 配置文件中
[mysqld]
innodb_buffer_pool_size = 8G  # 根据服务器可用内存调整,建议设置为物理内存的50%-75%

优化点: 较大的缓冲池意味着更多的数据可以直接从内存中读取,减少了磁盘I/O操作,从而提高了查询速度。不过,要确保不要将缓冲池设置得过大以至于耗尽系统内存,导致操作系统使用交换空间,反而会降低性能。

示例 2: 设置最大连接数 (max_connections)

场景: 如果你的应用程序有大量的并发请求,你可能需要增加MySQL允许的最大连接数。但是,过高的连接数可能会导致资源争用问题,因此需要找到一个平衡点。

# my.cnf 或 my.ini 配置文件中
[mysqld]
max_connections = 500  # 根据服务器硬件能力和应用需求调整

优化点: 合理设置最大连接数可以帮助防止过多的并发连接导致服务器资源耗尽。同时,结合使用连接池等技术,可以在不影响性能的情况下支持更多用户。

示例 3: 启用慢查询日志 (slow_query_loglong_query_time)

场景: 慢查询日志记录了执行时间超过指定阈值的所有查询,这对于识别低效的查询非常有用。通过分析这些日志,你可以找出并优化那些影响性能的查询。

# my.cnf 或 my.ini 配置文件中
[mysqld]
slow_query_log = 1  # 启用慢查询日志
slow_query_log_file = /var/log/mysql/mysql-slow.log  # 日志文件路径
long_query_time = 2  # 设置慢查询的时间阈值(秒),可以根据需要调整
log_queries_not_using_indexes = 1  # 记录未使用索引的查询,有助于发现潜在的优化机会

优化点: 慢查询日志是诊断性能瓶颈的有效工具。定期检查和分析这些日志可以帮助你及时发现和解决性能问题。特别是对于大型或复杂的查询,即使它们偶尔出现,也可能对整体性能产生重大影响。

这三个示例展示了如何通过调整关键配置参数来优化MySQL的性能。每个例子都旨在解决特定的性能挑战,帮助提高系统的稳定性和响应速度。在调整任何配置之前,请务必先备份现有的配置文件,并在非生产环境中进行测试以确保更改不会引起意外的问题。

5. 硬件和操作系统优化

硬件和操作系统的优化对于MySQL数据库的性能有着至关重要的影响。以下是三个具体的优化示例,涵盖硬件选择和操作系统配置两个方面:

示例 1: 使用高性能存储设备(SSD)

场景: 对于需要频繁读写的数据库应用,传统的HDD硬盘可能成为性能瓶颈。通过升级到固态硬盘(SSD),可以显著减少I/O延迟,提高数据读写速度。

优化点: SSD拥有更快的数据访问速度和更低的寻道时间,这使得它特别适合用于存放MySQL的数据文件、日志文件以及临时表空间。如果预算允许,考虑使用NVMe SSD,其性能比普通SATA SSD还要好得多。

# 确保MySQL的数据目录位于SSD上
sudo mkdir -p /mnt/ssd/mysql
sudo chown mysql:mysql /mnt/ssd/mysql
# 在my.cnf或my.ini中更新datadir设置
[mysqld]
datadir=/mnt/ssd/mysql

示例 2: 调整Linux内核参数以优化网络性能

场景: 如果你的应用程序依赖于高吞吐量的网络连接,比如分布式数据库集群或者远程客户端访问,那么调整Linux内核参数可以帮助提升网络性能。

优化点: 通过调整TCP缓冲区大小、启用TCP快速打开等功能,可以改善网络传输效率,降低延迟。下面是一些常见的网络相关参数调整:

# 编辑/etc/sysctl.conf文件,添加或修改以下内容
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.ipv4.tcp_rmem = 4096 87380 16777216
net.ipv4.tcp_wmem = 4096 65536 16777216
net.ipv4.tcp_fastopen = 3
net.ipv4.tcp_tw_reuse = 1# 应用更改
sudo sysctl -p

示例 3: 配置操作系统调度器和进程优先级

场景: 在多任务环境中,MySQL服务器可能会与其他服务竞争CPU资源。为了确保MySQL能够获得足够的处理能力,可以调整操作系统调度器策略,并设置MySQL进程的优先级。

优化点: 使用实时调度器(如SCHED_FIFO)或提高MySQL进程的nice值可以让它在系统负载较高的时候仍然保持良好的响应性。此外,还可以为MySQL分配专门的CPU核心,避免其他进程干扰。

# 设置mysqld进程的调度策略和优先级
echo "mysql soft rtprio 99" | sudo tee /etc/security/limits.d/mysql.conf
echo "mysql hard rtprio 99" | sudo tee -a /etc/security/limits.d/mysql.conf# 或者直接使用chrt命令调整当前运行的mysqld进程
sudo chrt -r -p 99 $(pgrep mysqld)# 为MySQL指定专用CPU核心(例如,使用cgroups)
sudo cgcreate -g cpu:/mysql
sudo cgset -r cpu.shares=1024 mysql
sudo cgclassify -g cpu:mysql $(pgrep mysqld)

这三个示例展示了如何通过选择合适的硬件以及调整操作系统配置来优化MySQL数据库的性能。每个例子都针对特定的性能挑战提供了有效的解决方案,帮助提高了系统的稳定性和响应速度。在实施任何更改之前,请确保了解它们的影响,并在非生产环境中充分测试。

6. 应用程序级别的优化

在应用程序级别进行MySQL优化可以显著提高数据库的性能和响应速度。以下是三个具体的应用程序级别的优化示例,涵盖不同的优化策略:

示例 1: 批量处理数据

场景: 当你需要插入或更新大量数据时,逐行处理会导致大量的网络往返和事务开销。

优化点: 使用批量插入或更新操作可以减少与数据库服务器之间的交互次数,从而大大提高效率。

-- 单次插入多条记录
INSERT INTO users (name, email) VALUES 
('Alice', 'alice@example.com'),
('Bob', 'bob@example.com'),
('Charlie', 'charlie@example.com');-- 或者使用LOAD DATA INFILE快速导入大量数据
LOAD DATA INFILE '/path/to/file.csv' 
INTO TABLE users 
FIELDS TERMINATED BY ',' 
LINES TERMINATED BY '\n';

额外提示: 如果可能的话,考虑在非高峰时段执行大批量的数据加载,以减少对在线服务的影响。

示例 2: 合理管理事务

场景: 在一个电子商务系统中,购买商品的操作通常需要涉及多个表(如订单表、库存表等)的更新。

优化点: 应该将这些相关的更新封装在一个事务中,确保所有操作要么全部成功,要么全部失败,同时尽可能缩短持有锁的时间。

START TRANSACTION;-- 更新库存
UPDATE products SET stock = stock - 1 WHERE product_id = 123;
-- 创建订单
INSERT INTO orders (user_id, product_id, quantity) VALUES (456, 123, 1);COMMIT;

额外提示: 对于只读查询,使用BEGIN...READ ONLY来声明事务为只读模式,这可以帮助优化器做出更好的选择,并且对于某些存储引擎(如InnoDB),它还可以提供额外的性能优势。

示例 3: 实现读写分离

场景: 对于那些读操作远多于写操作的应用程序(如新闻网站、博客平台等),可以通过主从复制实现读写分离,减轻主库的压力。

优化点: 配置一主多从架构,所有的写操作都发生在主库上,而大部分的读取请求则分发到从库中执行。这样不仅可以分散负载,还能提高系统的可用性和容错能力。

// 假设使用PHP作为编程语言
function getConnection($read_only = false) {if ($read_only) {// 返回从库连接return new PDO("mysql:host=slave_host;dbname=example", "user", "password");} else {// 返回主库连接return new PDO("mysql:host=master_host;dbname=example", "user", "password");}
}// 使用例子
$pdo = getConnection(true); // 获取从库连接用于读操作
$stmt = $pdo->query("SELECT * FROM articles LIMIT 10");// 写操作仍然使用主库
$pdo = getConnection(); // 默认获取主库连接
$pdo->exec("INSERT INTO comments (article_id, content) VALUES (1, 'Great article!')");

这三个示例展示了如何通过改进应用程序逻辑来优化MySQL数据库的性能。每个例子都针对特定的应用场景提出了有效的解决方案,帮助提高了系统的响应速度和资源利用率。在实际应用中,应该根据具体情况灵活运用这些策略,并结合其他层面的优化措施,以达到最佳效果。

以上只是MySQL性能优化的一部分内容,实际优化还需要结合具体的应用场景和需求来进行。如果你有特定的问题或者想深入了解某个方面的优化,请告诉我!

相关文章:

第二部分:进阶主题 14 . 性能优化 --[MySQL轻松入门教程]

MySQL性能优化是一个广泛的话题,它涉及到数据库设计、查询语句的编写、索引的使用、服务器配置等多个方面。下面是一些常见的MySQL性能优化策略: 1. 数据库和表结构优化 下面是三个关于MySQL数据库和表结构优化的具体示例: 示例 1: 合理选…...

Mac电脑设置鼠标的滚轮方向

Mac电脑使用鼠标时,上下滚动,方向与Windows相反,如果要保持与Windows一致,则下载MOS这个软件,然后在MOS中进行配置,就可以让鼠标操作方式与Windows一致。 软件下载地址: https://mos.caldis.me…...

【LDAP】LDAP概念和原理介绍

目录 一、前言 二、什么是LDAP? 2.1 什么是目录服务? 2.2 LDAP的介绍 2.3 为什么要使用LDAP 三、LDAP的主要产品线 四、LDAP的基本模型 4.1 目录树概念 4.2 LDAP常用关键字列表 4.3 objectClass介绍 五、JXplorer工具使用 一、前言 对于许多的…...

Android系统(android app和系统架构)

文章目录 AndroidAndroid Apps四大组件 Android系统Platform API之下:一个微笑内核adb(Android Debug Bridge) Android包管理机制Android的Intent机制参考 Android LinuxFrameworkJVM 在Linux/Java上做了个二次开发?并不完全是:Android定义…...

Android HandlerThread、Looper、MessageQueue 源码分析

Android HandlerThread、Looper、MessageQueue 源码分析 简介 在 Android 开发中,大家应该对 HandlerThread 有一定了解。顾名思义,HandlerThread 是 Thread 的一个子类。与普通的 Thread 不同,Thread 通常一次只能执行一个后台任务&#x…...

HTML知识点详解教程

文章目录 HTML知识点详解教程1. HTML基本语法2. HTML标签详解2.1 分区标签 <div>2.2 标题标签 <h1> ~ <h6>2.3 段落标签 <p>2.4 图片标签 <img>2.5 列表标签 <ul> 和 <ol>无序列表 <ul>有序列表 <ol> 2.6 超链接标签 &l…...

[数据结构#1] 并查集 | FindRoot | Union | 优化 | 应用

目录 1. 并查集原理 问题背景 名称与编号映射 数据结构设计 2. 并查集基本操作 (1) 初始化 (2) 查询根节点 (FindRoot) (3) 合并集合 (Union) (4) 集合操作总结 并查集优化 (1) 路径压缩 (2) 按秩合并 3. 并查集的应用 (1) 统计省份数量 (2) 判断等式方程是否成…...

科研绘图系列:R语言绘制网络图和密度分布图(network density plot)

禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍加载R包数据下载图1图2图3图4图5图6图7图8系统信息参考介绍 R语言绘制网络图和密度分布图(network & density plot) 加载R包 library(magrittr) library(dplyr) library(…...

Linux中输入和输出基本过程

1.文件内核级缓冲区 前面在如何理解Linux一切皆文件的特点中提到为了保证在Linux中所有进程访问文件时的方式趋近相 同&#xff0c;在f ile 结构体中存在一个 files_operations 结构体指针&#xff0c;对应的结构体保存所有文件操作的函 数指针&#xff08;这个结构体也被称为…...

使用 acme.sh 签发和自动续期 ssl https 证书

acme.sh 是一个热度非常高的签发和自动续期 https 证书的工具&#xff0c;虽然官网上提供了充分的操作说明&#xff0c;但是不够简洁&#xff0c;本文以在 nginx 中签发和配置http 为例&#xff0c;列出必要的几个简单步骤。 安装 因为网络原因&#xff0c;github 大部分人是…...

spring重点面试题总结

bean的生命周期 在 Spring 中&#xff0c;BeanDefinition、Bean 实例化、依赖注入、Aware 接口的处理、以及 BeanPostProcessor 的前置和后置处理等&#xff0c;都是 Spring 容器管理 Bean 生命周期的关键部分。下面我将详细解释这些过程。 1. 通过 BeanDefinition 获取 Bean…...

新的一章:codegeex

三层结构的优点&#xff1a;可扩展性&#xff0c;可复用性...

游戏引擎学习第50天

仓库: https://gitee.com/mrxiao_com/2d_game Minkowski 这个算法有点懵逼 回顾 基本上&#xff0c;现在我们所处的阶段是&#xff0c;回顾最初的代码&#xff0c;我们正在讨论我们希望在引擎中实现的所有功能。我们正在做的版本是初步的、粗略的版本&#xff0c;涵盖我们认…...

快速理解类的加载过程

当程序主动使用某个类时&#xff0c;如果该类还未加载到内存中&#xff0c;则系统会通过如下三个步骤来对该类进行初始化&#xff1a; 1.加载&#xff1a;将class文件字节码内容加载到内存中&#xff0c;并将这些静态数据转换成方法区的运行时数据结构&#xff0c;然后生成一个…...

医院跌倒检测识别 使用YOLO,COCO ,VOC格式对4806张原始图片进行标注,可识别病人跌倒,病人的危险行为,病床等场景,预测准确率可达96.7%

医院跌倒检测识别 使用YOLO,COCO ,VOC格式对4806张原始图片进行标注&#xff0c;可识别病人跌倒&#xff0c;病人的危险行为&#xff0c;病床等场景&#xff0c;预测准确率可达96.7&#xff05; 数据集分割 4806总图像数 训练组70&#xff05; 3364图片 有效集20&#…...

[Unity Shader] 【游戏开发】【图形渲染】Unity Shader的种类2-顶点/片元着色器与固定函数着色器的选择与应用

Unity 提供了不同种类的 Shader,每种 Shader 有其独特的优势和适用场景。在所有类型的 Shader 中,顶点/片元着色器(Vertex/Fragment Shader)与固定函数着色器(Fixed Function Shader)是两种重要的着色器类型。尽管它们具有不同的编写方式和用途,理解其差异与应用场景,对…...

浏览器端的 js 包括哪几个部分

一、核心语言部分 1. 变量与数据类型 变量用于存储数据&#xff0c;在 JavaScript 中有多种数据类型&#xff0c;如基本数据类型&#xff08;字符串、数字、布尔值、undefined、null&#xff09;和引用数据类型&#xff08;对象、数组、函数&#xff09;。 let name "…...

GoogLeNet网络:深度学习领域的创新之作

目录 ​编辑 引言 GoogLeNet的核心创新&#xff1a;Inception模块 Inception模块的工作原理 1x1卷积&#xff1a;降维与减少计算量 1x1卷积的优势 深度分离卷积&#xff1a;计算效率的提升 深度分离卷积的实现 全局平均池化&#xff1a;简化网络结构 全局平均池化的作…...

深入C语言文件操作:从库函数到系统调用

引言 文件操作是编程中不可或缺的一部分&#xff0c;尤其在C语言中&#xff0c;文件操作不仅是处理数据的基本手段&#xff0c;也是连接程序与外部世界的重要桥梁。C语言提供了丰富的库函数来处理文件&#xff0c;如 fopen、fclose、fread、fwrite 等。然而&#xff0c;这些库…...

Java序列化

Java序列化 简单来说&#xff1a; 序列化是将对象的状态信息转换为可以存储或传输的形式&#xff08;如字节序列&#xff09;的过程。在 Java 中&#xff0c;通过序列化可以把一个对象保存到文件、通过网络传输到其他地方或者存储到数据库等。最直接的原因就是某些场景下需要…...

PHP和Node.js哪个更爽?

先说结论&#xff0c;rust完胜。 php&#xff1a;laravel&#xff0c;swoole&#xff0c;webman&#xff0c;最开始在苏宁的时候写了几年php&#xff0c;当时觉得php真的是世界上最好的语言&#xff0c;因为当初活在舒适圈里&#xff0c;不愿意跳出来&#xff0c;就好比当初活在…...

JVM垃圾回收机制全解析

Java虚拟机&#xff08;JVM&#xff09;中的垃圾收集器&#xff08;Garbage Collector&#xff0c;简称GC&#xff09;是用于自动管理内存的机制。它负责识别和清除不再被程序使用的对象&#xff0c;从而释放内存空间&#xff0c;避免内存泄漏和内存溢出等问题。垃圾收集器在Ja…...

AI,如何重构理解、匹配与决策?

AI 时代&#xff0c;我们如何理解消费&#xff1f; 作者&#xff5c;王彬 封面&#xff5c;Unplash 人们通过信息理解世界。 曾几何时&#xff0c;PC 与移动互联网重塑了人们的购物路径&#xff1a;信息变得唾手可得&#xff0c;商品决策变得高度依赖内容。 但 AI 时代的来…...

2025季度云服务器排行榜

在全球云服务器市场&#xff0c;各厂商的排名和地位并非一成不变&#xff0c;而是由其独特的优势、战略布局和市场适应性共同决定的。以下是根据2025年市场趋势&#xff0c;对主要云服务器厂商在排行榜中占据重要位置的原因和优势进行深度分析&#xff1a; 一、全球“三巨头”…...

VM虚拟机网络配置(ubuntu24桥接模式):配置静态IP

编辑-虚拟网络编辑器-更改设置 选择桥接模式&#xff0c;然后找到相应的网卡&#xff08;可以查看自己本机的网络连接&#xff09; windows连接的网络点击查看属性 编辑虚拟机设置更改网络配置&#xff0c;选择刚才配置的桥接模式 静态ip设置&#xff1a; 我用的ubuntu24桌…...

排序算法总结(C++)

目录 一、稳定性二、排序算法选择、冒泡、插入排序归并排序随机快速排序堆排序基数排序计数排序 三、总结 一、稳定性 排序算法的稳定性是指&#xff1a;同样大小的样本 **&#xff08;同样大小的数据&#xff09;**在排序之后不会改变原始的相对次序。 稳定性对基础类型对象…...

mac 安装homebrew (nvm 及git)

mac 安装nvm 及git 万恶之源 mac 安装这些东西离不开Xcode。及homebrew 一、先说安装git步骤 通用&#xff1a; 方法一&#xff1a;使用 Homebrew 安装 Git&#xff08;推荐&#xff09; 步骤如下&#xff1a;打开终端&#xff08;Terminal.app&#xff09; 1.安装 Homebrew…...

git: early EOF

macOS报错&#xff1a; Initialized empty Git repository in /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core/.git/ remote: Enumerating objects: 2691797, done. remote: Counting objects: 100% (1760/1760), done. remote: Compressing objects: 100% (636/636…...

命令行关闭Windows防火墙

命令行关闭Windows防火墙 引言一、防火墙:被低估的"智能安检员"二、优先尝试!90%问题无需关闭防火墙方案1:程序白名单(解决软件误拦截)方案2:开放特定端口(解决网游/开发端口不通)三、命令行极速关闭方案方法一:PowerShell(推荐Win10/11)​方法二:CMD命令…...

DAY 45 超大力王爱学Python

来自超大力王的友情提示&#xff1a;在用tensordoard的时候一定一定要用绝对位置&#xff0c;例如&#xff1a;tensorboard --logdir"D:\代码\archive (1)\runs\cifar10_mlp_experiment_2" 不然读取不了数据 知识点回顾&#xff1a; tensorboard的发展历史和原理tens…...