Skip to content

Commit 6efa773

Browse files
committed
📝jvm-faq
1 parent 0984f5b commit 6efa773

19 files changed

+1012
-65
lines changed
Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
https://www.redhat.com/zh/topics/data-storage
2+
3+
## 数据存储
4+
5+
自磁盘系统问世以来,数据存储已经走过了一段漫长的历程。诚然,磁盘系统仍然在广泛应用。但如今它们已接入网络并由软件来定义,因此您可以完全控制其格式。
6+
7+
## 什么是数据存储?
8+
9+
数据存储是信息技术对您每天所需的数据内容(从应用到网络协议,从文档到媒体,从地址簿到用户首选项)进行归档、整理和共享的过程。数据存储是[大数据](https://www.redhat.com/zh/topics/big-data)的核心环节。
10+
11+
*试想一下,*计算机就像大脑一样。两者都有短期记忆和长期记忆。大脑通过前额叶皮层来处理短期记忆,而计算机则利用随机存取存储器(RAM)来处理短期记忆。
12+
13+
大脑和 RAM 都要在清醒的状态下处理并记住事务,并且在工作一会儿后会感到疲倦。大脑在睡眠时会将工作记忆转换为长期记忆,而计算机则在睡眠时将活动记忆转换为存储卷。计算机还会按类型来分配数据,就像大脑按语义、空间、情感或规程来分配记忆一样。
14+
15+
16+
17+
## 数据存储设备简史
18+
19+
在 Gordan Haff 和 William Henry 所著是[*《从瓶瓶罐罐到程序和应用:软件如何学会自我包装》*](https://s3.amazonaws.com/grhpublic/packaging_book_FINAL_ebook.pdf)(From Pots and Vats to Programs and Apps: How Software Learned to Package Itself)的前几十页中,或许可以了解数据存储设备发展的整个精彩历史。
20+
21+
文中,Haff 和 Henry 描述了一位 1725 年的纺织工人如何运用受自动风琴滚筒启发的穿孔卡对织布机进行编程。作为 1890 年美国人口普查的一部分,穿孔卡也被用于将信息输送到 19 世纪的计算机中。在 1950 年代磁带机出现之前,这种方式一直盛行。此后,磁带机的尺寸不断缩小,直到变成盒式磁带。
22+
23+
在 1970 年代即将来临之前,IBM 推出了软盘,随即在各个行业得到广泛应用。软盘可以初始化大型机、存储软件应用,并且在硬盘驱动器(HDD)价格下降之前是唯一可用的永久存储设备。1980 年代,在硬盘的基础上推出了光盘(CD),而固态驱动器(SSD)则用固态芯片和闪存取代了旋转型磁盘。现在,闪存可以装在我们的口袋中,它可以存放我们想要或需要的所有内容的硬拷贝。
24+
25+
26+
27+
28+
29+
文件、块和对象是三种以不同的方式来保存、整理和呈现数据的[存储](https://www.redhat.com/zh/partners/Sales_Resources)格式。这些格式各有各的功能和限制。文件存储会以文件和文件夹的层次结构来整理和呈现数据;块存储会将数据拆分到任意划分且大小相同的卷中; 对象存储会管理数据并将其链接至关联的元数据。
30+
31+
------
32+
33+
## 什么是文件存储?
34+
35+
![img](https://www.redhat.com/cms/managed-files/fileStorage_orange_320x242_0.png)
36+
37+
文件存储也称为文件级存储或基于文件的存储,且正如您所想:数据会以单条信息的形式存储在文件夹中,正如您将几张纸放入一个马尼拉文件夹中一样。当您需要访问该数据时,您的计算机需要知道相应的查找路径。(注意,这可能会是一条蜿蜒冗长的路径。)存储在文件中的数据会根据数量有限的元数据来进行整理和检索,这些元数据会告诉计算机文件所在的确切位置。它就像是数据文件的库卡目录。
38+
39+
*请试想一下塞满文件柜的储藏室*。每个文档都会按照某种类型的逻辑层次结构来排放 ——按文件柜、抽屉、文件夹,然后再是纸张。“分层存储”这个术语就是这么来的,而这就是文件存储。它是适用于直接和[网络附加存储](https://www.redhat.com/zh/topics/data-storage/network-attached-storage)系统的最古老且运用最为广泛的一种数据存储系统;而且,这种系统您可能已经用了数十年。只要您访问保存在个人计算机上的文件中的文档,您就是在使用文件存储。文件存储具有丰富多样的功能,几乎可以存储任何内容。它非常适合用来存储一系列复杂文件,并且有助于用户快速导航。
40+
41+
问题是,就像文件柜一样,虚拟抽屉只能打开到一定的程度。基于文件的存储系统必须通过添置更多系统来进行横向扩展,而不是通过增添更多容量来进行纵向扩展。
42+
43+
------
44+
45+
## 什么是块存储?
46+
47+
![img](https://www.redhat.com/cms/managed-files/blockStorage_orange_320x242_0.png)
48+
49+
块存储会将数据拆分成块,并单独存储各个块。每个数据块都有一个唯一标识符,所以存储系统能将较小的数据存放在最方便的位置。这意味着有些数据可以存储在 Linux 环境中,有些则可以存储在 Windows 单元中。
50+
51+
块存储通常会被配置为将数据与用户环境分离,并会将数据分布到可以更好地为其提供服务的多个环境中。然后,当用户请求数据时,底层存储软件会重新组装来自这些环境的数据块,并将它们呈现给用户。它通常会部署在存储区域网络 (SAN) 环境中,而且必须绑定到正常运行的服务器。
52+
53+
由于块存储不依赖于单条数据路径(和文件存储一样),因此可以实现快速检索。每个块都独立存在,且可进行分区,因此可以通过不同的操作系统进行访问,这使得用户可以完全自由地配置数据。它是一种高效可靠的数据存储方式,且易于使用和管理。它适用于要执行大型事务的企业和部署了大型数据库的企业。这意味着,需要存储的数据越多,就越适合使用块存储。
54+
55+
但是,块存储有一些缺点。块存储的成本高昂。它处理元数据的能力有限;这意味着,它需要在应用或数据库级别进行处理 — 开发人员或系统管理员又多了一件事要担忧。
56+
57+
------
58+
59+
## 什么是对象存储?
60+
61+
![img](https://www.redhat.com/cms/managed-files/objectStorage_orange_360x198_0.png)
62+
63+
对象存储,也称为基于对象的存储,是一种扁平结构,其中的文件被拆分成多个部分并散布在多个硬件间。在对象存储中,数据会被分解为称为“对象”的离散单元,并保存在单个存储库中,而不是作为文件夹中的文件或服务器上的块来保存。
64+
65+
对象存储卷会作为模块化单元来工作:每个卷都是一个自包含式存储库,均含有数据、允许在分布式系统上找到对象的唯一标识符以及描述数据的元数据。元数据很重要,其包括年龄、隐私/安全信息和访问突发事件等详细信息。对象存储元数据也可以非常详细,并且能够存储与视频拍摄地点、所用相机和各个帧中特写的演员有关的信息。为了检索数据,存储操作系统会使用元数据和标识符,这样可以更好地分配负载,并允许管理员应用策略来执行更强大的搜索。
66+
67+
对象存储需要一个简单的 HTTP [应用编程接口 (API)](https://www.redhat.com/zh/topics/api/what-are-application-programming-interfaces),以供大多数客户端(各种语言)使用。对象存储经济高效:您只需为已用的内容付费。它可以轻松扩展,因而是[公共云](https://www.redhat.com/zh/topics/cloud-computing/what-is-public-cloud)存储的理想之选。它是一个非常适用于静态数据的存储系统,其灵活性和扁平性意味着它可以通过扩展来存储极大量的数据。对象具有足够的信息供应用快速查找数据,并且擅长存储非结构化数据。
68+
69+
当然,它也存在缺点。无法修改对象 — 您必须一次性完整地写入对象。对象存储也不能很好地与传统数据库搭配使用,因为编写对象是一个缓慢的过程,编写应用以使用对象存储 API 并不像使用文件存储那么简单。
70+
71+
72+
73+
74+
75+
https://www.redhat.com/zh/topics/data-storage/file-block-object-storage

docs/data-structure/tree.md

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,12 @@
66

77
##
88

9-
树是一种数据结构,它是由n(n>=0)个有限节点组成一个具有层次关系的集合,存储的是具有“一对多”关系的数据元素的集合。把它叫做“树”是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的,具有的特点
9+
树是一种数据结构,它是由n(n>=0)个有限节点组成一个具有层次关系的集合,存储的是具有“一对多”关系的数据元素的集合。把它叫做“树”是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的
1010

11-
- 除根节点之外的节点被划分为非空集,其中每个节点将被称为子树
12-
- 树的节点要么保持它们之间的父子关系,要么它们是姐妹节点
13-
- 在通用树中,一个节点可以具有任意数量的子节点,但它只能有一个父节点
14-
- 下图显示了一棵树,其中节点`A`是树的根节点,而其他节点可以看作是`A`的子节点
11+
- 除根节点之外的节点被划分为非空集,其中每个节点将被称为子树
12+
- 树的节点要么保持它们之间的父子关系,要么它们是姐妹节点
13+
- 在通用树中,一个节点可以具有任意数量的子节点,但它只能有一个父节点
14+
- 下图显示了一棵树,其中节点`A`是树的根节点,而其他节点可以看作是`A`的子节点
1515

1616
![tree-demo](https://tva1.sinaimg.cn/large/007S8ZIlly1gdu6xqrnnfj31920hotcv.jpg)
1717

@@ -39,7 +39,7 @@
3939

4040
#### 遍历
4141

42-
遍历的含义就是把树的所有节点(Node)按照**某种顺序**访问一遍。包括**前序****中序****后续****广度优先**(队列),**深度优先**(栈)5中遍历方法
42+
遍历的含义就是把树的所有节点(Node)按照**某种顺序**访问一遍。包括**前序****中序****后续****广度优先**(队列),**深度优先**(栈)5种遍历方法
4343

4444
| 遍历方法 | 顺序 | 示意图 | 顺序 | 应用 |
4545
| :------: | :----------------------: | :----------------------------------------------------------: | -------- | :----------------------------------------------------------: |
@@ -475,7 +475,7 @@ AVL 树和二叉查找树的删除操作情况一致,都分为四种情况:
475475

476476
  假设,将要插入的节点标为**N**,N的父节点标为**P**,N的祖父节点标为**G**,N的叔父节点标为**U**。在图中展示的任何颜色要么是由它所处情形这些所作的假定,要么是假定所暗含的。
477477

478-
  **情形1:** 该树为空树,直接插入根结点的位置,违反性质1,把节点颜色有红改为黑即可
478+
  **情形1:** 该树为空树,直接插入根结点的位置,违反性质1,把节点颜色由红改为黑即可
479479

480480
  **情形2:** 插入节点N的父节点P为黑色,不违反任何性质,无需做任何修改。在这种情形下,树仍是有效的。性质5也未受到威胁,尽管新节点N有两个黑色叶子子节点;但由于新节点N是红色,通过它的每个子节点的路径就都有同通过它所取代的黑色的叶子的路径同样数目的黑色节点,所以依然满足这个性质。
481481

docs/data-structure/数组.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,8 @@ https://leetcode-cn.com/explore/learn/card/array-and-string/198/introduction-to-
2828

2929
如果数组不存在中心索引,那么我们应该返回 -1。如果数组有多个中心索引,那么我们应该返回最靠近左边的那一个。
3030

31+
32+
3133
#### 至少是其他数字两倍的最大数
3234

3335
在一个给定的数组`nums`中,总是存在一个最大元素 。
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
MyBatis是一个支持**普通SQL查询****存储过程****高级映射**的优秀**持久层框架**。MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装。MyBatis可以使用简单的**XML或注解**用于配置和原始映射,将接口和Java的POJO(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录。
2+

0 commit comments

Comments
 (0)