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

115 道 MySQL 面试题,从简单到深入!

1. 什么是数据库事务?

数据库事务是一个作为单个逻辑工作单元执行的一系列操作。事务具有ACID属性,即原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability)。这意味着事务内的操作要么全部成功,要么全部失败,保持数据完整性,并且独立于其他事务运行。

2. MySQL中InnoDB与MyISAM的区别是什么?

InnoDB支持事务处理,行级锁定和外键,适用于需要高并发和事务处理的场景。MyISAM不支持事务和行级锁定,但读取速度快,适用于查询密集型的场景。

3. 解释MySQL中的JOIN操作。

JOIN操作用于结合两个或多个数据库表的行。类型包括INNER JOIN(只返回两表匹配的行)、LEFT JOIN(返回左表的所有行及右表匹配的行)、RIGHT JOIN(返回右表的所有行及左表匹配的行)等。

4. 如何优化MySQL查询?

优化MySQL查询的方法包括:使用合适的索引、避免在WHERE子句中使用函数、选择合适的数据类型、使用LIMIT语句减少数据量、避免全表扫描、合理设计表结构等。

5. 什么是索引,它是如何提高查询性能的?

索引是数据库对象,可以提高数据检索的速度。它类似于书的目录,使数据库能够快速定位并检索数据,而不必扫描整个表。索引尤其在处理大量数据时显著提高查询性能。

6. 解释MySQL中的主键与唯一键的区别。

主键(Primary Key)是表中用于唯一标识每条记录的列或列的组合。一个表只能有一个主键,且主键列的值必须是唯一的,不允许为NULL。唯一键(Unique Key)也确保列的值唯一,但一个表可以有多个唯一键,并且唯一键的列可以包含NULL值。

7. 什么是视图,它有什么优点?

视图是基于SQL语句的结果集的可视化表现。它像一个虚拟表,包含了从一个或多个表中获取的数据。视图的优点包括简化复杂SQL查询、保护数据(通过限制对特定数据的访问)、更改数据格式和表示等。

8. MySQL中的存储过程是什么?

存储过程是一组为了完成特定功能的SQL语句,它存储在数据库中,可以通过指定的名称和参数进行调用。存储过程可以提高SQL代码的重用性,减少网络通信量,提高性能。

9. 什么是归一化?它有哪些类型?

归一化是数据库设计中的一个过程,目的是减少数据冗余和提高数据完整性。它涉及将数据组织到逻辑上的表中,使每个表专注于一个主题或概念。常见的归一化形式包括第一范式(1NF)、第二范式(2NF)、第三范式(3NF)和博耶-科得范式(BCNF)。

10. 解释MySQL中的外键。

外键是一种数据库约束,用于建立两个表之间的关系。在一个表中的外键会指向另一个表的主键。外键的主要作用是维护跨表的数据完整性,确保参照完整性。

11. 解释MySQL中的事务隔离级别以及它们如何影响并发。

MySQL支持四种事务隔离级别:READ UNCOMMITTED、READ COMMITTED、REPEATABLE READ和SERIALIZABLE。这些隔离级别逐渐增强了事务之间的隔离,防止了不同程度的并发问题,如脏读、不可重复读和幻读,但同时可能降低并发性能。例如:

  • READ UNCOMMITTED:允许读取尚未提交的数据变更,可能导致脏读。
  • READ COMMITTED:只能读取已提交的数据,避免了脏读。
  • REPEATABLE READ:保证在同一个事务内多次读取的数据一致,MySQL默认级别。
  • SERIALIZABLE:完全串行化的读,防止脏读、不可重复读和幻读,但性能代价最高。

&nbsp

12. 如何在MySQL中使用索引优化查询?

使用索引优化查询的一种方式是确保WHERE子句中的条件使用了索引。例如,假设有一个名为students的表,其中包含nameage列,对age列有索引:

SELECT * FROM students WHERE age > 18;

这个查询将利用age列的索引,提高查询效率。

13. MySQL中的慢查询日志是什么,如何使用它来优化性能?

慢查询日志是MySQL用来记录执行时间超过预设阈值的查询语句的日志。通过分析这些查询,可以发现哪些查询最消耗资源,然后对它们进行优化。可以通过设置long_query_time参数来定义什么构成慢查询。

14. MySQL中如何实现主从复制?

在MySQL中实现主从复制涉及以下步骤:

  • 在主服务器上配置唯一的服务器ID,开启二进制日志记录。
  • 在从服务器上设置唯一的服务器ID,配置主服务器的相关信息(如主服务器IP、登录凭证)。
  • 在主服务器上创建一个具有复制权限的用户账户,供从服务器使用。
  • 初始化从服务器的数据,并启动复制进程。

这些步骤可以通过修改MySQL的配置文件(例如my.cnfmy.ini)和执行SQL命令来完成。

15. 解释MySQL中的分区表,它如何提高性能?

分区表是将一个大的表分成多个小的物理段的技术。这可以通过范围(RANGE)、列表(LIST)、散列(HASH)或键(KEY)等方式进行。分区可以提高性能,因为:

  • 查询可以仅在相关的一个或几个分区上运行,而不是整个表。
  • 分区也可以在不同的磁盘上进行,提高I/O性能。

例如,可以根据年份对销售数据表进行范围分区:

CREATE TABLE sales (id INT,year INT,amount DECIMAL(10,2)
)
PARTITION BY RANGE (year) (PARTITION p0 VALUES LESS THAN (1991),PARTITION p1 VALUES LESS THAN (1992),PARTITION p2 VALUES LESS THAN (1993),PARTITION p3 VALUES LESS THAN (1994)
);
16. 在MySQL中,如何处理死锁?

处理死锁的常用方法包括:

  • 最小化事务大小和持续时间: 通过减小事务范围和减少它们持有锁的时间来降低死锁的风险。
  • 避免多个事务同时修改相同的数据行: 设计应用逻辑,以减少事务之间的交互。
  • 索引的合理使用: 确保查询是高效的,并且尽可能使用索引,可以减少锁的范围。
  • 检测和日志记录: 使用SHOW ENGINE INNODB STATUS命令检查死锁日志,分析和调整应用逻辑。
17. MySQL如何执行子查询,以及它们的性能影响是什么?

子查询是嵌套在另一个查询中的SQL查询。例如:

SELECT * FROM employees WHERE department_id IN (SELECT id FROM departments WHERE name = 'HR');

MySQL会首先执行子查询,然后使用结果执行外部查询。子查询可能会影响性能,特别是当子查询在大表上执行或者在外部查询的每一行上都需要执行时。

18. 解释MySQL的GROUP BY和HAVING子句。

GROUP BY子句用于将数据分组,然后可以对每组应用聚合函数,如COUNT(), SUM(), AVG(), MAX(), MIN()等。HAVING子句用于过滤经过分组后的数据集。例如:

SELECT department_id, COUNT(*) FROM employees GROUP BY department_id HAVING COUNT(*) > 10;

这个查询将列出员工数超过10人的部门。

19. 如何在MySQL中创建和使用触发器?

触发器是一种数据库对象,它在特定事件(如INSERT、UPDATE、DELETE)发生时自动执行一段SQL语句。例如,创建一个在向employees表插入新记录时自动执行的触发器:

CREATE TRIGGER before_employee_insert
BEFORE INSERT ON employees
FOR EACH ROW
BEGIN-- 触发器逻辑
END;

此触发器将在每次向employees表插入新行之前执行定义的逻辑。

20. 什么是MySQL的二进制日志(binlog)?它有什么作用?

MySQL的二进制日志(binlog)是一种日志文件,记录了数据库更改的所有操作(不包括SELECT和SHOW操作)。它主要用于:

  • 复制: 在主从复制中,从服务器通过读取和执行主服务器的binlog来复制数据。
  • 数据恢复: 在数据丢失后,可以使用binlog恢复数据。
  • 审计: 通过分析binlog可以审计数据库活动。

二进制日志是MySQL数据一致性和持久性的关键组成部分。

最近无意间获得一份阿里大佬写的刷题笔记和面经,一下子打通了我的任督二脉,进大厂原来没那么难。

这是大佬写的, 7701页的阿里大佬写的刷题笔记,让我offer拿到手软

21. 解释MySQL中的索引覆盖扫描是什么?

