Skip to content

Commit d8974b2

Browse files
committed
Java
1 parent 668470a commit d8974b2

36 files changed

+3545
-188
lines changed

docs/HTTP/5_get和post比较.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
#九、GET 和 POST 比较
1+
# GET 和 POST 比较
22

33
## Http报文层面:
44

docs/Maven/1_Maven.md

Lines changed: 266 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,266 @@
1+
# Maven
2+
3+
Maven 是基于**项目对象模型(POM)**,可以通过一小段描述信息来管理项目的构建、报告和文档的软件项目管理工具。
4+
5+
[Maven 下载](http://maven.apache.org/download.cgi)
6+
7+
[Maven 官网](https://maven.apache.org/)
8+
9+
10+
11+
## Maven 目录结构
12+
13+
```html
14+
src
15+
|- main
16+
|--java
17+
|-- packages
18+
|-- resources
19+
|- test
20+
|--java
21+
|-- packages
22+
```
23+
24+
25+
26+
## Maven 坐标和仓库
27+
28+
### 坐标
29+
30+
- groupID
31+
32+
**项目组织**的唯一标识符,实际对应 java 的包的结构,即 main目录里 java 的目录结构。
33+
34+
- artifactID
35+
36+
**项目**的唯一标识符,实际对应项目的名称,就是项目根目录的名称。
37+
38+
groupId 和 artifactId 被统称为**坐标**。构件通过坐标作为其唯一标识。
39+
40+
groupId 一般为 `组织名+公司地址反写+项目名`,比如 `com.southeast.myprojects`
41+
42+
artifactId 一般为 `项目名-模块名`,比如`myprojects-demo`
43+
44+
则相应的 package 为 `com.southeast.myprojects.demo`
45+
46+
### 镜像仓库
47+
48+
setting.xml 文件中配置:
49+
50+
```html
51+
<mirror>
52+
<id>maven.net.cn</id>
53+
<mirrorOf>central</mirrorOf>
54+
<name>central mirror in china</name>
55+
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
56+
</mirror>
57+
```
58+
59+
### 修改本地仓库位置
60+
61+
setting.xml 文件中配置:
62+
63+
```html
64+
<localRepository>F:/Java/apache-maven-3.6.2-bin/repo</localRepository>
65+
```
66+
67+
68+
69+
## Maven 常用构建命令
70+
71+
### 1. 查看版本
72+
73+
```html
74+
mvn - v
75+
```
76+
77+
### 2. 编译
78+
79+
```html
80+
mvn compile
81+
```
82+
83+
### 3. 测试
84+
85+
```html
86+
mvn test
87+
```
88+
89+
### 4. 打包
90+
91+
```html
92+
mvn package
93+
```
94+
95+
### 5. 清除 target
96+
97+
```html
98+
mvn clean
99+
```
100+
101+
### 6. 安装 jar
102+
103+
```html
104+
mvn install
105+
```
106+
107+
### 7. 自动创建目录骨架
108+
109+
```html
110+
mvn archetype:generate
111+
# 按照提示进行选择
112+
```
113+
114+
```html
115+
mvn archetype:generate -DgroupId=组织名,公司网址反写+项目名
116+
-DartifactId=项目名-模块名
117+
-Dversion=版本号
118+
-Dpackage=代码所存在的包名
119+
```
120+
121+
122+
123+
## pom.xml 解析
124+
125+
- 指定当前 pom 版本
126+
127+
```html
128+
<modelVersion>
129+
```
130+
131+
- 坐标
132+
133+
```html
134+
<groupId>反写公司网址+项目名</groupId>
135+
<artifactId>项目名+模块名</artifactId>
136+
<!--
137+
第一个 0 表示大版本号
138+
第二个 0 表示分支版本号
139+
第三个 0 表示小版本号
140+
snapshot 快照
141+
alpha 内部测试
142+
beta 公测
143+
Release 稳定
144+
GA 正式发布
145+
-->
146+
<version>0.0.1snapshot</version>
147+
<!--
148+
默认是 jar
149+
war
150+
zip
151+
pom
152+
-->
153+
<packaging>jar</packaging>
154+
<!--
155+
项目描述名
156+
-->
157+
<name></name>
158+
<!--
159+
项目地址
160+
-->
161+
<url></url>
162+
```
163+
164+
- 依赖列表
165+
166+
```html
167+
<dependencies>
168+
<dependency>
169+
<groupId></groupId>
170+
<artifactId></artifactId>
171+
<version></version>
172+
<type></type>
173+
<!--
174+
依赖范围:
175+
compile 默认的范围,编译测试运行都有效
176+
provided 编译测试时有效
177+
runtime 测试运行时有效
178+
test 只在测试时有效
179+
system 与本机系统相关联,可移植性差
180+
import 导入的范围,只使用在 dependencyManagement 中,表示从其他的 pom 中导入 dependency 的配置
181+
-->
182+
<scope>test</scope>
183+
<!--
184+
设置依赖是否可选
185+
-->
186+
<optional></optional>
187+
<!--
188+
排除依赖
189+
-->
190+
<exclusions>
191+
<exclusion>
192+
<!--
193+
坐标
194+
-->
195+
</exclusion>
196+
</exclusions>
197+
</dependency>
198+
</dependencies>
199+
```
200+
201+
- 依赖管理
202+
203+
```html
204+
<dependencyManagement>
205+
<dependencies>
206+
<dependency></dependency>
207+
</dependencies>
208+
</dependencyManagement>
209+
```
210+
211+
- build 标签
212+
213+
```html
214+
<build>
215+
<!--
216+
插件列表
217+
-->
218+
<plugins>
219+
<plugin>
220+
<groupId></groupId>
221+
<artifactId></artifactId>
222+
<version></version>
223+
</plugin>
224+
</plugins>
225+
</build>
226+
```
227+
228+
- parent 标签(继承)
229+
230+
```html
231+
<parent>
232+
<!--
233+
坐标
234+
-->
235+
</parent>
236+
```
237+
238+
- modules 标签(聚合)
239+
240+
```html
241+
<modules>
242+
<module></module>
243+
</modules>
244+
```
245+
246+
## 依赖冲突
247+
248+
### 1. 短路优先
249+
250+
```html
251+
路径1:A -> B -> C -> X(jar)
252+
路径2:A -> D -> X(jar)
253+
```
254+
255+
这里优先选择路径 2。
256+
257+
### 2. 先声明先优先
258+
259+
如果路径长度相同,则谁先声明,先解析谁。
260+
261+
262+
263+
264+
265+
266+
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
# 主流消息中间件
2+
3+
## 1. ActiveMQ
4+
5+
ActiveMQ 是 Apache 出品的最流行的、性能强劲的开源消息总线,并且其是一个完全支持 JMS 规范的消息中间件。其丰富的 API、多种集群构建模式使得它成为业界老牌消息中间件,广泛应用于中小型企业。
6+
7+
## 2. Kafka
8+
9+
Kafka 是 LinkedIn 开源的分布式发布-订阅消息系统,目前属于 Apache 顶级项目。
10+
11+
Kafka 主要特点是基于 Pull 的模式来处理消息消费,追求高吞吐量,一开始的目的就是用于日志收集和传输。0.8 版本开始支持复制,不支持事务,对消息的重复、丢失、错误没有严格要求,适合产生大量数据的互联网服务的数据收集业务。
12+
13+
## 3. RocketMQ
14+
15+
RocketMQ 是阿里开源的消息中间件,目前也已经孵化为 Apache 顶级项目,它是纯 Java 开发,具有高吞吐量、高可用性、适合大规模分布式系统应用的特点。
16+
17+
RocketMQ 思路起源于 Kafka,它对消息的可靠传输及事务性做了优化,目前在阿里集团被广泛应用于交易、充值、流计算、消息推送、日志流式处理、binglog 分发等场景。
18+
19+
## 4. RabbitMQ
20+
21+
RabbitMQ 是使用 Erlang 语言开发的开源消息队列系统,基于 AMQP 协议来实现。
22+
23+
AMQP 的主要特征是面向消息、队列、路由(包括点对点和发布/订阅)、可靠性、安全。AMQP 协议更多用在企业系统内,对数据一致性、稳定性和可靠性要求很高的场景,对性能和吞吐量的要求还在其次。
24+
25+
## 对比
26+
27+
| 消息中间件 | ActiveMQ | Kafka | RocketMQ | RabbitMQ |
28+
| :----------------------: | :-----------------------------: | :----------------------------------------------------------: | :----------------------------------------------------------: | :------------------------------------------------: |
29+
| *吞吐量* | 万数量级 | 十万级,高吞吐 | 十万级,高吞吐 | 万数量级 |
30+
| *Topic 数量对吞吐量影响* | / | Topic 从几十到几百时,吞吐量会大幅度下降,<br/>在同等机器下,Kafka 尽量保证 Topic 数量不要过多,如果要支撑大规模的 Topic,需要增加更多的机器 | Topic 可达百/千级,吞吐量下降幅度小<br/>在同等机器下,可以支撑大量的 Topic | / |
31+
| *时效性* | 毫秒级 | 毫秒级 | 毫秒级 | 微秒级 |
32+
| *可用性* | 高<br/>基于主从架构实现高可用高 | 非常高<br/>分布式架构 | 非常高<br/>分布式架构 | 高<br/>基于主从架构实现高可用高 |
33+
| *可靠性* | 丢失数据的概率低 | 优化参数配置,<br/>可以做到零丢失 | 优化参数配置,<br/>可以做到零丢失 | 基本不会丢失数据 |
34+
| *功能* | 功能较完备 | 功能较为简单,主要支持简单的 MQ 功能,在大数据领域的实时计算以及日志采集被大规模使用 | MQ 功能较为完善,还是分布式的,扩展性好 | 基于 ErLang 开发,并发能力很强,性能极好,延时很低 |

docs/MySQL/RabbitMQ/2_RabbitMQ整合SpringBoot.md

Whitespace-only changes.
Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
# RabbitMQ 概述
2+
3+
## 简介
4+
5+
RabbitMQ 是一个开源的消息代理和队列服务器,用来通过普通协议在完全不同的应用中间共享数据,RabbitMQ 是使用 **Erlang 语言**来编写的,并且 RabbitMQ 是基于 AMQP 协议的。
6+
7+
特点:
8+
9+
- 开源、性能优秀,稳定性好
10+
- 提供可靠性消息投递模式(confirm)、返回模式(return)
11+
- 与 SpringAOP 完美的整合、API 丰富
12+
- 集群模式丰富,表达式配置,HA 模式,镜像队列模型
13+
- 保证数据不丢失的前提做到高可靠性、可用性
14+
15+
RabbitMQ 高性能的原因:
16+
17+
**Erlang 语言**最初用在交换机的架构模式,这样使得 RabbitMQ 在 Broker 之间进行数据交互的性能时非常优秀的。Erlang 的优点:Erlang 有着和原生 Socket 一样的延迟。
18+
19+
## AMQP 协议
20+
21+
AMQP(Advanced Message Queuing Protocol)协议,即高级消息队列协议。
22+
23+
AMQP 是具有现在特征的二进制协议。是一个提供统一消息服务的应用层标准高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。
24+
25+
### 协议模型
26+
27+
28+
29+
### 核心概念
30+
31+
32+
33+
34+
35+
![1574044351197](C:\Users\DHA\AppData\Roaming\Typora\typora-user-images\1574044351197.png)
36+
37+
38+
39+
40+
41+
![1574044966299](C:\Users\DHA\AppData\Roaming\Typora\typora-user-images\1574044966299.png)
42+
43+
44+
45+
46+
47+
![1574045181833](C:\Users\DHA\AppData\Roaming\Typora\typora-user-images\1574045181833.png)
48+
49+
50+
51+
![1574045266808](C:\Users\DHA\AppData\Roaming\Typora\typora-user-images\1574045266808.png)
52+
53+
![1574045345331](C:\Users\DHA\AppData\Roaming\Typora\typora-user-images\1574045345331.png)
54+
55+
![1574045528395](C:\Users\DHA\AppData\Roaming\Typora\typora-user-images\1574045528395.png)
56+
57+
![1574045635960](C:\Users\DHA\AppData\Roaming\Typora\typora-user-images\1574045635960.png)
58+
59+
60+
61+
![1574045733769](C:\Users\DHA\AppData\Roaming\Typora\typora-user-images\1574045733769.png)
62+
63+
64+
65+
![1574044393028](C:\Users\DHA\AppData\Roaming\Typora\typora-user-images\1574044393028.png)
66+
67+
![1574045701316](C:\Users\DHA\AppData\Roaming\Typora\typora-user-images\1574045701316.png)
68+
69+
70+
71+
![1574045865612](C:\Users\DHA\AppData\Roaming\Typora\typora-user-images\1574045865612.png)
72+
73+
74+
75+
![1574044458688](C:\Users\DHA\AppData\Roaming\Typora\typora-user-images\1574044458688.png)
76+

docs/MySQL/RabbitMQ/3_消息可靠性投递的解决方案实现.md

Whitespace-only changes.

0 commit comments

Comments
 (0)