File tree Expand file tree Collapse file tree 4 files changed +19
-17
lines changed Expand file tree Collapse file tree 4 files changed +19
-17
lines changed Original file line number Diff line number Diff line change 67
67
68
68
** 知识越贫乏的人,相信的东西就越绝对** ,因为他们从未认真了解过与自己观点相对立的角度,也缺乏对技术发展的全局认识。
69
69
70
- 举个例子,我刚开始学习 Java 后端开发的时候,完全没什么经验,就随便买了一本书开始看。当时看的是** 《Java Web 整合开发王者归来》** 这本书(梦开始的地方)。
70
+ 举个例子,我刚开始学习 Java 后端开发的时候,完全没什么经验,就随便买了一本书开始看。当时看的是 ** 《Java Web 整合开发王者归来》** 这本书(梦开始的地方)。
71
71
72
72
在我上大学那会儿,这本书的很多内容其实已经过时了,比如它花了大量篇幅介绍 JSP、Struts、Hibernate、EJB 和 SVN 等技术。不过,直到现在,我依然非常感谢这本书,带我走进了 Java 后端开发的大门。
73
73
Original file line number Diff line number Diff line change 21
21
22
22
## 索引的优缺点
23
23
24
- ** 优点 ** :
24
+ ** 索引的优点: **
25
25
26
- - 使用索引可以大大加快数据的检索速度(大大减少检索的数据量),减少 IO 次数,这也是创建索引的最主要的原因。
27
- - 通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。
26
+ 1 . ** 查询速度起飞 (主要目的)** :通过索引,数据库可以** 大幅减少需要扫描的数据量** ,直接定位到符合条件的记录,从而显著加快数据检索速度,减少磁盘 I/O 次数。
27
+ 2 . ** 保证数据唯一性** :通过创建** 唯一索引 (Unique Index)** ,可以确保表中的某一列(或几列组合)的值是独一无二的,比如用户ID、邮箱等。主键本身就是一种唯一索引。
28
+ 3 . ** 加速排序和分组** :如果查询中的 ORDER BY 或 GROUP BY 子句涉及的列建有索引,数据库往往可以直接利用索引已经排好序的特性,避免额外的排序操作,从而提升性能。
28
29
29
- ** 缺点** :
30
+ ** 索引的缺点:**
31
+
32
+ 1 . ** 创建和维护耗时** :创建索引本身需要时间,特别是对大表操作时。更重要的是,当对表中的数据进行** 增、删、改 (DML操作)** 时,不仅要操作数据本身,相关的索引也必须动态更新和维护,这会** 降低这些 DML 操作的执行效率** 。
33
+ 2 . ** 占用存储空间** :索引本质上也是一种数据结构,需要以物理文件(或内存结构)的形式存储,因此会** 额外占用一定的磁盘空间** 。索引越多、越大,占用的空间也就越多。
34
+ 3 . ** 可能被误用或失效** :如果索引设计不当,或者查询语句写得不好,数据库优化器可能不会选择使用索引(或者选错索引),反而导致性能下降。
30
35
31
- - 创建和维护索引需要耗费许多时间。当对表中的数据进行增删改的时候,如果数据有索引,那么索引也需要动态地修改,这会降低 SQL 执行效率。
32
- - 索引需要使用物理文件存储,也会耗费一定空间。
36
+ ** 那么,用了索引就一定能提高查询性能吗?**
33
37
34
- 但是, ** 使用索引一定能提高查询性能吗? **
38
+ ** 不一定。 ** 大多数情况下,合理使用索引确实比全表扫描快得多。但也有例外:
35
39
36
- 大多数情况下,索引查询都是比全表扫描要快的。但是如果数据库的数据量不大,那么使用索引也不一定能够带来很大提升。
40
+ - ** 数据量太小** :如果表里的数据非常少(比如就几百条),全表扫描可能比通过索引查找更快,因为走索引本身也有开销。
41
+ - ** 查询结果集占比过大** :如果要查询的数据占了整张表的大部分(比如超过20%-30%),优化器可能会认为全表扫描更划算,因为通过索引多次回表(随机I/O)的成本可能高于一次顺序的全表扫描。
42
+ - ** 索引维护不当或统计信息过时** :导致优化器做出错误判断。
37
43
38
44
## 索引底层数据结构选型
39
45
Original file line number Diff line number Diff line change @@ -174,7 +174,7 @@ Java 类的继承关系由类索引、父类索引和接口索引集合三项确
174
174
175
175
** 字段的 access_flag 的取值:**
176
176
177
- ![ 字段的 access_flag 的取值] ( https://oss.javaguide.cn/JVM/image-20201031084342859 .png )
177
+ ![ 字段的 access_flag 的取值] ( https://oss.javaguide.cn/github/javaguide/java/jvm/class-file-fields-access_flag .png )
178
178
179
179
### 方法表集合(Methods)
180
180
@@ -193,7 +193,7 @@ Class 文件存储格式中对方法的描述与对字段的描述几乎采用
193
193
194
194
** 方法表的 access_flag 取值:**
195
195
196
- ![ 方法表的 access_flag 取值] ( https://oss.javaguide.cn/JVM/image-20201031084248965 .png )
196
+ ![ 方法表的 access_flag 取值] ( https://oss.javaguide.cn/github/javaguide/java/jvm/class-file-methods-access_flag .png )
197
197
198
198
注意:因为` volatile ` 修饰符和` transient ` 修饰符不可以修饰方法,所以方法表的访问标志中没有这两个对应的标志,但是增加了` synchronized ` 、` native ` 、` abstract ` 等关键字修饰方法,所以也就多了这些关键字对应的标志。
199
199
Original file line number Diff line number Diff line change @@ -3,21 +3,17 @@ title: RestFul API 简明教程
3
3
category : 代码质量
4
4
---
5
5
6
- ![ ] ( https://oss.javaguide.cn/system-design/basis/2021050713553862.png )
7
-
8
6
这篇文章简单聊聊后端程序员必备的 RESTful API 相关的知识。
9
7
10
8
开始正式介绍 RESTful API 之前,我们需要首先搞清:** API 到底是什么?**
11
9
12
10
## 何为 API?
13
11
14
- ![ ] ( https://oss.javaguide.cn/system-design/basis/20210507153833945.png )
15
-
16
12
** API(Application Programming Interface)** 翻译过来是应用程序编程接口的意思。
17
13
18
14
我们在进行后端开发的时候,主要的工作就是为前端或者其他后端服务提供 API 比如查询用户数据的 API 。
19
15
20
- ![ ] ( https://oss.javaguide.cn/system-design/basis/20210507130629538.png )
16
+ ![ ] ( https://oss.javaguide.cn/github/javaguide/ system-design/basis/20210507130629538.png )
21
17
22
18
但是, API 不仅仅代表后端系统暴露的接口,像框架中提供的方法也属于 API 的范畴。
23
19
@@ -66,7 +62,7 @@ POST /classes:新建一个班级
66
62
67
63
## RESTful API 规范
68
64
69
- ![ ] ( https://oss.javaguide.cn/system-design/basis/20210507154007779.png )
65
+ ![ ] ( https://oss.javaguide.cn/github/javaguide/ system-design/basis/20210507154007779.png )
70
66
71
67
### 动作
72
68
You can’t perform that action at this time.
0 commit comments