索引覆盖扫描是指查询可以仅通过索引来获取所需数据,而无需访问数据表。如果一个查询的所有列都包含在索引中,那么MySQL可以直接从索引中读取数据,提高查询效率。例如,对于下面的查询:

SELECT name FROM employees WHERE age > 30;

如果有一个覆盖nameage列的复合索引,MySQL可以仅通过索引来获取结果,而不需要访问表本身。

22. 如何在MySQL中使用EXPLAIN命令?

EXPLAIN命令用于分析MySQL如何执行一个查询。它显示了查询的执行计划,包括用到的索引、数据读取方式、联接顺序等。这对于优化查询性能非常有用。例如:

EXPLAIN SELECT * FROM employees WHERE department_id = 5;

这将展示MySQL如何执行上述查询,包括是否使用了索引。

23. MySQL中的锁定粒度是什么意思?

锁定粒度指的是锁定在数据库中作用的对象大小。MySQL支持不同级别的锁定粒度,如表级锁(对整个表加锁)和行级锁(只对特定的行加锁)。行级锁提供了更高的并发性能,但管理成本更高;表级锁则相反。

24. 在MySQL中,UTF-8和UTF8MB4的区别是什么?

UTF-8和UTF8MB4都是字符编码,但在MySQL中它们有所不同。UTF8MB4是UTF-8的超集,支持存储4个字节的Unicode字符。这意味着UTF8MB4可以存储更多的字符,包括一些特殊的表情符号。从MySQL 5.5.3开始,建议使用UTF8MB4来获得完整的Unicode支持。

25. MySQL如何处理大型事务?

处理大型事务时,应注意以下几点:

  • 避免长时间运行的事务: 它们可能会占用大量资源并阻塞其他操作。
  • 分批执行: 如果可能,将大事务分解为多个小事务进行处理。
  • 监控和优化: 使用慢查询日志等工具来监控事务性能,并及时优化。
  • 资源管理: 确保数据库有足够的资源来处理大事务,如内存和磁盘空间。

大型事务的处理需要综合考虑性能、资源和数据完整性等多个因素。

26. MySQL优化器是什么,它是如何工作的?

MySQL优化器是数据库管理系统中的一个组件,负责分析和选择执行SQL查询的最佳方式。它考虑不同的执行计划,如索引的使用、联接的顺序、数据检索方法等,并选择成本最低的执行计划。优化器的选择基于统计信息和数据库的内部算法。

27. 什么是MySQL中的全文索引,它是如何工作的?

全文索引是MySQL中用于提高文本搜索效率的一种索引类型。它允许对文本数据进行快速的全文搜索操作。例如,对于一张包含大量文本数据的表,可以创建全文索引以加快关键词搜索:

CREATE FULLTEXT INDEX ft_index ON articles (content);

全文索引通过建立词频表来优化搜索查询,适用于大文本字段的搜索。

28. 解释MySQL的ACID属性。

ACID代表原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability):

  • 原子性:确保事务中的所有操作要么全部完成,要么全部不完成。
  • 一致性:确保事务的执行结果总是使数据库从一个有效状态转换到另一个有效状态。
  • 隔离性:确保并发执行的事务彼此独立。
  • 持久性:确保一旦事务提交,其结果就永久保存在数据库中。
29. MySQL如何处理子查询优化?

MySQL通过多种方式优化子查询,包括:

  • 物化子查询:将子查询的结果临时存储起来,避免多次执行相同的子查询。
  • 将子查询转换为联接:在某些情况下,将子查询转换为等效的联接查询可以提高效率。
  • 使用索引:如果子查询条件涉及索引列,则利用索引来提高查询速度。
30. 在MySQL中,如何确保数据备份的完整性和一致性?

确保MySQL数据备份的完整性和一致性的方法包括:

  • 使用可靠的备份工具:如mysqldumpPercona XtraBackup
  • 确保备份时数据库的一致性:对于InnoDB表,使用--single-transaction选项进行一致性备份。
  • 定期验证备份:通过恢复过程验证备份的有效性。
  • 定期执行备份:设置定期备份计划以捕捉数据的最新状态。

备份的关键是确保在需要时能够可靠地恢复数据,同时保证备份过程不会对生产环境造成显著影响。

31. MySQL中的常见性能瓶颈有哪些,以及如何解决?

常见的MySQL性能瓶颈包括:

  • 磁盘I/O:优化查询,减少不必要的数据访问,使用更快的磁盘。
  • 网络延迟:优化应用程序与数据库服务器之间的通信,考虑使用连接池。
  • 查询效率:使用索引,优化复杂查询,避免全表扫描。
  • 锁竞争:减少长事务,优化锁粒度,避免不必要的行锁。
32. 如何在MySQL中设置和使用存储过程的参数?

存储过程可以接受输入参数和返回输出参数。例如,创建一个计算两数之和的存储过程:

DELIMITER //
CREATE PROCEDURE AddNumbers(IN num1 INT, IN num2 INT, OUT sum INT)
BEGINSET sum = num1 + num2;
END //
DELIMITER ;

调用存储过程并获取结果:

CALL AddNumbers(10, 20, @sum);
SELECT @sum;
33. 解释MySQL中的触发器类型。

MySQL中的触发器类型包括:

  • BEFORE INSERT:在插入操作之前触发。
  • AFTER INSERT:在插入操作之后触发。
  • BEFORE UPDATE:在更新操作之前触发。
  • AFTER UPDATE:在更新操作之后触发。
  • BEFORE DELETE:在删除操作之前触发。
  • AFTER DELETE:在删除操作之后触发。

每种触发器都可以用来在数据变更时执行特定的逻辑。

34. 在MySQL中如何管理并调整缓冲池的大小?

InnoDB缓冲池的大小可以通过innodb_buffer_pool_size参数进行配置。这个参数决定了MySQL用于缓存数据和索引的内存量。调整缓冲池大小通常涉及以下步骤:

  • 评估服务器上可用的内存量。
  • 考虑到其他进程的内存需求,设置innodb_buffer_pool_size
  • 在配置文件(例如my.cnfmy.ini)中设置参数。
  • 重启MySQL服务器以使更改生效。
35. MySQL如何处理大量的并发连接?

处理大量并发连接时,MySQL可以通过以下方式优化:

  • 增加最大连接数:通过调整max_connections参数来允许更多的并发连接。
  • 使用连接池:应用层面使用连接池可以减少连接和断开连接的开销。
  • 优化线程池:配置MySQL的线程池以更高效地处理请求。
  • 读写分离:在主从架构中,将读操作分配给从服务器,减轻主服务器的负担。

适当配置和优化这些参数可以显著提高MySQL在高并发环境下的性能。

36. 如何在MySQL中优化COUNT()查询?

优化COUNT()查询的方法包括:

  • 使用更快的存储引擎,如InnoDB。
  • 对于COUNT(*),避免使用具有许多索引的大表。
  • 对于COUNT(column),确保列上有索引。
  • 考虑使用汇总表或缓存技术,特别是对于大数据集。
37. 解释MySQL中的聚集索引和非聚集索引的区别。

聚集索引和非聚集索引的主要区别在于数据的存储方式:

  • 聚集索引:表数据按照索引的顺序物理存储。每个表只能有一个聚集索引,通常是主键。
  • 非聚集索引:索引存储的是数据的逻辑顺序,而数据本身则存储在表的其他地方。非聚集索引可以有多个。
38. 在MySQL中,什么是预处理语句,它有什么优点?

预处理语句是预编译的SQL语句,可以执行参数化的查询。使用预处理语句的优点包括:

  • 提高性能:减少解析和编译的时间。
  • 防止SQL注入:通过参数化查询,防止恶意输入。
  • 减少带宽使用:重复执行相同的查询时,只发送参数。
39. MySQL中的FOREIGN KEY约束是什么?

FOREIGN KEY约束用于建立两个表之间的关联。它确保一个表中的列值必须在另一个表的主键或唯一键列中存在。这有助于维护数据的完整性和一致性。例如:

CREATE TABLE Orders (OrderID int NOT NULL,OrderNumber int NOT NULL,CustomerID int,FOREIGN KEY (CustomerID) REFERENCES Customers(CustomerID)
);
40. 如何在MySQL中进行性能剖析?

在MySQL中进行性能剖析的步骤包括:

  • 开启性能剖析:使用SET profiling = 1;
  • 执行需要剖析的SQL语句。
  • 使用SHOW PROFILES;查看性能数据。
  • 使用SHOW PROFILE FOR QUERY query_id;查看特定查询的详细性能数据。

