1. 完成 SQL6 查找学校是北大的学生信息
2. 八股部分
1) 选择排序&冒泡排序 包括 代码 时间复杂度 空间复杂度 稳定性 是否能对代码进行提升
选择排序代码:
#include <iostream>
#include <vector>using namespace std;// 选择排序函数
void selectionSort(vector<int>& arr) {int n = arr.size();for (int i = 0; i < n - 1; ++i) {int minIndex = i;for (int j = i + 1; j < n; ++j) {if (arr[j] < arr[minIndex]) {minIndex = j;}}swap(arr[i], arr[minIndex]);}
}
时间复杂度
- 最坏情况:O(n²)
- 最好情况:O(n²)
- 平均情况:O(n²)
空间复杂度
- O(1)(只使用了常数级别的额外空间)
稳定性
- 不稳定(相同元素的顺序可能会改变)
代码提升
选择排序的时间复杂度无法提升,但在数据量小的情况下,可以考虑使用更高效的排序算法,比如插入排序。
冒泡排序代码:
#include <iostream>
#include <vector> void bubbleSort(std::vector<int>& arr) { int n = arr.size(); for (int i = 0; i < n - 1; ++i) { bool swapped = false; // 标记是否发生交换 for (int j = 0; j < n - i - 1; ++j) { if (arr[j] > arr[j + 1]) { std::swap(arr[j], arr[j + 1]); // 交换相邻元素 swapped = true; // 发生交换 } } // 如果没有进行交换,数组已经有序 if (!swapped) { break; } }
} // 测试函数
int main() { std::vector<int> arr = {64, 34, 25, 12, 22, 11, 90}; bubbleSort(arr); std::cout << "冒泡排序后的数组: "; for (const int& val : arr) { std::cout << val << " "; } return 0;
}
时间复杂度
- 最坏情况:O(n²)
- 最好情况:O(n)(当数组已经有序时)
- 平均情况:O(n²)
空间复杂度
- O(1)(只使用了常数级别的额外空间)
稳定性
- 稳定(相同元素的顺序不会改变)
代码提升
在已经有序的情况下,冒泡排序可以通过 swapped
标志实现 O(n) 的时间复杂度,但总体来说,冒泡排序的效率较低,面对大数据集时,请考虑更高效的排序算法。
2) 请说下你对 MYSQL 架构的了解?
MySQL 架构主要可以分为以下几个层级和组件:
-
服务层:
- MySQL 服务器:这是整个 MySQL 系统的核心,它负责处理用户的所有请求,包括 SQL 查询的执行、管理连接、数据存储和检索等。
-
存储层:
- 存储引擎:MySQL 支持多种存储引擎(Storage Engine),每个存储引擎都有不同的特性和功能。常见的存储引擎包括:
- InnoDB:支持事务、外键和行级锁,是 MySQL 的默认存储引擎。
- MyISAM:不支持事务,使用表级锁,适合读多写少的场景。
- Memory:数据存储在内存中,速度较快,但数据易丢失。
- CSV、ARCHIVE、BLACKHOLE 等:用于特定需求的存储引擎。
- 存储引擎:MySQL 支持多种存储引擎(Storage Engine),每个存储引擎都有不同的特性和功能。常见的存储引擎包括:
-
查询解析层:
- 查询处理器:接收来自客户端的 SQL 查询,进行语法分析、查询优化、执行计划生成等。
- 优化器:根据数据库的统计信息和查询条件,选择最优的执行计划。
-
缓存层:
- 查询缓存:存储已经执行的查询的结果,避免重复执行相同查询以提高性能。
- InnoDB Buffer Pool:用于缓存数据和索引的内存区域,可以提高对磁盘存储的访问速度。
-
数据层:
- 文件存储:MySQL 将数据存储在文件系统中,数据表和索引分别存储在不同的文件中。数据通常以 MyISAM 或 InnoDB 的格式存储。
MySQL 的工作原理
-
连接建立:客户端通过协议连接到 MySQL 服务器,服务器管理连接并控制访问权限。
-
SQL 查询处理:
- 客户端发送 SQL 查询。
- 查询处理器解析 SQL 语句并检查语法。
- 优化器生成执行计划,并选择最优的索引进行查询。
-
数据访问:
- MySQL 根据执行计划访问数据存储层以检索或修改数据。
- 结果返回到客户端。
-
存储和事务管理:
- 对于支持事务的存储引擎(如 InnoDB),MySQL 提供 ACID(Atomicity, Consistency, Isolation, Durability)特性以保证数据的一致性和持久性。
- 使用日志(如重做日志和撤销日志)来保证作为事务的一部分的数据修改的可靠性。
优点与缺点
优点:
- 开源和免费:MySQL 是开源的,有很多免费的版本可用。
- 性能优秀:对于大多数应用场景,MySQL 的性能表现非常好。
- 灵活性:支持多种存储引擎,适应多种需求。
- 成熟的社区支持:丰富的文档和社区支持使得问题解决变得容易。
缺点:
- 功能限制:相比于其他商业数据库(如 Oracle 或 SQL Server),在某些高级功能(如复杂查询、并发控制)上可能有所不足。
- 安全性和稳定性:虽然 MySQL 的安全性和稳定性在不断提升,但某些配置和操作仍需要谨慎处理,特别是在高并发场景下。