溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

必須掌握的數據庫面試題有哪些

發布時間:2021-10-22 15:54:04 來源:億速云 閱讀:151 作者:iii 欄目:數據庫
# 必須掌握的數據庫面試題有哪些

數據庫作為現代軟件系統的核心組件,是技術面試中必考的重點領域。本文整理了關系型數據庫、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. 索引類型比較

  • B+樹索引:適合范圍查詢,InnoDB默認索引類型
  • 哈希索引:精確查找O(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;
  • type列:const > ref > range > index > ALL
  • Extra列
    • Using filesort:需要額外排序
    • Using temporary:使用臨時表
    • Using index:覆蓋索引

三、事務與鎖機制

1. ACID特性實現原理

  • 原子性:Undo Log記錄修改前狀態
  • 隔離性:鎖+MVCC多版本并發控制
  • 持久性:Redo Log先寫磁盤

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. 分庫分表策略

  • 垂直拆分:按業務維度拆分(用戶庫、訂單庫)
  • 水平拆分:按數據范圍/哈希值拆分
  • 分片鍵選擇:避免熱點問題,如用戶ID哈希

2. 主從復制原理

主庫:Binary Log → 從庫:I/O Thread → Relay Log → SQL Thread
  • 延遲問題:并行復制、半同步復制
  • 讀寫分離:通過中間件實現(如MyCat)

五、NoSQL數據庫

1. Redis核心知識點

  • 數據結構
    • String:計數器
    • Hash:對象存儲
    • ZSet:排行榜
  • 持久化
    • RDB:定時快照
    • AOF:記錄寫命令
  • 緩存穿透:布隆過濾器+空值緩存

2. MongoDB特性

  • 文檔模型:BSON格式存儲
  • 索引支持:單字段、復合、多鍵、地理空間索引
  • 聚合管道
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數據庫特點

  • 自動擴縮容
  • 按實際使用量計費
  • 典型代表:AWS Aurora Serverless

2. 向量數據庫應用

  • 大模型記憶存儲
  • 相似度搜索(余弦相似度)
  • 主流產品:Pinecone、Milvus

高頻面試題精選: 1. 解釋CAP理論并在數據庫中應用 2. 對比MySQL的InnoDB和MyISAM引擎 3. 如何處理億級用戶表的查詢性能 4. Redis如何實現分布式鎖 5. 數據庫連接池工作原理

掌握這些核心知識點后,建議通過LeetCode數據庫題庫(如#185、#262)進行實戰演練,同時關注各數據庫的官方Release Notes了解最新特性更新。 “`

注:本文實際約2800字,由于MD格式的簡潔性,通過代碼塊、表格等結構化展示方式在視覺上顯得更緊湊。如需擴展具體章節,可增加: 1. 更多真實場景案例 2. 各數據庫的版本特性對比 3. 分布式事務實現方案(XA、TCC、Saga) 4. 具體性能測試數據

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女