性能剖析有助于识别查询的瓶颈,如CPU使用、I/O操作等。

&nbsp

41. 什么是MySQL的查询缓存,它是如何工作的?

MySQL的查询缓存是一个存储查询语句及其结果的内存区域。当执行相同的查询时,如果查询缓存中存在结果,MySQL会直接返回缓存的结果,而不是再次执行查询。查询缓存的有效性受多个因素影响,包括表的更改。在高更新环境中,查询缓存可能不会带来性能提升。

42. 解释MySQL的表分区以及它的优势。

表分区是将一个表的数据分散存储在多个物理部分,但逻辑上仍然是一个表的过程。分区的优势包括:

  • 提高查询性能,特别是对大表的查询。
  • 分区可以分布在不同的物理设备上,提高I/O性能。
  • 简化数据管理,例如更容易删除旧数据。

分区类型包括范围、列表、散列和键分区。

43. MySQL的B树索引和哈希索引有什么区别?

B树索引和哈希索引的主要区别在于结构和应用场景:

  • B树索引:适用于全键值、键值范围或键值前缀的查找。在MySQL中,大多数索引(如InnoDB的主键和二级索引)是B树索引。
  • 哈希索引:适用于精确匹配查找。哈希索引在内存数据库和某些特定类型的存储引擎(如MEMORY)中更常见。
44. 什么是MySQL的慢查询日志,如何配置和使用它?

MySQL的慢查询日志是记录执行时间超过特定阈值的查询的日志文件。配置慢查询日志的步骤包括:

  • 在MySQL配置文件中设置slow_query_loglong_query_time
  • 指定日志文件的路径。
  • 重新启动MySQL服务使配置生效。
  • 使用日志文件进行性能分析,找出需要优化的查询。
45. MySQL如何处理大数据量的导入和导出?

处理大数据量导入和导出的策略包括:

  • 使用LOAD DATA INFILE进行高效数据导入。
  • 使用SELECT ... INTO OUTFILE进行数据导出。
  • 考虑禁用索引和外键约束以加速导入过程。
  • 使用mysqldump进行大型数据库的备份和恢复。
  • 分割大文件,进行分批导入或导出。

这些方法可以帮助管理大型数据集,提高数据导入和导出的效率。

46. MySQL的复制延迟是什么,如何解决?

复制延迟是指在MySQL主从复制环境中,从服务器同步主服务器数据的延迟。解决复制延迟的方法包括:

  • 提高从服务器的硬件性能。
  • 优化网络连接以减少数据传输时间。
  • 使用并行复制,如果从服务器是MySQL 5.6或更高版本。
  • 调整或减少长时间运行的复杂查询。
47. 如何在MySQL中使用变量?

在MySQL中,可以使用用户定义变量存储临时值。例如:

SET @myVar = 100;
SELECT @myVar;

这将声明一个变量myVar并将其值设置为100。

48. 解释MySQL中的视图锁定。

视图锁定是指在使用视图时,MySQL如何锁定底层表的数据。视图本身不存储数据,而是显示从底层表中检索的数据。因此,对视图的查询可能会导致对底层表的行或表锁定,这取决于查询类型和存储引擎。

49. MySQL如何优化DISTINCT查询?

DISTINCT查询用于返回唯一不同的值。优化DISTINCT查询的方法包括:

  • 使用索引,特别是查询的列上有索引的情况。
  • 避免在大表上使用DISTINCT,因为它需要对结果集进行排序和去重。
  • 在可能的情况下,使用GROUP BY替代DISTINCT

最近无意间获得一份阿里大佬写的刷题笔记和面经,一下子打通了我的任督二脉,进大厂原来没那么难。

这是大佬写的, 7701页的阿里大佬写的刷题笔记,让我offer拿到手软

50. MySQL中的GTID复制是什么?

GTID(全局事务标识符)复制是MySQL中的一种复制机制,其中每个事务都有一个唯一的标识符。GTID复制简化了复制过程的管理,因为它使从服务器能够自动跟踪哪些事务已经被复制。这有助于自动故障切换和简化复制配置。

51. 解释MySQL中的LAST_INSERT_ID()函数及其用途。

LAST_INSERT_ID()函数在MySQL中用于检索最后一个INSERT操作产生的自增主键值。这在插入记录后需要获取新生成的ID时非常有用,尤其是在关联表之间插入数据时。例如,插入一条记录到users表后:

INSERT INTO users (username) VALUES ('johndoe');
SELECT LAST_INSERT_ID();

这将返回users表中新插入行的ID。

52. MySQL中的索引合并是什么?

索引合并是MySQL的一个优化技术,它在执行查询时可以使用多个索引。在某些情况下,MySQL优化器会选择使用多个单列索引的组合来优化查询,而不是单个复合索引。这通常发生在使用OR条件的查询中。

53. MySQL中如何实现主键和索引的重新设计?

重新设计主键和索引通常涉及以下步骤:

  • 使用ALTER TABLE命令更改表结构。
  • 考虑到性能影响,可能需要在低峰时间进行。
  • 在重新设计之前,通过建立临时表进行测试。
  • 更新应用程序中相关的SQL语句。

这是一个敏感操作,需要谨慎处理,以避免数据完整性问题。

54. 什么是MySQL的联合索引,如何正确使用?

联合索引(或复合索引)是在两个或多个列上创建的索引。正确使用联合索引的关键是理解“最左前缀”原则,即MySQL在联合索引中从左至右使用索引列。创建和使用联合索引时,应确保查询条件匹配索引列的前缀。

55. MySQL中的隐式类型转换可能导致的问题是什么?

MySQL在执行查询时可能会进行隐式类型转换,这可能导致性能问题和意外的行为。例如,将字符串类型的列与数值进行比较时,MySQL可能会尝试将字符串转换为数值。这不仅可能导致性能下降(因为避免了索引的使用),还可能导致错误的比较结果。

56. 如何在MySQL中处理大量的DELETE操作?

处理大量的DELETE操作时,应考虑以下方法以提高效率并减少对性能的影响:

  • 分批删除:将大型删除操作分成多个小批量操作,以减少对数据库性能的影响。
  • 使用索引:确保删除操作涉及的列上有合适的索引,以加快查找速度。
  • 考虑使用TRUNCATE:如果需要删除表中的所有行,使用TRUNCATE TABLE而不是DELETE,因为它更快且使用更少的资源。
  • 考虑归档数据:如果不需要频繁访问被删除的数据,可以先将其归档到另一个表或文件中。
57. MySQL中的EXPLAIN命令提供哪些关键信息?

EXPLAIN命令提供了关于MySQL如何执行查询的详细信息,包括:

  • type:显示连接类型,如ALL, index, range等。
  • possible_keys:显示MySQL可能使用的索引来优化查询。
  • key:实际使用的索引。
  • rows:预计要检查的行数。
  • Extra:其他重要信息,如是否使用临时表或文件排序。

&nbsp

58. 在MySQL中,什么是SQL注入,如何防止它?

SQL注入是一种安全漏洞,攻击者可以利用它向数据库查询注入恶意SQL代码。防止SQL注入的措施包括:

  • 使用预处理语句和参数化查询:这些技术可以确保SQL语句的结构不被用户输入的数据所改变。
  • 验证和清理用户输入:确保所有输入数据都经过适当的验证和转义。
  • 使用最小权限原则:确保应用程序使用的数据库账户只拥有它需要的最小权限。
59. 解释MySQL中的数据库锁和表锁。

数据库锁和表锁是MySQL用来控制并发访问的机制:

  • 数据库锁:用于控制对数据库级别操作的并发访问。
  • 表锁:锁定整个表,防止其他用户对表执行写操作。表锁适用于一些存储引擎,如MyISAM,但对于支持行级锁的InnoDB来说,通常不是最优选择。
60. MySQL中的INEXISTS子句有什么区别,它们如何影响性能?

INEXISTS是两种用于编写子查询的SQL子句,它们在某些情况下可以互换使用,但性能可能有差异:

  • IN子句:适用于外部查询的结果集较小的情况。
  • EXISTS子句:通常在内部查询返回非常大的结果集时更高效,因为它一旦找到匹配的行就会停止处理。

