从今天开始,本专栏专门收录一下个人觉得比较可能会在Java后端开发的面试中遇到的问题,个人角色,复习是非常需要有一个体系的,平日里碎片化的学习可能当时解决了某些问题,但后续可能就会忘记或在相似之处无法感知到,因此个人这里做了整理,用作本人复习的路径。
先从数据库开始,数据库作为后端开发的重中之重,必然不能轻视,要牢记掌握一些概念八股,他们其中很多不错的设计理念和方案非常值得思考。我主要是整理题目,内容大部分由AI生成。有不对的地方敬请理解。
数据库是用来存储、管理和操作数据的系统,广泛应用于各种软件系统中。它不仅涉及如何存储和检索数据,还包括如何确保数据的完整性、并发性和安全性。以下是一些核心概念,帮助你深入理解数据库:
1. 数据库定义
-
数据库:数据库是一个有组织的、可通过计算机系统进行访问和管理的数据集合。它存储的数据通常是经过结构化的,便于查询和修改。
2. 数据库管理系统(DBMS)
-
DBMS(Database Management System)是管理数据库的软件,它提供了存储、查询、修改、删除和备份数据的功能。常见的DBMS包括 MySQL、PostgreSQL、Oracle、SQL Server 等。
3. 关系型数据库(RDBMS)
-
关系型数据库是基于关系模型的数据库。数据以表格的形式存储,其中表与表之间通过外键关系建立联系。常见的关系型数据库包括 MySQL、PostgreSQL、Oracle、SQL Server 等。
核心特性:
-
表:关系型数据库中的数据存储在表中,表是由行和列组成的。每行代表一个记录,列代表该记录的各个字段。
-
关系:表与表之间的关系通过外键进行连接。
-
SQL(Structured Query Language):用于操作和管理关系型数据库的标准语言。
4. 非关系型数据库(NoSQL)
-
非关系型数据库不使用传统的关系模型,而是采用多种数据存储模型,如键值对、文档、列族、图形等。常见的 NoSQL 数据库包括 MongoDB、Redis、Cassandra、CouchDB 等。
特点:
-
灵活的数据模型:支持结构化、半结构化和非结构化数据。
-
可扩展性:适用于大规模数据存储和分布式架构。
-
高性能:通常能在高并发、高吞吐量的环境下提供更好的性能。
5. 数据库设计
-
ER模型(实体关系模型):是数据库设计的基础,它通过实体、属性和关系来描述数据及其相互关系。实体通常对应数据库中的表,属性对应列,关系对应外键。
-
范式:范式是一组设计规则,用于减少数据库中的冗余数据。常见的范式有:
-
第一范式(1NF):要求每个字段值是原子性的,即不可再分。
-
第二范式(2NF):在1NF的基础上,要求所有非主属性完全依赖于主键。
-
第三范式(3NF):在2NF的基础上,要求不存在传递依赖。
-
6. 数据完整性
-
完整性约束:确保数据库中数据的准确性和一致性。常见的完整性约束包括:
-
实体完整性:每个表的主键必须唯一且不可为空。
-
参照完整性:外键必须指向已存在的记录。
-
域完整性:数据的取值必须符合预定的类型和范围。
-
7. 事务管理
-
事务:是数据库中的一组操作,具有原子性、一致性、隔离性和持久性(ACID特性)。事务保证了数据库操作的可靠性和一致性。
-
原子性(Atomicity):事务中的操作要么全做,要么全不做。
-
一致性(Consistency):事务执行前后,数据库的状态应该是合法的。
-
隔离性(Isolation):并发事务之间互不干扰。
-
持久性(Durability):事务提交后,对数据库的修改是持久的,即使系统崩溃也不会丢失。
-
8. 并发控制
-
在多个事务同时执行时,如何保证数据的一致性和完整性。常见的并发控制机制包括:
-
锁机制:通过加锁避免多个事务对同一数据进行修改,常见的锁有行锁、表锁、共享锁和排他锁。
-
乐观锁:假设事务冲突的概率较低,事务执行前不加锁,在提交时进行检查并保证没有冲突。
-
悲观锁:在事务开始时就对数据加锁,防止其他事务的访问。
-
9. 索引
-
索引是数据库中用于加速查询操作的数据结构。通过在某些列上创建索引,可以大大提高查询效率。常见的索引类型包括:
-
单列索引:为单个列创建索引。
-
联合索引:为多个列一起创建索引。
-
全文索引:用于加速全文搜索。
-
B树索引、哈希索引:不同类型的索引适用于不同的查询场景。
-
10. 数据库的备份与恢复
-
备份:将数据库的数据复制并存储,以防止数据丢失。常见的备份方式包括:
-
物理备份:备份数据库文件。
-
逻辑备份:备份数据库的逻辑结构(如表、索引等)。
-
-
恢复:在数据库发生故障或数据丢失时,恢复备份数据以恢复到正常状态。
11. 数据库性能优化
-
查询优化:通过改写SQL语句、增加索引、调整数据库设计等方法提高查询性能。
-
分区:将大表分成多个小表,便于管理和提高查询效率。
-
数据库缓存:通过缓存机制减少数据库的读取压力,提高响应速度。
12. 分布式数据库
-
分布式数据库:通过将数据分布到多个物理节点上来提供高可用性和可扩展性。常见的分布式数据库系统包括 Google Spanner、Cassandra、HBase 等。
分布式系统特点:
-
分片:将数据分割到不同的数据库服务器上。
-
复制:通过数据复制提高系统的可靠性。
-
一致性、可用性、分区容错性(CAP定理):描述分布式系统在一致性、可用性和分区容错性之间的权衡。
13. SQL 与 NoSQL的比较
-
SQL:使用结构化查询语言(SQL)进行数据操作。适合需要强一致性和复杂查询的场景。
-
NoSQL:非结构化数据存储,支持灵活的数据模型,适合大数据和高并发场景。
这些概念构成了数据库的核心知识框架。你可以根据这些内容逐步深入研究每个领域,进一步理解和掌握数据库的相关技术。如果有具体的子主题或者更深层次的疑问,可以进一步提出。