diff --git a/README.md b/README.md
index 36997655cbc..6feac1b4f63 100644
--- a/README.md
+++ b/README.md
@@ -80,7 +80,7 @@ Github用户如果访问速度缓慢的话,可以转移到[码云](https://git
- [面试指南](#面试指南)
- [Java学习常见问题汇总](#java学习常见问题汇总)
- [资源](#资源)
- - [书单推荐](#书单推荐)
+ - [Java程序员必备书单](#java程序员必备书单)
- [实战项目推荐](#实战项目推荐)
- [待办](#待办)
- [说明](#说明)
@@ -381,9 +381,9 @@ SSO(Single Sign On)即单点登录说的是用户登陆多个子系统的其中
## 资源
-### 书单推荐
+### Java程序员必备书单
-- **[Java程序员必备书单](docs/books/java.md)**
+1. [「基础篇」Guide的Java后端书架来啦!都是Java程序员必看的书籍?](./docs/books/java基础篇.md)
### 实战项目推荐
@@ -437,12 +437,12 @@ Markdown 格式参考:[Github Markdown格式](https://guides.github.com/featur
下面是笔主收集的一些对本仓库提过有价值的pr或者issue的朋友,人数较多,如果你也对本仓库提过不错的pr或者issue的话,你可以加我的微信与我联系。下面的排名不分先后!
-
-
-
+
+
+
diff --git a/docs/books/java.md b/docs/books/java.md
index 60fd6197ec2..61cce5d7d53 100644
--- a/docs/books/java.md
+++ b/docs/books/java.md
@@ -34,7 +34,7 @@
### 基础
-- **[《Head First Java》](https://book.douban.com/subject/2000732/)** : 可以说是我的 Java 启蒙书籍了,特别适合新手读当然也适合我们用来温故 Java 知识点。
+- **[《Head First Java》](https://book.douban.com/subject/2000732/)** : 可以说是我的 Java 启蒙书籍了,我个人觉得还是很适合稍微有一点点经验的新手来阅读的当然也适合我们用来温故 Java 知识点。*ps:刚入门编程,最好的方式还是通过看视频来学习。*
- **[《Java 核心技术卷 1+卷 2》](https://book.douban.com/subject/25762168/)**: 很棒的两本书,建议有点 Java 基础之后再读,介绍的还是比较深入的,非常推荐。这两本书我一般也会用来巩固知识点或者当做工具书参考,是两本适合放在自己身边的好书。
- **[《Java 编程思想 (第 4 版)》](https://book.douban.com/subject/2130190/)**(推荐,豆瓣评分 9.1,3.2K+人评价):大部分人称之为Java领域的圣经,但我不推荐初学者阅读,有点劝退的味道。稍微有点基础后阅读更好。
- **[《JAVA 网络编程 第 4 版》](https://book.douban.com/subject/26259017/)**: 可以系统的学习一下网络的一些概念以及网络编程在 Java 中的使用。
diff --git "a/docs/books/java\345\237\272\347\241\200\347\257\207.md" "b/docs/books/java\345\237\272\347\241\200\347\257\207.md"
new file mode 100644
index 00000000000..0b5e79c3770
--- /dev/null
+++ "b/docs/books/java\345\237\272\347\241\200\347\257\207.md"
@@ -0,0 +1,246 @@
+
+
+这篇文章推荐了大部分我所读过的优秀书籍,虽然部分可能没看完。答应我,一定要看到最后,看完之后应该不会再纠结要看什么书了。走起!!!
+
+*这篇文章未涵盖计算机基础比如算法和数据结构、数据库、分布式、微服务方面的书籍,这个留在下一篇文章推荐。*
+
+## Java
+
+### 基础
+
+#### 《Head First Java》
+
+
+
+*Guide的 Java 启蒙书籍了。因为是我学习Java看的第一本书,所以,我对其有不一样的情感。*
+
+*ps:我是当时学完了 C语言之后才开始学习 Java 的,刚开始看这本书感觉很轻松有趣,可以说是我学习编程初期最喜欢的一本书了。*
+
+有些人说这本书不适合编程新手阅读?(问号脸) 我个人觉得还是很适合稍微有一点点经验的新手来阅读的,当然也适合我们用来温故 Java 知识点。
+
+> ps:刚入门编程,最好的方式还是通过看视频来学习。
+
+#### 《Java 核心技术卷 1+卷 2》
+
+
+
+*Guide拿来当做工具书的两本Java领域的好书!我当时在大学的时候就买了两本放在寝室,没事的时候就翻翻。*
+
+建议有点 Java 基础之后再读,介绍的还是比较深入和全面的,非常推荐。
+
+这两本书的内容很多,全看的话比较费时间,我一般也会用来巩固知识点或者当做工具书参考,是两本适合放在自己身边的好书。
+
+#### 《Java 编程思想 (第 4 版)》
+
+
+
+*这本书Guide第一次看的时候还觉得有点枯燥,那时候还在上大二,看了 1/3就没看下去了。*
+
+大部分人称之为Java领域的圣经(*感觉有点过了~~~*),但我不推荐初学者阅读,有点劝退的味道。稍微有点基础后阅读更好。
+
+这本书到现在我也才看了一半左右,内容确实也比较多,而且稍微有点枯燥,但是比较权威。我一般也是拿来当做工具书参考。
+
+#### 《Java性能权威指南》
+
+
+
+*希望能有更多这Java性能优化方面的好书!*
+
+O'Reilly 家族书,性能调优的入门书,我个人觉得性能调优是每个 Java 从业者必备知识。
+
+这本书介绍的实战内容很不错,尤其是 JVM 调优,缺点也比较明显,就是内容稍微有点老。市面上这种书很少。这本书不适合初学者,建议对 Java 语言已经比价掌握了再看。另外,阅读之前,最好先看看周志明大佬的《深入理解 Java 虚拟机》。
+
+### 并发
+
+#### 《Java 并发编程之美》
+
+
+
+*这本书还是非常适合我们用来学习 Java 多线程的。这本书的讲解非常通俗易懂,作者从并发编程基础到实战都是信手拈来。*
+
+另外,这本书的作者加多自身也会经常在网上发布各种技术文章。这本书也是加多大佬这么多年在多线程领域的沉淀所得的结果吧!他书中的内容基本都是结合代码讲解,非常有说服力!
+
+#### 《实战 Java 高并发程序设计》
+
+
+
+这个是我第二本要推荐的书籍,比较适合作为多线程入门/进阶书籍来看。这本书内容同样是理论结合实战,对于每个知识点的讲解也比较通俗易懂,整体结构也比较清。
+
+#### 《深入浅出 Java 多线程》
+
+
+
+这本书是几位大厂(如阿里)的大佬开源的,Github 地址:[https://github.com/RedSpider1/concurrent](https://github.com/RedSpider1/concurrent)
+
+几位作者为了写好《深入浅出 Java 多线程》这本书阅读了大量的 Java 多线程方面的书籍和博客,然后再加上他们的经验总结、Demo 实例、源码解析,最终才形成了这本书。
+
+这本书的质量也是非常过硬!给作者们点个赞!这本书有统一的排版规则和语言风格、清晰的表达方式和逻辑。并且每篇文章初稿写完后,作者们就会互相审校,合并到主分支时所有成员会再次审校,最后再通篇修订了三遍。
+
+### JVM
+
+JVM 这里就先只推荐一本书籍和一个关于 JVM 参数调优的免费教程(你假笨大佬将的)。
+
+#### 《深入理解Java虚拟机(第3版)》
+
+
+
+*希望国内能有更多这样的优质书籍出现!加油!💪*
+
+这本书就一句话形容:**国产书籍中的战斗机,实实在在的优秀!**
+
+这本书的第三版去年年底已经出来了,新增了很多实在的内容比如ZGC等新一代GC的原理剖析。目前豆瓣上是 9.6 的高分,🐂不🐂我就不多说了!
+
+不论是你面试还是你想要在 Java 领域学习的更深,你都离不开这本书籍。这本书不光要看,你还要多看几遍,都是干货,里面很多实战内容自己还最好实践一篇。
+
+这里额外推荐一个你假笨大佬的[《JVM 参数【Memory篇】》](https://club.perfma.com/course/438755/list)教程,很厉害了!
+
+
+
+### 面试
+
+#### 《JavaGuide面试突击版》
+
+
+
+*谁看谁说好!哈哈!*
+
+Guide自己开源的,涵盖了Java后端方面的大部分知识点比如 集合、JVM、多线程还有数据库MySQL等内容。
+
+在我的公众号后台回复 :“**面试突击**”即可免费获取。
+
+
+
+### Java 8
+
+#### 《Java 8实战》
+
+
+
+*还没用上 Java 8 的可以反思一下了,还没用过 Lambda 也可以反思一下了。*
+
+现在大部分公司至少都用到了 Java 8 , Java 8算是一个里程碑式的版本,提供了很多有用的新特性比如 Lambda、流式处理等等。
+
+这本书是学习 Java 8 新特性很好的选择,它内容包括 Lambda、流和函数式编程等Java8新特性。实战系列的一贯风格让自己快速上手应用起来。
+
+## 软件质量
+
+### 代码质量
+
+#### 《重构_改善既有代码的设计》
+
+
+
+*程序员必看!*
+
+世界顶级、国宝级别的 Martin Fowler 的书籍,可以说是软件开发领域最经典的基本书之一。目前已经出了第二版,我也在不久前买了第二版。
+
+这本书我觉是每一个程序员都必须要看,并且需要看很多次的!
+
+#### 《Effective java 》
+
+
+
+*程序员必看!*
+
+又是一本 Java 领域国宝级别的书,非常经典。这本书主要介绍了在 Java 编程中很多极具实用价值的经验规则,这些经验规则涵盖了大多数开发人员每天所面临的问题的解决方案。这篇文章能够非常实际地帮助你写出更加清晰、健壮和高效的代码。本书中的每条规则都以简短、独立的小文章形式出现,并通过例子代码加以进一步说明。
+
+#### 《代码整洁之道》
+
+
+
+*程序员必看!*
+
+每个程序员都必须要看看的一本书籍,书中很多实际可体会的例子,可以教你写出更优质代码。
+
+最后再推荐两个相关的文档:
+
+- **阿里巴巴 Java 开发手册** :[https://github.com/alibaba/p3c](https://github.com/alibaba/p3c)
+- **Google Java 编程风格指南:**
+
+### 软件设计之道
+
+#### 《人月神话》
+
+
+
+*主要描述了软件开发的基本定律:一个需要10天才能干完的活,不可能让10个人在1天干完!*
+
+非常值得阅读的一本书籍。看书名感觉的第一眼感觉不像是技术类的书籍。这本书对于现代软件尤其是复杂软件的开发的规范化有深刻的意义。
+
+#### 《领域驱动设计:软件核心复杂性应对之道》
+
+
+
+这本领域驱动设计方面的经典之作一直被各种推荐,但是我还来及读。
+
+## 常用框架
+
+### Spring/SpringBoot
+
+#### 《Spring 实战(第 5 版)》
+
+
+
+*比较一般!*
+
+不建议当做入门书籍读,入门的话可以找点国人的书或者视频看。这本定位就相当于是关于 Spring 的一个概览,只有一些基本概念的介绍和示例,涵盖了 Spring 的各个方面,但都不够深入。就像作者在最后一页写的那样:“学习 Spring,这才刚刚开始”。
+
+#### 《Spring 5高级编程(第5版)》
+
+
+
+*工具人!*
+
+对于Spring5的新特性介绍的比较详细,也说不上好。另外,感觉全书翻译的有一点蹩脚的味道,还有一点枯燥。全书的内容比较多,我一般拿来当做工具书参考。
+
+#### 《Spring Boot编程思想(核心篇)》
+
+
+
+*稍微有点啰嗦,但是原理介绍的比较清楚。*
+
+SpringBoot 解析,不适合初学者。我是去年入手的,现在就看了几章,后面没看下去。书很厚,感觉很多很多知识点的讲解过于啰嗦和拖沓,不过,这本书对于SpringBoot内部原理讲解的还是很清楚。
+
+#### 《Spring Boot实战》
+
+
+
+比较一般的一本书,可以简单拿来看一下。
+
+#### 《Spring Boot实战派》
+
+
+
+这本书使用的Spring Boot 2.0+的版本,还算比较新。整本书采用“知识点+实例”的形式编写。
+
+另外,这本书的干货很多,作者在注意实战的过程中还不忘记对于一些重要的基础知识的讲解。
+
+如果你要学习 Spring Boot 的话,我还是比较推荐这本书的。
+
+### Netty
+
+#### 《Netty实战》
+
+
+
+*Guide学习Netty看的就是这本书籍,RPC框架乞丐版 Guide已经写完,Netty系列也在路上了!*
+
+这本书可以用来入门 Netty ,内容从BIO聊到了 NIO、之后才详细介绍为什么有 Netty 、Netty 为什么好用以及Netty重要的知识点讲解。
+
+这本书基本把 Netty 一些重要的知识点都介绍到了,而且基本都是通过实战的形式讲解。
+
+#### 《Netty进阶之路:跟着案例学Netty》
+
+
+
+*深入Netty必看!*
+
+内容都是关于使用 Netty 的实践案例比如内存泄露这些东西。如果你觉得你的 Netty 已经完全入门了,并且你想要对Netty掌握的更深的话,推荐你看一下这本书。
+
+#### 《Netty 入门与实战:仿写微信 IM 即时通讯系统》
+
+
+
+*质量很高的一个小册!*
+
+通过一个基于 Netty 框架实现 IM 核心系统为引子,带你学习Netty。整个小册的质量还是很高的,即使你没有 Netty 使用经验也能看懂。
\ No newline at end of file
diff --git "a/docs/dataStructures-algorithms/\346\225\260\346\215\256\347\273\223\346\236\204.md" "b/docs/dataStructures-algorithms/\346\225\260\346\215\256\347\273\223\346\236\204.md"
index e1169ede68e..3a117dd36a4 100644
--- "a/docs/dataStructures-algorithms/\346\225\260\346\215\256\347\273\223\346\236\204.md"
+++ "b/docs/dataStructures-algorithms/\346\225\260\346\215\256\347\273\223\346\236\204.md"
@@ -95,7 +95,7 @@ Set 继承于 Collection 接口,是一个不允许出现重复元素,并且
- [集合框架源码学习之 HashMap(JDK1.8)](https://juejin.im/post/5ab0568b5188255580020e56)
-- [ConcurrentHashMap 实现原理及源码分析](https://link.juejin.im/?target=http%3A%2F%2Fwww.cnblogs.com%2Fchengxiao%2Fp%2F6842045.html)
+- [ConcurrentHashMap 实现原理及源码分析](https://www.cnblogs.com/chengxiao/p/6842045.html)
## 树
diff --git "a/docs/java/Java\345\237\272\347\241\200\347\237\245\350\257\206.md" "b/docs/java/Java\345\237\272\347\241\200\347\237\245\350\257\206.md"
index 669b255ab4b..503a51a47d1 100644
--- "a/docs/java/Java\345\237\272\347\241\200\347\237\245\350\257\206.md"
+++ "b/docs/java/Java\345\237\272\347\241\200\347\237\245\350\257\206.md"
@@ -219,7 +219,7 @@ Java 中的注释有三种:
>
> ```java
> // check to see if the employee is eligible for full benefits
-> if ((employee.falgs & HOURLY_FLAG) && (employee.age > 65))
+> if ((employee.flags & HOURLY_FLAG) && (employee.age > 65))
> ```
>
> 应替换为
diff --git "a/docs/java/collection/Java\351\233\206\345\220\210\346\241\206\346\236\266\345\270\270\350\247\201\351\235\242\350\257\225\351\242\230.md" "b/docs/java/collection/Java\351\233\206\345\220\210\346\241\206\346\236\266\345\270\270\350\247\201\351\235\242\350\257\225\351\242\230.md"
index 0a85293458f..de2698aa728 100644
--- "a/docs/java/collection/Java\351\233\206\345\220\210\346\241\206\346\236\266\345\270\270\350\247\201\351\235\242\350\257\225\351\242\230.md"
+++ "b/docs/java/collection/Java\351\233\206\345\220\210\346\241\206\346\236\266\345\270\270\350\247\201\351\235\242\350\257\225\351\242\230.md"
@@ -7,6 +7,7 @@
* [Collection](#Collection)
* [Map](#Map)
* [1.1.3 如何选用集合?](#-1)
+ * [1.1.4 为什么要使用集合?](#-1)
* [1.2 Iterator迭代器接口](#Iterator)
* [1.3 Collection子接口之List](#CollectionList)
* [ 1.3.1 Arraylist 与 LinkedList 区别?](#ArraylistLinkedList)
@@ -72,6 +73,13 @@
主要根据集合的特点来选用,比如我们需要根据键值获取到元素值时就选用Map接口下的集合,需要排序时选择TreeMap,不需要排序时就选择HashMap,需要保证线程安全就选用ConcurrentHashMap.当我们只需要存放元素值时,就选择实现Collection接口的集合,需要保证元素唯一时选择实现Set接口的集合比如TreeSet或HashSet,不需要就选择实现List接口的比如ArrayList或LinkedList,然后再根据实现这些接口的集合的特点来选用。
+### 1.1.4 为什么要使用集合?
+当我们需要保存一组类型相同的数据的时候,我们应该是用一个容器来保存,这个容器就是数组,但是,使用数组存储对象具有一定的弊端,
+因为我们在实际开发中,存储的数据的类型是多种多样的,于是,就出现了“集合”,集合同样也是用来存储多个数据的。
+
+数组的缺点是一旦声明之后,长度就不可变了;同时,声明数组时的数据类型也决定了该数组存储的数据的类型;而且,数组存储的数据是有序的、可重复的,特点单一。
+但是集合提高了数据存储的灵活性,Java集合不仅可以用来存储不同类型不同数量的对象,还可以保存具有映射关系的数据
+
## 1.2 Iterator迭代器接口
## 1.3 Collection子接口之List
@@ -459,6 +467,7 @@ synchronized只锁定当前链表或红黑二叉树的首节点,这样只要ha
## 1.6 Collections工具类
+详见笔主的这篇文章: https://gitee.com/SnailClimb/JavaGuide/blob/master/docs/java/basic/Arrays,CollectionsCommonMethods.md
## 公众号
diff --git "a/docs/java/jvm/Java\345\206\205\345\255\230\345\214\272\345\237\237.md" "b/docs/java/jvm/Java\345\206\205\345\255\230\345\214\272\345\237\237.md"
index 050401f979c..30ad28deff5 100644
--- "a/docs/java/jvm/Java\345\206\205\345\255\230\345\214\272\345\237\237.md"
+++ "b/docs/java/jvm/Java\345\206\205\345\255\230\345\214\272\345\237\237.md"
@@ -101,7 +101,7 @@ Java 虚拟机在执行 Java 程序的过程中会把它管理的内存划分成
**Java 内存可以粗糙的区分为堆内存(Heap)和栈内存 (Stack),其中栈就是现在说的虚拟机栈,或者说是虚拟机栈中局部变量表部分。** (实际上,Java 虚拟机栈是由一个个栈帧组成,而每个栈帧中都拥有:局部变量表、操作数栈、动态链接、方法出口信息。)
-**局部变量表主要存放了编译器可知的各种数据类型**(boolean、byte、char、short、int、float、long、double)、**对象引用**(reference 类型,它不同于对象本身,可能是一个指向对象起始地址的引用指针,也可能是指向一个代表对象的句柄或其他与此对象相关的位置)。
+**局部变量表主要存放了编译期可知的各种数据类型**(boolean、byte、char、short、int、float、long、double)、**对象引用**(reference 类型,它不同于对象本身,可能是一个指向对象起始地址的引用指针,也可能是指向一个代表对象的句柄或其他与此对象相关的位置)。
**Java 虚拟机栈会出现两种错误:StackOverFlowError 和 OutOfMemoryError。**
diff --git a/docs/system-design/data-communication/kafka-inverview.md b/docs/system-design/data-communication/kafka-inverview.md
index 3788106f490..42ef9746dc6 100644
--- a/docs/system-design/data-communication/kafka-inverview.md
+++ b/docs/system-design/data-communication/kafka-inverview.md
@@ -192,7 +192,7 @@ acks 的默认值即为1,代表我们的消息被leader副本接收之后就
一般情况下我们还需要设置 **min.insync.replicas> 1** ,这样配置代表消息至少要被写入到 2 个副本才算是被成功发送。**min.insync.replicas** 的默认值为 1 ,在实际生产中应尽量避免默认值 1。
-但是,为了保证整个 Kafka 服务的高可用性,你需要确保 **replication.factor > min.insync.replicas** 。为什么呢?设想一下加入两者相等的话,只要是有一个副本挂掉,整个分区就无法正常工作了。这明显违反高可用性!一般推荐设置成 **replication.factor = min.insync.replicas + 1**。
+但是,为了保证整个 Kafka 服务的高可用性,你需要确保 **replication.factor > min.insync.replicas** 。为什么呢?设想一下假如两者相等的话,只要是有一个副本挂掉,整个分区就无法正常工作了。这明显违反高可用性!一般推荐设置成 **replication.factor = min.insync.replicas + 1**。
**设置 unclean.leader.election.enable = false**