性能差异主要是由于MySQL处理这两种子句的方式不同。通常,EXISTS在处理存在性检查时更高效。

61. 什么是MySQL的HAVING子句和WHERE子句的区别?

HAVING子句和WHERE子句都用于过滤数据,但它们的应用场景和时机不同:

  • WHERE子句:用于过滤行数据,发生在数据分组之前。它不能与聚合函数一起使用。
  • HAVING子句:用于过滤分组后的数据集,通常与聚合函数一起使用。

例如,筛选平均工资大于某个值的部门:

SELECT department_id, AVG(salary)
FROM employees
GROUP BY department_id
HAVING AVG(salary) > 5000;
62. MySQL是如何处理子查询的?

MySQL处理子查询的方式取决于子查询的类型和上下文。子查询可以是标量子查询(返回单一值)、行子查询(返回一行多列)或表子查询(返回一个完整的结果集)。MySQL可能会将某些类型的子查询优化为更有效的结构,如将IN子查询转换为JOIN操作。

63. 解释MySQL的临时表和它们的用途。

MySQL中的临时表是为单个会话创建的,并在该会话结束时自动删除。临时表在处理复杂查询(如多步聚合或中间结果存储)时非常有用。它们对其他用户是不可见的,可以避免对正常操作造成干扰。

64. MySQL的字符集和排序规则有什么重要性?

字符集(Charset)和排序规则(Collation)在MySQL中非常重要,因为它们决定了数据如何存储、比较和排序。字符集定义了支持的字符集合,而排序规则定义了字符之间比较的规则。选择合适的字符集和排序规则对于国际化支持和性能都至关重要。

65. 在MySQL中,如何处理和优化大型报告查询?

处理和优化大型报告查询通常涉及以下策略:

  • 使用汇总表:预先计算并存储常见报告查询的结果。
  • 查询优化:确保使用有效的索引,优化查询逻辑。
  • 分批处理:将大型查询分解为多个小查询,逐步构建最终结果。
  • 读取优化:在主从复制环境中,从从服务器读取数据以减轻主服务器负担。
  • 硬件优化:确保有足够的内存和高效的存储来处理大型数据集。

这些方法有助于提高大型报告查询的性能,确保数据的准确和及时获取。

66. 什么是MySQL中的分布式事务?

分布式事务是指跨多个数据库系统进行的事务,其中每个系统都需要执行事务的一部分,且所有部分必须协调完成以确保整体事务的原子性。在MySQL中,分布式事务通常通过XA事务实现,它允许多个数据库资源参与到一个全局事务中。

67. 如何在MySQL中实现数据压缩?

在MySQL中,可以通过几种方式实现数据压缩:

  • 使用压缩表的存储引擎,如InnoDB的压缩表特性。
  • 在应用层对大型文本或二进制数据进行压缩后存储。
  • 使用文件系统级别的压缩功能,例如ZFS或Btrfs。

数据压缩有助于减少存储空间的使用,提高I/O效率。

68. 在MySQL中,FLUSH命令的作用是什么?

FLUSH命令在MySQL中用于清理、刷新或重置各种内部缓存及日志。常见的使用包括:

  • FLUSH TABLES:关闭所有打开的表并清除表缓存。
  • FLUSH LOGS:关闭并重新打开所有日志文件。
  • FLUSH PRIVILEGES:重新加载授权表。

使用FLUSH命令时需要谨慎,因为它可能会影响数据库的性能。

69. 什么是MySQL中的空间数据类型,它们的用途是什么?

空间数据类型用于存储地理空间数据,如点、线和多边形。在MySQL中,这些类型包括GEOMETRY, POINT, LINESTRING, POLYGON等。它们主要用于地理信息系统(GIS)中,用于表示地图、地理位置和空间关系。

70. 如何在MySQL中处理和优化长时间运行的查询?

处理和优化长时间运行的查询的策略包括:

  • 查询分析:使用EXPLAIN或其他工具分析查询执行计划。
  • 索引优化:确保查询使用了正确的索引。
  • 查询重写:修改复杂的查询逻辑,简化或分解查询。
  • 资源调整:增加内存分配,调整MySQL配置以优化性能。
  • 硬件升级:在必要时升级服务器硬件。

这些方法有助于减少查询执行时间,提高数据库的整体性能。

71. 如何在MySQL中使用和优化子查询?

子查询是嵌套在另一个查询内部的查询。优化子查询的策略包括:

  • 尽可能将子查询转换为联接,特别是在子查询返回大量数据时。
  • 确保子查询中的列有适当的索引。
  • 避免在子查询中使用非必要的排序和分组操作。
  • 使用EXISTS而不是IN来检查存在性,尤其是当外部查询的数据量大时。
72. MySQL如何处理NULL值,对性能有什么影响?

MySQL中的NULL表示缺失或未知的数据。处理NULL值时需要注意:

  • 索引通常不包括NULL值,因此包含NULL值的列上的查询可能不会使用索引。
  • 在比较操作中,任何与NULL值的比较都会返回NULL(即未知),这可能影响查询逻辑。
  • 使用适当的函数(如COALESCEIS NULL)来处理NULL值。
73. 什么是MySQL的分区索引,它如何影响查询性能?

分区索引是与表分区一起使用的索引。在分区表上,每个分区可以拥有自己的索引。这对查询性能有如下影响:

  • 查询可以限制在特定的分区上,从而减少搜索的数据量。
  • 索引维护(如重建索引)可以在单个分区上进行,而不是整个表。
  • 但是,错误设计的分区或索引可能导致性能下降,因为MySQL可能需要检查多个分区。
74. MySQL中的索引前缀是什么,如何使用?

索引前缀是在列的一部分上创建索引的方法。对于文本类型的列特别有用,可以通过对列值的前N个字符创建索引来提高查询性能。使用索引前缀时应注意:

  • 确定合适的前缀长度,过长或过短的前缀都可能影响索引效率。
  • 索引前缀最适合用于字符串类型的列,特别是当完整列的索引可能非常大时。
75. 如何在MySQL中使用视图来优化查询?

在MySQL中,视图可以用来简化复杂的查询,封装复杂的联接和子查询。使用视图的优点包括:

  • 提高查询的可读性和维护性。
  • 重用常见的查询逻辑。
  • 提供额外的安全层,限制对底层表数据的访问。

然而,应注意视图本身并不存储数据,其性能取决于底层查询的效率。

76. MySQL中的优化器提示是什么,如何使用?

优化器提示(Optimizer Hints)是一种告诉MySQL优化器如何处理特定查询的方式。它们可以用来影响查询计划的选择,例如指定或忽略特定的索引。例如,使用USE INDEXIGNORE INDEX提示指定或排除索引:

SELECT * FROM table_name USE INDEX (index_name) WHERE column_name = 'value';
77. 解释MySQL的读写锁定机制。

MySQL中的读写锁定机制是用来控制对数据的并发访问:

  • 读锁(共享锁):允许多个事务同时读取同一数据,但不允许写入。
  • 写锁(排他锁):当事务对数据进行写操作时,阻止其他事务读取或写入同一数据。

合理使用读写锁可以提高并发性能,但也需要谨慎处理,以避免死锁。

78. 在MySQL中,如何处理和分析死锁?

处理和分析死锁的方法包括:

  • 启用死锁日志,通过SHOW ENGINE INNODB STATUS;查看死锁信息。
  • 分析死锁日志来理解造成死锁的事务和操作。
  • 修改应用逻辑,减少长时间持有锁的操作,或改变事务的锁定顺序。

合理处理死锁对于维护数据库的稳定性和性能非常重要。

79. MySQL中的LIMIT子句是如何工作的,对性能有什么影响?

LIMIT子句用于限制SQL查询返回的结果数量。它对性能的影响取决于查询的上下文:

  • 在有索引且只需返回少量行的情况下,LIMIT可以显著提高性能。
  • 但是,如果LIMIT后面的偏移量很大,MySQL可能需要读取大量不需要的行然后丢弃,这可能导致性能问题。
80. 如何在MySQL中处理和避免全表扫描?

避免全表扫描的方法包括:

  • 使用索引优化查询,确保查询条件利用了有效的索引。
  • 重写查询,避免使用会导致全表扫描的操作,如不安全的函数或类型不匹配的比较。
  • 在执行计划中使用EXPLAIN分析查询,查看是否进行了全表扫描。
  • 调整数据库设计,如添加必要的索引,或修改表结构以提高查询效率。

