MySql面试总结(一)
mysql中排序是怎么实现的?
MySQL 中的排序主要通过ORDER BY
子句来实现,其底层实现方式有文件排序和索引排序两种,以下是具体介绍:
通过ORDER BY
子句实现排序
这是 MySQL 中进行排序的基本方式,语法为SELECT column1, column2,... FROM table_name ORDER BY column_name [ASC|DESC];
,其中ASC
表示升序,是默认值,DESC
表示降序。例如,要从employees
表中按照salary
字段降序查询员工信息,可以这样写:SELECT * FROM employees ORDER BY salary DESC;
。
底层实现方式
- 文件排序(FileSort)
- 适用场景:当查询的排序条件无法使用索引,或者使用索引进行排序的成本较高时,MySQL 会使用文件排序。例如,对没有索引的列进行排序,或者排序的列数据类型不适合使用索引等情况。
- 实现过程:MySQL 会在内存中开辟一块排序缓冲区(sort buffer)来进行排序操作。如果待排序的数据量较小,能够完全放入排序缓冲区,那么可以在内存中直接完成排序。如果数据量较大,无法全部放入排序缓冲区,MySQL 会采用外部排序算法,通常是归并排序。将数据分成多个较小的块,分别在内存中排序后,再将这些有序的块合并成最终的有序结果,这个过程可能会涉及到多次磁盘 I/O 操作。
- 索引排序
- 适用场景:当
ORDER BY
子句中的列与索引列完全匹配,或者是索引列的前缀,并且查询的其他条件也能利用该索引进行过滤时,MySQL 可以使用索引来直接获取有序的数据,无需额外的排序操作。 - 实现过程:索引本身是一种有序的数据结构,如 B + 树索引。叶子节点中的数据按照索引列的值有序排列。当使用索引排序时,MySQL 可以直接按照索引的顺序从叶子节点中读取数据,从而快速获取到满足排序条件的结果。例如,在一个包含
id
、name
、age
列的表中,对age
列建立了索引,当执行SELECT * FROM table_name ORDER BY age;
查询时,MySQL 可以利用age
列的索引直接按照年龄的顺序读取数据。
- 适用场景:当
MySQL 在执行排序操作时,优化器会根据具体的查询语句、表结构、索引情况等因素,自动选择合适的排序方式,以达到最优的性能。
实际项目开发中怎么正确使用?
以下分别阐述 Java 开发工程师、架构师和 DBA 在实际项目中针对 MySQL 排序机制的正确使用方法:
Java 开发工程师
1. 合理编写 SQL 查询
- 利用索引排序:了解数据库表的索引情况,编写
ORDER BY
语句时尽量使用已有的索引列。例如,若表中有create_time
列的索引,在需要按创建时间排序时,使用ORDER BY create_time
,避免使用未加索引的列排序,以免触发文件排序带来性能损耗。
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;public class IndexedSortExample {public static void main(String[] args) {try (Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/yourdb", "user", "password");Statement statement = connection.createStatement()) {String sql = "SELECT * FROM your_table ORDER BY create_time";ResultSet resultSet = statement.executeQuery(sql);while (resultSet.next()) {// 处理结果集}} catch (Exception e) {e.printStackTrace();}}
}
- 避免复杂排序:减少在
ORDER BY
子句中使用函数或表达式,因为这可能导致索引无法使用而进行文件排序。如避免使用ORDER BY YEAR(create_time)
这种方式。
2. 处理大量数据排序
当需要对大量数据进行排序时,考虑分页查询,减少单次排序的数据量,避免内存溢出和性能问题。
int pageSize = 10;
int pageNumber = 1;
try (Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/yourdb", "user", "password");Statement statement = connection.createStatement()) {int offset = (pageNumber - 1) * pageSize;String sql = "SELECT * FROM your_table ORDER BY create_time LIMIT " + offset + ", " + pageSize;ResultSet resultSet = statement.executeQuery(sql);while (resultSet.next()) {// 处理结果集}
} catch (Exception e) {e.printStackTrace();
}
3. 性能监控与反馈
关注系统的性能表现,若发现排序操作性能不佳,及时与 DBA 沟通,提供相关 SQL 语句和业务场景信息,协助排查问题。
架构师
1. 数据库设计与索引规划
- 合理设计索引:在设计数据库表结构时,根据业务需求合理创建索引,确保经常用于排序的列有索引支持。例如,对于经常按价格排序的商品表,为
price
列创建索引。 - 多列索引:考虑使用多列索引满足复杂排序需求。若业务中经常按
category
和price
排序,可创建复合索引(category, price)
。
2. 系统架构优化
- 读写分离:对于读多写少且排序操作频繁的系统,采用读写分离架构。将排序查询分发到从库,减轻主库压力,同时利用从库资源提升排序性能。
- 缓存机制:对于一些排序结果相对稳定的查询,使用缓存技术(如 Redis)缓存排序结果,减少数据库的排序操作。
3. 性能评估与调优建议
定期对系统的排序性能进行评估,根据评估结果向 DBA 提出索引优化、参数调整等方面的建议,确保系统在不同负载下都能高效处理排序操作。
DBA
1. 索引管理与优化
- 索引分析:定期分析数据库中的索引使用情况,通过
EXPLAIN
命令查看 SQL 查询的执行计划,判断排序操作是否使用了索引,若未使用则考虑是否需要创建或调整索引。
EXPLAIN SELECT * FROM your_table ORDER BY create_time;
- 索引重建:对于碎片化严重的索引,定期进行重建,以提高索引的查询和排序性能。
2. 参数调优
根据服务器硬件资源和业务特点,调整与排序相关的参数。例如,调整 sort_buffer_size
参数,增加排序缓冲区的大小,使更多的数据能在内存中完成排序,减少磁盘 I/O。
3. 监控与故障处理
- 性能监控:实时监控数据库的排序性能指标,如排序操作的响应时间、磁盘 I/O 情况等。当发现排序性能异常时,及时进行故障排查和处理。
- 慢查询日志分析:分析慢查询日志,找出执行时间较长的排序查询,对这些查询进行优化,如优化 SQL 语句、调整索引等。
MySQL 的 Change Buffer 是什么?它有什么作用?
定义
Change Buffer 是 MySQL InnoDB 存储引擎中的一种特殊缓存机制,它主要用于缓存对非唯一二级索引页的写操作(插入、更新、删除),而不是立即将这些修改操作应用到磁盘上的索引页。只有在查询需要访问这些被修改的索引页时,或者在后台线程进行定期合并操作时,才会将 Change Buffer 中的修改合并到磁盘上的索引页中。
工作原理
当有针对非唯一二级索引的写操作时,InnoDB 存储引擎会先检查该索引页是否已经在缓冲池中。如果不在,就会将该写操作记录到 Change Buffer 中,而不是立即从磁盘读取索引页并进行修改。后续当该索引页被读入缓冲池时,会将 Change Buffer 中与该页相关的所有写操作合并到该索引页上,这样就完成了索引的更新。
作用
1. 减少磁盘 I/O 操作
在传统的数据库操作中,每次对索引进行写操作时,都需要将对应的索引页从磁盘读取到内存中进行修改,然后再写回磁盘,这会产生大量的随机磁盘 I/O 操作,而随机 I/O 是非常耗时的。Change Buffer 可以将多个对不同索引页的写操作先缓存起来,等到合适的时机再进行批量合并,将多次随机 I/O 转换为一次顺序 I/O,从而显著减少磁盘 I/O 次数,提高数据库的写入性能。
例如,在一个大型的电商系统中,每天会有大量的商品评论数据插入,这些评论数据对应的索引写操作可以通过 Change Buffer 进行缓存,避免频繁的磁盘 I/O。
2. 提高写入性能
由于减少了磁盘 I/O 操作,数据库的写入性能得到了显著提升。特别是在进行批量插入、更新或删除操作时,Change Buffer 的优势更加明显。在批量写入数据时,数据库可以先将这些操作快速记录到 Change Buffer 中,而不需要等待每次操作都完成磁盘 I/O,从而加快了整体的写入速度。
3. 提高资源利用率
Change Buffer 可以有效地利用系统资源。在写入操作时,不需要立即读取磁盘上的索引页,节省了内存和 CPU 资源,使得系统可以将更多的资源用于其他重要的操作,如处理查询请求等。
局限性
- Change Buffer 只适用于非唯一二级索引。对于唯一二级索引,由于需要在插入或更新操作时立即检查索引的唯一性,无法使用 Change Buffer 进行缓存。
- 如果数据库系统主要以读操作为主,而写操作较少,Change Buffer 的作用可能不太明显,甚至可能会因为维护 Change Buffer 本身带来一些额外的开销。
实际项目开发中怎么正确使用?
在实际项目中,Java 开发工程师、架构师和 DBA 对于 MySQL 的 Change Buffer 有着不同的职责和应对策略,以下是具体说明:
Java 开发工程师
1. 了解基本原理
Java 开发工程师虽然不需要深入掌握 Change Buffer 的底层实现,但需要了解其基本概念和作用。知道 Change Buffer 可以提高数据库的写入性能,尤其在批量插入、更新操作时效果显著,这有助于在编写代码时做出更合理的决策。
2. 优化 SQL 语句
- 批量操作:尽量使用批量插入、更新和删除语句,利用 Change Buffer 批量合并写操作的特性,减少磁盘 I/O 次数。例如,在 Java 中使用 JDBC 的
addBatch()
和executeBatch()
方法进行批量操作。import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.SQLException;public class BatchInsertExample {public static void main(String[] args) {String url = "jdbc:mysql://localhost:3306/your_database";String user = "your_username";String password = "your_password";try (Connection connection = DriverManager.getConnection(url, user, password)) {String sql = "INSERT INTO your_table (column1, column2) VALUES (?,?)";try (PreparedStatement preparedStatement = connection.prepareStatement(sql)) {for (int i = 0; i < 1000; i++) {preparedStatement.setString(1, "value1_" + i);preparedStatement.setString(2, "value2_" + i);preparedStatement.addBatch();}preparedStatement.executeBatch();}} catch (SQLException e) {e.printStackTrace();}} }
- 避免不必要的索引更新:在设计业务逻辑时,尽量减少对非唯一二级索引的频繁更新操作。如果某些索引不是经常用于查询,可以考虑在批量操作完成后再重建索引。
3. 监控和反馈
关注数据库的性能指标,如写入性能、磁盘 I/O 等。如果发现数据库写入性能下降,可能与 Change Buffer 相关,及时与 DBA 沟通,提供详细的业务操作和 SQL 语句信息,协助 DBA 进行问题排查。
架构师
1. 数据库选型和架构设计
- 考虑 Change Buffer 的适用性:在选择数据库和设计架构时,要考虑业务场景是否适合使用 Change Buffer。如果业务以写操作为主,且有大量对非唯一二级索引的操作,那么 MySQL InnoDB 的 Change Buffer 可以作为一个重要的性能优化点。
- 读写分离架构:设计读写分离架构时,要充分考虑 Change Buffer 对主库写入性能的提升。将读操作分发到从库,减轻主库的读压力,让主库专注于写操作,充分发挥 Change Buffer 的优势。
2. 性能评估和调优建议
- 性能评估:对系统的整体性能进行评估,包括数据库的写入性能、磁盘 I/O 等。通过性能测试工具,模拟不同的业务场景,评估 Change Buffer 对系统性能的影响。
- 调优建议:根据性能评估结果,向 DBA 提出关于 Change Buffer 相关参数的调优建议,如
innodb_change_buffer_max_size
参数,它控制着 Change Buffer 占用缓冲池的最大比例。
3. 与团队协作
协调 Java 开发工程师和 DBA 之间的工作,确保开发人员编写的代码能够充分利用 Change Buffer 的优势,同时 DBA 能够对数据库进行合理的配置和管理。
DBA
1. 配置和监控
- 参数配置:根据业务场景和服务器资源,合理配置 Change Buffer 相关参数。例如,
innodb_change_buffer_max_size
参数可以根据系统的写入负载和缓冲池大小进行调整。如果系统写入负载较高,可以适当增大该参数的值,但不宜过大,以免占用过多的缓冲池空间。 - 监控指标:监控 Change Buffer 的使用情况,如
Innodb_change_buffer_bytes_used
(Change Buffer 当前使用的字节数)、Innodb_change_buffer_hits
(Change Buffer 命中次数)等指标。通过监控这些指标,及时发现 Change Buffer 是否存在性能问题。
2. 性能调优
- 调整参数:根据监控结果,动态调整 Change Buffer 相关参数。如果发现 Change Buffer 命中率较低,可能需要调整
innodb_change_buffer_max_size
参数;如果 Change Buffer 占用空间过大,影响了其他缓存的使用,可以适当减小该参数的值。 - 索引优化:对数据库中的索引进行优化,确保非唯一二级索引的使用合理。避免创建过多不必要的非唯一二级索引,以免增加 Change Buffer 的维护成本。
3. 故障处理
当出现与 Change Buffer 相关的性能问题或故障时,如磁盘 I/O 过高、数据库写入性能下降等,及时进行故障排查和处理。可以通过分析慢查询日志、监控指标等方式,找出问题的根源,并采取相应的措施进行解决。
详细描述一条 SQL 语句在 MySQL 中的执行过程?
一条 SQL 语句在 MySQL 中的执行过程可以分为多个阶段,下面将详细描述每个阶段:
1. 客户端发送请求
- 当客户端(如 Java 程序、MySQL 命令行工具等)需要执行一条 SQL 语句时,会通过网络连接将该 SQL 语句发送到 MySQL 服务器。客户端与服务器之间的通信遵循 MySQL 协议,它定义了客户端和服务器之间消息的格式和交互规则。
2. 服务器接收请求并进行连接管理
- 连接层处理:MySQL 服务器在监听特定端口(默认是 3306)接收客户端的连接请求。当接收到连接请求后,会为该客户端创建一个线程来处理后续的交互。这个线程负责接收客户端发送的 SQL 语句,并将执行结果返回给客户端。
- 权限验证:服务器会根据客户端提供的用户名和密码进行身份验证,检查该用户是否有执行该 SQL 语句的权限。如果权限验证失败,服务器会返回错误信息给客户端。
3. 查询缓存检查(可选)
- 缓存机制:在 MySQL 中,有一个查询缓存组件。当接收到 SQL 语句后,服务器会首先检查查询缓存中是否已经存在该 SQL 语句的执行结果。查询缓存会将 SQL 语句作为键,将执行结果作为值进行存储。
- 缓存命中与未命中处理:如果缓存命中,即查询缓存中存在该 SQL 语句的执行结果,服务器会直接从缓存中取出结果并返回给客户端,这样可以大大提高查询性能。如果缓存未命中,服务器会继续后续的执行流程。需要注意的是,从 MySQL 8.0 版本开始,查询缓存已被移除。
4. 语法解析
- 解析器工作:如果查询缓存未命中,服务器会将 SQL 语句传递给解析器。解析器会对 SQL 语句进行词法分析和语法分析,将 SQL 语句分解成一个个的词法单元(如关键字、表名、列名等),并根据 SQL 语法规则构建出一个语法树。
- 错误处理:如果 SQL 语句存在语法错误,解析器会识别出来并返回错误信息给客户端。
5. 预处理
- 语义分析:预处理阶段会对语法树进行语义分析,检查 SQL 语句中的表名、列名是否存在,检查列的数据类型是否匹配等。例如,如果 SQL 语句中引用了一个不存在的表,预处理阶段会发现这个错误并返回相应的错误信息。
- 权限再次检查:在这个阶段,还会再次检查用户是否有对涉及的表和列进行操作的权限。
6. 查询优化
- 优化器工作:查询优化器会根据解析和预处理的结果,生成多个可能的执行计划。执行计划描述了如何从数据库中获取数据,包括选择哪些索引、表的连接顺序等。优化器会根据数据库的统计信息(如表的行数、索引的选择性等)来评估每个执行计划的成本,选择成本最低的执行计划。
- 成本评估:成本评估主要考虑的因素包括磁盘 I/O 次数、CPU 开销等。例如,如果一个执行计划需要进行大量的全表扫描,其成本会相对较高;而如果可以利用索引快速定位数据,成本会相对较低。
7. 执行计划执行
- 存储引擎交互:优化器选择好执行计划后,服务器会根据执行计划调用相应的存储引擎(如 InnoDB、MyISAM 等)来执行具体的操作。存储引擎负责实际的数据存储和检索,它会根据执行计划从磁盘或内存中读取数据,并进行相应的操作(如过滤、排序、连接等)。
- 数据处理:在执行过程中,存储引擎会将满足条件的数据返回给服务器,服务器会根据需要对这些数据进行进一步的处理,如排序、分组等。
8. 返回结果
- 结果集返回:当执行计划执行完毕后,服务器会将最终的结果集返回给客户端。结果集通常是一个二维表,包含了查询所涉及的列和行数据。
- 关闭连接:客户端接收到结果后,可以选择关闭与服务器的连接,释放相关的资源。
综上所述,一条 SQL 语句在 MySQL 中的执行是一个复杂的过程,涉及多个组件和阶段的协同工作,每个阶段都对最终的执行性能和结果产生影响。
实际项目开发中怎么正确使用?
Java 开发工程师
1. 编写高效 SQL 语句
架构师
1. 系统架构设计
2. 性能评估与调优策略制定
- 了解执行过程助力优化:明白 SQL 语句在 MySQL 中的执行过程,能让开发工程师理解 SQL 性能瓶颈产生的原因。例如,知道解析、优化等阶段的工作后,会避免编写复杂、嵌套过深的 SQL 语句,因为这会增加解析和优化的成本。
- 索引使用优化:理解存储引擎如何使用索引来加速数据检索,开发工程师在编写 SQL 时会尽量利用索引。比如在
WHERE
子句中使用索引列进行过滤,避免在索引列上使用函数,防止索引失效。示例代码如下:import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Statement;public class IndexedQueryExample {public static void main(String[] args) {try (Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/yourdb", "user", "password");Statement statement = connection.createStatement()) {// 使用索引列进行过滤String sql = "SELECT * FROM users WHERE age > 18"; ResultSet resultSet = statement.executeQuery(sql);while (resultSet.next()) {// 处理结果集}} catch (Exception e) {e.printStackTrace();}} }
2. 异常处理与性能监控
- 针对性异常处理:根据 SQL 执行过程的不同阶段,开发工程师可以更有针对性地进行
相关文章:
MySql面试总结(一)
mysql中排序是怎么实现的? MySQL 中的排序主要通过ORDER BY子句来实现,其底层实现方式有文件排序和索引排序两种,以下是具体介绍: 通过ORDER BY子句实现排序 这是 MySQL 中进行排序的基本方式,语法为SELECT column1, column2,... FROM table_name ORDER BY column_name…...
YOLOv5 + SE注意力机制:提升目标检测性能的实践
一、引言 目标检测是计算机视觉领域的一个重要任务,广泛应用于自动驾驶、安防监控、工业检测等领域。YOLOv5作为YOLO系列的最新版本,以其高效性和准确性在实际应用中表现出色。然而,随着应用场景的复杂化,传统的卷积神经网络在处…...
第十四届蓝桥杯大赛软件赛国赛C/C++大学C组
A 【跑步计划——日期问题】-CSDN博客 B 【残缺的数字】-CSDN博客 C 题目 代码 #include <bits/stdc.h> using namespace std;void change(int &x) {int sum 0, t x;while(t){sum t % 10;t / 10;}x - sum; } int main() {int n;cin >> n;int ans 0;…...
【备份】php项目处理跨域请求踩坑
这都是老生常谈的东西了。我还在踩坑,记录一下。 我在项目入口明明写了如下代码: // 处理预检请求 (OPTIONS) if ($_SERVER[REQUEST_METHOD] OPTIONS) {header("Access-Control-Allow-Origin: https://xxx.vip");header("Access-Cont…...
编程题 - 汽水瓶【JavaScript/Node.js解法】
“学如逆水行舟,不进则退。” ——《增广贤文》 目录 汽水瓶 题目:解答分析:js代码解答 -ACM模式:代码通过:题解分析:简洁思路代码: 汽水瓶 题目: 某商店规定:三个空…...
【考研】复试相关上机题目
文章目录 22机试回忆版1、判断燃气费描述输入格式输出格式输入样例输出样例 C o d e Code Code 2、统计闰年数量描述输入格式输出格式输入样例输出样例 C o d e Code Code 3、打印图形描述输入格式输出格式 C o d e Code Code 4、密文数据描述输入格式输出格式输入样例输出样例…...
HONOR荣耀MagicBook 15 2021款 独显(BOD-WXX9,BDR-WFH9HN)原厂Win10系统
适用型号:【BOD-WXX9】 MagicBook 15 2021款 i7 独显 MX450 16GB512GB (BDR-WFE9HN) MagicBook 15 2021款 i5 独显 MX450 16GB512GB (BDR-WFH9HN) MagicBook 15 2021款 i5 集显 16GB512GB (BDR-WFH9HN) 链接:https://pan.baidu.com/s/1S6L57ADS18fnJZ1…...
微信小程序:完善购物车功能,购物车主页面展示,详细页面展示效果
一、效果图 1、主页面 根据物品信息进行菜单分类,点击单项购物车图标添加至购物车,记录总购物车数量 2、购物车详情页 根据主页面选择的项,根据后台查询展示到页面,可进行多选,数量加减等 二、代码 1、主页面 页…...
Spring Boot集成MyBatis访问MySQL:从项目搭建到基础数据库查询(基础入门)
Spring Boot集成MyBatis访问MySQL 一、引言 在当今企业级应用开发中,Spring Boot、MyBatis与MySQL的组合凭借其高效性和灵活性,成为构建数据驱动型应用的首选方案。本文将带你从零开始搭建项目,掌握Spring Boot集成MyBatis的基础入门内容。…...
基于STM32的智能家居能源管理系统
1. 引言 传统家庭能源管理存在能耗监控粗放、设备联动不足等问题,难以适应绿色低碳发展需求。本文设计了一款基于STM32的智能家居能源管理系统,通过多源能耗监测、负荷预测与优化调度技术,实现家庭能源的精细化管理与智能优化,提…...
OpenAI发布GPT-4.5:功能非常特殊,推理很贵
今天凌晨4点,OpenAI进行了在线技术直播,发布了最新模型GPT-4.5。 GPT-4.5与之前的模型相比,本次最大的亮点是加上了“情商”,这也是目前所有大模型最缺、最难的功能。 此外,GPT-4.5 在SimpleQA上的测试数据显示&…...
DeepSeek开源周 Day04:从DualPipe聊聊大模型分布式训练的并行策略
DualPipe简介 今天是DeepSeek开源周的第四天,官方开源了一种新型并行计算优化策略——DualPipe。 其实大家阅读过Deepseek-V3技术报告的同学,对这个技术并不陌生。 开源地址:https://github.com/deepseek-ai/DualPipe 核心亮点 DualPipe&…...
RabbitMQ系列(七)基本概念之Channel
RabbitMQ 中的 Channel(信道) 是客户端与 RabbitMQ 服务器通信的虚拟会话通道,其核心作用在于优化资源利用并提升消息处理效率。以下是其核心机制与功能的详细解析: 一、Channel 的核心定义 虚拟通信链路 Channel 是建立在 TCP 连…...
LeetCode 热题 100_有效的括号(69_20_简单_C++)(栈;栈+哈希表(建立左右括号的对应关系))
LeetCode 热题 100_有效的括号(69_20) 题目描述:输入输出样例:题解:解题思路:思路一(栈):思路二(栈哈希表(建立左右括号的对应关系)&a…...
c#-LINQ与lambda表达式学习笔记
https://blog.csdn.net/m0_56259289/article/details/144134122 static void Main(string[] args) //程序入口{int[] arr1 new int[] { 1, 2, 3, 4, 5, 6, 7 };int[] arr2 new int[] { 1, 2, 3, 4, 5, 6, 7 };var query1 from n in arr1 select n;var query2 from a in arr…...
数据库基础二(数据库安装配置)
打开MySQL官网进行安装包的下载 https://www.mysql.com/ 接着找到适用于windows的版本 下载版本 直接点击下载即可 接下来对应的内容分别是: 1:安装所有 MySQL 数据库需要的产品; 2:仅使用 MySQL 数据库的服务器; 3&a…...
Word 插入图片会到文字底下解决方案
一、现象描述 正常情况下,我们插入图片都是这样的。 但有时突然会这样,插入的图片陷于文字底部。 二、网上解决方案 网上有教程说,修改图片布局选项,从嵌入型改成上下型环绕。改完之后确实有用,但是需要手动拖动图片…...
有没有什么免费的AI工具可以帮忙做简单的ppt?
互联网各领域资料分享专区(不定期更新): Sheet 正文 1. 博思AIPPT 特点:专为中文用户设计,支持文本/文件导入生成PPT,内置海量模板和智能排版功能,涵盖商务、教育等多种场景。可一键优化布局、配色,并集成AI绘图功能(文生图/图生图)。适用场景:职场汇报、教育培训、商…...
实战-使用 Playbook 批量部署多台 LAMP 环境
实战-使用 Playbook 批量部署多台 LAMP 环境 playbooks 使用步骤 playbook 是一个不同于使用 ansible 命令行执行方式的模式,功能更强大更灵活。 1、在 playbooks 中定义任务: - name: task description #任务描述信息 module_name: modul…...
CSS—引入方式、选择器、复合选择器、文字控制属性、CSS特性
目录 CSS 1.引入方式 2.选择器 3.复合选择器 4.文字控制属性 5.CSS特性 CSS 层叠样式表,是一种样式表语言,用来描述HTML文档的呈现 书写时一般按照顺序:盒子模型属性—>文字样式—>圆角、阴影等修饰属性 1.引入方式 引入方式方…...
Spring 源码硬核解析系列专题(十):Spring Data JPA 的 ORM 源码解析
在前几期中,我们从 Spring 核心到 Spring Boot、Spring Cloud、Spring Security 和 Spring Batch,逐步揭示了 Spring 生态的多样性。在企业级开发中,数据访问是不可或缺的部分,而 Spring Data JPA 通过简化 JPA(Java Persistence API)操作,成为主流的 ORM 框架。本篇将深…...
爬虫和逆向教程-专栏介绍和目录
文章目录 一、爬虫基础和进阶二、App数据采集三、爬虫项目四、爬虫面试 本专栏为爬虫初学者和进阶开发者量身定制的爬虫和逆向学习园地。为你提供全面而深入的爬虫和逆向技术指导,从入门到精通,从基础理论到高级实战,助你在数据的海洋中畅游&…...
Lua | 每日一练 (4)
💢欢迎来到张胤尘的技术站 💥技术如江河,汇聚众志成。代码似星辰,照亮行征程。开源精神长,传承永不忘。携手共前行,未来更辉煌💥 文章目录 Lua | 每日一练 (4)题目参考答案线程和协程调度方式上…...
【折线图 Line】——1
🌟 解锁数据可视化的魔法钥匙 —— pyecharts实战指南 🌟 在这个数据为王的时代,每一次点击、每一次交易、每一份报告背后都隐藏着无尽的故事与洞察。但你是否曾苦恼于如何将这些冰冷的数据转化为直观、吸引人的视觉盛宴? 🔥 欢迎来到《pyecharts图形绘制大师班》 �…...
大白话前端性能优化,常见方法有哪些?
大白话前端性能优化,常见方法有哪些? 咱来唠唠前端性能优化,其实就是想办法让网页打开得更快、用起来更流畅,就跟给汽车做保养让它跑得更顺溜一样。下面详细说说常见的优化方法: 压缩代码 CSS 压缩:CSS …...
IP属地是通过卫星定位的吗?如何保护用户隐私
在数字时代,网络空间成为了人们日常生活不可或缺的一部分。随着社交媒体、在线服务等平台的兴起,用户IP属地信息的重要性日益凸显。然而,关于IP属地是如何确定的,尤其是是否通过卫星定位这一问题,却常常引发公众的疑问…...
Vue3+Node/Express支付宝沙箱支付与确认支付
Vue3Node/Express支付宝沙箱支付与确认支付 支付宝沙箱配置进入沙箱选择自定义密钥 密钥工具下载生成密钥格式转换 自定义密钥设置Express安装依赖项目目录创建alipay.js请求(打开支付)代码router/pay.jsapp.js 前端代码前端封装接口前端调用 实现支付查…...
什么是大语言模型
大语言模型(Large Language Model,LLM)是一种基于深度学习技术的人工智能模型,旨在理解和生成人类语言。以下是大语言模型的详细介绍: 一、基本概念 大语言模型通常包含数百亿甚至数千亿个参数,通过在海量…...
本地部署Embedding模型API服务的实战教程
大家好,我是herosunly。985院校硕士毕业,现担任算法研究员一职,热衷于大模型算法的研究与应用。曾担任百度千帆大模型比赛、BPAA算法大赛评委,编写微软OpenAI考试认证指导手册。曾获得阿里云天池比赛第一名,CCF比赛第二名,科大讯飞比赛第三名。授权多项发明专利。对机器学…...
postgresql postgis扩展相关
项目 下载地址 http://rpmfind.net/linux/rpm2html/search.php?queryprotobuf(x86-64) Postgis Index of /postgis/source/ proj4 Index of /proj/ geos Index of /geos/ libxml2 ftp://xmlsoft.org/libxml2/ Index of /sources Json-c Releases json-c/json-c G…...
FFmpeg-chapter3-读取视频流(原理篇)
ffmpeg网站:About FFmpeg 1 库介绍 (1)libavutil是一个包含简化编程函数的库,包括随机数生成器、数据结构、数学例程、核心多媒体实用程序等等。 (2)libavcodec是一个包含音频/视频编解码器的解码器和编…...
入门基础项目(SpringBoot+Vue)
文章目录 1. css布局相关2. JS3. Vue 脚手架搭建4. ElementUI4.1 引入ElementUI4.2 首页4.2.1 整体框架4.2.2 Aside-logo4.2.3 Aside-菜单4.2.4 Header-左侧4.2.5 Header-右侧4.2.6 iconfont 自定义图标4.2.7 完整代码 4.3 封装前后端交互工具 axios4.3.1 安装 axios4.3.2 /src…...
C#调用CANoeCLRAdapter.dll文章(二)
一、引言 在上一篇指南中,我们介绍了如何通过C#调用CANoeCLRAdapter.dll实现基础功能,包括COM接口操作、DLL导入和PANL面板集成。本文将进一步探讨高级功能开发,涵盖事件驱动编程、CAPL脚本双向通信以及异步任务处理,帮助开发者构…...
ai大模型自动化测试-TensorFlow Testing 测试模型实例
AI大模型自动化测试是确保模型质量、可靠性和性能的关键环节,以下将从测试流程、测试内容、测试工具及测试挑战与应对几个方面进行详细介绍: 测试流程 测试计划制定 确定测试目标:明确要测试的AI大模型的具体功能、性能、安全性等方面的目标,例如评估模型在特定任务上的准…...
QT——c++界面编程库
非界面编程 QT编译的时候,依赖于 .pro 配置文件: SOURCES: 所有需要参与编译的 .cpp 源文件 HEADERS:所有需要参与编译的.h 头文件 QT:所有需要参与编译的 QT函数库 .pro文件一旦修改,注意需要键盘按 ctrls 才能加载最新的配置文…...
postman--接口测试工具安装和使用教程
postman–接口测试工具 postman是一款支持http协议的接口调试与测试工具,其主要特点就是功能强大,使用简单且易用性好 。 无论是开发人员进行接口调试,还是测试人员做接口测试,postman都是我们的首选工具之一 。 下面先通过一张…...
如何用python画一棵分形树
这个代码会生成一个彩色的分形树图案,可以通过调整draw_tree函数中的参数来改变树的形状和大小 import turtle import random# 递归函数绘制分形树 def draw_tree(branch_len, t):if branch_len > 5:t.color(random.choice(colors))t.pensize(branch_len / 10)t…...
【leetcode】二分查找专题
文章目录 1.二分查找1.题目2.解题思路3. 解题代码 2.在排序数组中查找元素的第一个和最后一个位置1.题目2.算法原理3. 代码 3.x的平方根1.题目2.代码 4.搜索插入位置1.题目2.解题思路3.解题代码 5.山脉数组的索引1.题目2.解题思路3. 代码 6.寻找峰值1.题目2.解题思路3.代码 7. …...
深度学习笔记17-马铃薯病害识别(VGG-16复现)
目录 一、 前期准备 1. 设置GPU 2. 导入数据 二、手动搭建VGG-16模型 1. 搭建模型 三、 训练模型 1. 编写训练函数 3. 编写测试函数 4. 正式训练 四、 结果可视化 1. Loss与Accuracy图 2. 指定图片进行预测 3. 模型评估 前言 🍨 本文为🔗365天深度学习训…...
【LeetCode】131.分割回文串
目录 题目描述输入输出示例及数据范围思路C 实现 题目描述 这道题目来自 LeetCode 131. 分割回文串。 题目描述如下: 给你一个字符串 s,请你将 s 分割成一些子串,使每个子串都是 回文串 。返回 s 所有可能的分割方案。 输入输出示例及数据…...
【AIGC系列】5:视频生成模型数据处理和预训练流程介绍(Sora、MovieGen、HunyuanVideo)
AIGC系列博文: 【AIGC系列】1:自编码器(AutoEncoder, AE) 【AIGC系列】2:DALLE 2模型介绍(内含扩散模型介绍) 【AIGC系列】3:Stable Diffusion模型原理介绍 【AIGC系列】4࿱…...
基于C++“简单且有效”的“数据库连接池”
前言 数据库连接池在开发中应该是很常用的一个组件,他可以很好的节省连接数据库的时间开销;本文基使用C实现了一个简单的数据库连接池,代码量只有400行左右,但是压力测试效果很好;欢迎收藏 关注,本人将会…...
vulnhub靶场【kioptrix-4】靶机
前言 靶机:kioptrix-4,IP地址为192.168.1.75,后期IP地址为192.168.10.8 攻击:kali,IP地址为192.168.1.16,后期IP地址为192.168.10.6 都采用VMware虚拟机,网卡为桥接模式 这里的靶机…...
科普:ROC AUC与PR AUC
在评价二分类模型性能时,有许多评价指标,其中,有一对是用面积AUC(Area Under the Curve)做评价的:ROC AUC与PR AUC 本文我们对ROC AUC与PR AUC进行多维度对比分析: 一、定义与核心原理 维度RO…...
服务器IPMI用户名、密码批量检查
背景 大规模服务器部署的时候,少不了较多的网管和监测平台,这些平台会去监控服务器的性能、硬件等指标参数,为了便于管理和控制,则需要给服务器IPMI带外管理添加较多的用户,这就需要对较多的服务器检查所对应的IPMI用…...
51单片机中reg52.h与regx52.h在进行位操作时的不同
reg52.h中不能使用例如 P2_0;这样的定义 而只能使用 P2^0;这样的定义 但是都不可以对位进行直接赋值操作; 而 regx52.h中可以使用 P2_0和P2^0;但是只有使用下划线的才可以对位进行赋值操作 例如P2_0 1; 但不可以是P2^0 1; 在 C 语言中,…...
Apollo Cyber 学习笔记
目录 0 Introduction What Why Advantage 1 Example 2 Concept 3 Flow Chart 4 Module 4.1 Transport 4.1.1 Share Memory 4.1.1.1 Segment 4.1.1.1.1 State 4.1.1.1.2 Block 4.1.1.1.3 Common 4.1.1.2 Notifier 4.1.1.2.1 ConditionNotifier 4.1.1.2.2 Multi…...
【Electron入门】进程环境和隔离
目录 一、主进程和渲染进程 1、主进程(main) 2、渲染进程(renderer) 二、预加载脚本 三、沙盒化 为单个进程禁用沙盒 全局启用沙盒 四、环境访问权限控制:contextIsolation和nodeIntegration 1、contextIsola…...
拉链表介绍
拉链表 是处理 缓慢变化维(SCD) 的一种常用方法,特别适用于需要保留历史记录的场景。以下是拉链表的详细说明及实现方法: 1. 什么是拉链表? 拉链表是一种用于记录维度数据历史变化的表结构,通过 开始时间 …...
Spring Boot 日志配置与常见问题解析(详解)
目录 Spring Boot 日志配置与常见问题解析引言什么是日志?日志的重要性日志使用打印日志 日志框架介绍日志格式的说明⽇志级别日志级别的分类日志级别的使用 Spring Boot 日志配置1. 设置日志级别和格式2. 配置日志收集器3. 查看和分析日志4.日志的持久化5.设置日志…...