计算机基础面试(数据库)
1. 事务的ACID特性?如何通过日志保证原子性和持久性?
-
专业解答:
ACID:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)。日志(如Redo/Undo Log)记录操作,故障时重做或回滚。 -
初中生版:
事务像银行转账:要么转成功(原子性),要么全取消(回滚)。日志像监控录像,出问题时按记录恢复。
2. 数据库索引的原理是什么?B+树和哈希索引的区别是什么?
-
专业解答:
索引加速查询。B+树适合范围查询,叶节点链表结构;哈希索引基于哈希表,仅支持等值查询。 -
初中生版:
B+树像图书馆的分类书架,能快速找到某类书或范围(比如A到C区);哈希索引像快递柜,直接输入编号(哈希值)取件。
3. 什么是脏读、不可重复读和幻读?如何通过隔离级别解决?
-
专业解答:
- 脏读:读到未提交数据;
- 不可重复读:同一事务两次读结果不同;
- 幻读:同一事务两次查询行数不同。
通过隔离级别(如RC、RR)控制。
-
初中生版:
像考试时:- 脏读:抄同学没写完的答案;
- 不可重复读:第一次看同学得80分,第二次看被改成90分;
- 幻读:第一次统计班里5人及格,第二次突然多出1人。
4. MySQL的InnoDB和MyISAM引擎的主要区别是什么?
-
专业解答:
InnoDB支持事务、行锁、外键;MyISAM不支持事务,表锁,但查询更快。 -
初中生版:
InnoDB像带锁的日记本:能记录交易(事务),单页可修改;MyISAM像普通笔记本:写得快但不能锁页。
5. 什么是MVCC(多版本并发控制)?如何实现快照读?
-
专业解答:
MVCC通过保存数据多个版本,实现读不阻塞写。快照读(如SELECT
)读取历史版本,避免加锁。 -
初中生版:
MVCC像图书馆的旧书库:读者看旧版书(快照),作者同时修改新版,互不干扰。
6. 数据库范式有哪些?第三范式(3NF)的要求是什么?
-
专业解答:
主要范式:1NF(字段原子性)、2NF(消除部分依赖)、3NF(消除传递依赖)。3NF要求非主键字段不依赖其他非主键字段。 -
初中生版:
范式像整理衣柜:1NF(不塞一堆衣服),2NF(按季节分类),3NF(不重复存放同款衣服)。
7. 什么是聚集索引和非聚集索引?InnoDB的主键索引结构是怎样的?
-
专业解答:
聚集索引决定数据存储顺序(InnoDB主键),非聚集索引(二级索引)存键值和主键地址。 -
初中生版:
聚集索引像字典正文:按拼音排序;非聚集索引像目录:查到页码再翻到对应页。
8. SQL注入的原理是什么?如何防范?
-
专业解答:
攻击者通过输入恶意SQL拼接,绕过验证。防范方法:参数化查询(预编译)、过滤特殊字符。 -
初中生版:
SQL注入像谎报密码:假装是管理员(' OR 1=1--
),骗过系统。防范:用保险锁(参数化)封住漏洞。
9. 什么是查询优化器?基于代价的优化(CBO)如何工作?
-
专业解答:
查询优化器生成执行计划。CBO根据统计信息(如行数、索引)估算成本,选择最优方案。 -
初中生版:
查询优化器像导航:根据路况(数据分布)选择最短或最快路线。
10. 什么是锁?行级锁和表级锁的区别是什么?
-
专业解答:
锁保障并发安全。行级锁粒度小并发高(如InnoDB),表级锁粒度大并发低(如MyISAM)。 -
初中生版:
行级锁像给单本书上锁;表级锁像锁整个书柜。前者灵活,后者省事但影响多人使用。
11. 什么是死锁?数据库如何检测和解决死锁?
-
专业解答:
死锁是循环等待资源。数据库通过超时或等待图检测,回滚代价小的事务。 -
初中生版:
死锁像四人各拿一本书等别人交换。数据库会强制某人先放手(回滚),解开僵局。
12. 什么是视图?它的作用和局限性是什么?
-
专业解答:
视图是虚拟表,简化查询、提供安全隔离。局限:更新受限,性能可能下降。 -
初中生版:
视图像定制窗口:只能看特定数据(如只显示数学成绩),但改数据可能受限制。
13. 什么是存储过程?与普通SQL语句相比有何优缺点?
-
专业解答:
存储过程是预编译的SQL集合,减少网络开销,但调试困难,移植性差。 -
初中生版:
存储过程像预制菜:提前做好菜谱(SQL),点菜(调用)更快,但换厨房(数据库)可能不兼容。
14. 什么是分区表?如何选择分区键?
-
专业解答:
分区表将大数据分片存储(如按时间、范围)。分区键应选择高频查询条件字段。 -
初中生版:
分区表像分册的百科全书:按年份或字母分册,查资料更快。
15. 什么是数据库的冷备份和热备份?
-
专业解答:
冷备份在停止服务时拷贝数据;热备份在运行时备份,可能丢失少量数据。 -
初中生版:
冷备份像关灯打扫房间;热备份像边用房间边吸尘,可能漏掉角落。
16. 什么是NoSQL数据库?与关系型数据库的适用场景有何不同?
-
专业解答:
NoSQL支持非结构化数据,高扩展性(如MongoDB、Redis),适合大数据和高并发;关系型数据库强一致性,适合事务场景。 -
初中生版:
NoSQL像杂货店:能存各种奇怪的东西(JSON、图片);关系型数据库像超市:货架整齐,分类明确。
17. 什么是CAP定理?如何权衡一致性、可用性和分区容忍性?
-
专业解答:
CAP定理:分布式系统无法同时满足一致性(C)、可用性(A)、分区容忍性(P)。通常根据场景选择CP或AP。 -
初中生版:
CAP像餐厅服务:- CP:必须等厨师做好菜(一致)才上桌,可能等很久;
- AP:直接上桌(可用),但可能菜没做好。
18. 什么是Redis的数据持久化机制?RDB和AOF的区别是什么?
-
专业解答:
RDB定期快照,恢复快但可能丢数据;AOF记录写操作,数据更完整但体积大。 -
初中生版:
RDB像拍照存档:定期拍一张全家福;AOF像录像:记录所有动作,恢复时重放。
19. 什么是数据库的索引覆盖(Covering Index)?
-
专业解答:
索引覆盖指查询字段全在索引中,无需回表,提升效率。 -
初中生版:
索引覆盖像目录包含答案:查书时直接看目录,不用翻正文。
20. 什么是连接(JOIN)算法?嵌套循环、哈希连接和排序合并连接的区别是什么?
-
专业解答:
- 嵌套循环:遍历两表逐行匹配;
- 哈希连接:构建哈希表快速匹配;
- 排序合并:排序后顺序合并。
-
初中生版:
- 嵌套循环像逐个问名字找朋友;
- 哈希连接像用学号快速匹配;
- 排序合并像按身高排队后组队。
21. 什么是慢查询日志?如何分析和优化慢查询?
-
专业解答:
慢查询日志记录超时SQL。通过EXPLAIN
分析执行计划,优化索引或拆分查询。 -
初中生版:
慢查询日志像考卷错题本:找出耗时的题目(SQL),分析原因(索引、算法),针对性练习。
22. 什么是数据库的读写分离?如何实现?
-
专业解答:
读写分离将写操作到主库,读操作到从库。通过代理(如ProxySQL)或中间件路由。 -
初中生版:
读写分离像图书馆:主馆(主库)处理借书登记,分馆(从库)提供阅读,减轻主馆压力。
23. 什么是分库分表?如何解决跨库查询问题?
-
专业解答:
分库分表按规则拆分数据。跨库查询需应用层聚合或全局表冗余。 -
初中生版:
分库分表像分班管理:按学号分班,查全校数据时需合并各班结果。
24. 什么是事务的隔离级别?MySQL默认的隔离级别是什么?
-
专业解答:
隔离级别:RU(读未提交)、RC(读已提交)、RR(可重复读)、S(串行化)。MySQL默认RR。 -
初中生版:
隔离级别像考试监考严格程度:- RU:能看到别人未写完的答案;
- RR:考试期间答案被锁定,只能看初始版本。
25. 什么是数据库的WAL(Write-Ahead Logging)机制?
-
专业解答:
WAL先写日志再修改数据,保证崩溃时可通过日志恢复。 -
初中生版:
WAL像先记账再花钱:即使突然断电,也能根据账本(日志)找回数据。
26. 什么是数据库的缓冲池(Buffer Pool)?如何管理页的加载和淘汰?
-
专业解答:
缓冲池缓存磁盘页,减少IO。通过LRU算法管理,频繁访问页驻留,冷页淘汰。 -
初中生版:
缓冲池像书桌:常用书放桌面(缓冲池),不常用的放书架(磁盘)。LRU像整理书桌,最近不用的先收起来。
27. 什么是数据库的乐观锁和悲观锁?
-
专业解答:
悲观锁假设冲突多(如SELECT FOR UPDATE
),乐观锁假设冲突少(如版本号验证)。 -
初中生版:
悲观锁像考试锁卷子:怕人偷看,全程盯着;乐观锁像开放答题:提交时检查是否被改过。
28. 什么是数据库的物化视图?与普通视图的区别是什么?
-
专业解答:
物化视图存储查询结果,定期刷新;普通视图实时计算。 -
初中生版:
物化视图像预制菜:提前做好存冰箱;普通视图像现炒菜:点单后现做。
29. 什么是数据库的自治事务?应用场景是什么?
-
专业解答:
自治事务独立于主事务提交,用于日志记录等需独立提交的场景。 -
初中生版:
自治事务像独立记账本:主交易可能失败,但账本记录必须保留。
30. 什么是数据库的基数(Cardinality)?如何影响查询优化?
-
专业解答:
基数是列唯一值的数量。高基数列(如身份证)适合建索引,低基数列(如性别)索引效果差。 -
初中生版:
基数像班级学号:如果学号唯一(高基数),按学号找人快;如果按性别(低基数),索引作用小。