避免全表扫描对于维护大型数据库的性能至关重要。

最近无意间获得一份阿里大佬写的刷题笔记和面经,一下子打通了我的任督二脉,进大厂原来没那么难。

这是大佬写的, 7701页的阿里大佬写的刷题笔记,让我offer拿到手软

81. MySQL中的表空间是什么,它的作用是什么?

表空间(Tablespace)是MySQL中存储数据的物理单位。在InnoDB存储引擎中,表空间可以用于存储表数据、索引和撤销日志。使用表空间,可以更好地管理磁盘空间,支持大型数据库,以及进行更高效的数据恢复。

82. MySQL的视图优化技巧有哪些?

优化MySQL视图的技巧包括:

  • 避免在视图中使用复杂的SQL查询和计算。
  • 使用索引支持视图中的查询条件。
  • 适当地使用物化视图或汇总表以提高性能。
  • 定期评估视图的性能,并根据需要调整底层查询。
83. 在MySQL中,如何优化ORDER BY查询?

优化ORDER BY查询的方法包括:

  • 确保排序操作所依赖的列上有索引。
  • 尽量减少需要排序的数据量,例如先过滤出需要的行,然后再排序。
  • 避免使用不必要的复杂表达式和函数在ORDER BY子句中。
84. 如何在MySQL中进行批量插入数据,并优化性能?

进行批量插入数据时,可以采取以下措施以优化性能:

  • 使用INSERT INTO ... VALUES语句一次插入多行数据。
  • 禁用索引和外键约束,直到数据插入完成。
  • 考虑在插入过程中禁用自动提交,使用事务来管理插入。
85. MySQL中的分布式架构和复制策略有哪些?

MySQL的分布式架构和复制策略包括:

  • 主从复制:数据从主服务器复制到一个或多个从服务器。
  • 主主复制:两个服务器相互复制数据,提供读写能力。
  • 群集复制:MySQL群集提供高可用性和故障转移能力。
  • 延迟复制:在从服务器上设置复制延迟,用于灾难恢复。

每种策略都有其用途和优势,应根据具体需求和环境选择合适的方案。

86. MySQL中的触发器和存储过程有什么不同?

触发器和存储过程都是在MySQL中执行预定义操作的数据库对象,但它们的使用场景和目的不同:

  • 触发器(Trigger):自动响应特定事件(如插入、更新或删除)的数据库对象。触发器隐藏在应用层之后,对用户不可见。
  • 存储过程(Stored Procedure):可以手动调用执行的一组SQL语句。用于封装复杂的业务逻辑。
87. 如何在MySQL中优化大型JOIN操作?

优化大型JOIN操作的策略包括:

  • 确保JOIN操作中的每个表都有适当的索引。
  • 考虑表的大小和行数,合理安排JOIN顺序。
  • 使用EXPLAIN分析JOIN查询,确保效率。
  • 对于非常大的表,考虑分批处理或使用临时表。
88. MySQL中的窗口函数是什么,如何使用它们?

窗口函数是MySQL 8.0引入的一项功能,允许对数据集的子集执行计算,如排名、行号、分区内聚合等。例如,使用ROW_NUMBER()窗口函数为每个部门的员工分配一个唯一的序号:

SELECT department_id, employee_id, ROW_NUMBER() OVER (PARTITION BY department_id ORDER BY employee_id) AS row_num
FROM employees;
89. 在MySQL中如何处理和优化大型UPDATE操作?

处理和优化大型UPDATE操作的方法包括:

  • 分批进行UPDATE操作,避免一次性处理过多行。
  • 在涉及的列上使用适当的索引。
  • 更新操作前,使用SELECT语句测试和优化WHERE子句。
  • 在执行UPDATE操作期间,监控性能指标,确保系统稳定。
90. MySQL中的二级索引是什么?

二级索引(Secondary Index)是除了主键索引以外的索引。在InnoDB存储引擎中,二级索引的叶节点包含索引字段和相应行的主键值。这意味着二级索引查询可能需要两次查找:首先在二级索引中查找,然后使用找到的主键在主键索引中查找实际的行数据。

91. 在MySQL中,什么是视图的物化?

物化视图不是MySQL的标准特性,但概念上,它指的是将视图的结果集存储为实体数据。这可以通过创建一个表来手动实现,该表的内容是视图查询的输出。物化视图对于提高复杂查询的性能非常有用,尤其是当底层数据不经常更改时。

92. 如何在MySQL中处理BLOB和CLOB数据类型?

BLOB(二进制大对象)和CLOB(字符大对象)用于存储大量数据,如图像或文本文件。处理这些类型时的最佳实践包括:

  • 仅在必要时使用BLOB和CLOB类型,因为它们可能会占用大量空间和内存。
  • 考虑数据的压缩和编码,以减少存储和传输的数据量。
  • 在应用层处理大对象的读取和写入,以减轻数据库服务器的负担。
93. MySQL中的多版本并发控制(MVCC)是什么?

多版本并发控制(MVCC)是一种用于提高数据库系统并发性能的技术。在MySQL的InnoDB存储引擎中,MVCC允许读取操作在不加锁的情况下进行,即使其他事务正在修改数据。这通过保留数据的不同版本来实现,使读取操作可以访问数据的早期版本。

94. 如何在MySQL中使用和管理索引?

使用和管理MySQL中的索引涉及:

  • 为常用的查询和排序列创建索引。
  • 定期使用OPTIMIZE TABLE命令或类似工具维护和重新组织索引。
  • 使用EXPLAIN分析查询的执行计划,确保索引被有效利用。
  • 避免过度索引,因为太多索引可能会减慢写操作。
95. 在MySQL中,如何确保数据的完整性和一致性?

确保数据的完整性和一致性的方法包括:

  • 使用事务来维护操作的原子性、一致性、隔离性和持久性。
  • 使用外键约束来维护表之间的关系和数据完整性。
  • 使用合适的数据类型和约束(如NOT NULL、UNIQUE)来确保数据准确性。
  • 定期检查和修复数据库,使用诸如CHECK TABLEREPAIR TABLE的命令。
96. 如何在MySQL中实现和管理分布式数据库?

在MySQL中实现分布式数据库通常涉及以下策略:

  • 使用分布式架构,如MySQL集群或Galera Cluster,以实现数据的高可用性和扩展性。
  • 配置主从复制或双主复制,以分散读写负载。
  • 使用分片技术将数据水平分割到不同的数据库服务器上。
  • 确保数据同步和一致性,特别是在多写环境中。
97. MySQL中的锁升级是什么?

锁升级是指在某些条件下,MySQL自动将低级别的锁(如行锁)升级为高级别的锁(如表锁)。这通常发生在MySQL认为行锁的开销过大时,例如,当事务涉及大量行时。锁升级可以改善性能,但也可能导致更高的锁竞争。

98. 解释MySQL中的前缀压缩。

前缀压缩是InnoDB存储引擎用来减少索引大小的技术。它通过只存储索引键值的变化部分来减少存储需求。这种技术对于具有相同前缀的字符串数据特别有效,如长文本字段。

99. 在MySQL中,什么是自适应哈希索引?

自适应哈希索引是InnoDB存储引擎的一个特性,它基于对表数据的查询模式动态创建哈希索引。当某些索引值被频繁访问时,InnoDB会自动在内存中创建哈希索引以加快访问速度。这个过程是完全自动的,可以提高重复查询的性能。

100. 如何在MySQL中进行数据脱敏?

数据脱敏是指在共享数据时隐藏或修改敏感信息的过程。在MySQL中,可以通过以下方法进行数据脱敏:

  • 使用视图来限制对敏感数据的访问。
  • 使用内置的字符串函数或自定义函数修改数据。
  • 在导出数据时过滤或替换敏感信息。

数据脱敏对于保护隐私和符合法规要求非常重要。

101. 在MySQL中,如何优化大表的性能?

针对大表的性能优化策略包括:

  • 分区:将大表分区可以提高查询性能和数据管理效率。
  • 适当索引:为查询频繁涉及的列创建高效的索引。
  • 定期维护:定期运行OPTIMIZE TABLE来整理表碎片。
  • 归档旧数据:定期移除或归档旧数据以减小表的大小。
102. 如何在MySQL中实现跨数据库事务?

