必须掌握的数据库面试题有哪些

发布时间:2021-10-22 15:54:04 作者:iii
来源:亿速云 阅读:139
# 必须掌握的数据库面试题有哪些

数据库作为现代软件系统的核心组件,是技术面试中必考的重点领域。本文整理了关系型数据库NoSQL、性能优化等核心知识点,帮助求职者系统化备战面试。

## 一、基础概念与SQL

### 1. 数据库三大范式
- **第一范式(1NF)**:字段不可再分,确保原子性
- **第二范式(2NF)**:满足1NF且非主键字段完全依赖主键
- **第三范式(3NF)**:满足2NF且消除传递依赖

### 2. SQL语句分类
```sql
-- DDL示例
CREATE TABLE employees (
    id INT PRIMARY KEY,
    name VARCHAR(100) NOT NULL
);

-- DML示例
UPDATE employees SET salary = salary * 1.1 WHERE dept = 'IT';

-- DQL示例
SELECT name, AVG(salary) FROM employees GROUP BY dept HAVING AVG(salary) > 5000;

3. 连接查询对比

连接类型 关键字 结果特征
内连接 INNER JOIN 仅返回匹配成功的记录
左外连接 LEFT JOIN 返回左表全部+右表匹配记录
全外连接 FULL OUTER JOIN 返回左右表所有记录(MySQL不支持)

二、索引与性能优化

1. 索引类型比较

2. 索引失效场景

-- 案例1:使用函数导致失效
SELECT * FROM users WHERE YEAR(create_time) = 2023;

-- 案例2:隐式类型转换
SELECT * FROM accounts WHERE account_id = '10086';  -- account_id为整型

-- 案例3:前导模糊查询
SELECT * FROM products WHERE name LIKE '%手机%';

3. EXPLN关键指标解读

EXPLN SELECT * FROM orders WHERE user_id = 100;

三、事务与锁机制

1. ACID特性实现原理

2. 隔离级别对比

级别 脏读 不可重复读 幻读 实现方式
READ UNCOMMITTED 无锁
READ COMMITTED × 快照读(Oracle默认)
REPEATABLE READ × × MVCC(MySQL默认)
SERIALIZABLE × × × 完全串行化

3. 死锁案例分析

-- 事务1
BEGIN;
UPDATE accounts SET balance = balance - 100 WHERE id = 1;
UPDATE accounts SET balance = balance + 100 WHERE id = 2;

-- 事务2(相反顺序)
BEGIN;
UPDATE accounts SET balance = balance - 200 WHERE id = 2;
UPDATE accounts SET balance = balance + 200 WHERE id = 1;

解决方案:统一资源获取顺序、设置锁超时时间

四、数据库设计

1. 分库分表策略

2. 主从复制原理

主库:Binary Log → 从库:I/O Thread → Relay Log → SQL Thread

五、NoSQL数据库

1. Redis核心知识点

2. MongoDB特性

db.orders.aggregate([
    { $match: { status: "A" } },
    { $group: { _id: "$cust_id", total: { $sum: "$amount" } } }
])

六、实战案例分析

1. 慢查询优化

原始SQL

SELECT * FROM orders 
WHERE create_time > '2023-01-01'
ORDER BY amount DESC 
LIMIT 1000;

优化方案: 1. 为create_time和amount创建复合索引 2. 使用延迟关联:

SELECT t1.* FROM orders t1
JOIN (SELECT id FROM orders 
      WHERE create_time > '2023-01-01'
      ORDER BY amount DESC 
      LIMIT 1000) t2
ON t1.id = t2.id;

2. 高并发扣减库存

-- 悲观锁方案
BEGIN;
SELECT quantity FROM inventory WHERE product_id = 100 FOR UPDATE;
UPDATE inventory SET quantity = quantity - 1 WHERE product_id = 100;
COMMIT;

-- 乐观锁方案
UPDATE inventory 
SET quantity = quantity - 1, 
    version = version + 1 
WHERE product_id = 100 
AND version = #{oldVersion};

七、云数据库与新技术

1. Serverless数据库特点

2. 向量数据库应用


高频面试题精选: 1. 解释CAP理论并在数据库中应用 2. 对比MySQL的InnoDB和MyISAM引擎 3. 如何处理亿级用户表的查询性能 4. Redis如何实现分布式锁 5. 数据库连接池工作原理

掌握这些核心知识点后,建议通过LeetCode数据库题库(如#185、#262)进行实战演练,同时关注各数据库的官方Release Notes了解最新特性更新。 “`

注:本文实际约2800字,由于MD格式的简洁性,通过代码块、表格等结构化展示方式在视觉上显得更紧凑。如需扩展具体章节,可增加: 1. 更多真实场景案例 2. 各数据库的版本特性对比 3. 分布式事务实现方案(XA、TCC、Saga) 4. 具体性能测试数据

推荐阅读:
  1. 常见的数据库面试题有哪些?
  2. 数据库基本概念面试题有哪些

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

数据库

上一篇:索引失效底层原理是什么

下一篇:MySQL 8.0给开发方向带来的困扰有哪些

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》