- Java80
- 计算机基础67
- 数据库46
- 分布式28
- 技术文章精选集26
- AI 应用开发25
- 系统设计19
- AI 编程实战16
- 高性能15
- AI14
- 框架13
- 开发工具11
- 走近作者10
- 知识星球10
- 面试准备10
- 高可用9
- 开源项目8
- 计算机书籍7
- 学习路线6
- 走近项目5
- AI 编程技巧5
- AI 编程原理5
- 代码质量4
- AI 编程1
- 程序人生1
- Java面试指北1
数据库知识基础,这部分内容一定要理解记忆。虽然这部分内容只是理论知识,但是非常重要,这是后面学习 MySQL 数据库的基础。PS: 这部分内容由于涉及太多概念性内容,所以参考了维基百科和百度百科相应的介绍。
MySQL 字符编码集中有两套 UTF-8 编码实现:utf8 和 utf8mb4。
如果使用 utf8 的话,存储 emoji 符号和一些比较复杂的汉字、繁体字就会出错。
为什么会这样呢?这篇文章可以从源头给你解答。
字符集是什么?
字符是各种文字和符号的统称,包括各个国家文字、标点符号、表情、数字等等。 字符集 就是一系列字符的集合。字符集的种类较多,每个字符集可以表示的字符范围通常不同,就比如说有些字符集是无法表示汉字的。
NoSQL 是什么?
NoSQL(Not Only SQL 的缩写)泛指非关系型的数据库,主要针对的是键值、文档以及图形类型数据存储。并且,NoSQL 数据库天生支持分布式,数据冗余和数据分片等特性,旨在提供可扩展的高可用高性能数据存储解决方案。
一个常见的误解是 NoSQL 数据库或非关系型数据库不能很好地存储关系型数据。NoSQL 数据库可以存储关系型数据—它们与关系型数据库的存储方式不同。
NoSQL 数据库代表:HBase、Cassandra、MongoDB、Redis。

Elasticsearch 相关的面试题为我的知识星球(点击链接即可查看详细介绍以及加入方法)专属内容,已经整理到了《Java 面试指北》中。

MongoDB 是典型的文档数据库,适合半结构化数据、灵活字段模型和快速迭代的业务场景。学习 MongoDB 时,建议重点理解文档模型、索引、副本集、分片、聚合和事务能力,而不是把它简单看成“可以存 JSON 的数据库”。
适合谁看
- 想了解 MongoDB 和文档数据库核心概念的后端开发者。
- 准备 MongoDB、NoSQL、文档模型相关面试题的同学。
- 需要在关系型数据库和文档数据库之间做选型的工程师。
- 已经接触过 MongoDB,但对索引、副本集、分片和事务机制不够熟的读者。
少部分内容参考了 MongoDB 官方文档的描述,在此说明一下。
MongoDB 基础
MongoDB 是什么?
MongoDB 是一个基于 分布式文件存储 的开源 NoSQL 数据库系统,由 C++ 编写的。MongoDB 提供了 面向文档 的存储方式,操作起来比较简单和容易,支持“无模式”的数据建模,可以存储比较复杂的数据类型,是一款非常流行的 文档类型数据库 。
MongoDB 索引
MongoDB 索引有什么用?
和关系型数据库类似,MongoDB 中也有索引。索引的目的主要是用来提高查询效率,如果没有索引的话,MongoDB 必须执行 集合扫描 ,即扫描集合中的每个文档,以选择与查询语句匹配的文档。如果查询存在合适的索引,MongoDB 可以使用该索引来限制它必须检查的文档数量。并且,MongoDB 可以使用索引中的排序返回排序后的结果。
虽然索引可以显著缩短查询时间,但是使用索引、维护索引是有代价的。在执行写入操作时,除了要更新文档之外,还必须更新索引,这必然会影响写入的性能。因此,当有大量写操作而读操作少时,或者不考虑读操作的性能时,都不推荐建立索引。
SQL 是后端开发绕不开的数据库基本功。无论后续学习 MySQL 索引、执行计划,还是做慢 SQL 优化,都需要先把查询、过滤、聚合、连接、子查询和数据修改这些基础语义掌握扎实。
适合谁看
- 正在学习数据库基础和 SQL 语法的后端开发者。
- 准备 SQL 基础、SQL 查询题、数据库 CRUD 相关面试题的同学。
- 写过简单 SQL,但对 JOIN、GROUP BY、HAVING、子查询和执行顺序不够熟的读者。
- 想在学习 MySQL 索引和 SQL 优化前补齐 SQL 基本功的工程师。