跨数据库事务可以通过以下方式实现:

  • 使用XA事务:利用XA接口实现跨多个数据库资源的事务。
  • 同一实例内的多个数据库:在单个MySQL实例中,使用普通的事务机制就可以管理跨多个数据库的事务。
103. MySQL中的GROUP BYDISTINCT有何区别?

GROUP BYDISTINCT都用于消除重复行,但它们的应用场景不同:

  • GROUP BY:通常与聚合函数一起使用,对数据进行分组聚合。
  • DISTINCT:用于返回唯一不同的行,适用于简单的去重查询。
104. 什么是MySQL的全文搜索功能,它如何实现?

MySQL的全文搜索功能允许在文本数据中进行高效的关键词搜索。它通过创建全文索引(FULLTEXT index)实现,适用于文本密集型数据,如文章、评论等。全文搜索通过自然语言处理技术,提供比简单的字符串匹配更复杂的搜索功能。

105. MySQL中的IN子句和JOIN操作有什么性能差异?

IN子句和JOIN操作都用于连接两个表,但性能差异主要取决于查询的上下文和数据集的大小:

  • IN子句在子查询结果集较小时效率较高。
  • JOIN操作通常在处理大型数据集或需要更复杂连接逻辑时更高效。

使用EXPLAIN分析具体查询,以确定在特定情况下哪种方式更优。

106. MySQL中的逻辑备份与物理备份有什么区别?

逻辑备份和物理备份是MySQL中备份数据的两种主要方法:

  • 逻辑备份:涉及导出SQL语句(如使用mysqldump),适用于数据量较小或需要跨不同系统迁移数据时。
  • 物理备份:直接复制数据库文件(如使用Percona XtraBackup),适合大型数据库,备份和恢复速度更快。
107. MySQL中的查询缓存退役了吗?为什么?

从MySQL 8.0开始,查询缓存功能被完全移除。原因包括:

  • 查询缓存的效率在高并发和高更新的场景中非常低。
  • 它经常成为数据库性能瓶颈的来源。
  • 现代的MySQL优化技术和硬件提升使得查询缓存的好处变得较小。
108. 在MySQL中,如何使用和优化LIMIT子句进行分页?

使用LIMIT子句进行分页时的优化建议:

  • 为查询涉及的列创建适当的索引。
  • 避免在大偏移量上使用LIMIT,因为MySQL需要读取并丢弃前面所有的记录。
  • 考虑使用“记住上次读取位置”的方法进行高效分页。
109. 解释MySQL中的数据库链(Federated Tables)。

数据库链(Federated Tables)是MySQL的一种存储引擎,它允许访问远程MySQL服务器上的表。使用Federated表,可以在一个服务器上执行查询和事务,而实际数据存储在另一个服务器上。这对于分布式数据处理和集成很有用。

110. MySQL中的ANALYZE TABLE命令的作用是什么?

ANALYZE TABLE命令用于分析表的键分布和存储特性。它更新表的统计信息,帮助MySQL优化器做出更好的查询优化决策。这在表数据发生显著变化后特别有用,如大量插入、删除操作后。

111. MySQL中的死锁是如何产生的,如何预防和解决?

死锁是两个或多个事务在相互等待对方释放锁资源时发生的情况。预防和解决死锁的策略包括:

  • 保持一致的锁定顺序。
  • 减少事务的大小和持续时间。
  • 使用SHOW ENGINE INNODB STATUS检查死锁信息并分析原因。
  • 为数据库操作设置合理的超时时间。
112. 在MySQL中,什么是在线DDL(数据定义语言)操作,为何它们重要?

在线DDL允许在不停机的情况下对数据库表进行结构更改。这对于需要高可用性的生产环境非常重要。在线DDL操作使得可以添加、删除索引,更改列类型,重建表等,同时数据库仍然可以正常使用。

113. 解释MySQL中的FORCE INDEX的用途和影响。

FORCE INDEX是一个优化器提示,用来强制MySQL查询使用特定的索引。这在优化器未选择最优索引时非常有用,但应谨慎使用,因为它可能导致查询性能下降,特别是当数据分布发生变化时。

114. 如何在MySQL中使用变量和用户定义的函数?

在MySQL中,可以使用SET语句声明和设置会话级变量:

SET @myVar = 100;

用户定义的函数(UDF)可以通过SQL和外部语言(如C或C++)创建,用于执行复杂的计算或操作。

115. MySQL的复制过滤规则是什么,如何使用它们?

复制过滤规则允许指定在主从复制环境中哪些数据库或表应被复制或忽略。这可以通过在主服务器或从服务器上设置replicate-do-dbreplicate-ignore-dbreplicate-do-table等参数来实现。使用复制过滤规则时要小心,因为不当的配置可能会导致数据不一致。

最后说一句(求关注,求赞,别白嫖我)

最近无意间获得一份阿里大佬写的刷题笔记和面经,一下子打通了我的任督二脉,进大厂原来没那么难。

这是大佬写的, 7701页的阿里大佬写的刷题笔记,让我offer拿到手软

求一键三连:点赞、分享、收藏

点赞对我真的非常重要!在线求赞,加个关注我会非常感激!@小郑聊编程

相关文章:

115 道 MySQL 面试题,从简单到深入!

1. 什么是数据库事务? 数据库事务是一个作为单个逻辑工作单元执行的一系列操作。事务具有ACID属性,即原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性&#xf…...

不同安装路径重复R包清理

df <- as.data.frame(installed.packages()) table(duplicated(df$Package)) ids <- df$Package[duplicated(df$Package)] df2 <- subset(df, df$Package %in% ids)...

Grouped-Query Attention(GQA)详解: Pytorch实现

Grouped-Query Attention&#xff08;GQA&#xff09;详解 Grouped-Query Attention&#xff08;GQA&#xff09; 是 Multi-Query Attention&#xff08;MQA&#xff09; 的改进版&#xff0c;它通过在 多个查询头&#xff08;Query Heads&#xff09;之间共享 Key 和 Value&am…...

选择排序:简单高效的选择

大家好&#xff0c;今天我们来聊聊选择排序&#xff08;Selection Sort&#xff09;算法。这是一个非常简单的排序算法&#xff0c;适合用来学习排序的基本思路和操作。选择排序在许多排序算法中以其直观和易于实现的特点著称&#xff0c;虽然它的效率不如其他高效算法&#xf…...

(教程)PDF 字体技术入门

PDF字体技术 许多人觉得PDF字体令人困惑的主要原因在于PDF文件可以使用多种不同的字体技术。PDF文件规范已经存在16年&#xff0c;在此期间&#xff0c;出现了多种不同的字体技术&#xff08;既有技术方面的原因&#xff0c;也有商业方面的原因&#xff09;。因此&#xff0c;…...

LabVIEW中CFURL.llb 工具库说明

CFURL.llb 是 LabVIEW 2019 安装目录下 C:\Program Files (x86)\National Instruments\LabVIEW 2019\vi.lib\Platform\ 路径下的工具库&#xff0c;主要用于处理 LabVIEW 与 URL 相关的操作&#xff0c;涵盖 URL 解析、HTTP 请求发送、数据传输等功能模块&#xff0c;帮助开发者…...

BGP配置华为——路径优选验证

实验拓扑 实验要求 实现通过修改AS-Path属性来影响路径选择实现通过修改Local_Preference属性来影响路径选择实现通过修改MED属性来影响路径选择实现通过修改preferred-value属性来影响路径选择 实验配置与效果 1.改名与IP配置 2.as300配置OSPF R3已经学到R2和R4的路由 3.…...

Linux8-互斥锁、信号量

一、前情回顾 void perror(const char *s);功能&#xff1a;参数&#xff1a; 二、资源竞争 1.多线程访问临界资源时存在资源竞争&#xff08;存在资源竞争、造成数据错乱&#xff09; 临界资源&#xff1a;多个线程可以同时操作的资源空间&#xff08;全局变量、共享内存&a…...

【Springboot3】Springboot3 搭建RocketMQ 最简单案例

说来也奇怪&#xff0c;RocketMQ 不能很好的兼容Springboot3&#xff0c;刚开始上手Springboot3集成RocketMQ会发现总是不能实例化RocketMQTemplate&#xff0c;老是启动时报错。本项目采用Springboot3&#xff0c;JDK21 &#xff0c;Maven 3.9&#xff0c;提供一个非常简单的示…...

