diff --git a/docs/about-the-author/zhishixingqiu-two-years.md b/docs/about-the-author/zhishixingqiu-two-years.md index cdab9849..57e19d3a 100644 --- a/docs/about-the-author/zhishixingqiu-two-years.md +++ b/docs/about-the-author/zhishixingqiu-two-years.md @@ -103,18 +103,22 @@ star: 2 ## 如何加入? -两年前,星球的定价是 **50/年** ,这是星球的最低定价,我还附送了 33 元优惠券。扣除了星球手续费,发了各种福利之后,几乎就是纯粹做公益。感兴趣的小伙伴可以看看我在 2020-01-03 发的头条:[做了一个很久没敢做的事情](https://mp.weixin.qq.com/s?__biz=Mzg2OTA0Njk0OA==&mid=2247486049&idx=1&sn=e0161b409e8f164251bdaa0c83a476bc&chksm=cea245aaf9d5ccbcafdb95a546d959508814085620aabdbb4385c4b8cea6e50bf157c3697041&token=1614894361&lang=zh_CN#rd),去考古一下。 +两年前,星球的定价是 **50/年** ,这是星球的最低定价,我还附送了 33 元优惠券。扣除了星球手续费,发了各种福利之后,几乎就是纯粹做公益。 -随着时间推移,星球积累的干货资源越来越多,我花在星球上的时间也越来越多。于是,星球的定价慢慢被调整为了 **159/年** (**续费半价**)! +感兴趣的小伙伴可以看看我在 2020-01-03 发的头条:[做了一个很久没敢做的事情](https://mp.weixin.qq.com/s?__biz=Mzg2OTA0Njk0OA==&mid=2247486049&idx=1&sn=e0161b409e8f164251bdaa0c83a476bc&chksm=cea245aaf9d5ccbcafdb95a546d959508814085620aabdbb4385c4b8cea6e50bf157c3697041&token=1614894361&lang=zh_CN#rd),去考古一下。 -目前已经有 **1.3w+** 人加入星球,随着加入的人数增加,这个定价还会继续调整,越早加入越划算! +![](https://guide-blog-images.oss-cn-shenzhen.aliyuncs.com/xingqiu/image-20220311203414600.png) -为了感谢大家的支持,我这里再送出一张新人优惠券,使用优惠券 **139/年** 加入(数量有限,即将调整为 **199/年**)。 +随着时间推移,星球积累的干货资源越来越多,我花在星球上的时间也越来越多。于是,我将星球的定价慢慢调整为了 **159/年**!后续会将星球的价格调整为 **199/年**,想要加入的小伙伴一定要尽早。 + +你可以添加我的微信(没有手机号再申请微信,故使用企业微信。不过,请放心,这个号的消息也是我本人处理,平时最常看这个微信)领取星球专属优惠券,限时 **130/年** 加入(续费半价)! + +![](https://guide-blog-images.oss-cn-shenzhen.aliyuncs.com/github/javaguide/IMG_3007.jpg) + +或者你也可以直接使用下面这张 **20** 元的优惠券,**139/年** 加入。 ![](https://guide-blog-images.oss-cn-shenzhen.aliyuncs.com/xingqiu/xingqiuyouhuijuan-20.png) -如果你在犹豫要不要加入的话,我建议你进来体验一下,三天之内知识星球 APP 右上角可以申请全额退款,秒到账!绝对不会坑大家! - 进入星球之后,你可以为自己制定一个目标,比如自己想要进入某某还不错的公司或者达成什么成就(一定要是还算有点挑战的目标)。待你完成目标在星球分享之后,我会将星球的门票费退还给你。 **真诚欢迎准备面试的小伙伴加入星球一起交流!真心希望能够帮助到更多小伙伴!** diff --git a/docs/database/redis/cache-basics.md b/docs/database/redis/cache-basics.md index 1c5e5e5a..336750ae 100644 --- a/docs/database/redis/cache-basics.md +++ b/docs/database/redis/cache-basics.md @@ -1,5 +1,5 @@ --- -title: 缓存基础常见面试题总结 +title: 缓存基础常见面试题总结(付费) category: 数据库 tag: - Redis diff --git a/docs/database/redis/redis-cluster.md b/docs/database/redis/redis-cluster.md index f24de12b..8ed3e172 100644 --- a/docs/database/redis/redis-cluster.md +++ b/docs/database/redis/redis-cluster.md @@ -1,5 +1,5 @@ --- -title: Redis 集群详解 +title: Redis 集群详解(付费) category: 数据库 tag: - Redis diff --git a/docs/distributed-system/distributed-transaction.md b/docs/distributed-system/distributed-transaction.md index f8939fc8..09b0c257 100644 --- a/docs/distributed-system/distributed-transaction.md +++ b/docs/distributed-system/distributed-transaction.md @@ -1,5 +1,5 @@ --- -title: 分布式事务 +title: 分布式事务(付费) category: 分布式 --- diff --git a/docs/high-availability/fallback&circuit-breaker.md b/docs/high-availability/fallback&circuit-breaker.md index 15cdab9f..c32d64c9 100644 --- a/docs/high-availability/fallback&circuit-breaker.md +++ b/docs/high-availability/fallback&circuit-breaker.md @@ -1,5 +1,5 @@ --- -title: 降级&熔断 +title: 降级&熔断(付费) category: 高可用 --- diff --git a/docs/interview-preparation/interview-experience.md b/docs/interview-preparation/interview-experience.md index eb93509f..35a5ba46 100644 --- a/docs/interview-preparation/interview-experience.md +++ b/docs/interview-preparation/interview-experience.md @@ -1,5 +1,5 @@ --- -title: 优质面经 +title: 优质面经(付费) category: 知识星球 --- diff --git a/docs/interview-preparation/self-test-of-common-interview-questions.md b/docs/interview-preparation/self-test-of-common-interview-questions.md index 9f6324a5..2f73dac5 100644 --- a/docs/interview-preparation/self-test-of-common-interview-questions.md +++ b/docs/interview-preparation/self-test-of-common-interview-questions.md @@ -1,5 +1,5 @@ --- -title: 常见面试题自测 +title: 常见面试题自测(付费) category: 知识星球 --- diff --git a/docs/interview-preparation/teach-you-how-to-prepare-for-the-interview-hand-in-hand.md b/docs/interview-preparation/teach-you-how-to-prepare-for-the-interview-hand-in-hand.md index 3e1ccfcf..4ed18c21 100644 --- a/docs/interview-preparation/teach-you-how-to-prepare-for-the-interview-hand-in-hand.md +++ b/docs/interview-preparation/teach-you-how-to-prepare-for-the-interview-hand-in-hand.md @@ -1,5 +1,5 @@ --- -title: 手把手教你如何准备面试 +title: 手把手教你如何准备面试(付费) category: 知识星球 --- diff --git a/docs/java/collection/arraylist-source-code.md b/docs/java/collection/arraylist-source-code.md index 2f0ebb25..aea24307 100644 --- a/docs/java/collection/arraylist-source-code.md +++ b/docs/java/collection/arraylist-source-code.md @@ -6,7 +6,7 @@ tag: --- -## 1. ArrayList 简介 +## ArrayList 简介 `ArrayList` 的底层是数组队列,相当于动态数组。与 Java 中的数组相比,它的容量能动态增长。在添加大量元素前,应用程序可以使用`ensureCapacity`操作来增加 `ArrayList` 实例的容量。这可以减少递增式再分配的数量。 @@ -24,12 +24,12 @@ public class ArrayList extends AbstractList - `ArrayList` 实现了 **`Cloneable` 接口** ,即覆盖了函数`clone()`,能被克隆。 - `ArrayList` 实现了 `java.io.Serializable`接口,这意味着`ArrayList`支持序列化,能通过序列化去传输。 -### 1.1. Arraylist 和 Vector 的区别? +### Arraylist 和 Vector 的区别? 1. `ArrayList` 是 `List` 的主要实现类,底层使用 `Object[ ]`存储,适用于频繁的查找工作,线程不安全 ; 2. `Vector` 是 `List` 的古老实现类,底层使用 `Object[ ]`存储,线程安全的。 -### 1.2. Arraylist 与 LinkedList 区别? +### Arraylist 与 LinkedList 区别? 1. **是否保证线程安全:** `ArrayList` 和 `LinkedList` 都是不同步的,也就是不保证线程安全; 2. **底层数据结构:** `Arraylist` 底层使用的是 **`Object` 数组**;`LinkedList` 底层使用的是 **双向链表** 数据结构(JDK1.6 之前为循环链表,JDK1.7 取消了循环。注意双向链表和双向循环链表的区别,下面有介绍到!) @@ -37,7 +37,7 @@ public class ArrayList extends AbstractList 4. **是否支持快速随机访问:** `LinkedList` 不支持高效的随机元素访问,而 `ArrayList` 支持。快速随机访问就是通过元素的序号快速获取元素对象(对应于`get(int index)`方法)。 5. **内存空间占用:** `ArrayList` 的空 间浪费主要体现在在 list 列表的结尾会预留一定的容量空间,而 `LinkedList` 的空间花费则体现在它的每一个元素都需要消耗比 `ArrayList` 更多的空间(因为要存放直接后继和直接前驱以及数据)。 -## 2. ArrayList 核心源码解读 +## ArrayList 核心源码解读 ```java package java.util; @@ -546,9 +546,9 @@ public class ArrayList extends AbstractList ``` -## 3. ArrayList 扩容机制分析 +## ArrayList 扩容机制分析 -### 3.1. 先从 ArrayList 的构造函数说起 +### 先从 ArrayList 的构造函数说起 **(JDK8)ArrayList 有三种方式来初始化,构造方法源码如下:** @@ -603,15 +603,15 @@ public class ArrayList extends AbstractList ``` -细心的同学一定会发现 :**以无参数构造方法创建 `ArrayList` 时,实际上初始化赋值的是一个空数组。当真正对数组进行添加元素操作时,才真正分配容量。即向数组中添加第一个元素时,数组容量扩为 10。** 下面在我们分析 ArrayList 扩容时会讲到这一点内容! +细心的同学一定会发现 :**以无参数构造方法创建 ``ArrayList`` 时,实际上初始化赋值的是一个空数组。当真正对数组进行添加元素操作时,才真正分配容量。即向数组中添加第一个元素时,数组容量扩为 10。** 下面在我们分析 ArrayList 扩容时会讲到这一点内容! > 补充:JDK6 new 无参构造的 `ArrayList` 对象时,直接创建了长度是 10 的 `Object[]` 数组 elementData 。 -### 3.2. 一步一步分析 ArrayList 扩容机制 +### 一步一步分析 ArrayList 扩容机制 这里以无参构造函数创建的 ArrayList 为例分析 -#### 3.2.1. 先来看 `add` 方法 +#### 先来看 `add` 方法 ```java /** @@ -628,7 +628,7 @@ public class ArrayList extends AbstractList > **注意** :JDK11 移除了 `ensureCapacityInternal()` 和 `ensureExplicitCapacity()` 方法 -#### 3.2.2. 再来看看 `ensureCapacityInternal()` 方法 +#### 再来看看 `ensureCapacityInternal()` 方法 (JDK7)可以看到 `add` 方法 首先调用了`ensureCapacityInternal(size + 1)` @@ -648,7 +648,7 @@ public class ArrayList extends AbstractList > 此处和后续 JDK8 代码格式化略有不同,核心代码基本一样。 -#### 3.2.3. `ensureExplicitCapacity()` 方法 +#### `ensureExplicitCapacity()` 方法 如果调用 `ensureCapacityInternal()` 方法就一定会进入(执行)这个方法,下面我们来研究一下这个方法的源码! @@ -673,7 +673,7 @@ public class ArrayList extends AbstractList 直到添加第 11 个元素,minCapacity(为 11)比 elementData.length(为 10)要大。进入 grow 方法进行扩容。 -#### 3.2.4. `grow()` 方法 +#### `grow()` 方法 ```java /** @@ -718,7 +718,7 @@ public class ArrayList extends AbstractList - java 中的 `length()` 方法是针对字符串说的,如果想看这个字符串的长度则用到 `length()` 这个方法. - java 中的 `size()` 方法是针对泛型集合说的,如果想看这个泛型有多少个元素,就调用此方法来查看! -#### 3.2.5. `hugeCapacity()` 方法。 +#### `hugeCapacity()` 方法。 从上面 `grow()` 方法源码我们知道: 如果新容量大于 MAX_ARRAY_SIZE,进入(执行) `hugeCapacity()` 方法来比较 minCapacity 和 MAX_ARRAY_SIZE,如果 minCapacity 大于最大容量,则新容量则为`Integer.MAX_VALUE`,否则,新容量大小则为 MAX_ARRAY_SIZE 即为 `Integer.MAX_VALUE - 8`。 @@ -736,11 +736,11 @@ public class ArrayList extends AbstractList } ``` -### 3.3. `System.arraycopy()` 和 `Arrays.copyOf()`方法 +### `System.arraycopy()` 和 `Arrays.copyOf()`方法 阅读源码的话,我们就会发现 ArrayList 中大量调用了这两个方法。比如:我们上面讲的扩容操作以及`add(int index, E element)`、`toArray()` 等方法中都用到了该方法! -#### 3.3.1. `System.arraycopy()` 方法 +#### `System.arraycopy()` 方法 源码: @@ -807,7 +807,7 @@ public class ArraycopyTest { 0 1 99 2 3 0 0 0 0 0 ``` -#### 3.3.2. `Arrays.copyOf()`方法 +#### `Arrays.copyOf()`方法 源码: @@ -856,7 +856,7 @@ public class ArrayscopyOfTest { 10 ``` -#### 3.3.3. 两者联系和区别 +#### 两者联系和区别 **联系:** @@ -866,9 +866,9 @@ public class ArrayscopyOfTest { `arraycopy()` 需要目标数组,将原数组拷贝到你自己定义的数组里或者原数组,而且可以选择拷贝的起点和长度以及放入新数组中的位置 `copyOf()` 是系统自动在内部新建一个数组,并返回该数组。 -### 3.4. `ensureCapacity`方法 +### `ensureCapacity`方法 -ArrayList 源码中有一个 `ensureCapacity` 方法不知道大家注意到没有,这个方法 ArrayList 内部没有被调用过,所以很显然是提供给用户调用的,那么这个方法有什么作用呢? +`ArrayList` 源码中有一个 `ensureCapacity` 方法不知道大家注意到没有,这个方法 `ArrayList` 内部没有被调用过,所以很显然是提供给用户调用的,那么这个方法有什么作用呢? ```java /** @@ -891,7 +891,7 @@ ArrayList 源码中有一个 `ensureCapacity` 方法不知道大家注意到没 ``` -**最好在 add 大量元素之前用 `ensureCapacity` 方法,以减少增量重新分配的次数** +理论上来说,最好在向 `ArrayList` 添加大量元素之前用 `ensureCapacity` 方法,以减少增量重新分配的次数 我们通过下面的代码实际测试以下这个方法的效果: @@ -939,4 +939,7 @@ public class EnsureCapacityTest { 使用ensureCapacity方法后:1773 ``` -通过运行结果,我们可以看出向 ArrayList 添加大量元素之前最好先使用`ensureCapacity` 方法,以减少增量重新分配的次数。 +通过运行结果,我们可以看出向 `ArrayList` 添加大量元素之前使用`ensureCapacity` 方法可以提升性能。不过,这个性能差距几乎可以忽略不计。而且,实际项目根本也不可能往 `ArrayList` 里面添加这么多元素。 + + + diff --git a/docs/java/concurrent/jmm.md b/docs/java/concurrent/jmm.md index 96d12975..7a6951ae 100644 --- a/docs/java/concurrent/jmm.md +++ b/docs/java/concurrent/jmm.md @@ -26,7 +26,7 @@ head: ![CPU 缓存模型示意图](./images/jmm/cpu-cache.jpg) -**CPU Cache 的工作方式:** 先复制一份数据到 CPU Cache 中,当 CPU 需要用到的时候就可以直接从 CPU Cache 中读取数据,当运算完成后,再将运算得到的数据写回 Main Memory 中。但是,这样存在 **内存缓存不一致性的问题** !比如我执行一个 i++操作的话,如果两个线程同时执行的话,假设两个线程从 CPU Cache 中读取的 i=1,两个线程做了 1++运算完之后再写回 Main Memory 之后 i=2,而正确结果应该是 i=3。 +**CPU Cache 的工作方式:** 先复制一份数据到 CPU Cache 中,当 CPU 需要用到的时候就可以直接从 CPU Cache 中读取数据,当运算完成后,再将运算得到的数据写回 Main Memory 中。但是,这样存在 **内存缓存不一致性的问题** !比如我执行一个 i++ 操作的话,如果两个线程同时执行的话,假设两个线程从 CPU Cache 中读取的 i=1,两个线程做了 1++ 运算完之后再写回 Main Memory 之后 i=2,而正确结果应该是 i=3。 **CPU 为了解决内存缓存不一致性问题可以通过制定缓存一致协议(比如 [MESI 协议](https://zh.wikipedia.org/wiki/MESI%E5%8D%8F%E8%AE%AE))或者其他手段来解决。** 这个缓存缓存一致性协议指的是在 CPU 高速缓存与主内存交互的时候需要准守的原则和规范。不同的 CPU 中,使用的缓存一致性协议通常也会有所不同。 diff --git a/docs/system-design/framework/netty.md b/docs/system-design/framework/netty.md index ab1cfdc6..a94aebda 100644 --- a/docs/system-design/framework/netty.md +++ b/docs/system-design/framework/netty.md @@ -1,5 +1,5 @@ --- -title: Netty常见面试题总结 +title: Netty常见面试题总结(付费) category: 框架 --- diff --git a/docs/system-design/framework/spring/springboot-knowledge-and-questions-summary.md b/docs/system-design/framework/spring/springboot-knowledge-and-questions-summary.md index 50b01355..4ae0704c 100644 --- a/docs/system-design/framework/spring/springboot-knowledge-and-questions-summary.md +++ b/docs/system-design/framework/spring/springboot-knowledge-and-questions-summary.md @@ -1,5 +1,5 @@ --- -title: SpringBoot常见面试题总结 +title: SpringBoot常见面试题总结(付费) category: 框架 tag: - Spring diff --git a/docs/system-design/system-design-questions.md b/docs/system-design/system-design-questions.md index 211ac1d3..a470dbd0 100644 --- a/docs/system-design/system-design-questions.md +++ b/docs/system-design/system-design-questions.md @@ -1,5 +1,5 @@ --- -title: 系统设计常见面试题总结 +title: 系统设计常见面试题总结(付费) category: Java面试指北 --- diff --git a/docs/zhuanlan/handwritten-rpc-framework.md b/docs/zhuanlan/handwritten-rpc-framework.md index 6e9efceb..5e7a9950 100644 --- a/docs/zhuanlan/handwritten-rpc-framework.md +++ b/docs/zhuanlan/handwritten-rpc-framework.md @@ -1,5 +1,5 @@ --- -title: 《手写 RPC 框架》 +title: 《手写 RPC 框架》(付费) category: 知识星球 --- @@ -39,6 +39,10 @@ category: 知识星球 ![](https://guide-blog-images.oss-cn-shenzhen.aliyuncs.com/github/javaguide/IMG_3007.jpg) +或者你也可以直接使用下面这张 **20** 元的优惠券,**139/年** 加入。 + +![](https://guide-blog-images.oss-cn-shenzhen.aliyuncs.com/xingqiu/xingqiuyouhuijuan-20.png) + 进入星球之后,你可以为自己制定一个目标,比如自己想要进入某某还不错的公司或者达成什么成就(一定要是还算有点挑战的目标)。待你完成目标在星球分享之后,我会将星球的门票费退还给你。 **真诚欢迎准备面试的小伙伴加入星球一起交流!真心希望能够帮助到更多小伙伴!** diff --git a/docs/zhuanlan/java-mian-shi-zhi-bei.md b/docs/zhuanlan/java-mian-shi-zhi-bei.md index 707e7aad..03cb8bdf 100644 --- a/docs/zhuanlan/java-mian-shi-zhi-bei.md +++ b/docs/zhuanlan/java-mian-shi-zhi-bei.md @@ -1,5 +1,5 @@ --- -title: 《Java 面试指北》 +title: 《Java 面试指北》(付费) category: 知识星球 star: 5 --- @@ -88,6 +88,10 @@ star: 5 ![](https://guide-blog-images.oss-cn-shenzhen.aliyuncs.com/github/javaguide/IMG_3007.jpg) +或者你也可以直接使用下面这张 **20** 元的优惠券,**139/年** 加入。 + +![](https://guide-blog-images.oss-cn-shenzhen.aliyuncs.com/xingqiu/xingqiuyouhuijuan-20.png) + 进入星球之后,你可以为自己制定一个目标,比如自己想要进入某某还不错的公司或者达成什么成就(一定要是还算有点挑战的目标)。待你完成目标在星球分享之后,我会将星球的门票费退还给你。 **真诚欢迎准备面试的小伙伴加入星球一起交流!真心希望能够帮助到更多小伙伴!** diff --git a/docs/zhuanlan/readme.md b/docs/zhuanlan/readme.md index a6519443..5eabc8e1 100644 --- a/docs/zhuanlan/readme.md +++ b/docs/zhuanlan/readme.md @@ -38,6 +38,10 @@ category: 知识星球 ![](https://guide-blog-images.oss-cn-shenzhen.aliyuncs.com/github/javaguide/IMG_3007.jpg) +或者你也可以直接使用下面这张 **20** 元的优惠券,**139/年** 加入。 + +![](https://guide-blog-images.oss-cn-shenzhen.aliyuncs.com/xingqiu/xingqiuyouhuijuan-20.png) + 进入星球之后,你可以为自己制定一个目标,比如自己想要进入某某还不错的公司或者达成什么成就(一定要是还算有点挑战的目标)。待你完成目标在星球分享之后,我会将星球的门票费退还给你。 **真诚欢迎准备面试的小伙伴加入星球一起交流!真心希望能够帮助到更多小伙伴!** diff --git a/docs/zhuanlan/source-code-reading.md b/docs/zhuanlan/source-code-reading.md index 895bfb5c..b4e891d1 100644 --- a/docs/zhuanlan/source-code-reading.md +++ b/docs/zhuanlan/source-code-reading.md @@ -1,5 +1,5 @@ --- -title: 《Java 必读源码系列》 +title: 《Java 必读源码系列》(付费) category: 知识星球 star: true --- @@ -46,6 +46,10 @@ star: true ![](https://guide-blog-images.oss-cn-shenzhen.aliyuncs.com/github/javaguide/IMG_3007.jpg) +或者你也可以直接使用下面这张 **20** 元的优惠券,**139/年** 加入。 + +![](https://guide-blog-images.oss-cn-shenzhen.aliyuncs.com/xingqiu/xingqiuyouhuijuan-20.png) + 进入星球之后,你可以为自己制定一个目标,比如自己想要进入某某还不错的公司或者达成什么成就(一定要是还算有点挑战的目标)。待你完成目标在星球分享之后,我会将星球的门票费退还给你。 **真诚欢迎准备面试的小伙伴加入星球一起交流!真心希望能够帮助到更多小伙伴!**