提交 f0565d27 编写于 作者: 沉默王二's avatar 沉默王二 💬

图片保存

上级 e8556953
......@@ -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 跑腿
......
......@@ -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)
......@@ -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**」就可以拉取到下载链接了。
......
......@@ -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)
......
......@@ -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。”
......
......@@ -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)
......
......@@ -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 指南了,能看到这里的都是最优秀的程序员,二哥必须要伸出大拇指为你点个赞。
......
......@@ -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)
--------
......
......@@ -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、鸣谢
......
......@@ -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">
......@@ -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()` 方法,它只不过提供了一套更加完善的实现机制而已。
......
......@@ -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.
先完成此消息的编辑!
想要评论请 注册