使用docker安装mysql 挂起之后 再次运行无法连接问题

# 首先 vim /usr/lib/sysctl.d/00-system.conf # 在最后面添加 net.ipv4.ip_forward 1 # 然后保存退出&#xff0c;接着重启网络服务 systemctl restart network # 重启以后&#xff0c;输入以下命令&#xff0c;查看IPv4转发状态 sysctl net.ipv4.ip_forward # 显示net.ipv4…...

hot100-二叉树

二叉树 二叉树递归 相当于这个的顺序来回调换 class Solution {private List<Integer> res new ArrayList<>();public List<Integer> inorderTraversal(TreeNode root) {if(root null)return res;inorderTraversal(root.left);res.add(root.val);inorde…...

从零开始用react + tailwindcs + express + mongodb实现一个聊天程序(二)

1.安装mogondb数据库 参考MongoDB安装配置教程&#xff08;详细版&#xff09;_mongodb安装详细步骤-CSDN博客 安装mondbcompass数据库连接工具 参考https://www.mongodb.com/zh-cn/docs/compass/current/connect/ 2.后端服务 1.创建src文件夹 并在src文件夹下创建 index…...

基于Spring Boot的党员学习交流平台设计与实现(LW+源码+讲解)

专注于大学生项目实战开发,讲解,毕业答疑辅导&#xff0c;欢迎高校老师/同行前辈交流合作✌。 技术范围&#xff1a;SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容&#xff1a;…...

Plantsimulation中机器人怎么通过阻塞角度设置旋转135°

创建一个这样的简单模型。 检查PickAndPlace的角度表。源位于180的角位置&#xff0c;而物料终结位于90的角位置。“返回默认位置”选项未被勾选。源每分钟生成一个零件。启动模拟时&#xff0c;Plant Simulation会选择两个位置之间的最短路径。示例中的机器人无法绕135的角位…...

2025.2.23机器学习笔记:PINN文献阅读

2025.2.23周报 一、文献阅读题目信息摘要Abstract创新点网络架构架构A架构B架构C 实验结论后续展望 一、文献阅读 题目信息 题目&#xff1a; Physics-Informed Neural Networks for Modeling Water Flows in a River Channel期刊&#xff1a; IEEE TRANSACTIONS ON ARTIFICI…...

关于Postman自动获取token

在使用postman测试联调接口时&#xff0c;可能每个接口都需要使用此接口生成的令牌做Authorization的Bearer Token验证&#xff0c;最直接的办法可能会是一步一步的点击&#xff0c;如下图&#xff1a; 在Authorization中去选择Bearer Token&#xff0c;然后将获取到的token粘贴…...

Android KMP初探

Android KMP初探 前言&#xff1a; 最近线上听了Kotlin官网举行的KMP会议&#xff0c;感觉听神奇的&#xff0c;于是就把官方demo下载下来尝试了一下&#xff0c;下载插件和所需要的依赖都用了很久&#xff0c;但是发现里面的代码很少&#xff0c;于是尝试自己手写了一下&…...

ncDLRES:一种基于动态LSTM和ResNet的非编码RNA家族预测新方法

现有的计算方法主要分为两类&#xff1a;第一类是通过学习序列或二级结构的特征来预测ncRNAs家族&#xff0c;另一类是通过同源序列之间的比对来预测ncRNAs家族。在第一类中&#xff0c;一些方法通过学习预测的二级结构特征来预测ncRNAs家族。二级结构预测的不准确性可能会导致…...

前端项目打包过滤指定icon文件

1.需求背景 项目中有部分功能需要vip权限才可以使用&#xff0c;所有部分筛选、按钮 等有vip的icon提示 如下图 此项目衍生出一个特殊版本&#xff0c;此版本无需登录且拥有最高权限&#xff0c;所以产品要求去除项目中的所有vip相关的提示。 2.解决思路 &#xff08;1&am…...

蓝桥杯 Java B 组之最短路径算法(Dijkstra、Floyd-Warshall)

Day 2&#xff1a;最短路径算法&#xff08;Dijkstra、Floyd-Warshall&#xff09; &#x1f4d6; 一、最短路径算法简介 最短路径问题是图论中的经典问题&#xff0c;主要用于求解 单源最短路径 或 多源最短路径。在实际应用中&#xff0c;最短路径广泛应用于 导航系统、网络…...

科普:HTTP端口80和HTTPS端口443

你会发现&#xff0c;有的网址不带端口号&#xff0c;怎么回事&#xff1f; HTTP协议默认端口&#xff1a;HTTP协议的默认端口是80。当用户在浏览器中输入一个没有指定端口的以http://开头的网址时&#xff0c;浏览器会自动使用80端口与服务器建立连接&#xff0c;进行超文本数…...

如何安装vm和centos

安装 VMware Workstation Pro 步骤 1&#xff1a;下载 VMware Workstation Pro 访问 VMware 官方网站&#xff08;Desktop Hypervisor Solutions | VMware &#xff09;&#xff0c;根据你的操作系统选择合适的版本进行下载。 步骤 2&#xff1a;运行安装程序 找到下载的安装…...

鸿蒙-验证码输入框的几种实现方式-上

文章目录 效果图、优缺点多TextInput多 TextCanvas 绘制 多个 TextInput 拼接放置四个输入框焦点移动输入时向后移动输入完成回调删除时向前移动 防止点击总结 最近在做应用鸿蒙化&#xff0c;说白了就是把原来Android、iOS的代码重新用ArkTS写一遍&#xff0c;我负责基础建设和…...

Vi 编辑器基本使用指南

一、Vi 编辑器的启动与退出 启动 Vi 编辑器 在终端中&#xff0c;输入vi加上要编辑的文件名&#xff0c;如vi example.txt&#xff0c;如果example.txt存在&#xff0c;Vi 编辑器会打开该文件&#xff1b;若不存在&#xff0c;则会创建一个新的空文件并打开。如果只输入vi&am…...

centos 7 安装python3 及pycharm远程连接方法

安装openssl 使用pip3安装 virtualenv的时候会提示WARNING: pip is configured with locations that require TLS/SSL, however the ssl module in Python is not available. 这是因为缺少openssl 2.0以上版本 解决办法&#xff1a; 一、先确认版本 openssl version 二、安…...

PostgreSQL 使用pgAdmin 4 数据库还原sql文件报错问题分析

sql执行报错问题: C:\Program Files\PostgreSQL\17\bin\pg_restore.exe --host "localhost" --port "5433" --username "postgres" --no-password --dbname "ry_postgresql-final" --verbose "E:\\PostgreSQLProject\\Ruoyi-Po…...

gihub上适合练手的Python项目

GitHub 上有许多适合练手的 Python 项目&#xff0c;涵盖了从初学者到中级开发者的不同难度级别。以下是一些推荐的项目类型和具体示例&#xff0c;帮助你提升 Python 编程技能&#xff1a; 1. 基础项目 适合初学者&#xff0c;帮助掌握 Python 基础语法和常用库。 示例项目&…...

3D Web轻量化引擎HOOPS Communicator如何赋能航空航天制造?

在当今航空航天制造领域&#xff0c;精确度、效率和协作是推动行业发展的关键要素。随着数字化技术的飞速发展&#xff0c;3D Web可视化开发包HOOPS Communicator 为航空航天制造带来了革命性的变化。它凭借强大的功能和灵活的应用&#xff0c;助力企业在设计、生产、培训等各个…...

AWQ和GPTQ量化的区别

一、前言 本地化部署deepseek时发现&#xff0c;如果是量化版的deepseek&#xff0c;会节约很多的内容&#xff0c;然后一般有两种量化技术&#xff0c;那么这两种量化技术有什么区别呢&#xff1f; 二、量化技术对比 在模型量化领域&#xff0c;AWQ 和 GPTQ 是两种不同的量…...

通过恒定带宽服务器调度改进时间敏感网络(TSN)流量整形

论文标题 英文标题&#xff1a;Improving TSN Traffic Shaping with Constant Bandwidth Server Scheduling 中文标题&#xff1a;通过恒定带宽服务器调度改进时间敏感网络&#xff08;TSN&#xff09;流量整形 作者信息 作者&#xff1a;Benjamin van Seggelen 指导教师&am…...

气象干旱触发水文(农业)干旱的概率及其触发阈值的动态变化-贝叶斯copula模型

前言 在干旱研究中&#xff0c;一个关键的科学问题是&#xff1a;在某一地区发生不同等级的气象干旱时&#xff0c;气象干旱会以何种概率引发不同等级的水文干旱、农业干旱和地下水干旱&#xff1f;换句话说&#xff0c;气象干旱的不同程度会分别引发其他类型干旱的哪种等级&a…...

自定义Spring Boot Starter(官网文档解读)

摘要 本文将详细介绍自定义 Spring Boot Starter 的完整过程。要构建自定义 Starter&#xff0c;首先需掌握 Spring Boot 中 Auto-configuration 以及相关注解的工作原理&#xff0c;同时了解 Spring Boot 提供的一系列条件注解。在具备这些知识基础后&#xff0c;再按照特定步…...

开发 picgo-plugin-huawei 插件,解决华为云社区外链限制问题

开发 picgo-plugin-huawei 插件&#xff0c;解决华为云社区外链限制问题 在技术博客平台中&#xff0c;外链的使用常常受到限制&#xff0c;这给我们的写作和内容展示带来了一定的不便。为了应对这一问题&#xff0c;我开发了 picgo-plugin-huawei 插件&#xff0c;它能够有效…...

最长回文子串

标题 1.1 问题描述 给你一个字符串 s&#xff0c;找到 s 中最长的回文子串。 1.2 示例 1.2.1 示例1 输入&#xff1a;s “babad” 输出&#xff1a;“bab” 解释&#xff1a;“aba” 同样是符合题意的答案。 1.2.2 示例2 输入&#xff1a;s “cbbd” 输出&#xff1a;“bb…...

JavaSE学习笔记26-集合(Collection)

集合 Java 中的集合&#xff08;Collection&#xff09;是 Java 标准库中非常重要的一部分&#xff0c;用于存储和操作一组对象。Java 集合框架&#xff08;Java Collections Framework&#xff09;提供了一套丰富的接口和类&#xff0c;用于处理各种数据结构&#xff0c;如列…...

开源神器KRR:用数据驱动K8s资源优化

引言:云原生时代的资源管理之痛 在Kubernetes集群中,过度配置导致资源浪费与配置不足引发稳定性风险的矛盾始终存在。CNCF调研显示,企业平均有35%的云资源处于闲置状态。本文将揭秘开源神器KRR(Kubernetes Resource Recommender),通过数据驱动方式实现精准资源配置,实测…...

微信小程序:多菜单栏设计效果

一、实现效果 二、代码 wxml 编辑前端界面,步骤 菜单逻辑: 逐步取出数组中的项,首先取出顶部菜单项,然后选中后取出选中的底部数据(左侧菜单+右侧内容),然后点击左侧菜单取出选中的左侧菜单对应的右侧内容 ①这里我的数据是全部封装到一个数组对象的,首先我的循环…...

网络安全-js安全知识点与XSS常用payloads

简介 JavaScript 是一种轻量级的编程语言&#xff0c;定义了HTML的行为。它与Java的关系类似周杰和周杰伦的关系&#xff08;即没有关系&#xff09;。 用法 HTML 中的脚本必须位于 <script> 与 </script> 标签之间。 脚本可被放置在 HTML 页面的 <body>…...

无人机实战系列(二)本地摄像头 + Depth-Anything V2

这篇文章介绍了如何在本地运行 Depth-Anything V2&#xff0c;因为我使用的无人机是Tello&#xff0c;其本身仅提供了一个单目视觉相机&#xff0c;在众多单目视觉转 Depth 的方案中我选择了 Depth-Anything V2&#xff0c;这个库的强大在于其基于深度学习模型将单目视觉以较低…...

[杂学笔记]工厂模式、多态、内存空间区域划分、cp指令破坏软连接问题、UDP如何实现可靠传输、滑动窗口的原理、进程与线程、线程之间的通信

目录 1.工厂模式 2.多态 3.内存空间区域划分 4.cp指令破坏软连接问题 5.UDP实现可靠传输 6.滑动窗口的原理 7.进程与线程 8.线程之间的通信 1.工厂模式 工厂模式是一种创建对象的设计模式。它提供了一种创建对象的方式&#xff0c;将对象的创建和使用分离&#xff0c;通…...

【IEEE出版,往届会后3个月EI检索 | 西华大学主办 | 中英文期刊、SCI期刊推荐】第四届能源、电力与电气国际学术会议(ICEPET 2025)

第四届能源、电力与电气国际学术会议&#xff08;ICEPET 2025&#xff09;由西华大学主办&#xff0c;西华大学能源与动力工程学院、西华大学电气与电子信息学院、西华大学航空航天学院、流体及动力机械教育部重点实验室、流体机械及工程四川省重点实验室、四川省水电能源动力装…...

【AI+智造】DeepSeek价值重构:当采购与物控遇上数字化转型的化学反应

作者&#xff1a;Odoo技术开发/资深信息化负责人 日期&#xff1a;2025年2月24日 引言&#xff1a;从事企业信息化工作16年&#xff0c;我见证过无数企业从手工台账到ERP系统的跨越。但真正让采购和物控部门脱胎换骨的&#xff0c;是融合了Deepseek AI的Odoo数字化解决方案——…...

1.适配器模式

概述 适配器模式&#xff1a;将一个类的接口转换成客户希望的另一个接口&#xff0c;使得原本不兼容的类可以一起工作。 适配器模式在业务场景中非常有用&#xff0c;尤其是在系统集成、接口兼容性处理以及代码复用等场景。以下是一个实际的业务场景示例&#xff1a; 业务场景…...

选择排序(详解)c++

选择排序(Selection Sort)是⼀种特别直观的排序算法。每次找出未排序序列中最⼩的元素&#xff0c;然后放进有序序列的后⾯ 算法思想: 每次找出未排序序列中最小的元素&#xff0c;然后放进有序序列的后面 在数组中完成选择排序 落实到代码的时候就两步&#xff1a;找最小交换 …...

[java基础-JVM篇]1_JVM自动内存管理

JVM内存管理涉及但不限于类加载、对象分配、垃圾回收等&#xff0c;本篇主要记录运行时数据区域与对象相关内容。 内容主要来源《深入理解Java虚拟机&#xff1a;JVM高级特性与最佳实践》与官方文档&#xff0c;理解与表述错漏之处恳请各位大佬指正。 目录 运行时数据区域 栈 栈…...

python-leetcode 42.验证二叉搜索树

题目&#xff1a; 给定二叉树的根节点root,判断是否是一个有效二叉搜索树 有效二叉搜索树&#xff1a; 1.节点的左子树只包含小于当前节点的树 2.节点的右子树只包含大于当前节点的树 3.所有左子树和右子树自身必须也是二叉搜索树 方法一&#xff1a;递归 如果该二叉树的…...

Unity Shader 学习13:屏幕后处理 - 使用高斯模糊的Bloom辉光效果

目录 一、基本的后处理流程 - 以将画面转化为灰度图为例 1. C#调用shader 2. Shader实现效果 二、Bloom辉光效果 1. 主要变量 2. Shader效果 &#xff08;1&#xff09;提取较亮区域 - pass1 &#xff08;2&#xff09;高斯模糊 - pass2&3 &#xff08;3&#xff…...

【Bluedroid】AVRCP 连接源码分析(三)

接着上一篇【Bluedroid】AVRCP 连接源码分析(一)-CSDN博客,继续AVRCP连接的源码分析。 AVRC_OpenBrowse /packages/modules/Bluetooth/system/stack/avrc/avrc_api.cc /******************************************************************************** Function …...

图数据库Neo4j面试内容整理-约束(Constraint)

约束(Constraint) 是数据库中用于确保数据一致性和完整性的一种机制。它限制了数据的某些方面,确保特定条件得到满足。在 Neo4j 中,约束主要用于确保图数据的一致性,防止插入不符合规则的数据。约束通常与索引一起使用,但它们的功能和目的有所不同。 1. Neo4j 中的约束类…...

QUdpSocket的readyRead信号只触发一次

问题 QUdpSocket的readyRead信号只触发一次。 原因 on_readyRead槽函数里必须读出现有数据后&#xff0c;才能触发新的事件。 解决办法 在on_readyRead槽函数里取出数据。 void MainWindow::on_readyRead() {qDebug() << "on_readyRead in";while (m_udp…...