Skip to content

Commit 42fa58d

Browse files
committed
modify heading
1 parent 04db74a commit 42fa58d

17 files changed

+43
-57
lines changed

docs/big-backEnd/Hadoop生态总结.md

Lines changed: 1 addition & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -224,14 +224,4 @@ Spout负责从数据源上获取数据,简单处理 封装成tuple向后面的
224224
topology包含了spout和bolt。
225225
spout负责获取数据,并且将数据发送给bolt,这个过程就是把任务派发到多个节点,bolt则负责对数据进行处理,比如splitbolt负责把每个单词提取出来,countbolt负责单词数量的统计,最后的printbolt将每个结果集tuple打印出来。
226226

227-
这就形成了一个完整的流程。
228-
229-
## 微信公众号
230-
231-
### Java技术江湖
232-
233-
如果大家想要实时关注我更新的文章以及分享的干货的话,可以关注我的公众号【Java技术江湖】一位阿里 Java 工程师的技术小站,作者黄小斜,专注 Java 相关技术:SSM、SpringBoot、MySQL、分布式、中间件、集群、Linux、网络、多线程,偶尔讲点Docker、ELK,同时也分享技术干货和学习经验,致力于Java全栈开发!
234-
235-
**Java工程师必备学习资源:** 一些Java工程师常用学习资源,关注公众号后,后台回复关键字 **“Java”** 即可免费无套路获取。
236-
237-
![](https://java-tutorial.oss-cn-shanghai.aliyuncs.com/Javatutorial.jpeg)
227+
这就形成了一个完整的流程。

docs/big-backEnd/后端技术杂谈开篇:云计算,大数据与AI的故事.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
[toc]
12
我今天要讲这三个话题,一个是云计算,一个大数据,一个人工智能,我为什么要讲这三个东西呢?因为这三个东西现在非常非常的火,它们之间好像互相有关系,一般谈云计算的时候也会提到大数据,谈人工智能的时候也会提大数据,谈人工智能的时候也会提云计算。所以说感觉他们又相辅相成不可分割,如果是非技术的人员来讲可能比较难理解说这三个之间的相互关系,所以有必要解释一下。
23

34
# 一、云计算最初是实现资源管理的灵活性

docs/big-backEnd/后端技术杂谈:Docker 核心技术与实现原理.md

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
[toc]
12

23
本文转自互联网,侵删
34
本系列文章将整理到我在GitHub上的《Java面试指南》仓库,更多精彩内容请到我的仓库里查看
@@ -33,7 +34,7 @@
3334

3435
首先,Docker 的出现一定是因为目前的后端在开发和运维阶段确实需要一种虚拟化技术解决开发环境和生产环境环境一致的问题,通过 Docker 我们可以将程序运行的环境也纳入到版本控制中,排除因为环境造成不同运行结果的可能。但是上述需求虽然推动了虚拟化技术的产生,但是如果没有合适的底层技术支撑,那么我们仍然得不到一个完美的产品。本文剩下的内容会介绍几种 Docker 使用的核心技术,如果我们了解它们的使用方法和原理,就能清楚 Docker 的实现原理。
3536

36-
## [](https://draveness.me/docker?hmsr=toutiao.io&utm_medium=toutiao.io&utm_source=toutiao.io#namespaces)Namespaces
37+
## Namespaces
3738

3839
命名空间 (namespaces) 是 Linux 为我们提供的用于分离进程树、网络接口、挂载点以及进程间通信等资源的方法。在日常使用 Linux 或者 macOS 时,我们并没有运行多个完全分离的服务器的需要,但是如果我们在服务器上启动了多个服务,这些服务其实会相互影响的,每一个服务都能看到其他服务的进程,也可以访问宿主机器上的任意文件,这是很多时候我们都不愿意看到的,我们更希望运行在同一台机器上的不同服务能做到完全隔离,就像运行在多台不同的机器上一样。
3940

@@ -43,7 +44,7 @@
4344

4445
Linux 的命名空间机制提供了以下七种不同的命名空间,包括`CLONE_NEWCGROUP``CLONE_NEWIPC``CLONE_NEWNET``CLONE_NEWNS``CLONE_NEWPID``CLONE_NEWUSER``CLONE_NEWUTS`,通过这七个选项我们能在创建新的进程时设置新进程应该在哪些资源上与宿主机器进行隔离。
4546

46-
## [](https://draveness.me/docker?hmsr=toutiao.io&utm_medium=toutiao.io&utm_source=toutiao.io#%E8%BF%9B%E7%A8%8B)进程
47+
## 进程
4748

4849
进程是 Linux 以及现在操作系统中非常重要的概念,它表示一个正在执行的程序,也是在现代分时系统中的一个任务单元。在每一个 *nix 的操作系统上,我们都能够通过`ps`命令打印出当前操作系统中正在执行的进程,比如在 Ubuntu 上,使用该命令就能得到以下的结果:
4950

@@ -100,7 +101,7 @@ daemon.containerd.Create(context.Background(), container.ID, spec, createOptions
100101

101102
所有与命名空间的相关的设置都是在上述的两个函数中完成的,Docker 通过命名空间成功完成了与宿主机进程和网络的隔离。
102103

103-
## [](https://draveness.me/docker?hmsr=toutiao.io&utm_medium=toutiao.io&utm_source=toutiao.io#%E7%BD%91%E7%BB%9C)网络
104+
## 网络
104105

105106
如果 Docker 的容器通过 Linux 的命名空间完成了与宿主机进程的网络隔离,但是却有没有办法通过宿主机的网络与整个互联网相连,就会产生很多限制,所以 Docker 虽然可以通过命名空间创建一个隔离的网络环境,但是 Docker 中的服务仍然需要与外界相连才能发挥作用。
106107

@@ -151,7 +152,7 @@ $ redis-cli -h 127.0.0.1 -p 6379 pingPONG
151152

152153
Docker 通过 Linux 的命名空间实现了网络的隔离,又通过 iptables 进行数据包转发,让 Docker 容器能够优雅地为宿主机器或者其他容器提供服务。
153154

154-
### [](https://draveness.me/docker?hmsr=toutiao.io&utm_medium=toutiao.io&utm_source=toutiao.io#libnetwork)libnetwork
155+
### libnetwork
155156

156157
整个网络部分的功能都是通过 Docker 拆分出来的 libnetwork 实现的,它提供了一个连接不同容器的实现,同时也能够为应用给出一个能够提供一致的编程接口和网络层抽象的容器网络模型。
157158

@@ -165,7 +166,7 @@ libnetwork 中最重要的概念,容器网络模型由以下的几个主要组
165166

166167
> 想要获得更多与 libnetwork 或者容器网络模型相关的信息,可以阅读[Design · libnetwork](https://github.com/docker/libnetwork/blob/master/docs/design.md)了解更多信息,当然也可以阅读源代码了解不同 OS 对容器网络模型的不同实现。
167168
168-
## [](https://draveness.me/docker?hmsr=toutiao.io&utm_medium=toutiao.io&utm_source=toutiao.io#%E6%8C%82%E8%BD%BD%E7%82%B9)挂载点
169+
## 挂载点
169170

170171
虽然我们已经通过 Linux 的命名空间解决了进程和网络隔离的问题,在 Docker 进程中我们已经没有办法访问宿主机器上的其他进程并且限制了网络的访问,但是 Docker 容器中的进程仍然能够访问或者修改宿主机器上的其他目录,这是我们不希望看到的。
171172

@@ -189,12 +190,12 @@ libnetwork 中最重要的概念,容器网络模型由以下的几个主要组
189190

190191
> 这一部分的内容是作者在 libcontainer 中的[SPEC.md](https://github.com/opencontainers/runc/blob/master/libcontainer/SPEC.md)文件中找到的,其中包含了 Docker 使用的文件系统的说明,对于 Docker 是否真的使用`chroot`来确保当前的进程无法访问宿主机器的目录,作者其实也没有确切的答案,一是 Docker 项目的代码太多庞大,不知道该从何入手,作者尝试通过 Google 查找相关的结果,但是既找到了无人回答的[问题](https://forums.docker.com/t/does-the-docker-engine-use-chroot/25429),也得到了与 SPEC 中的描述有冲突的[答案](https://www.quora.com/Do-Docker-containers-use-a-chroot-environment),如果各位读者有明确的答案可以在博客下面留言,非常感谢。
191192
192-
## [](https://draveness.me/docker?hmsr=toutiao.io&utm_medium=toutiao.io&utm_source=toutiao.io#chroot)chroot

193+
## chroot
193194
在这里不得不简单介绍一下`chroot`(change root),在 Linux 系统中,系统默认的目录就都是以`/`也就是根目录开头的,`chroot`的使用能够改变当前的系统根目录结构,通过改变当前系统的根目录,我们能够限制用户的权利,在新的根目录下并不能够访问旧系统根目录的结构个文件,也就建立了一个与原系统完全隔离的目录结构。
194195

195196
> 与 chroot 的相关内容部分来自[理解 chroot](https://www.ibm.com/developerworks/cn/linux/l-cn-chroot/index.html)一文,各位读者可以阅读这篇文章获得更详细的信息。
196197
197-
## [](https://draveness.me/docker?hmsr=toutiao.io&utm_medium=toutiao.io&utm_source=toutiao.io#cgroups)CGroups
198+
## CGroups
198199

199200
我们通过 Linux 的命名空间为新创建的进程隔离了文件系统、网络并与宿主机器之间的进程相互隔离,但是命名空间并不能够为我们提供物理资源上的隔离,比如 CPU 或者内存,如果在同一台机器上运行了多个对彼此以及宿主机器一无所知的『容器』,这些容器却共同占用了宿主机器的物理资源。
200201

@@ -241,7 +242,7 @@ $ docker run -it -d --cpu-quota=50000 busybox53861305258ecdd7f5d2a3240af694aec9a
241242

242243
当我们使用 Docker 关闭掉正在运行的容器时,Docker 的子控制组对应的文件夹也会被 Docker 进程移除,Docker 在使用 CGroup 时其实也只是做了一些创建文件夹改变文件内容的文件操作,不过 CGroup 的使用也确实解决了我们限制子容器资源占用的问题,系统管理员能够为多个容器合理的分配资源并且不会出现多个容器互相抢占资源的问题。
243244

244-
## [](https://draveness.me/docker?hmsr=toutiao.io&utm_medium=toutiao.io&utm_source=toutiao.io#unionfs)UnionFS
245+
## UnionFS
245246

246247
Linux 的命名空间和控制组分别解决了不同资源隔离的问题,前者解决了进程、网络以及文件系统的隔离,后者实现了 CPU、内存等资源的隔离,但是在 Docker 中还有另一个非常重要的问题需要解决 - 也就是镜像。
247248

@@ -255,7 +256,7 @@ $ docker export $(docker create busybox) | tar -C rootfs -xvf -$ lsbin dev etc
255256

256257
你可以看到这个 busybox 镜像中的目录结构与 Linux 操作系统的根目录中的内容并没有太多的区别,可以说Docker 镜像就是一个文件。
257258

258-
## [](https://draveness.me/docker?hmsr=toutiao.io&utm_medium=toutiao.io&utm_source=toutiao.io#%E5%AD%98%E5%82%A8%E9%A9%B1%E5%8A%A8)存储驱动
259+
## 存储驱动
259260

260261
Docker 使用了一系列不同的存储驱动管理镜像内的文件系统并运行容器,这些存储驱动与 Docker 卷(volume)有些不同,存储引擎管理着能够在多个容器之间共享的存储。
261262

@@ -275,7 +276,7 @@ FROM ubuntu:15.04COPY . /appRUN make /appCMD python /app/app.py
275276

276277
![docker-images-and-container](https://java-tutorial.oss-cn-shanghai.aliyuncs.com/2017-12-06-docker-images-and-container.png)
277278

278-
## [](https://draveness.me/docker?hmsr=toutiao.io&utm_medium=toutiao.io&utm_source=toutiao.io#aufs)AUFS
279+
## AUFS
279280

280281
UnionFS 其实是一种为 Linux 操作系统设计的用于把多个文件系统『联合』到同一个挂载点的文件系统服务。而 AUFS 即 Advanced UnionFS 其实就是 UnionFS 的升级版,它能够提供更优秀的性能和效率。
281282

@@ -295,7 +296,7 @@ $ ls /var/lib/docker/aufs/diff/00adcccc1a55a36a610a6ebb3e07cc35577f2f5a3b671be3d
295296

296297
上面的这张图片非常好的展示了组装的过程,每一个镜像层都是建立在另一个镜像层之上的,同时所有的镜像层都是只读的,只有每个容器最顶层的容器层才可以被用户直接读写,所有的容器都建立在一些底层服务(Kernel)上,包括命名空间、控制组、rootfs 等等,这种容器的组装方式提供了非常大的灵活性,只读的镜像层通过共享也能够减少磁盘的占用。
297298

298-
## [](https://draveness.me/docker?hmsr=toutiao.io&utm_medium=toutiao.io&utm_source=toutiao.io#%E5%85%B6%E4%BB%96%E5%AD%98%E5%82%A8%E9%A9%B1%E5%8A%A8)其他存储驱动
299+
## 其他存储驱动
299300

300301
AUFS 只是 Docker 使用的存储驱动的一种,除了 AUFS 之外,Docker 还支持了不同的存储驱动,包括`aufs``devicemapper``overlay2``zfs``vfs`等等,在最新的 Docker 中,`overlay2`取代了`aufs`成为了推荐的存储驱动,但是在没有`overlay2`驱动的机器上仍然会使用`aufs`作为 Docker 的默认驱动。
301302

@@ -311,7 +312,7 @@ $ docker info | grep StorageStorage Driver: aufs
311312

312313
作者的这台 Ubuntu 上由于没有`overlay2`存储驱动,所以使用`aufs`作为 Docker 的默认存储驱动。
313314

314-
## [](https://draveness.me/docker?hmsr=toutiao.io&utm_medium=toutiao.io&utm_source=toutiao.io#%E6%80%BB%E7%BB%93)总结
315+
## 总结
315316

316317
Docker 目前已经成为了非常主流的技术,已经在很多成熟公司的生产环境中使用,但是 Docker 的核心技术其实已经有很多年的历史了,Linux 命名空间、控制组和 UnionFS 三大技术支撑了目前 Docker 的实现,也是 Docker 能够出现的最重要原因。
317318

docs/big-backEnd/后端技术杂谈:Elasticsearch与solr入门实践.md

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -909,7 +909,7 @@ dataimport config
909909
> 本文首发于[我的博客](https://link.juejin.im/?target=https%3A%2F%2Fblog.kittypanic.com%2F)
910910
> 原文链接:[Elasticsearch 与 Solr 的比较](https://link.juejin.im/?target=https%3A%2F%2Fblog.kittypanic.com%2Felastic_vs_solr%2F)
911911
912-
## Elasticsearch简介[*](https://link.juejin.im/?target=http%3A%2F%2Ffuxiaopang.gitbooks.io%2Flearnelasticsearch)
912+
## Elasticsearch简介
913913
914914
Elasticsearch是一个实时的分布式搜索和分析引擎。它可以帮助你用前所未有的速度去处理大规模数据。
915915
@@ -951,7 +951,7 @@ Elasticsearch的上手是非常简单的。它附带了很多非常合理的默
951951
952952
但是Elasticsearch并不只是面向大型企业的,它还帮助了很多类似DataDog以及Klout的创业公司进行了功能的扩展。
953953
954-
## Elasticsearch的优缺点[*](https://link.juejin.im/?target=http%3A%2F%2Fstackoverflow.com%2Fquestions%2F10213009%2Fsolr-vs-elasticsearch)[*](https://link.juejin.im/?target=http%3A%2F%2Fhuangx.in%2F22%2Ftranslation-solr-vs-elasticsearch):
954+
## Elasticsearch的优缺点
955955
956956
### 优点
957957
@@ -968,7 +968,7 @@ Elasticsearch的上手是非常简单的。它附带了很多非常合理的默
968968
969969
* 还不够自动(不适合当前新的Index Warmup API)
970970
971-
## Solr简介[*](https://link.juejin.im/?target=http%3A%2F%2Fzh.wikipedia.org%2Fwiki%2FSolr)
971+
## Solr简介
972972
973973
Solr(读作“solar”)是Apache Lucene项目的开源企业搜索平台。其主要功能包括全文检索、命中标示、分面搜索、动态聚类、数据库集成,以及富文本(如Word、PDF)的处理。Solr是高度可扩展的,并提供了分布式搜索和索引复制。Solr是最流行的企业级搜索引擎,Solr4 还增加了NoSQL支持。
974974
@@ -990,7 +990,7 @@ Solr是用Java编写、运行在Servlet容器(如 Apache Tomcat 或Jetty)的
990990
991991
1. 建立索引时,搜索效率下降,实时索引搜索效率不高。
992992
993-
## Elasticsearch与Solr的比较[*](https://link.juejin.im/?target=http%3A%2F%2Fblog.socialcast.com%2Frealtime-search-solr-vs-elasticsearch%2F)
993+
## Elasticsearch与Solr的比较
994994
995995
当单纯的对已有数据进行搜索时,Solr更快。
996996
@@ -1006,7 +1006,7 @@ Solr是用Java编写、运行在Servlet容器(如 Apache Tomcat 或Jetty)的
10061006
10071007
综上所述,Solr的架构不适合实时搜索的应用。
10081008
1009-
## 实际生产环境测试[*](https://link.juejin.im/?target=http%3A%2F%2Fblog.socialcast.com%2Frealtime-search-solr-vs-elasticsearch%2F)
1009+
## 实际生产环境测试
10101010
10111011
下图为将搜索引擎从Solr转到Elasticsearch以后的平均查询速度有了50倍的提升。
10121012
@@ -1023,7 +1023,7 @@ Solr是用Java编写、运行在Servlet容器(如 Apache Tomcat 或Jetty)的
10231023
10241024
Solr 是传统搜索应用的有力解决方案,但 Elasticsearch 更适用于新兴的实时搜索应用。
10251025
1026-
## 其他基于Lucene的开源搜索引擎解决方案[*](https://link.juejin.im/?target=http%3A%2F%2Fmail-archives.apache.org%2Fmod_mbox%2Fhbase-user%2F201006.mbox%2F%253C149150.78881.qm%40web50304.mail.re2.yahoo.com%253E)
1026+
## 其他基于Lucene的开源搜索引擎解决方案
10271027
10281028
1. 直接使用[Lucene](https://link.juejin.im/?target=http%3A%2F%2Flucene.apache.org)
10291029

docs/big-backEnd/后端技术杂谈:Lucene基础原理与实践.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -330,7 +330,7 @@ Stemming 和 lemmatization的异同:
330330

331331
下面仔细分析一下这两个过程:
332332

333-
### [1\. 计算权重(Term weight)的过程。](https://docs.qq.com/doc/DWVNPQXRvcWhMTktC)
333+
### 1. 计算权重(Term weight)的过程。
334334

335335
影响一个词(Term)在一篇文档中的重要性主要有两个因素:
336336

docs/big-backEnd/后端技术杂谈:搜索引擎基础倒排索引.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717

1818
<!-- more -->
1919

20-
## [什么是倒排索引?](https://www.cnblogs.com/zlslch/p/6440114.html)
20+
## 什么是倒排索引?
2121

2222
见其名知其意,有倒排索引,对应肯定,有正向索引。
2323
正向索引(forward index),反向索引(inverted index)更熟悉的名字是倒排索引。
@@ -117,7 +117,7 @@
117117

118118
有了这个索引系统,搜索引擎可以很方便地响应用户的查询,比如用户输入查询词“Facebook”,搜索系统查找倒排索引,从中可以读出包含这个单词的文档,这些文档就是提供给用户的搜索结果,而利用单词频率信息、文档频率信息即可以对这些候选搜索结果进行排序,计算文档和查询的相似性,按照相似性得分由高到低排序输出,此即为搜索系统的部分内部流程,具体实现方案本书第五章会做详细描述。
119119

120-
### 4\. 单词词典
120+
### 4. 单词词典
121121

122122
单词词典是倒排索引中非常重要的组成部分,它用来维护文档集合中出现过的所有单词的相关信息,同时用来记载某个单词对应的倒排列表在倒排文件中的位置信息。在支持搜索时,根据用户的查询词,去单词词典里查询,就能够获得相应的倒排列表,并以此作为后续排序的基础。 对于一个规模很大的文档集合来说,可能包含几十万甚至上百万的不同单词,能否快速定位某个单词,这直接影响搜索时的响应速度,所以需要高效的数据结构来对单词词典进行构建和查找,常用的数据结构包括哈希加链表结构和树形词典结构。
123123
4.1 哈希加链表

docs/cs/network/计算机网络学习总结.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -525,7 +525,7 @@ IP 地址的编址方式经历了三个历史阶段:
525525
* 子网划分
526526
* 无分类
527527

528-
### [](https://github.com/CyC2018/Interview-Notebook/blob/master/notes/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BD%91%E7%BB%9C.md#1-%E5%88%86%E7%B1%BB)1\. 分类
528+
### 分类
529529

530530
由两部分组成,网络号和主机号,其中不同分类具有不同的网络号长度,并且是固定的。
531531

docs/database/重新学习MySQL数据库:『浅入浅出』MySQL和InnoDB.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -371,7 +371,7 @@ MySQL 中默认的事务隔离级别就是`REPEATABLE READ`,但是它通过 Ne
371371
372372
由于篇幅所限仅能对数据库中一些重要内容进行简单的介绍和总结,文中内容难免有所疏漏,如果对文章内容的有疑问,可以在博客下面评论留言。
373373

374-
## [Innodb与Myisam引擎的区别与应用场景](https://www.cnblogs.com/changna1314/p/6878900.html)
374+
## Innodb与Myisam引擎的区别与应用场景
375375

376376
1. 区别:
377377

docs/distributed/basic/分布式系统理论基础:zookeeper分布式协调服务.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
<!-- more -->
1818

1919

20-
## [分布式服务协调员zookeeper - 应用场景和监控](https://www.cnblogs.com/bangerlee/p/4427331.html)
20+
## 分布式服务协调员zookeeper - 应用场景和监控
2121

2222
zookeeper在分布式系统中作为协调员的角色,可应用于Leader选举、分布式锁、配置管理等服务的实现。以下我们从zookeeper供的API、应用场景和监控三方面学习和了解zookeeper(以下简称ZK)。
2323

docs/distributed/practice/搞懂分布式技术:ZAB协议概述与选主流程详解.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -246,7 +246,7 @@ Zookeeper具体的启动日志如下图所示:
246246
![Cluster start election step 3](https://java-tutorial.oss-cn-shanghai.aliyuncs.com/start_election_3.png)
247247

248248

249-
### [](http://www.jasongj.com/zookeeper/fastleaderelection/?hmsr=toutiao.io&utm_medium=toutiao.io&utm_source=toutiao.io#Follower%E9%87%8D%E5%90%AF "Follower重启")Follower重启
249+
### Follower重启
250250

251251
**_Follower重启投票给自己_**
252252
Follower重启,或者发生网络分区后找不到Leader,会进入LOOKING状态并发起新的一轮投票。

0 commit comments

Comments
 (0)