Skip to content

Commit 7d4f2fb

Browse files
committed
mysql
1 parent 10d1f63 commit 7d4f2fb

File tree

85 files changed

+8644
-8426
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

85 files changed

+8644
-8426
lines changed

docs/.DS_Store

0 Bytes
Binary file not shown.

docs/.obsidian/workspace.json

Lines changed: 8 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -31,30 +31,20 @@
3131
}
3232
}
3333
},
34-
{
35-
"id": "5fb9b5242c50d2a2",
36-
"type": "leaf",
37-
"state": {
38-
"type": "release-notes",
39-
"state": {
40-
"currentVersion": "1.3.5"
41-
}
42-
}
43-
},
4434
{
4535
"id": "0d9db99c2c25b1c2",
4636
"type": "leaf",
4737
"state": {
4838
"type": "markdown",
4939
"state": {
50-
"file": "data-management/MySQL/MySQL-Storage-Engines.md",
40+
"file": "framework/SpringWebFlux/响应式编程.md",
5141
"mode": "source",
5242
"source": false
5343
}
5444
}
5545
}
5646
],
57-
"currentTab": 3
47+
"currentTab": 1
5848
}
5949
],
6050
"direction": "vertical"
@@ -128,7 +118,7 @@
128118
"state": {
129119
"type": "backlink",
130120
"state": {
131-
"file": "data-management/MySQL/MySQL-Storage-Engines.md",
121+
"file": "data-structure-algorithms/Double-Pointer.md",
132122
"collapseAll": false,
133123
"extraContext": false,
134124
"sortOrder": "alphabetical",
@@ -145,7 +135,7 @@
145135
"state": {
146136
"type": "outgoing-link",
147137
"state": {
148-
"file": "data-management/MySQL/MySQL-Storage-Engines.md",
138+
"file": "data-structure-algorithms/Double-Pointer.md",
149139
"linksCollapsed": false,
150140
"unlinkedCollapsed": true
151141
}
@@ -168,7 +158,7 @@
168158
"state": {
169159
"type": "outline",
170160
"state": {
171-
"file": "data-management/MySQL/MySQL-Storage-Engines.md"
161+
"file": "data-structure-algorithms/Double-Pointer.md"
172162
}
173163
}
174164
}
@@ -189,8 +179,10 @@
189179
"command-palette:Open command palette": false
190180
}
191181
},
192-
"active": "0d9db99c2c25b1c2",
182+
"active": "264bec0c6c3126ab",
193183
"lastOpenFiles": [
184+
"framework/SpringWebFlux/响应式编程.md",
185+
"data-management/MySQL/MySQL-Storage-Engines.md",
194186
"data-structure-algorithms/algorithm/Backtracking.md",
195187
"data-structure-algorithms/algorithm/未命名.md",
196188
"data-structure-algorithms/Leetcode-dynamic-programming.md",

docs/data-management/.DS_Store

0 Bytes
Binary file not shown.

docs/data-management/MySQL/MySQL-Log.md

Lines changed: 96 additions & 52 deletions
Large diffs are not rendered by default.

docs/data-management/Redis/Redis-Datatype.md

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,10 @@
1-
# Redis 数据类型篇
1+
---
2+
title: Redis 数据类型篇
3+
date: 2022-08-25
4+
tags:
5+
- Redis
6+
categories: Redis
7+
---
28

39
> 一提到 Redis,我们的脑子里马上就会出现一个词:“快。”
410
>
0 Bytes
Binary file not shown.

docs/data-structure-algorithms/data-structure/Stack.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ categories: data-structure
2929
- 栈中数据是按照"后进先出(LIFO, Last In First Out)"方式进出栈的。
3030
- 向栈中添加/删除数据时,只能从栈顶进行操作。
3131

32-
![](https://static.javatpoint.com/ds/images/applications-of-stack-in-data-structure.png)
32+
![](https://img.starfish.ink/data-structure/applications-of-stack-in-data-structure.png)
3333

3434

3535

@@ -148,7 +148,7 @@ public class MyArrayStack implements MyStack {
148148

149149
下面以不带头结点的单链表为例实现栈,如下示意图所示:
150150

151-
![不带头结点单链表栈示意图](https://tva1.sinaimg.cn/large/007S8ZIlly1gh4n6ws71lj3106050aa4.jpg)
151+
![](https://img.starfish.ink/data-structure/stack-linked.png)
152152

153153
在上图中,top 为栈顶结点的引用,始终指向当前栈顶元素所在的结点。若 top 为null,则表示空栈。入栈操作是在 top 所指结点之前插入新的结点,使新结点的 next 域指向 top,top 前移即可;出栈则直接让 top 后移即可。
154154

@@ -300,7 +300,7 @@ public class Stack<E> extends Vector<E> {}
300300
301301

302302

303-
303+
### [739. 每日温度](https://leetcode.cn/problems/daily-temperatures/)
304304

305305
>请根据每日 `气温` 列表,重新生成一个列表。对应位置的输出为:要想观测到更高的气温,至少需要等待的天数。如果气温在这之后都不会升高,请在该位置用 `0` 来代替。
306306
>

docs/design-pattern/Builder-Pattern.md

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,7 @@ Builder Pattern,中文翻译为**建造者模式**或者**构建者模式**,
2424

2525
**定义**:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
2626

27-
![](https://tva1.sinaimg.cn/large/008i3skNly1grd7fknsyig60ek0854qp02.gif)
28-
29-
27+
![](https://img.starfish.ink/design-pattern/frc-8d65236e72e9b84771951a1f4af83e86.gif)
3028

3129

3230

docs/design-pattern/Factory-Pattern.md

Lines changed: 21 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,12 @@
1-
# 工厂模式——我有不止一个对象
1+
---
2+
title: 工厂模式——我有不止一个对象
3+
date: 2023-09-12
4+
tags:
5+
- Design Pattern
6+
categories: Design Pattern
7+
---
8+
9+
![](https://img.starfish.ink/design-pattern/banner-factory.jpg)
210

311
> 3年工作经验是吧?
412
>
@@ -16,8 +24,6 @@
1624

1725
在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。
1826

19-
<img src="https://tva1.sinaimg.cn/large/00831rSTly1gcmy3e9tbzg30p00ge16a.gif" style="zoom:33%;" />
20-
2127

2228

2329
### 工厂模式可以分为三类:
@@ -26,7 +32,7 @@
2632
- 工厂方法模式(Factory Method)
2733
- 抽象工厂模式(Abstract Factory)
2834

29-
简单工厂其实不是一个标准的的设计模式。GOF 23种设计模式中只有「工厂方法模式」与「抽象工厂模式」。简单工厂模式可以看为工厂方法模式的一种特例,为了统一整理学习,就都归为工厂模式。
35+
简单工厂其实不是一个标准的的设计模式。GOF 23 种设计模式中只有「工厂方法模式」与「抽象工厂模式」。简单工厂模式可以看为工厂方法模式的一种特例,为了统一整理学习,就都归为工厂模式。
3036

3137
这三种工厂模式在设计模式的分类中都属于**创建型模式**,三种模式从上到下逐步抽象。
3238

@@ -38,7 +44,7 @@
3844

3945
创建型模式隐藏了类的实例的创建细节,通过隐藏对象如何被创建和组合在一起达到使整个系统独立的目的。
4046

41-
工厂模式是创建型模式中比较重要的。工厂模式的主要功能就是帮助我们实例化对象。之所以名字中包含工厂模式四个字,是因为对象的实例化过程是通过工厂实现的,是用工厂代替new操作的
47+
工厂模式是创建型模式中比较重要的。工厂模式的主要功能就是帮助我们实例化对象。之所以名字中包含工厂模式四个字,是因为对象的实例化过程是通过工厂实现的,是用工厂代替 new 操作的
4248

4349
### 工厂模式优点:
4450

@@ -50,7 +56,7 @@
5056

5157
不管是简单工厂模式,工厂方法模式还是抽象工厂模式,他们具有类似的特性,所以他们的适用场景也是类似的。
5258

53-
首先,作为一种创建类模式,在任何需要生成**复杂对象**的地方,都可以使用工厂方法模式。有一点需要注意的地方就是复杂对象适合使用工厂模式,而简单对象,特别是只需要通过new就可以完成创建的对象,无需使用工厂模式。如果使用工厂模式,就需要引入一个工厂类,会增加系统的复杂度。
59+
首先,作为一种创建类模式,在任何需要生成**复杂对象**的地方,都可以使用工厂方法模式。有一点需要注意的地方就是复杂对象适合使用工厂模式,而简单对象,特别是只需要通过 new 就可以完成创建的对象,无需使用工厂模式。如果使用工厂模式,就需要引入一个工厂类,会增加系统的复杂度。
5460

5561
其次,工厂模式是一种典型的**解耦模式**,迪米特法则在工厂模式中表现的尤为明显。假如调用者自己组装产品需要增加依赖关系时,可以考虑使用工厂模式。将会大大降低对象之间的耦合度。
5662

@@ -146,9 +152,7 @@ public static void main(String[] args) {
146152
- Product:抽象类产品, 它是工厂类所创建的所有对象的父类,封装了各种产品对象的公有方法,它的引入将提高系统的灵活性,使得在工厂类中只需定义一个通用的工厂方法,因为所有创建的具体产品对象都是其子类对象
147153
- ConcreteProduct:具体产品, 它是简单工厂模式的创建目标,所有被创建的对象都充当这个角色的某个具体类的实例。它要实现抽象产品中声明的抽象方法
148154

149-
#### UML类图
150-
151-
![](https://tva1.sinaimg.cn/large/00831rSTly1gcp76z5g27j30li0fpjsv.jpg)
155+
![](https://img.starfish.ink/design-pattern/easy-factory-uml.png)
152156

153157
#### 实例
154158

@@ -199,7 +203,7 @@ public static void main(String[] args) {
199203

200204
### 1.3 简单工厂模式存在的问题
201205

202-
当我们需要增加一种计算时,例如开平方。这个时候我们需要先定义一个类继承Operation类,其中实现平方的代码。除此之外我们还要修改 OperationFactory 类的代码,增加一个 case。这显然是**违背开闭原则**的。可想而知对于新产品的加入,工厂类是很被动的。
206+
当我们需要增加一种计算时,例如开平方。这个时候我们需要先定义一个类继承 Operation 类,其中实现平方的代码。除此之外我们还要修改 OperationFactory 类的代码,增加一个 case。这显然是**违背开闭原则**的。可想而知对于新产品的加入,工厂类是很被动的。
203207

204208
我们举的例子是最简单的情况。而在实际应用中,很可能产品是一个多层次的树状结构。 简单工厂可能就不太适用了。
205209

@@ -236,7 +240,7 @@ public static void main(String[] args) {
236240

237241
#### UML类图
238242

239-
![](https://tva1.sinaimg.cn/large/00831rSTly1gcp774606hj30za0hagmu.jpg)
243+
![](https://img.starfish.ink/design-pattern/factory-uml.png)
240244

241245
#### 实例
242246

@@ -371,13 +375,13 @@ public class Client {
371375

372376
#### UML类图
373377

374-
![](https://tva1.sinaimg.cn/large/00831rSTly1gcp778i6yhj31gu0u0ahy.jpg)
378+
![](https://img.starfish.ink/design-pattern/abstract-facotry-uml.png)
375379

376380
#### 实例
377381

378382
我把维基百科的例子改下用于理解,假设我们要生产两种产品,键盘(Keyboard)和鼠标(Mouse) ,每一种产品都支持多种系列,比如 Mac 系列和 Windows 系列。这样每个系列的产品分别是 MacKeyboard WinKeyboard, MacMouse, WinMouse 。为了可以在运行时刻创建一个系列的产品族,我们可以为每个系列的产品族创建一个工厂 MacFactory 和 WinFactory 。每个工厂都有两个方法 CreateMouse 和 CreateKeyboard 并返回对应的产品,可以将这两个方法抽象成一个接口 HardWare 。这样在运行时刻我们可以选择创建需要的产品系列。
379383

380-
![](https://tva1.sinaimg.cn/large/00831rSTly1gcp77dgtchj31gu0u0ag5.jpg)
384+
![](https://img.starfish.ink/design-pattern/abstract-factory-demo.png)
381385

382386
1. 抽象产品
383387

@@ -499,7 +503,7 @@ public class Client {
499503

500504
### 3.4 抽象工厂模式总结
501505

502-
抽象工厂模式是工厂方法模式的进一步延伸,由于它提供了功能更为强大的工厂类并且具备较好的可扩展性,在软件开发中得以广泛应用,尤其是在一些框架和API类库的设计中,例如在Java语言的AWT(抽象窗口工具包)中就使用了抽象工厂模式,它使用抽象工厂模式来实现在不同的操作系统中应用程序呈现与所在操作系统一致的外观界面。抽象工厂模式也是在软件开发中最常用的设计模式之一。
506+
抽象工厂模式是工厂方法模式的进一步延伸,由于它提供了功能更为强大的工厂类并且具备较好的可扩展性,在软件开发中得以广泛应用,尤其是在一些框架和 API 类库的设计中,例如在 Java 语言的AWT(抽象窗口工具包)中就使用了抽象工厂模式,它使用抽象工厂模式来实现在不同的操作系统中应用程序呈现与所在操作系统一致的外观界面。抽象工厂模式也是在软件开发中最常用的设计模式之一。
503507

504508
**优点:**
505509

@@ -539,8 +543,8 @@ public class Client {
539543

540544
## 参考
541545

542-
https://blog.csdn.net/lovelion/article/details/17517213
546+
- https://blog.csdn.net/lovelion/article/details/17517213
543547

544-
https://wiki.jikexueyuan.com/project/java-design-pattern/abstract-factory-pattern.html
548+
- https://wiki.jikexueyuan.com/project/java-design-pattern/abstract-factory-pattern.html
545549

546-
https://blog.csdn.net/lovelion/article/details/17517213
550+
- https://blog.csdn.net/lovelion/article/details/17517213

docs/design-pattern/Prototype-Pattern.md

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,18 @@
1-
# 从原型模型到浅拷贝和深拷贝
1+
---
2+
title: 从原型模型到浅拷贝和深拷贝
3+
date: 2023-09-12
4+
tags:
5+
- Design Pattern
6+
categories: Design Pattern
7+
---
28

3-
## 问题
9+
![](https://img.starfish.ink/design-pattern/banner-prototype.jpg)
410

511
> 如果你有一个对象, 并希望生成与其完全相同的一个复制品, 你该如何实现呢?
612
>
713
> 首先, 你必须新建一个属于相同类的对象。 然后, 你必须遍历原始对象的所有成员变量, 并将成员变量值复制到新对象中。
814
9-
![](https://tva1.sinaimg.cn/large/007S8ZIlly1ghc9zjhrg7j30b4061glx.jpg)
15+
![](https://img.starfish.ink/design-pattern/format.png)
1016

1117
```java
1218
for (int i = 0; i < 10; i++) {
@@ -35,7 +41,7 @@ for (int i = 0; i < 10; i++) {
3541

3642
### 类图
3743

38-
![](https://tva1.sinaimg.cn/large/007S8ZIlly1ghcc24lo53j30ze0i20ud.jpg)
44+
![](https://img.starfish.ink/design-pattern/prototype-UML.png)
3945

4046
- Prototype : **原型** (Prototype) 接口将对克隆方法进行声明
4147

@@ -83,8 +89,6 @@ class Sheep implements Cloneable {
8389

8490
按业务的不同实现不同的原型对象,假设现在主角是王二小,羊群里有山羊、绵羊一大群
8591

86-
![](https://tva1.sinaimg.cn/large/007S8ZIlly1ghckw0rdprj305005i746.jpg)
87-
8892
```java
8993
public class Goat extends Sheep{
9094
public void graze() {
@@ -189,7 +193,7 @@ public class Client {
189193

190194
感兴趣的同学可以深入源码看下具体的实现,在 AbstractBeanFactory 的 `doGetBean()` 方法中
191195

192-
![](https://tva1.sinaimg.cn/large/007S8ZIlly1ghcodcuwidj324y0qiwrs.jpg)
196+
![](https://img.starfish.ink/design-pattern/prototype-demo-doGetBean.png)
193197

194198

195199

0 commit comments

Comments
 (0)