Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
沉默王二
Jmx Java
提交
f0565d27
J
Jmx Java
项目概览
沉默王二
/
Jmx Java
9 个月 前同步成功
通知
160
Star
18
Fork
2
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
J
Jmx Java
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
f0565d27
编写于
5月 12, 2022
作者:
沉默王二
💬
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
图片保存
上级
e8556953
变更
12
隐藏空白更改
内联
并排
Showing
12 changed file
with
109 addition
and
109 deletion
+109
-109
docs/cityselect/zhengzhou.md
docs/cityselect/zhengzhou.md
+1
-1
docs/download/jianli.md
docs/download/jianli.md
+8
-8
docs/download/progit.md
docs/download/progit.md
+9
-9
docs/elasticsearch/rumen.md
docs/elasticsearch/rumen.md
+12
-12
docs/exception/npe.md
docs/exception/npe.md
+1
-1
docs/io/BIONIOAIO.md
docs/io/BIONIOAIO.md
+13
-13
docs/java8/optional.md
docs/java8/optional.md
+2
-2
docs/jvm/tujie-gc.md
docs/jvm/tujie-gc.md
+8
-8
docs/mongodb/rumen.md
docs/mongodb/rumen.md
+14
-14
docs/mq/rabbitmq-rumen.md
docs/mq/rabbitmq-rumen.md
+12
-12
docs/springboot/ioc.md
docs/springboot/ioc.md
+28
-28
docs/szjy/tobebetterjavaer-beian.md
docs/szjy/tobebetterjavaer-beian.md
+1
-1
未找到文件。
docs/cityselect/zhengzhou.md
浏览文件 @
f0565d27
...
...
@@ -54,7 +54,7 @@ tag:
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/cityselect/zhengzhou-caa46657-f65d-4965-b553-c9f4502f3cc9.png
)
![
点击并拖拽以移动
](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/cityselect/zhengzhou-62496f27-fe20-45c6-b116-90a38e607a09
)
![
点击并拖拽以移动
](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/cityselect/zhengzhou-62496f27-fe20-45c6-b116-90a38e607a09
.jpg
)
### UU 跑腿
...
...
docs/download/jianli.md
浏览文件 @
f0565d27
...
...
@@ -38,7 +38,7 @@ tag:
首先来看一下这位学弟的专业技能部分。
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/download/jianli-2c93d164-55f7-4d2f-b0d0-f0857644a265
)
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/download/jianli-2c93d164-55f7-4d2f-b0d0-f0857644a265
.jpg
)
其实,这部分他写的已经挺好的了,简单大方、条理清晰。
...
...
@@ -68,13 +68,13 @@ tag:
下面是我当时给他的修改意见。
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/download/jianli-f5c60946-3cdd-4ac6-9e20-8360808f8612
)
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/download/jianli-f5c60946-3cdd-4ac6-9e20-8360808f8612
.jpg
)
### 项目经历
其实一份校招简历,最重要的就是项目经历、实习经历(有则加分,没有也行)、专业技能了。
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/download/jianli-a715eaa8-86c5-41ce-aee7-cd1873e2eec8
)
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/download/jianli-a715eaa8-86c5-41ce-aee7-cd1873e2eec8
.jpg
)
可以从这位学弟的描述中看出来,他毕业后的这四个月里确实做了不少的工作,但感觉没说出来自己所做工作的意义和难点所在。
...
...
@@ -108,7 +108,7 @@ tag:
以下是修改意见标注
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/download/jianli-5b6ff7c0-c8ad-4874-8ee8-7593e3ee1f5f
)
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/download/jianli-5b6ff7c0-c8ad-4874-8ee8-7593e3ee1f5f
.jpg
)
至此,帮他把第一个项目修改完毕了,
**针对第二个项目的修改**
,我就不多BB了,直接贴上来吧。
...
...
@@ -122,7 +122,7 @@ tag:
**下面是当时给他做的标注**
:
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/download/jianli-f2aec848-d462-491b-9fe1-7d939ea16ed8
)
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/download/jianli-f2aec848-d462-491b-9fe1-7d939ea16ed8
.jpg
)
其实对于该部分的修改,我是紧紧抓住一个要点,那就是尽可能使用具化的指标即明确的信息而不是概括性的描述。
...
...
@@ -136,12 +136,12 @@ tag:
首先是原文。
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/download/jianli-eabee6e7-0fcf-4fb7-9ca8-0ada1c604acf
)
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/download/jianli-eabee6e7-0fcf-4fb7-9ca8-0ada1c604acf
.jpg
)
我给的修改意见批注。
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/download/jianli-bb7279ad-dd46-47ea-8f13-37d5caaf404e
)
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/download/jianli-bb7279ad-dd46-47ea-8f13-37d5caaf404e
.jpg
)
1、在工作经历这里,注意细节问题,比如你的岗位名称是什么?你在实习过程中,你的工作有哪些?在这过程中用到了哪些技能?
...
...
@@ -183,4 +183,4 @@ tag:
我是二哥呀,人生最可怕的事莫过于在别人放弃你之前,你先放弃了自己,我们下期再见。
>作者:阿秀,转载链接:
https://mp.weixin.qq.com/s/soVldFzBbqwm_vM35afFvg
>作者:阿秀,转载链接:
[https://mp.weixin.qq.com/s/soVldFzBbqwm_vM35afFvg](https://mp.weixin.qq.com/s/soVldFzBbqwm_vM35afFvg)
docs/download/progit.md
浏览文件 @
f0565d27
...
...
@@ -8,7 +8,7 @@ tag:
今天给大家分享一本个人最近看过觉得非常不错的Git开源手册,可能有些小伙伴也看过了,我是最近在通勤路上用PAD看的。这本开源手册,它除了有
**PDF版**
,还有
**epub电子书版**
,非常适合电子阅读:
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/download/progit-41240dae-f097-4986-b1a3-20f6a8035732
)
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/download/progit-41240dae-f097-4986-b1a3-20f6a8035732
.jpg
)
需要的小伙伴请扫描下方的二维码关注作者的原创公众号「
**沉默王二**
」回复关键字「
**git**
」就可以拉取到下载链接了。
...
...
@@ -18,27 +18,27 @@ tag:
这本手册在豆瓣上评价极高,之前9.3,现在也有9.1的高分,其作者是GitHub的员工,内容主要侧重于各种场合中的惯用法和底层原理的讲述,手册中还针对不同的使用场景,设计了几个合适的版本管理策略。简而言之,这本手册无论是对于初学者还是想进一步了解Git工作原理的开发者都非常合适。
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/download/progit-66757d24-4bcb-4084-9e7f-8e9e32d517c4
)
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/download/progit-66757d24-4bcb-4084-9e7f-8e9e32d517c4
.jpg
)
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/download/progit-b829ef9a-3c8f-4e91-b88b-3eeb1692d8d9
)
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/download/progit-b829ef9a-3c8f-4e91-b88b-3eeb1692d8d9
.jpg
)
这个手册一共分为十章,详细内容如下:
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/download/progit-33b772d5-fa59-4181-8831-9efe9c1b11ea
)
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/download/progit-33b772d5-fa59-4181-8831-9efe9c1b11ea
.jpg
)
**手册中部分内容展示如下:**
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/download/progit-f8c62f18-ceaa-4de1-b7ad-961cd1418bfb
)
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/download/progit-f8c62f18-ceaa-4de1-b7ad-961cd1418bfb
.jpg
)
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/download/progit-d82932c6-5a30-4ed6-86e5-e4ca468e8a13
)
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/download/progit-d82932c6-5a30-4ed6-86e5-e4ca468e8a13
.jpg
)
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/download/progit-ca7c7781-7c3f-4729-9cd7-2c050b660e4e
)
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/download/progit-ca7c7781-7c3f-4729-9cd7-2c050b660e4e
.jpg
)
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/download/progit-91c726c1-a10d-41fb-8b2a-a5228d741106
)
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/download/progit-91c726c1-a10d-41fb-8b2a-a5228d741106
.jpg
)
**需要该Git手册PDF+epub电子书的小伙伴:**
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/download/progit-eff913ad-4635-498f-8a04-01a03380e84a
)
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/download/progit-eff913ad-4635-498f-8a04-01a03380e84a
.jpg
)
可扫描下方的二维码关注作者的原创公众号「
**沉默王二**
」回复关键字「
**git**
」就可以拉取到下载链接了。
...
...
docs/elasticsearch/rumen.md
浏览文件 @
f0565d27
...
...
@@ -13,7 +13,7 @@ tag:
经过三天三夜的学习,总算是入了 Elasticsearch 的门,我就决定把这些心得体会分享出来,感兴趣的小伙伴可以作为参考。遇到文章中有错误的地方,不要手下留情,过来捶我,只要不打脸就好。
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/elasticsearch/rumen-ebb2bdbc-2cdb-4540-b48f-41f92c848f2f
)
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/elasticsearch/rumen-ebb2bdbc-2cdb-4540-b48f-41f92c848f2f
.jpg
)
### 01、Elasticsearch 是什么
...
...
@@ -24,7 +24,7 @@ tag:
Elastic Stack 又是什么呢?整个架构图如下图(来源于网络,侵删)所示。
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/elasticsearch/rumen-04b04318-25c9-4eb5-895e-9c608a4b26f9
)
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/elasticsearch/rumen-04b04318-25c9-4eb5-895e-9c608a4b26f9
.jpg
)
信息量比较多,对吧?那就记住一句话吧,Elasticsearch 是 Elastic Stack 的核心。
...
...
@@ -44,7 +44,7 @@ Elasticsearch 是由 Java 开发的,所以早期的版本需要先在电脑上
Elasticsearch 是免安装的,只需要把 zip 包解压就可以了。
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/elasticsearch/rumen-07da0521-74eb-4a90-b17f-59258e622609
)
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/elasticsearch/rumen-07da0521-74eb-4a90-b17f-59258e622609
.jpg
)
1)bin 目录下是一些脚本文件,包括 Elasticsearch 的启动执行文件。
...
...
@@ -62,11 +62,11 @@ Elasticsearch 是免安装的,只需要把 zip 包解压就可以了。
直接双击 bin 目录下的 elasticsearch.bat 文件就可以启动 Elasticsearch 服务了。
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/elasticsearch/rumen-7dd19afd-1aeb-49b6-a07c-f11e139fe3d3
)
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/elasticsearch/rumen-7dd19afd-1aeb-49b6-a07c-f11e139fe3d3
.jpg
)
输出的日志信息有点多,不用细看,注意看到有“started”的字样就表明启动成功了。为了进一步确认 Elasticsearch 有没有启动成功,可以在浏览器的地址栏里输入
`http://localhost:9200`
进行查看(9200 是 Elasticsearch 的默认端口号)。
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/elasticsearch/rumen-51f269c2-7482-494a-8a04-6585f20176a7
)
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/elasticsearch/rumen-51f269c2-7482-494a-8a04-6585f20176a7
.jpg
)
你看,为了 Search。
...
...
@@ -82,29 +82,29 @@ Elasticsearch 是免安装的,只需要把 zip 包解压就可以了。
最新的版本是 7.6.2,284M 左右,体积和 Elasticsearch 差不多。选择下载 Windows 版,zip 格式的,完成后直接解压就行了。下载的过程中又去洗了 6 颗葡萄吃,狗头。
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/elasticsearch/rumen-12372ee6-acc0-4425-964b-ca32886f17ce
)
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/elasticsearch/rumen-12372ee6-acc0-4425-964b-ca32886f17ce
.jpg
)
包目录不再一一解释了,进入 bin 目录下,双击运行 kibana.bat 文件,启动 Kibana 服务。整个过程比 Elasticsearch 要慢一些,当看到
`[Kibana][http] http server running`
的信息后,说明服务启动成功了。
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/elasticsearch/rumen-784d70ef-b6e7-4312-85f1-36ace9b2a5bd
)
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/elasticsearch/rumen-784d70ef-b6e7-4312-85f1-36ace9b2a5bd
.jpg
)
在浏览器地址栏输入
`http://localhost:5601`
查看 Kibana 的图形化界面。
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/elasticsearch/rumen-e6f64545-a925-4bb4-a25e-44129832fb4e
)
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/elasticsearch/rumen-e6f64545-a925-4bb4-a25e-44129832fb4e
.jpg
)
由于当前的 Elasticsearch 服务端中还没有任何数据,所以我们可以选择「Try Our Sample Data」导入 Kibana 提供的模拟数据体验一下。下图是导入电商数据库的看板页面,是不是很丰富?
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/elasticsearch/rumen-a16d99ff-272d-43bb-aa94-23b240cc464b
)
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/elasticsearch/rumen-a16d99ff-272d-43bb-aa94-23b240cc464b
.jpg
)
打开 Dev Tools 面板,可以看到一个简单的 DSL 查询语句(一种完全基于 JSON 的特定于领域的语言),点击「运行」按钮后就可以看到 JSON 格式的数据了。
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/elasticsearch/rumen-5c44bd79-d3a9-49fb-9414-04dc38840cfb
)
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/elasticsearch/rumen-5c44bd79-d3a9-49fb-9414-04dc38840cfb
.jpg
)
### 04、Elasticsearch 的关键概念
在进行下一步之前,需要先来理解 Elasticsearch 中的几个关键概念,比如说什么是索引,什么是类型,什么是文档等等。Elasticsearch 既然是一个数据引擎,它里面的一些概念就和 MySQL 有一定的关系。
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/elasticsearch/rumen-ad2b2f8c-5a19-4c5e-9bc7-cf7ba17830bf
)
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/elasticsearch/rumen-ad2b2f8c-5a19-4c5e-9bc7-cf7ba17830bf
.jpg
)
看完上面这幅图(来源于网络,侵删),是不是瞬间就清晰了。向 Elasticsearch 中存储数据,其实就是向 Elasticsearch 中的 index 下面的 type 中存储 JSON 类型的数据。
...
...
@@ -175,7 +175,7 @@ public class ElasticsearchTest {
也可以通过 Kibana 的 Dev Tools 面板查看“writer”索引,结果如下图所示。
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/elasticsearch/rumen-64baa243-0075-436e-a070-f28813fee284
)
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/elasticsearch/rumen-64baa243-0075-436e-a070-f28813fee284
.jpg
)
...
...
docs/exception/npe.md
浏览文件 @
f0565d27
...
...
@@ -171,7 +171,7 @@ Object听到这话,皱了皱眉,他沉默了一会儿,缓缓站起身子
我见他好像魔怔了,仿佛在思考什么,于是迈步走到他刚才站立的地方看着前面,原来,这是他们的族谱!这里是异常的祠堂!
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/exception/npe-1
)
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/exception/npe-1
.jpg
)
看完这张族谱,我恍然大悟,好像明白了什么。突然,我的脑袋里出现了一个冰冷的机器声音:“获取异常族谱,历练完成度+100。”
...
...
docs/io/BIONIOAIO.md
浏览文件 @
f0565d27
...
...
@@ -10,13 +10,13 @@ tag:
周末午后,在家里面进行电话面试,我问了面试者几个关于 IO 的问题,其中包括什么是 BIO、NIO 和 AIO?三者有什么区别?具体如何使用等问题,但是面试者回答的并不是很满意。于是我在面试评价中写道:"对 Java 的 IO 提醒理解不够深入"。恰好被女朋友看到了。
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/io/BIONIOAIO-1
)
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/io/BIONIOAIO-1
.jpg
)
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/io/BIONIOAIO-2
)
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/io/BIONIOAIO-2
.jpg
)
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/io/BIONIOAIO-3.gif
)
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/io/BIONIOAIO-4
)
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/io/BIONIOAIO-4
.jpg
)
Java IO
...
...
@@ -30,7 +30,7 @@ IO,常协作 I/O,是 Input/Output 的简称,即输入/输出。通常指
IO 是 Java 中比较重要,且比较难的知识点,主要是因为随着 Java 的发展,目前有三种 IO 共存。分别是 BIO、NIO 和 AIO。
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/io/BIONIOAIO-5
)
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/io/BIONIOAIO-5
.jpg
)
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/io/BIONIOAIO-6.gif
)
...
...
@@ -56,11 +56,11 @@ Java AIO,全程 Asynchronous IO,是**异步非阻塞**的 IO。是一种非
在 NIO 的基础上引入了新的异步通道的概念,并提供了异步文件通道和异步套接字通道的实现。
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/io/BIONIOAIO-8
)
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/io/BIONIOAIO-8
.jpg
)
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/io/BIONIOAIO-9
)
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/io/BIONIOAIO-9
.jpg
)
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/io/BIONIOAIO-10
)
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/io/BIONIOAIO-10
.jpg
)
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/io/BIONIOAIO-11.gif
)
...
...
@@ -86,11 +86,11 @@ Java AIO,全程 Asynchronous IO,是**异步非阻塞**的 IO。是一种非
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/io/BIONIOAIO-12.gif
)
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/io/BIONIOAIO-13
)
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/io/BIONIOAIO-13
.jpg
)
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/io/BIONIOAIO-14
)
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/io/BIONIOAIO-14
.jpg
)
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/io/BIONIOAIO-15
)
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/io/BIONIOAIO-15
.jpg
)
适用场景
...
...
@@ -280,13 +280,13 @@ public class WriteToFile {
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/io/BIONIOAIO-20.gif
)
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/io/BIONIOAIO-21
)
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/io/BIONIOAIO-21
.jpg
)
滴滴滴,水开了。
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/io/BIONIOAIO-22
)
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/io/BIONIOAIO-22
.jpg
)
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/io/BIONIOAIO-23
)
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/io/BIONIOAIO-23
.jpg
)
...
...
docs/java8/optional.md
浏览文件 @
f0565d27
...
...
@@ -13,7 +13,7 @@ date: 2019-01-01
当然了,我们程序员是富有责任心的,不会坐视不管,于是就有了大量的 null 值检查。尽管有时候这种检查完全没有必要,但我们已经习惯了例行公事。终于,Java 8 看不下去了,就引入了 Optional,以便我们编写的代码不再那么刻薄呆板。
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/java8/optional-1
)
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/java8/optional-1
.jpg
)
### 01、没有 Optional 会有什么问题
...
...
@@ -350,7 +350,7 @@ public class OptionalMapFilterDemo {
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/java8/optional-2
)
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/java8/optional-2
.jpg
)
好了,我亲爱的读者朋友,以上就是本文的全部内容了——可以说是史上最佳 Optional 指南了,能看到这里的都是最优秀的程序员,二哥必须要伸出大拇指为你点个赞。
...
...
docs/jvm/tujie-gc.md
浏览文件 @
f0565d27
...
...
@@ -64,37 +64,37 @@ Major GC 也会触发STW(Stop the World)。通常,Major GC会慢很多,
首先,将任何新对象分配给 eden 空间。 两个 survivor 空间都是空的。
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/jvm/tujie-gc-efe9657b-c7a6-48a8-9037-0e709b1d236c
)
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/jvm/tujie-gc-efe9657b-c7a6-48a8-9037-0e709b1d236c
.jpg
)
当 eden 空间填满时,会触发轻微的垃圾收集。
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/jvm/tujie-gc-2497947b-92b5-4a7c-9399-1909a3153660
)
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/jvm/tujie-gc-2497947b-92b5-4a7c-9399-1909a3153660
.jpg
)
引用的对象被移动到第一个 survivor 空间。 清除 eden 空间时,将删除未引用的对象。
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/jvm/tujie-gc-2b431315-26fa-4ea0-843a-c63ca568f960
)
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/jvm/tujie-gc-2b431315-26fa-4ea0-843a-c63ca568f960
.jpg
)
在下一次Minor GC中,Eden区也会做同样的操作。删除未被引用的对象,并将被引用的对象移动到Survivor区。然而,这里,他们被移动到了第二个Survivor区(S1)。
此外,第一个Survivor区(S0)中,在上一次Minor GC幸存的对象,会增加年龄,并被移动到S1中。待所有幸存对象都被移动到S1后,S0和Eden区都会被清空。注意,Survivor区中有了不同年龄的对象。
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/jvm/tujie-gc-e2560f59-9b24-4d16-88db-b6ac4d0b6ffe
)
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/jvm/tujie-gc-e2560f59-9b24-4d16-88db-b6ac4d0b6ffe
.jpg
)
在下一次Minor GC中,会重复同样的操作。不过,这一次Survivor区会交换。被引用的对象移动到S0,。幸存的对象增加年龄。Eden区和S1被清空。
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/jvm/tujie-gc-aa9f883a-12db-4c8b-8391-3c289b53d804
)
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/jvm/tujie-gc-aa9f883a-12db-4c8b-8391-3c289b53d804
.jpg
)
此幻灯片演示了 promotion。 在较小的GC之后,当老化的物体达到一定的年龄阈值(在该示例中为8)时,它们从年轻一代晋升到老一代。
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/jvm/tujie-gc-dec96816-2912-4127-aaaa-a4d987123f52
)
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/jvm/tujie-gc-dec96816-2912-4127-aaaa-a4d987123f52
.jpg
)
随着较小的GC持续发生,物体将继续被推广到老一代空间。
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/jvm/tujie-gc-6cb31f8a-2eac-489c-88bd-fc643996ab49
)
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/jvm/tujie-gc-6cb31f8a-2eac-489c-88bd-fc643996ab49
.jpg
)
所以这几乎涵盖了年轻一代的整个过程。 最终,将主要对老一代进行GC,清理并最终压缩该空间。
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/jvm/tujie-gc-df98a004-e233-4fb5-a31a-f422033ecfa7
)
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/jvm/tujie-gc-df98a004-e233-4fb5-a31a-f422033ecfa7
.jpg
)
--------
...
...
docs/mongodb/rumen.md
浏览文件 @
f0565d27
...
...
@@ -12,7 +12,7 @@ tag:
有时候不得不感慨一下,系统升级真的是好处多多,不仅让我有机会重构了之前的烂代码,也满足了我积极好学的虚荣心。你看,
[
Redis 入门
](
https://mp.weixin.qq.com/s/NPJkMy5RppyFk9QhzHxhrw
)
了、
[
Elasticsearch 入门
](
https://mp.weixin.qq.com/s/ZjsZxle7m_dfmVwVkq2ayg
)
了,这次又要入门 MongoDB,感觉自己变秃的同时,也变强大了。
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/mongodb/rumen-a1f2d203-e586-4ca1-8556-e1a94c6b411e
)
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/mongodb/rumen-a1f2d203-e586-4ca1-8556-e1a94c6b411e
.jpg
)
小伙伴们在继续阅读之前,我必须要声明一点,我对 MongoDB 并没有进行很深入的研究,仅仅是因为要用,就学一下。但作为一名负责任的技术博主,我是花了心思的,这篇入门教程,小伙伴们读完后绝对会感到满意,忍不住点赞。
...
...
@@ -33,7 +33,7 @@ MongoDB 提供了企业版(功能更强大)和社区版,对于我们开发
MongoDB 针对不同的操作系统有不同的安装包,我们这篇入门的文章就以 Windows 为例吧。
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/mongodb/rumen-557ab648-e2c4-4309-8695-aeb7fbcba25b
)
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/mongodb/rumen-557ab648-e2c4-4309-8695-aeb7fbcba25b
.jpg
)
官网下载地址如下:
...
...
@@ -43,19 +43,19 @@ MongoDB 针对不同的操作系统有不同的安装包,我们这篇入门的
建议选择「Custom」自定义安装,如下图所示。
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/mongodb/rumen-42330ff2-598a-40bf-b252-480704c6a531
)
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/mongodb/rumen-42330ff2-598a-40bf-b252-480704c6a531
.jpg
)
以服务模式运行,并配置好数据和日志目录,如下图所示。
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/mongodb/rumen-c71a31d4-5a99-4c12-93a9-348aa79bc086
)
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/mongodb/rumen-c71a31d4-5a99-4c12-93a9-348aa79bc086
.jpg
)
建议取消勾选安装 MongoDB 的图形化客户端工具,否则安装速度慢到你想要去扣会手机。
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/mongodb/rumen-84ea8b51-6b53-4500-86fa-0dcfa61b84cd
)
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/mongodb/rumen-84ea8b51-6b53-4500-86fa-0dcfa61b84cd
.jpg
)
安装完成后进入到 bin 目录下,双击 mongo.exe 文件就可以连接到 MongoDB 服务了。
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/mongodb/rumen-bcf34981-0c2b-4f86-94e0-711dfb307371
)
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/mongodb/rumen-bcf34981-0c2b-4f86-94e0-711dfb307371
.jpg
)
1)MongoDB 的默认端口号为 27017。
...
...
@@ -64,11 +64,11 @@ MongoDB 针对不同的操作系统有不同的安装包,我们这篇入门的
默认会连接到 test 文档(相当于数据),可以通过 db 命令查询。
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/mongodb/rumen-ded1c30c-9943-4061-8fa3-4562387b72cd
)
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/mongodb/rumen-ded1c30c-9943-4061-8fa3-4562387b72cd
.jpg
)
还可以运行一些简单的算术运算:
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/mongodb/rumen-22c1d414-6ba4-47dd-beb8-f1003f21083e
)
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/mongodb/rumen-22c1d414-6ba4-47dd-beb8-f1003f21083e
.jpg
)
那如何停止服务呢?可以直接点击右上角的 X 号——粗暴、壁咚。
...
...
@@ -82,20 +82,20 @@ Robo 3T 提供了对 MongoDB 和 SCRAM-SHA-256(升级的 mongo shell)的支
最新的版本是 1.3,选择 zip 格式进行下载,23M 左右。下载完成后,解压就行了。
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/mongodb/rumen-b178e02c-23b6-4b54-92ec-3a170a8499d0
)
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/mongodb/rumen-b178e02c-23b6-4b54-92ec-3a170a8499d0
.jpg
)
包目录不再一一解释了,进入 bin 目录下,双击运行 robo3t.exe 文件,启动 Robo 3T 客户端。
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/mongodb/rumen-99717a12-c90d-4a03-941d-f3857f503d44
)
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/mongodb/rumen-99717a12-c90d-4a03-941d-f3857f503d44
.jpg
)
点击「Create」创建一个 MongoDB 的连接。
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/mongodb/rumen-11866209-6a60-4a6a-9ca9-fcd9279796f6
)
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/mongodb/rumen-11866209-6a60-4a6a-9ca9-fcd9279796f6
.jpg
)
连接成功后,就可以操作 MongoDB 了。
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/mongodb/rumen-753dfcd7-1557-4837-9a7e-94b2ff9db72a
)
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/mongodb/rumen-753dfcd7-1557-4837-9a7e-94b2ff9db72a
.jpg
)
(不过,小伙伴们这时候也不太知道该怎么操作,毕竟 MongoDB 的一些相关概念还不清楚,无从下手啊)
...
...
@@ -117,7 +117,7 @@ MongoDB 命名源于英文单词 hu**mongo**us,意思是「巨大无比」,
在进行下一步之前,需要先来理解 MongoDB 中的几个关键概念,比如说什么是集合,什么是文档,什么是字段等等。MongoDB 虽然是非关系型数据库,但和关系型数据库非常相似。
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/mongodb/rumen-814acc38-8934-47f9-991c-666466601bd7
)
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/mongodb/rumen-814acc38-8934-47f9-991c-666466601bd7
.jpg
)
看完上面这幅图(图片来源于好朋友 macrozheng 的文章),是不是瞬间就清晰了?
...
...
@@ -201,7 +201,7 @@ Document 对象来源于 org.bson 包下,可以在实例化该对象之后通
也可以通过 Robo 3T 查看“mydb”数据库,结果如下图所示。
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/mongodb/rumen-95d49578-b1ef-43cc-91da-c7b3a7a7517e
)
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/mongodb/rumen-95d49578-b1ef-43cc-91da-c7b3a7a7517e
.jpg
)
### 06、鸣谢
...
...
docs/mq/rabbitmq-rumen.md
浏览文件 @
f0565d27
...
...
@@ -11,7 +11,7 @@ tag:
在 RabbitMQ 入门之前,我已经入门了
[
Redis
](
https://mp.weixin.qq.com/s/NPJkMy5RppyFk9QhzHxhrw
)
、
[
Elasticsearch
](
https://mp.weixin.qq.com/s/ZjsZxle7m_dfmVwVkq2ayg
)
和
[
MongoDB
](
https://mp.weixin.qq.com/s/qz0sNOFeS0GTW-H9cdnbJg
)
,这让我感觉自己富有极客精神,非常良好。
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/mq/rabbitmq-rumen-d416cab5-69bd-46a6-b65c-8cf3b6667136
)
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/mq/rabbitmq-rumen-d416cab5-69bd-46a6-b65c-8cf3b6667136
.jpg
)
小伙伴们在继续阅读之前,我必须要声明一点,我对 RabbitMQ 并没有进行很深入的研究,仅仅是因为要用,就学一下。但作为一名负责任的技术博主,我是动了心的,这篇入门教程,小伙伴们读完后绝对会感到满意,忍不住无情地点赞,以及赤裸裸地转发。
...
...
@@ -28,7 +28,7 @@ RabbitMQ 的主要特点在于健壮性好、易于使用、高性能、高并
下图是 RabbitMQ 的消息模型图(来源于网络,侵删),小伙伴们来感受下。
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/mq/rabbitmq-rumen-0e8d83f8-fdf0-4755-9131-1f5c775ca010
)
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/mq/rabbitmq-rumen-0e8d83f8-fdf0-4755-9131-1f5c775ca010
.jpg
)
1)P 是 Producer,代表生产者,也就是消息的发送者,可以将消息发送到 X
...
...
@@ -44,7 +44,7 @@ RabbitMQ 的主要特点在于健壮性好、易于使用、高性能、高并
咦,怎么不是安装 RabbitMQ 啊?先来看看官方的解释。
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/mq/rabbitmq-rumen-9012f7d7-01bf-437a-ac98-f6a71390105e
)
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/mq/rabbitmq-rumen-9012f7d7-01bf-437a-ac98-f6a71390105e
.jpg
)
英文看不太懂,没关系,我来补充两句人话。RabbitMQ 服务器是用 Erlang 语言编写的,它的安装包里并没有集成 Erlang 的环境,因此需要先安装 Erlang。小伙伴们不要担心,Erlang 安装起来没有任何难度。
...
...
@@ -55,7 +55,7 @@ Erlang 下载地址如下:
最新的版本是 23.0.1,我选择的是 64 位的版本,104M 左右。下载完就可以双击运行安装,傻瓜式的。
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/mq/rabbitmq-rumen-644fafa4-a4bc-45a2-831a-12deda958122
)
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/mq/rabbitmq-rumen-644fafa4-a4bc-45a2-831a-12deda958122
.jpg
)
需要注意的是,我安装的过程中,电脑重启了一次,好像要安装一个什么库,重启之前忘记保存图片了(sorry)。重启后,重新双击运行 otp_win64_23.0.1.exe 文件完成 Erlang 安装。
...
...
@@ -67,19 +67,19 @@ Erlang 安装成功后,就可以安装 RabbitMQ 了。下载地址如下所示
找到下图中的位置,选择红色框中的文件进行下载。
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/mq/rabbitmq-rumen-43268557-1240-4ed4-9883-de93668f1f04
)
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/mq/rabbitmq-rumen-43268557-1240-4ed4-9883-de93668f1f04
.jpg
)
安装包只有 16.5M 大小,还是非常轻量级的。下载完后直接双击运行 exe 文件就可以傻瓜式地安装了。
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/mq/rabbitmq-rumen-b3343075-f9a8-441f-b266-0750df82a1c6
)
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/mq/rabbitmq-rumen-b3343075-f9a8-441f-b266-0750df82a1c6
.jpg
)
安装成功后,就可以将 RabbitMQ 作为 Windows 服务启动,可以从“开始”菜单管理 RabbitMQ Windows 服务。
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/mq/rabbitmq-rumen-6f185cbd-b3ab-432a-85df-be3a93450533
)
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/mq/rabbitmq-rumen-6f185cbd-b3ab-432a-85df-be3a93450533
.jpg
)
点击「RabbitMQ Command Prompt (sbin dir)」,进入命令行,输入
`rabbitmqctl.bat status`
可确认 RabbitMQ 的启动状态。
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/mq/rabbitmq-rumen-d9407f52-3585-4c3c-af2f-7b7c4ec45461
)
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/mq/rabbitmq-rumen-d9407f52-3585-4c3c-af2f-7b7c4ec45461
.jpg
)
可以看到 RabbitMQ 一些状态信息:
...
...
@@ -96,11 +96,11 @@ rabbitmq-plugins enable rabbitmq_management
看到以下信息就可以确认插件启用成功了。
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/mq/rabbitmq-rumen-3479f2b1-5089-4d73-a6fa-f673989766b7
)
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/mq/rabbitmq-rumen-3479f2b1-5089-4d73-a6fa-f673989766b7
.jpg
)
在浏览器地址栏输入
[
http://localhost:15672/
](
http://localhost:15672/
)
可以进入管理端界面,如下图所示:
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/mq/rabbitmq-rumen-cbad5128-e675-4da7-a5dd-fe9bb303f5f0
)
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/mq/rabbitmq-rumen-cbad5128-e675-4da7-a5dd-fe9bb303f5f0
.jpg
)
### 04、在 Java 中使用 RabbitMQ
...
...
@@ -119,7 +119,7 @@ rabbitmq-plugins enable rabbitmq_management
第二步,我们来模拟一个最简单的场景,一个生产者发送消息到队列中,一个消费者从队列中读取消息并打印。
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/mq/rabbitmq-rumen-3ce8cf20-76f0-4192-88d4-f40d9a23233e
)
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/mq/rabbitmq-rumen-3ce8cf20-76f0-4192-88d4-f40d9a23233e
.jpg
)
官方对 RabbitMQ 有一个很好的解释,我就“拿来主义”的用一下。在我上高中的年代,同学们之间最流行的交流方式不是 QQ、微信,甚至短信这些,而是书信。因为那时候还没有智能手机,况且上学期间学校也是命令禁用手机的,所以书信是情感表达的最好方式。好怀念啊。
...
...
@@ -232,6 +232,6 @@ DeliverCallback deliverCallback = (consumerTag, delivery) -> {
在消息发送的过程中,也可以使用 RabbitMQ 的管理面板查看到消息的走势图,如下所示。
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/mq/rabbitmq-rumen-0dcb67b3-521f-4d91-9e46-590e93631b35
)
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/mq/rabbitmq-rumen-0dcb67b3-521f-4d91-9e46-590e93631b35
.jpg
)
<img
src=
"http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/xingbiaogongzhonghao.png"
width=
"700px"
>
docs/springboot/ioc.md
浏览文件 @
f0565d27
...
...
@@ -9,7 +9,7 @@ tag:
大家好,我是二哥呀。不废话,今天来带你一分钟玩转 Spring IoC。Spring 框架是 Java 后端开发中非常重要的基础框架,可以说必不可缺,而 IoC 又是 Spring 体系中最重要的两个概念之一(另外一个是谁呢?)。
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/springboot/ioc-dfa5b7d3-43c3-492f-a9f5-59d3bf7b242b
)
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/springboot/ioc-dfa5b7d3-43c3-492f-a9f5-59d3bf7b242b
.jpg
)
## 是何
...
...
@@ -17,21 +17,21 @@ Spring 全家桶中最重要的几个项目都是基于 Spring Framework 的,
首先它的右侧有 Github 的链接,另外点到「LEARN」这里,就会看到各个版本的文档。
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/springboot/ioc-ecc7dcc3-678f-4b97-8e2b-42fc0d66f555
)
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/springboot/ioc-ecc7dcc3-678f-4b97-8e2b-42fc0d66f555
.jpg
)
那我们点「Reference Doc」,就能够看到它的一些模块的介绍:
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/springboot/ioc-7ba176c1-5d76-465d-b2b5-5751d6c1ef3b
)
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/springboot/ioc-7ba176c1-5d76-465d-b2b5-5751d6c1ef3b
.jpg
)
第一章 Overview,讲述它的历史、设计原理等等;
第二章 Core,包含了 IoC 容器,AOP 等等,那自然是讲 Spring 的核心了,要点进去好好看了。
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/springboot/ioc-b068d0cc-8e75-42fc-8391-0cc0e2d84fc8
)
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/springboot/ioc-b068d0cc-8e75-42fc-8391-0cc0e2d84fc8
.jpg
)
点进去之后发现了宝贵的学习资料,一切的 what, why, how 都可以在这里找到答案。
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/springboot/ioc-e1f5ad2c-2b1a-453e-8672-dd4b6560eb7a
)
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/springboot/ioc-e1f5ad2c-2b1a-453e-8672-dd4b6560eb7a
.jpg
)
这里很好的解释了大名鼎鼎的 IoC - Inversion of Control, 控制反转。
...
...
@@ -53,7 +53,7 @@ Bean 是 Spring 的主角,有种说法叫 Spring 就是面向 bean 的编程
既然说容器是 IoC 最重要的部分,那么 Spring 如何设计容器的呢?还是回到官网,第二段有介绍哦:
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/springboot/ioc-c5c48fc9-162b-4e7c-a660-2984bb7fb69a
)
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/springboot/ioc-c5c48fc9-162b-4e7c-a660-2984bb7fb69a
.jpg
)
答:使用
`ApplicationContext`
,它是
`BeanFactory`
的子类,更好的补充并实现了
`BeanFactory`
的。
...
...
@@ -66,7 +66,7 @@ Bean 是 Spring 的主角,有种说法叫 Spring 就是面向 bean 的编程
而
`ApplicationContext`
多了很多功能,因为它继承了多个接口,可称之为“高级容器”。在下文的搭建项目中,我们会使用它。
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/springboot/ioc-ac7721c3-7892-45a7-840a-2093548f13d6
)
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/springboot/ioc-ac7721c3-7892-45a7-840a-2093548f13d6
.jpg
)
`ApplicationContext`
的里面有两个具体的实现子类,用来读取配置配件的:
...
...
@@ -188,9 +188,9 @@ IoC 和 DI 也并非 Spring 框架提出来的,Spring 只是应用了这个设
在项目中,底层的实现都是由很多个对象组成的,对象之间彼此合作实现项目的业务逻辑。但是,很多很多对象紧密结合在一起,一旦有一方出问题了,必然会对其他对象有所影响,所以才有了解藕的这种设计思想。
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/springboot/ioc-2231ebcf-6677-4007-8460-30cb4ed6ac6f
)
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/springboot/ioc-2231ebcf-6677-4007-8460-30cb4ed6ac6f
.jpg
)
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/springboot/ioc-19cbe7a6-e7ae-43ed-a27a-91b39f05f899
)
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/springboot/ioc-19cbe7a6-e7ae-43ed-a27a-91b39f05f899
.jpg
)
如上图所示,本来 ABCD 是互相关联在一起的,当加入第三方容器的管理之后,每个对象都和第三方法的 IoC 容器关联,彼此之间不再直接联系在一起了,没有了耦合关系,全部对象都交由容器来控制,降低了这些对象的亲密度,就叫“解藕”。
...
...
@@ -204,7 +204,7 @@ IoC 和 DI 也并非 Spring 框架提出来的,Spring 只是应用了这个设
### Spring Framework 八大模块
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/springboot/ioc-02dc5458-7423-44ce-97b4-d199decac2ad
)
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/springboot/ioc-02dc5458-7423-44ce-97b4-d199decac2ad
.jpg
)
模块化的思想是 Spring 中非常重要的思想。
...
...
@@ -241,15 +241,15 @@ Btw, 这张图在网上有很多,但是在我却没有在最新版的 referenc
下载地址:
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/springboot/ioc-24ce85b8-33b2-4c6e-a39b-0e9233b29d9b
)
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/springboot/ioc-24ce85b8-33b2-4c6e-a39b-0e9233b29d9b
.jpg
)
如果你要问我怎么找的,那就还是从刚才
`4.3.26`
版本的
`Reference Doc`
中进去,然后刚开头就有一个
`Distribution Zip Files`
,
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/springboot/ioc-7ddf8503-cfb4-4263-9fb2-f0ac3be66f66
)
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/springboot/ioc-7ddf8503-cfb4-4263-9fb2-f0ac3be66f66
.jpg
)
好奇心带着我打开了它,发现...
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/springboot/ioc-80b10d48-a976-4d11-9751-76f5c0355452
)
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/springboot/ioc-80b10d48-a976-4d11-9751-76f5c0355452
.jpg
)
发现了仓库地址!
...
...
@@ -257,7 +257,7 @@ Btw, 这张图在网上有很多,但是在我却没有在最新版的 referenc
我们搜 5.2.3 版的,它在最下面:
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/springboot/ioc-f64e3ddc-e5cf-4540-b7a1-96ce790df2e5
)
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/springboot/ioc-f64e3ddc-e5cf-4540-b7a1-96ce790df2e5
.jpg
)
然后就可以愉快的使用了~
...
...
@@ -272,11 +272,11 @@ Btw, 这张图在网上有很多,但是在我却没有在最新版的 referenc
答案是:
`下载的 docs.zip → spring-framework-reference → images → spring-overview`
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/springboot/ioc-0bde232f-797f-449a-977f-cbe4efa989c0
)
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/springboot/ioc-0bde232f-797f-449a-977f-cbe4efa989c0
.jpg
)
我们需要导入 Intellij 的 jar 包在哪里呢?Dist.zip → libs
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/springboot/ioc-75e82791-6bfb-45ac-bc85-dffd6f493191
)
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/springboot/ioc-75e82791-6bfb-45ac-bc85-dffd6f493191
.jpg
)
这里可以看到,每个黑色框对应3个 jar 包,我们要导入 Intellij 的是
`RELEASE.jar`
.
...
...
@@ -286,13 +286,13 @@ Btw, 这张图在网上有很多,但是在我却没有在最新版的 referenc
然后在 External Libraries 中导入我们刚才在模块图里看到的那4个模块所对应的 jar 包,结构如下:
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/springboot/ioc-d77fa83c-b82a-4fc5-8910-243798d03acb
)
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/springboot/ioc-d77fa83c-b82a-4fc5-8910-243798d03acb
.jpg
)
这样你以为就大功告成了吗?Too young too simple 啊~
来运行一下:
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/springboot/ioc-d33302bb-0d2d-403e-95ee-216d0b859952
)
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/springboot/ioc-d33302bb-0d2d-403e-95ee-216d0b859952
.jpg
)
出现了老盆友:
`no class def found error`
, 就是找不到这个类。
...
...
@@ -310,7 +310,7 @@ Btw, 这张图在网上有很多,但是在我却没有在最新版的 referenc
官网里都给我们写好了:
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/springboot/ioc-dcef8c4b-f7d3-445e-a809-5a66eab9e1e9
)
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/springboot/ioc-dcef8c4b-f7d3-445e-a809-5a66eab9e1e9
.jpg
)
第一段是一些命名空间及其规范的介绍,
...
...
@@ -329,11 +329,11 @@ Btw, 这张图在网上有很多,但是在我却没有在最新版的 referenc
我的 service 文件配置如下:
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/springboot/ioc-6a0894e5-5765-48dd-a04f-29edb9c270fa
)
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/springboot/ioc-6a0894e5-5765-48dd-a04f-29edb9c270fa
.jpg
)
#### 4\. 最后一步,我们再来看它是怎么用的:
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/springboot/ioc-f349d1b3-de75-4bb7-98f1-93918cea5aa9
)
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/springboot/ioc-f349d1b3-de75-4bb7-98f1-93918cea5aa9
.jpg
)
这里面并没有直接的 new 这个 service,但是 Spring 容器帮我们创建了这个对象。
...
...
@@ -343,11 +343,11 @@ Btw, 这张图在网上有很多,但是在我却没有在最新版的 referenc
然后第二行,就是获取具体的 bean 了。这个其实有很多方式,在使用的时候就能看到:
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/springboot/ioc-bbb71e68-a9b0-46d1-b4f8-02cf28130a9c
)
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/springboot/ioc-bbb71e68-a9b0-46d1-b4f8-02cf28130a9c
.jpg
)
点进去发现,是在 BeanFactory.class 里定义的:
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/springboot/ioc-36952030-7731-4f76-bc34-184d35502df6
)
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/springboot/ioc-36952030-7731-4f76-bc34-184d35502df6
.jpg
)
这其中比较常用的是通过
...
...
@@ -359,7 +359,7 @@ Btw, 这张图在网上有很多,但是在我却没有在最新版的 referenc
照猫画虎,我的 test 文件改动如下:
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/springboot/ioc-c0551d04-aa95-46c7-badf-b825f58d4694
)
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/springboot/ioc-c0551d04-aa95-46c7-badf-b825f58d4694
.jpg
)
成功运行~~🎉🎉
...
...
@@ -397,7 +397,7 @@ public class MyTest {
定义一个无参的 constructor,里面打印一句话,然后只
`new ClassPathXmlApplicationContext`
,如下图:
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/springboot/ioc-f987d03d-1f8a-47b2-b157-b325081f54b0
)
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/springboot/ioc-f987d03d-1f8a-47b2-b157-b325081f54b0
.jpg
)
发现也是可以打印的,所以其实是每次启动容器的时候,就已经创建好容器中的所有对象了。(当然,这在
`scope = "prototype"`
的时候不适用,只是 singleton 的时候。)
...
...
@@ -419,13 +419,13 @@ public class MyTest {
New Project 的时候要选择从 Maven 构建,而不是一个简单的 Java 项目。
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/springboot/ioc-051637c7-1ae4-4b32-9e7c-ac05d5a8fc38
)
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/springboot/ioc-051637c7-1ae4-4b32-9e7c-ac05d5a8fc38
.jpg
)
建好之后,我们会发现比起刚才的 Java 项目,多了很多东西:
和之前的空项目不太一样,这里有
`main`
,
`test`
,其中
`resources`
是放配置文件的地方,也就是我们刚才的
`service.xml`
应该放在这里,如果没有放对位置是代码找不到哦~
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/springboot/ioc-773f1aaf-eef1-4fcb-abee-331d31e3e9e2
)
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/springboot/ioc-773f1aaf-eef1-4fcb-abee-331d31e3e9e2
.jpg
)
#### 2\. 添加对应的 pom 依赖,就不用手动导 jar 包了
...
...
@@ -449,7 +449,7 @@ New Project 的时候要选择从 Maven 构建,而不是一个简单的 Java
答:
`new 的过程`
。把 new 的过程交给第三方来创建、管理,这就是「解藕」。
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/springboot/ioc-1a4f2b12-34a4-4fc1-94be-bd9a1a4c16e8
)
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/springboot/ioc-1a4f2b12-34a4-4fc1-94be-bd9a1a4c16e8
.jpg
)
Spring 也是用的
`set()`
方法,它只不过提供了一套更加完善的实现机制而已。
...
...
docs/szjy/tobebetterjavaer-beian.md
浏览文件 @
f0565d27
...
...
@@ -26,7 +26,7 @@ u1s1,二哥是全天下最良心的博主——之一,是没毛病的。
对了,剩下的 9 单新客(仍然可以返 60 元),还有需要的小伙伴可以扫描下面的二维码添加二哥的微信,备注「
**服务器**
」即可。
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/szjy/tobebetterjavaer-beian-3d9a98e4-2ae2-4e71-805c-70a918176b8d
)
![](
http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/images/szjy/tobebetterjavaer-beian-3d9a98e4-2ae2-4e71-805c-70a918176b8d
.jpg
)
有些买过服务器的小伙伴,已经把个人博客整起来了,这里推荐三个给大家欣赏一下(可以直接复制图片下的链接到浏览器地址栏),真的惊艳~
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录