1
0
mirror of https://github.com/Snailclimb/JavaGuide synced 2025-06-16 18:10:13 +08:00

Use https for some links

This commit is contained in:
谭九鼎 2021-06-02 12:46:32 +00:00 committed by GitHub
parent 1d3d55ea2f
commit a7cb255e46
26 changed files with 76 additions and 76 deletions

View File

@ -6,7 +6,7 @@
> 1. **介绍**:关于 JavaGuide 的相关介绍请看:[关于 JavaGuide 的一些说明](https://www.yuque.com/snailclimb/dr6cvl/mr44yt) 。 > 1. **介绍**:关于 JavaGuide 的相关介绍请看:[关于 JavaGuide 的一些说明](https://www.yuque.com/snailclimb/dr6cvl/mr44yt) 。
> 2. **PDF版本** [《JavaGuide 面试突击版》PDF 版本](#公众号) 。 > 2. **PDF版本** [《JavaGuide 面试突击版》PDF 版本](#公众号) 。
> 3. **图解计算机基础** [图解计算机基础 PDF 下载](http://mp.weixin.qq.com/s?__biz=Mzg2OTA0Njk0OA==&mid=100021725&idx=1&sn=2db9664ca25363139a81691043e9fd8f&chksm=4ea19a1679d61300d8990f7e43bfc7f476577a81b712cf0f9c6f6552a8b219bc081efddb5c54#rd) 。 > 3. **图解计算机基础** [图解计算机基础 PDF 下载](https://mp.weixin.qq.com/s?__biz=Mzg2OTA0Njk0OA==&mid=100021725&idx=1&sn=2db9664ca25363139a81691043e9fd8f&chksm=4ea19a1679d61300d8990f7e43bfc7f476577a81b712cf0f9c6f6552a8b219bc081efddb5c54#rd) 。
> 4. **知识星球** : 简历指导/Java学习/面试指导/面试小册。欢迎加入[我的知识星球](https://mp.weixin.qq.com/s?__biz=Mzg2OTA0Njk0OA==&mid=100015911&idx=1&sn=2e8a0f5acb749ecbcbb417aa8a4e18cc&chksm=4ea1b0ec79d639fae37df1b86f196e8ce397accfd1dd2004bcadb66b4df5f582d90ae0d62448#rd) 。星球内部更新的[《Java面试进阶指北 打造个人的技术竞争力》](https://www.yuque.com/docs/share/f37fc804-bfe6-4b0d-b373-9c462188fec7)这个小册的质量很高,专为面试打造。 > 4. **知识星球** : 简历指导/Java学习/面试指导/面试小册。欢迎加入[我的知识星球](https://mp.weixin.qq.com/s?__biz=Mzg2OTA0Njk0OA==&mid=100015911&idx=1&sn=2e8a0f5acb749ecbcbb417aa8a4e18cc&chksm=4ea1b0ec79d639fae37df1b86f196e8ce397accfd1dd2004bcadb66b4df5f582d90ae0d62448#rd) 。星球内部更新的[《Java面试进阶指北 打造个人的技术竞争力》](https://www.yuque.com/docs/share/f37fc804-bfe6-4b0d-b373-9c462188fec7)这个小册的质量很高,专为面试打造。
> 5. **面试专版** :准备面试的小伙伴可以考虑面试专版:[《Java 面试进阶指南》](https://xiaozhuanlan.com/javainterview?rel=javaguide) > 5. **面试专版** :准备面试的小伙伴可以考虑面试专版:[《Java 面试进阶指南》](https://xiaozhuanlan.com/javainterview?rel=javaguide)
> 6. **转载须知** 以下所有文章如非文首说明皆为我Guide哥的原创转载在文首注明出处如发现恶意抄袭/搬运,会动用法律武器维护自己的权益。让我们一起维护一个良好的技术创作环境!⛽️ > 6. **转载须知** 以下所有文章如非文首说明皆为我Guide哥的原创转载在文首注明出处如发现恶意抄袭/搬运,会动用法律武器维护自己的权益。让我们一起维护一个良好的技术创作环境!⛽️
@ -94,7 +94,7 @@
## 计算机基础 ## 计算机基础
👉 **[图解计算机基础 PDF 下载](http://mp.weixin.qq.com/s?__biz=Mzg2OTA0Njk0OA==&mid=100021725&idx=1&sn=2db9664ca25363139a81691043e9fd8f&chksm=4ea19a1679d61300d8990f7e43bfc7f476577a81b712cf0f9c6f6552a8b219bc081efddb5c54#rd)** 。 👉 **[图解计算机基础 PDF 下载](https://mp.weixin.qq.com/s?__biz=Mzg2OTA0Njk0OA==&mid=100021725&idx=1&sn=2db9664ca25363139a81691043e9fd8f&chksm=4ea19a1679d61300d8990f7e43bfc7f476577a81b712cf0f9c6f6552a8b219bc081efddb5c54#rd)** 。
### 操作系统 ### 操作系统

View File

@ -50,7 +50,7 @@ Leetcode官方详细解答地址
我们使用变量来跟踪进位,并从包含最低有效位的表头开始模拟逐 我们使用变量来跟踪进位,并从包含最低有效位的表头开始模拟逐
位相加的过程。 位相加的过程。
![图1对两数相加方法的可视化: 342 + 465 = 807342+465=807 每个结点都包含一个数字,并且数字按位逆序存储。](http://my-blog-to-use.oss-cn-beijing.aliyuncs.com/18-9-20/34910956.jpg) ![图1对两数相加方法的可视化: 342 + 465 = 807342+465=807 每个结点都包含一个数字,并且数字按位逆序存储。](https://my-blog-to-use.oss-cn-beijing.aliyuncs.com/18-9-20/34910956.jpg)
### Solution ### Solution
@ -98,7 +98,7 @@ public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
### 题目描述 ### 题目描述
> 剑指 offer:输入一个链表,反转链表后,输出链表的所有元素。 > 剑指 offer:输入一个链表,反转链表后,输出链表的所有元素。
![翻转链表](http://my-blog-to-use.oss-cn-beijing.aliyuncs.com/18-9-20/81431871.jpg) ![翻转链表](https://my-blog-to-use.oss-cn-beijing.aliyuncs.com/18-9-20/81431871.jpg)
### 问题分析 ### 问题分析
@ -269,7 +269,7 @@ public class Solution {
我们注意到这个问题可以容易地简化成另一个问题:删除从列表开头数起的第 (L - n + 1)个结点,其中 L是列表的长度。只要我们找到列表的长度 L这个问题就很容易解决。 我们注意到这个问题可以容易地简化成另一个问题:删除从列表开头数起的第 (L - n + 1)个结点,其中 L是列表的长度。只要我们找到列表的长度 L这个问题就很容易解决。
![图 1. 删除列表中的第 L - n + 1 个元素](http://my-blog-to-use.oss-cn-beijing.aliyuncs.com/18-9-20/94354387.jpg) ![图 1. 删除列表中的第 L - n + 1 个元素](https://my-blog-to-use.oss-cn-beijing.aliyuncs.com/18-9-20/94354387.jpg)
### Solution ### Solution

View File

@ -566,7 +566,7 @@ public ListNode Merge(ListNode list1,ListNode list2) {
**栈:**后进先出LIFO **栈:**后进先出LIFO
**队列:** 先进先出 **队列:** 先进先出
很明显我们需要根据JDK给我们提供的栈的一些基本方法来实现。先来看一下Stack类的一些基本方法 很明显我们需要根据JDK给我们提供的栈的一些基本方法来实现。先来看一下Stack类的一些基本方法
![Stack类的一些常见方法](http://my-blog-to-use.oss-cn-beijing.aliyuncs.com/18-4-4/5985000.jpg) ![Stack类的一些常见方法](https://my-blog-to-use.oss-cn-beijing.aliyuncs.com/18-4-4/5985000.jpg)
既然题目给了我们两个栈我们可以这样考虑当push的时候将元素push进stack1pop的时候我们先把stack1的元素pop到stack2然后再对stack2执行pop操作这样就可以保证是先进先出的。负[pop]负[pop]得正[先进先出] 既然题目给了我们两个栈我们可以这样考虑当push的时候将元素push进stack1pop的时候我们先把stack1的元素pop到stack2然后再对stack2执行pop操作这样就可以保证是先进先出的。负[pop]负[pop]得正[先进先出]

View File

@ -165,7 +165,7 @@ B+树最大的性能问题是会产生大量的随机IO
为了克服B+树的弱点HBase引入了LSM树的概念即Log-Structured Merge-Trees。 为了克服B+树的弱点HBase引入了LSM树的概念即Log-Structured Merge-Trees。
[LSM树由来、设计思想以及应用到HBase的索引](http://www.cnblogs.com/yanghuahui/p/3483754.html) [LSM树由来、设计思想以及应用到HBase的索引](https://www.cnblogs.com/yanghuahui/p/3483754.html)
## 图 ## 图

View File

@ -44,9 +44,9 @@ select username , age from user where username = 'Java' and age = 22
MySQL的基本存储结构是页(记录都存在页里边) MySQL的基本存储结构是页(记录都存在页里边)
![MySQL的基本存储结构是页](http://my-blog-to-use.oss-cn-beijing.aliyuncs.com/18-10-2/28559421.jpg) ![MySQL的基本存储结构是页](https://my-blog-to-use.oss-cn-beijing.aliyuncs.com/18-10-2/28559421.jpg)
![](http://my-blog-to-use.oss-cn-beijing.aliyuncs.com/18-10-2/82053134.jpg) ![](https://my-blog-to-use.oss-cn-beijing.aliyuncs.com/18-10-2/82053134.jpg)
- **各个数据页可以组成一个双向链表** - **各个数据页可以组成一个双向链表**
- **每个数据页中的记录又可以组成一个单向链表** - **每个数据页中的记录又可以组成一个单向链表**
@ -65,11 +65,11 @@ MySQL的基本存储结构是页(记录都存在页里边)
索引做了些什么可以让我们查询加快速度呢?其实就是将无序的数据变成有序(相对) 索引做了些什么可以让我们查询加快速度呢?其实就是将无序的数据变成有序(相对)
![](http://my-blog-to-use.oss-cn-beijing.aliyuncs.com/18-10-2/5373082.jpg) ![](https://my-blog-to-use.oss-cn-beijing.aliyuncs.com/18-10-2/5373082.jpg)
要找到id为8的记录简要步骤 要找到id为8的记录简要步骤
![](http://my-blog-to-use.oss-cn-beijing.aliyuncs.com/18-10-2/89338047.jpg) ![](https://my-blog-to-use.oss-cn-beijing.aliyuncs.com/18-10-2/89338047.jpg)
很明显的是:没有用索引我们是需要遍历双向链表来定位对应的页,现在通过 **“目录”** 就可以很快地定位到对应的页上了二分查找时间复杂度近似为O(logn) 很明显的是:没有用索引我们是需要遍历双向链表来定位对应的页,现在通过 **“目录”** 就可以很快地定位到对应的页上了二分查找时间复杂度近似为O(logn)

View File

@ -168,7 +168,7 @@ MySQL 内存临时表不支持 TEXT、BLOB 这样的大数据类型,如果查
**2、TEXT 或 BLOB 类型只能使用前缀索引** **2、TEXT 或 BLOB 类型只能使用前缀索引**
因为[MySQL](http://mp.weixin.qq.com/s?__biz=MzI4Njc5NjM1NQ==&mid=2247487885&idx=1&sn=65b1bf5f7d4505502620179669a9c2df&chksm=ebd62ea1dca1a7b7bf884bcd9d538d78ba064ee03c09436ca8e57873b1d98a55afd6d7884cfc&scene=21#wechat_redirect) 对索引字段长度是有限制的,所以 TEXT 类型只能使用前缀索引,并且 TEXT 列上是不能有默认值的 因为[MySQL](https://mp.weixin.qq.com/s?__biz=MzI4Njc5NjM1NQ==&mid=2247487885&idx=1&sn=65b1bf5f7d4505502620179669a9c2df&chksm=ebd62ea1dca1a7b7bf884bcd9d538d78ba064ee03c09436ca8e57873b1d98a55afd6d7884cfc&scene=21#wechat_redirect) 对索引字段长度是有限制的,所以 TEXT 类型只能使用前缀索引,并且 TEXT 列上是不能有默认值的
### 3. 避免使用 ENUM 类型 ### 3. 避免使用 ENUM 类型

View File

@ -175,7 +175,7 @@ Java 语言既具有编译型语言的特征,也具有解释型语言的特征
> 字符封装类 `Character` 有一个成员常量 `Character.SIZE` 值为 16,单位是`bits`,该值除以 8(`1byte=8bits`)后就可以得到 2 个字节 > 字符封装类 `Character` 有一个成员常量 `Character.SIZE` 值为 16,单位是`bits`,该值除以 8(`1byte=8bits`)后就可以得到 2 个字节
> java 编程思想第四版2.2.2 节 > java 编程思想第四版2.2.2 节
> ![](http://my-blog-to-use.oss-cn-beijing.aliyuncs.com/18-9-15/86735519.jpg) > ![](https://my-blog-to-use.oss-cn-beijing.aliyuncs.com/18-9-15/86735519.jpg)
### 注释 ### 注释
@ -790,7 +790,7 @@ num2 = 20
**解析:** **解析:**
![example 1 ](http://my-blog-to-use.oss-cn-beijing.aliyuncs.com/18-9-27/22191348.jpg) ![example 1 ](https://my-blog-to-use.oss-cn-beijing.aliyuncs.com/18-9-27/22191348.jpg)
在 swap 方法中a、b 的值进行交换,并不会影响到 num1、num2。因为a、b 中的值,只是从 num1、num2 的复制过来的。也就是说a、b 相当于 num1、num2 的副本,副本的内容无论怎么修改,都不会影响到原件本身。 在 swap 方法中a、b 的值进行交换,并不会影响到 num1、num2。因为a、b 中的值,只是从 num1、num2 的复制过来的。也就是说a、b 相当于 num1、num2 的副本,副本的内容无论怎么修改,都不会影响到原件本身。
@ -821,7 +821,7 @@ num2 = 20
**解析:** **解析:**
![example 2](http://my-blog-to-use.oss-cn-beijing.aliyuncs.com/18-9-27/3825204.jpg) ![example 2](https://my-blog-to-use.oss-cn-beijing.aliyuncs.com/18-9-27/3825204.jpg)
array 被初始化 arr 的拷贝也就是一个对象的引用,也就是说 array 和 arr 指向的是同一个数组对象。 因此,外部对引用对象的改变会反映到所对应的对象上。 array 被初始化 arr 的拷贝也就是一个对象的引用,也就是说 array 和 arr 指向的是同一个数组对象。 因此,外部对引用对象的改变会反映到所对应的对象上。
@ -866,11 +866,11 @@ s2:小李
交换之前: 交换之前:
![](http://my-blog-to-use.oss-cn-beijing.aliyuncs.com/18-9-27/88729818.jpg) ![](https://my-blog-to-use.oss-cn-beijing.aliyuncs.com/18-9-27/88729818.jpg)
交换之后: 交换之后:
![](http://my-blog-to-use.oss-cn-beijing.aliyuncs.com/18-9-27/34384414.jpg) ![](https://my-blog-to-use.oss-cn-beijing.aliyuncs.com/18-9-27/34384414.jpg)
通过上面两张图可以很清晰的看出: **方法并没有改变存储在变量 s1 和 s2 中的对象引用。swap 方法的参数 x 和 y 被初始化为两个对象引用的拷贝,这个方法交换的是这两个拷贝** 通过上面两张图可以很清晰的看出: **方法并没有改变存储在变量 s1 和 s2 中的对象引用。swap 方法的参数 x 和 y 被初始化为两个对象引用的拷贝,这个方法交换的是这两个拷贝**

View File

@ -186,7 +186,7 @@ static {
一个类中的静态代码块可以有多个位置可以随便放它不在任何的方法体内JVM加载类时会执行这些静态的代码块如果静态代码块有多个JVM将按照它们在类中出现的先后顺序依次执行它们每个代码块只会被执行一次。 一个类中的静态代码块可以有多个位置可以随便放它不在任何的方法体内JVM加载类时会执行这些静态的代码块如果静态代码块有多个JVM将按照它们在类中出现的先后顺序依次执行它们每个代码块只会被执行一次。
![](http://my-blog-to-use.oss-cn-beijing.aliyuncs.com/18-9-14/88531075.jpg) ![](https://my-blog-to-use.oss-cn-beijing.aliyuncs.com/18-9-14/88531075.jpg)
静态代码块对于定义在它之后的静态变量,可以赋值,但是不能访问. 静态代码块对于定义在它之后的静态变量,可以赋值,但是不能访问.

View File

@ -532,13 +532,13 @@ static int hash(int h) {
![HashTable全表锁](https://my-blog-to-use.oss-cn-beijing.aliyuncs.com/2019-6/HashTable全表锁.png) ![HashTable全表锁](https://my-blog-to-use.oss-cn-beijing.aliyuncs.com/2019-6/HashTable全表锁.png)
<p style="text-align:right;font-size:13px;color:gray">http://www.cnblogs.com/chengxiao/p/6842045.html></p> <p style="text-align:right;font-size:13px;color:gray">https://www.cnblogs.com/chengxiao/p/6842045.html></p>
**JDK1.7 的 ConcurrentHashMap** **JDK1.7 的 ConcurrentHashMap**
![JDK1.7的ConcurrentHashMap](https://my-blog-to-use.oss-cn-beijing.aliyuncs.com/2019-6/ConcurrentHashMap分段锁.jpg) ![JDK1.7的ConcurrentHashMap](https://my-blog-to-use.oss-cn-beijing.aliyuncs.com/2019-6/ConcurrentHashMap分段锁.jpg)
<p style="text-align:right;font-size:13px;color:gray">http://www.cnblogs.com/chengxiao/p/6842045.html></p> <p style="text-align:right;font-size:13px;color:gray">https://www.cnblogs.com/chengxiao/p/6842045.html></p>
**JDK1.8 的 ConcurrentHashMap** **JDK1.8 的 ConcurrentHashMap**

View File

@ -131,7 +131,7 @@ public class GCTest {
运行结果 (红色字体描述有误,应该是对应于 JDK1.7 的永久代) 运行结果 (红色字体描述有误,应该是对应于 JDK1.7 的永久代)
![](http://my-blog-to-use.oss-cn-beijing.aliyuncs.com/18-8-26/28954286.jpg) ![](https://my-blog-to-use.oss-cn-beijing.aliyuncs.com/18-8-26/28954286.jpg)
从上图我们可以看出 eden 区内存几乎已经被分配完全(即使程序什么也不做,新生代也会使用 2000 多 k 内存)。假如我们再为 allocation2 分配内存会出现什么情况呢? 从上图我们可以看出 eden 区内存几乎已经被分配完全(即使程序什么也不做,新生代也会使用 2000 多 k 内存)。假如我们再为 allocation2 分配内存会出现什么情况呢?
@ -139,7 +139,7 @@ public class GCTest {
allocation2 = new byte[900*1024]; allocation2 = new byte[900*1024];
``` ```
![](http://my-blog-to-use.oss-cn-beijing.aliyuncs.com/18-8-26/28128785.jpg) ![](https://my-blog-to-use.oss-cn-beijing.aliyuncs.com/18-8-26/28128785.jpg)
**简单解释一下为什么会出现这种情况:** 因为给 allocation2 分配内存的时候 eden 区内存几乎已经被分配完了,我们刚刚讲了当 Eden 区没有足够空间进行分配时,虚拟机将发起一次 Minor GC.GC 期间虚拟机又发现 allocation1 无法存入 Survivor 空间,所以只好通过 **分配担保机制** 把新生代的对象提前转移到老年代中去,老年代上的空间足够存放 allocation1所以不会出现 Full GC。执行 Minor GC 后,后面分配的对象如果能够存在 eden 区的话,还是会在 eden 区分配内存。可以执行如下代码验证: **简单解释一下为什么会出现这种情况:** 因为给 allocation2 分配内存的时候 eden 区内存几乎已经被分配完了,我们刚刚讲了当 Eden 区没有足够空间进行分配时,虚拟机将发起一次 Minor GC.GC 期间虚拟机又发现 allocation1 无法存入 Survivor 空间,所以只好通过 **分配担保机制** 把新生代的对象提前转移到老年代中去,老年代上的空间足够存放 allocation1所以不会出现 Full GC。执行 Minor GC 后,后面分配的对象如果能够存在 eden 区的话,还是会在 eden 区分配内存。可以执行如下代码验证:

View File

@ -1004,7 +1004,7 @@ tryReleaseShared(int)//共享方式。尝试释放资源成功则返回true
推荐两篇 AQS 原理和相关源码分析的文章: 推荐两篇 AQS 原理和相关源码分析的文章:
- http://www.cnblogs.com/waterystone/p/4920797.html - https://www.cnblogs.com/waterystone/p/4920797.html
- https://www.cnblogs.com/chengxiao/archive/2017/07/24/7141160.html - https://www.cnblogs.com/chengxiao/archive/2017/07/24/7141160.html
### 6.3. AQS 组件总结 ### 6.3. AQS 组件总结
@ -1101,7 +1101,7 @@ CompletableFuture<Void> allFutures = CompletableFuture.allOf(
- 《深入理解 Java 虚拟机》 - 《深入理解 Java 虚拟机》
- 《实战 Java 高并发程序设计》 - 《实战 Java 高并发程序设计》
- 《Java 并发编程的艺术》 - 《Java 并发编程的艺术》
- http://www.cnblogs.com/waterystone/p/4920797.html - https://www.cnblogs.com/waterystone/p/4920797.html
- https://www.cnblogs.com/chengxiao/archive/2017/07/24/7141160.html - https://www.cnblogs.com/chengxiao/archive/2017/07/24/7141160.html
- <https://www.journaldev.com/1076/java-threadlocal-example> - <https://www.journaldev.com/1076/java-threadlocal-example>

View File

@ -233,7 +233,7 @@ tryReleaseShared(int)//共享方式。尝试释放资源成功则返回true
推荐两篇 AQS 原理和相关源码分析的文章: 推荐两篇 AQS 原理和相关源码分析的文章:
- http://www.cnblogs.com/waterystone/p/4920797.html - https://www.cnblogs.com/waterystone/p/4920797.html
- https://www.cnblogs.com/chengxiao/archive/2017/07/24/7141160.html - https://www.cnblogs.com/chengxiao/archive/2017/07/24/7141160.html
### 3 Semaphore(信号量)-允许多个线程同时访问 ### 3 Semaphore(信号量)-允许多个线程同时访问

View File

@ -129,7 +129,7 @@ ConcurrentLinkedQueue 适合在对性能要求相对较高,同时对队列的
BlockingQueue 是一个接口,继承自 Queue所以其实现类也可以作为 Queue 的实现来使用,而 Queue 又继承自 Collection 接口。下面是 BlockingQueue 的相关实现类: BlockingQueue 是一个接口,继承自 Queue所以其实现类也可以作为 Queue 的实现来使用,而 Queue 又继承自 Collection 接口。下面是 BlockingQueue 的相关实现类:
![BlockingQueue 的实现类](http://my-blog-to-use.oss-cn-beijing.aliyuncs.com/18-12-9/51622268.jpg) ![BlockingQueue 的实现类](https://my-blog-to-use.oss-cn-beijing.aliyuncs.com/18-12-9/51622268.jpg)
**下面主要介绍一下:ArrayBlockingQueue、LinkedBlockingQueue、PriorityBlockingQueue这三个 BlockingQueue 的实现类。** **下面主要介绍一下:ArrayBlockingQueue、LinkedBlockingQueue、PriorityBlockingQueue这三个 BlockingQueue 的实现类。**
@ -198,13 +198,13 @@ PriorityBlockingQueue 并发控制采用的是 **ReentrantLock**,队列为无
跳表的本质是同时维护了多个链表,并且链表是分层的, 跳表的本质是同时维护了多个链表,并且链表是分层的,
![2级索引跳表](http://my-blog-to-use.oss-cn-beijing.aliyuncs.com/18-12-9/93666217.jpg) ![2级索引跳表](https://my-blog-to-use.oss-cn-beijing.aliyuncs.com/18-12-9/93666217.jpg)
最低层的链表维护了跳表内所有的元素,每上面一层链表都是下面一层的子集。 最低层的链表维护了跳表内所有的元素,每上面一层链表都是下面一层的子集。
跳表内的所有链表的元素都是排序的。查找时,可以从顶级链表开始找。一旦发现被查找的元素大于当前链表中的取值,就会转入下一层链表继续找。这也就是说在查找过程中,搜索是跳跃式的。如上图所示,在跳表中查找元素 18。 跳表内的所有链表的元素都是排序的。查找时,可以从顶级链表开始找。一旦发现被查找的元素大于当前链表中的取值,就会转入下一层链表继续找。这也就是说在查找过程中,搜索是跳跃式的。如上图所示,在跳表中查找元素 18。
![在跳表中查找元素18](http://my-blog-to-use.oss-cn-beijing.aliyuncs.com/18-12-9/32005738.jpg) ![在跳表中查找元素18](https://my-blog-to-use.oss-cn-beijing.aliyuncs.com/18-12-9/32005738.jpg)
查找 18 的时候原来需要遍历 18 次,现在只需要 7 次即可。针对链表长度比较大的时候,构建索引查找效率的提升就会非常明显。 查找 18 的时候原来需要遍历 18 次,现在只需要 7 次即可。针对链表长度比较大的时候,构建索引查找效率的提升就会非常明显。

View File

@ -52,7 +52,7 @@ Java 9 允许为 JDK 和应用配置同样的日志实现。新增了 `System.Lo
### 其它新特性 ### 其它新特性
- **接口私有方法** Java 9 允许在接口中使用私有方法 - **接口私有方法** Java 9 允许在接口中使用私有方法
- **try-with-resources 增强** :在 try-with-resources 语句中可以使用 effectively-final 变量(什么是 effectively-final 变量,见这篇文章 [http://ilkinulas.github.io/programming/java/2016/03/27/effectively-final-java.html](http://ilkinulas.github.io/programming/java/2016/03/27/effectively-final-java.html) - **try-with-resources 增强** :在 try-with-resources 语句中可以使用 effectively-final 变量(什么是 effectively-final 变量,见这篇文章 [https://ilkinulas.github.io/programming/java/2016/03/27/effectively-final-java.html](https://ilkinulas.github.io/programming/java/2016/03/27/effectively-final-java.html)
- **类 `CompletableFuture` 中增加了几个新的方法(`completeAsync` `orTimeout` 等)** - **类 `CompletableFuture` 中增加了几个新的方法(`completeAsync` `orTimeout` 等)**
- **Nashorn 引擎的增强** Nashorn 从 Java8 开始引入的 JavaScript 引擎Java9 对 Nashorn 做了些增强,实现了一些 ES6 的新特性 - **Nashorn 引擎的增强** Nashorn 从 Java8 开始引入的 JavaScript 引擎Java9 对 Nashorn 做了些增强,实现了一些 ES6 的新特性
- **I/O 流的新特性** :增加了新的方法来读取和复制 InputStream 中包含的数据 - **I/O 流的新特性** :增加了新的方法来读取和复制 InputStream 中包含的数据

View File

@ -45,7 +45,7 @@
另外,了解 shell 编程也是大部分互联网公司招聘后端开发人员的要求。下图是我截取的一些知名互联网公司对于 Shell 编程的要求。 另外,了解 shell 编程也是大部分互联网公司招聘后端开发人员的要求。下图是我截取的一些知名互联网公司对于 Shell 编程的要求。
![大型互联网公司对于shell编程技能的要求](http://my-blog-to-use.oss-cn-beijing.aliyuncs.com/18-11-16/60190220.jpg) ![大型互联网公司对于shell编程技能的要求](https://my-blog-to-use.oss-cn-beijing.aliyuncs.com/18-11-16/60190220.jpg)
### 什么是 Shell ### 什么是 Shell
@ -53,7 +53,7 @@
W3Cschool 上的一篇文章是这样介绍 Shell的如下图所示。 W3Cschool 上的一篇文章是这样介绍 Shell的如下图所示。
![什么是 Shell](http://my-blog-to-use.oss-cn-beijing.aliyuncs.com/18-11-26/19456505.jpg) ![什么是 Shell](https://my-blog-to-use.oss-cn-beijing.aliyuncs.com/18-11-26/19456505.jpg)
### Shell 编程的 Hello World ### Shell 编程的 Hello World
@ -80,7 +80,7 @@ shell中 # 符号表示注释。**shell 的第一行比较特殊,一般都会
(4) 运行脚本:`./helloworld.sh` 。(注意,一定要写成 `./helloworld.sh` ,而不是 `helloworld.sh` ,运行其它二进制的程序也一样,直接写 `helloworld.sh` linux 系统会去 PATH 里寻找有没有叫 helloworld.sh 的,而只有 /bin, /sbin, /usr/bin/usr/sbin 等在 PATH 里,你的当前目录通常不在 PATH 里,所以写成 `helloworld.sh` 是会找不到命令的,要用`./helloworld.sh` 告诉系统说,就在当前目录找。) (4) 运行脚本:`./helloworld.sh` 。(注意,一定要写成 `./helloworld.sh` ,而不是 `helloworld.sh` ,运行其它二进制的程序也一样,直接写 `helloworld.sh` linux 系统会去 PATH 里寻找有没有叫 helloworld.sh 的,而只有 /bin, /sbin, /usr/bin/usr/sbin 等在 PATH 里,你的当前目录通常不在 PATH 里,所以写成 `helloworld.sh` 是会找不到命令的,要用`./helloworld.sh` 告诉系统说,就在当前目录找。)
![shell 编程Hello World](http://my-blog-to-use.oss-cn-beijing.aliyuncs.com/18-11-16/55296212.jpg) ![shell 编程Hello World](https://my-blog-to-use.oss-cn-beijing.aliyuncs.com/18-11-16/55296212.jpg)
## Shell 变量 ## Shell 变量
@ -118,7 +118,7 @@ hello="hello world"
echo $hello echo $hello
echo "helloworld!" echo "helloworld!"
``` ```
![使用自己定义的变量](http://my-blog-to-use.oss-cn-beijing.aliyuncs.com/18-11-17/19835037.jpg) ![使用自己定义的变量](https://my-blog-to-use.oss-cn-beijing.aliyuncs.com/18-11-17/19835037.jpg)
**Shell 编程中的变量名的命名的注意事项:** **Shell 编程中的变量名的命名的注意事项:**
@ -183,7 +183,7 @@ echo $greeting_2 $greeting_3
输出结果: 输出结果:
![输出结果](http://my-blog-to-use.oss-cn-beijing.aliyuncs.com/18-11-17/51148933.jpg) ![输出结果](https://my-blog-to-use.oss-cn-beijing.aliyuncs.com/18-11-17/51148933.jpg)
**获取字符串长度:** **获取字符串长度:**
@ -234,10 +234,10 @@ echo ${str:0:10} #输出:SnailClimb
#!bin/bash #!bin/bash
#author:amau #author:amau
var="http://www.runoob.com/linux/linux-shell-variable.html" var="https://www.runoob.com/linux/linux-shell-variable.html"
s1=${var%%t*}#h s1=${var%%t*}#h
s2=${var%t*}#http://www.runoob.com/linux/linux-shell-variable.h s2=${var%t*}#https://www.runoob.com/linux/linux-shell-variable.h
s3=${var%%.*}#http://www s3=${var%%.*}#http://www
s4=${var#*/}#/www.runoob.com/linux/linux-shell-variable.html s4=${var#*/}#/www.runoob.com/linux/linux-shell-variable.html
s5=${var##*/}#linux-shell-variable.html s5=${var##*/}#linux-shell-variable.html
@ -281,7 +281,7 @@ for i in ${array[@]};do echo $i ;done # 遍历数组,数组元素为空,没
### 算数运算符 ### 算数运算符
![算数运算符](http://my-blog-to-use.oss-cn-beijing.aliyuncs.com/18-11-22/4937342.jpg) ![算数运算符](https://my-blog-to-use.oss-cn-beijing.aliyuncs.com/18-11-22/4937342.jpg)
我以加法运算符做一个简单的示例(注意:不是单引号,是反引号): 我以加法运算符做一个简单的示例(注意:不是单引号,是反引号):
@ -298,7 +298,7 @@ echo "Total value : $val"
关系运算符只支持数字,不支持字符串,除非字符串的值是数字。 关系运算符只支持数字,不支持字符串,除非字符串的值是数字。
![shell关系运算符](http://my-blog-to-use.oss-cn-beijing.aliyuncs.com/18-11-22/64391380.jpg) ![shell关系运算符](https://my-blog-to-use.oss-cn-beijing.aliyuncs.com/18-11-22/64391380.jpg)
通过一个简单的示例演示关系运算符的使用下面shell程序的作用是当score=100的时候输出A否则输出B。 通过一个简单的示例演示关系运算符的使用下面shell程序的作用是当score=100的时候输出A否则输出B。
@ -322,7 +322,7 @@ B
### 逻辑运算符 ### 逻辑运算符
![逻辑运算符](http://my-blog-to-use.oss-cn-beijing.aliyuncs.com/18-11-22/60545848.jpg) ![逻辑运算符](https://my-blog-to-use.oss-cn-beijing.aliyuncs.com/18-11-22/60545848.jpg)
示例: 示例:
@ -336,13 +336,13 @@ echo $a;
### 布尔运算符 ### 布尔运算符
![布尔运算符](http://my-blog-to-use.oss-cn-beijing.aliyuncs.com/18-11-22/93961425.jpg) ![布尔运算符](https://my-blog-to-use.oss-cn-beijing.aliyuncs.com/18-11-22/93961425.jpg)
这里就不做演示了,应该挺简单的。 这里就不做演示了,应该挺简单的。
### 字符串运算符 ### 字符串运算符
![ 字符串运算符](http://my-blog-to-use.oss-cn-beijing.aliyuncs.com/18-11-22/309094.jpg) ![ 字符串运算符](https://my-blog-to-use.oss-cn-beijing.aliyuncs.com/18-11-22/309094.jpg)
简单示例: 简单示例:
@ -366,7 +366,7 @@ a 不等于 b
### 文件相关运算符 ### 文件相关运算符
![文件相关运算符](http://my-blog-to-use.oss-cn-beijing.aliyuncs.com/18-11-22/60359774.jpg) ![文件相关运算符](https://my-blog-to-use.oss-cn-beijing.aliyuncs.com/18-11-22/60359774.jpg)
使用方式很简单,比如我们定义好了一个文件路径`file="/usr/learnshell/test.sh"` 如果我们想判断这个文件是否可读,可以这样`if [ -r $file ]` 如果想判断这个文件是否可写,可以这样`-w $file`,是不是很简单。 使用方式很简单,比如我们定义好了一个文件路径`file="/usr/learnshell/test.sh"` 如果我们想判断这个文件是否可读,可以这样`if [ -r $file ]` 如果想判断这个文件是否可写,可以这样`-w $file`,是不是很简单。

View File

@ -10,12 +10,12 @@
SSO英文全称Single Sign On单点登录。SSO是在多个应用系统中用户只需要登录一次就可以访问所有相互信任的应用系统。https://baike.baidu.com/item/SSO/3451380 SSO英文全称Single Sign On单点登录。SSO是在多个应用系统中用户只需要登录一次就可以访问所有相互信任的应用系统。https://baike.baidu.com/item/SSO/3451380
例如访问在网易账号中心http://reg.163.com/ )登录之后 例如访问在网易账号中心https://reg.163.com/ )登录之后
访问以下站点都是登录状态 访问以下站点都是登录状态
- 网易直播 [http://v.163.com](http://v.163.com/) - 网易直播 [https://v.163.com](https://v.163.com/)
- 网易博客 [http://blog.163.com](http://blog.163.com/) - 网易博客 [https://blog.163.com](https://blog.163.com/)
- 网易花田 [http://love.163.com](http://love.163.com/) - 网易花田 [https://love.163.com](https://love.163.com/)
- 网易考拉 [https://www.kaola.com](https://www.kaola.com/) - 网易考拉 [https://www.kaola.com](https://www.kaola.com/)
- 网易Lofter [http://www.lofter.com](http://www.lofter.com/) - 网易Lofter [http://www.lofter.com](http://www.lofter.com/)

View File

@ -46,7 +46,7 @@ RabbitMQ 整体上是一个生产者与消费者模型,主要负责接收、
下面再来看看图1—— RabbitMQ 的整体模型架构。 下面再来看看图1—— RabbitMQ 的整体模型架构。
![图1-RabbitMQ 的整体模型架构](http://my-blog-to-use.oss-cn-beijing.aliyuncs.com/18-12-16/96388546.jpg) ![图1-RabbitMQ 的整体模型架构](https://my-blog-to-use.oss-cn-beijing.aliyuncs.com/18-12-16/96388546.jpg)
下面我会一一介绍上图中的一些概念。 下面我会一一介绍上图中的一些概念。
@ -67,7 +67,7 @@ RabbitMQ 整体上是一个生产者与消费者模型,主要负责接收、
Exchange(交换器) 示意图如下: Exchange(交换器) 示意图如下:
![Exchange(交换器) 示意图](http://my-blog-to-use.oss-cn-beijing.aliyuncs.com/18-12-16/24007899.jpg) ![Exchange(交换器) 示意图](https://my-blog-to-use.oss-cn-beijing.aliyuncs.com/18-12-16/24007899.jpg)
生产者将消息发给交换器的时候,一般会指定一个 **RoutingKey(路由键)**,用来指定这个消息的路由规则,而这个 **RoutingKey 需要与交换器类型和绑定键(BindingKey)联合使用才能最终生效** 生产者将消息发给交换器的时候,一般会指定一个 **RoutingKey(路由键)**,用来指定这个消息的路由规则,而这个 **RoutingKey 需要与交换器类型和绑定键(BindingKey)联合使用才能最终生效**
@ -75,7 +75,7 @@ RabbitMQ 中通过 **Binding(绑定)** 将 **Exchange(交换器)** 与 **Queue(
Binding(绑定) 示意图: Binding(绑定) 示意图:
![Binding(绑定) 示意图](http://my-blog-to-use.oss-cn-beijing.aliyuncs.com/18-12-16/70553134.jpg) ![Binding(绑定) 示意图](https://my-blog-to-use.oss-cn-beijing.aliyuncs.com/18-12-16/70553134.jpg)
生产者将消息发送给交换器时需要一个RoutingKey,当 BindingKey 和 RoutingKey 相匹配时,消息会被路由到对应的队列中。在绑定多个队列到同一个交换器的时候,这些绑定允许使用相同的 BindingKey。BindingKey 并不是在所有的情况下都生效它依赖于交换器类型比如fanout类型的交换器就会无视而是将消息路由到所有绑定到该交换器的队列中。 生产者将消息发送给交换器时需要一个RoutingKey,当 BindingKey 和 RoutingKey 相匹配时,消息会被路由到对应的队列中。在绑定多个队列到同一个交换器的时候,这些绑定允许使用相同的 BindingKey。BindingKey 并不是在所有的情况下都生效它依赖于交换器类型比如fanout类型的交换器就会无视而是将消息路由到所有绑定到该交换器的队列中。
@ -95,7 +95,7 @@ Binding(绑定) 示意图:
下图展示了生产者将消息存入 RabbitMQ Broker,以及消费者从Broker中消费数据的整个流程。 下图展示了生产者将消息存入 RabbitMQ Broker,以及消费者从Broker中消费数据的整个流程。
![消息队列的运转过程](http://my-blog-to-use.oss-cn-beijing.aliyuncs.com/18-12-16/67952922.jpg) ![消息队列的运转过程](https://my-blog-to-use.oss-cn-beijing.aliyuncs.com/18-12-16/67952922.jpg)
这样图1中的一些关于 RabbitMQ 的基本概念我们就介绍完毕了,下面再来介绍一下 **Exchange Types(交换器类型)** 这样图1中的一些关于 RabbitMQ 的基本概念我们就介绍完毕了,下面再来介绍一下 **Exchange Types(交换器类型)**
@ -111,7 +111,7 @@ fanout 类型的Exchange路由规则非常简单它会把所有发送到该Ex
direct 类型的Exchange路由规则也很简单它会把消息路由到那些 Bindingkey 与 RoutingKey 完全匹配的 Queue 中。 direct 类型的Exchange路由规则也很简单它会把消息路由到那些 Bindingkey 与 RoutingKey 完全匹配的 Queue 中。
![direct 类型交换器](http://my-blog-to-use.oss-cn-beijing.aliyuncs.com/18-12-16/37008021.jpg) ![direct 类型交换器](https://my-blog-to-use.oss-cn-beijing.aliyuncs.com/18-12-16/37008021.jpg)
以上图为例如果发送消息的时候设置路由键为“warning”,那么消息会路由到 Queue1 和 Queue2。如果在发送消息的时候设置路由键为"Info”或者"debug”消息只会路由到Queue2。如果以其他的路由键发送消息则消息不会路由到这两个队列中。 以上图为例如果发送消息的时候设置路由键为“warning”,那么消息会路由到 Queue1 和 Queue2。如果在发送消息的时候设置路由键为"Info”或者"debug”消息只会路由到Queue2。如果以其他的路由键发送消息则消息不会路由到这两个队列中。
@ -125,7 +125,7 @@ direct 类型常用在处理有优先级的任务,根据任务的优先级把
- BindingKey 和 RoutingKey 一样也是点号“.”分隔的字符串; - BindingKey 和 RoutingKey 一样也是点号“.”分隔的字符串;
- BindingKey 中可以存在两种特殊字符串“\*”和“#”,用于做模糊匹配,其中“\*”用于匹配一个单词,“#”用于匹配多个单词(可以是零个)。 - BindingKey 中可以存在两种特殊字符串“\*”和“#”,用于做模糊匹配,其中“\*”用于匹配一个单词,“#”用于匹配多个单词(可以是零个)。
![topic 类型交换器](http://my-blog-to-use.oss-cn-beijing.aliyuncs.com/18-12-16/73843.jpg) ![topic 类型交换器](https://my-blog-to-use.oss-cn-beijing.aliyuncs.com/18-12-16/73843.jpg)
以上图为例: 以上图为例:
@ -156,10 +156,10 @@ headers 类型的交换器不依赖于路由键的匹配规则来路由消息,
在官网下载然后上传到 Linux 上或者直接使用下面的命令下载对应的版本。 在官网下载然后上传到 Linux 上或者直接使用下面的命令下载对应的版本。
```shell ```shell
[root@SnailClimb local]#wget http://erlang.org/download/otp_src_19.3.tar.gz [root@SnailClimb local]#wget https://erlang.org/download/otp_src_19.3.tar.gz
``` ```
erlang 官网下载:[http://www.erlang.org/downloads](http://www.erlang.org/downloads) erlang 官网下载:[https://www.erlang.org/downloads](https://www.erlang.org/downloads)
**2 解压 erlang 安装包** **2 解压 erlang 安装包**
@ -211,7 +211,7 @@ make && make install
```erlang ```erlang
io:format("hello world~n", []). io:format("hello world~n", []).
``` ```
![输出“hello world”](http://my-blog-to-use.oss-cn-beijing.aliyuncs.com/18-12-12/49570541.jpg) ![输出“hello world”](https://my-blog-to-use.oss-cn-beijing.aliyuncs.com/18-12-12/49570541.jpg)
大功告成,我们的 erlang 已经安装完成。 大功告成,我们的 erlang 已经安装完成。
@ -242,7 +242,7 @@ export ERL_HOME PATH
[root@SnailClimb etc]# erl [root@SnailClimb etc]# erl
``` ```
![输入 erl 查看 erlang 环境变量是否配置正确](http://my-blog-to-use.oss-cn-beijing.aliyuncs.com/18-12-12/62504246.jpg) ![输入 erl 查看 erlang 环境变量是否配置正确](https://my-blog-to-use.oss-cn-beijing.aliyuncs.com/18-12-12/62504246.jpg)
### 2.2 安装 RabbitMQ ### 2.2 安装 RabbitMQ
@ -319,6 +319,6 @@ Setting permissions for user "root" in vhost "/" ...
再次访问:http://你的ip地址:15672/ ,输入用户名和密码root root 再次访问:http://你的ip地址:15672/ ,输入用户名和密码root root
![RabbitMQ控制台](http://my-blog-to-use.oss-cn-beijing.aliyuncs.com/18-12-12/45835332.jpg) ![RabbitMQ控制台](https://my-blog-to-use.oss-cn-beijing.aliyuncs.com/18-12-12/45835332.jpg)

View File

@ -30,7 +30,7 @@
具体原理图如下后面我会串起来将整个RPC的过程给大家说一下。 具体原理图如下后面我会串起来将整个RPC的过程给大家说一下。
![RPC原理图](http://my-blog-to-use.oss-cn-beijing.aliyuncs.com/18-12-6/37345851.jpg) ![RPC原理图](https://my-blog-to-use.oss-cn-beijing.aliyuncs.com/18-12-6/37345851.jpg)
1. 服务消费端client以本地调用的方式调用远程服务 1. 服务消费端client以本地调用的方式调用远程服务
1. 客户端 Stubclient stub 接收到调用后负责将方法、参数等组装成能够进行网络传输的消息体(序列化):`RpcRequest` 1. 客户端 Stubclient stub 接收到调用后负责将方法、参数等组装成能够进行网络传输的消息体(序列化):`RpcRequest`
@ -90,7 +90,7 @@ Dubbo 是由阿里开源,后来加入了 Apache 。正式由于 Dubbo 的出
3. **服务访问压力以及时长统计、资源调度和治理** :基于访问压力实时管理集群容量,提高集群利用率。 3. **服务访问压力以及时长统计、资源调度和治理** :基于访问压力实时管理集群容量,提高集群利用率。
4. ...... 4. ......
![](http://my-blog-to-use.oss-cn-beijing.aliyuncs.com/18-9-26/43050183.jpg) ![](https://my-blog-to-use.oss-cn-beijing.aliyuncs.com/18-9-26/43050183.jpg)
另外Dubbo 除了能够应用在分布式系统中,也可以应用在现在比较火的微服务系统中。不过,由于 Spring Cloud 在微服务中应用更加广泛,所以,我觉得一般我们提 Dubbo 的话,大部分是分布式系统的情况。 另外Dubbo 除了能够应用在分布式系统中,也可以应用在现在比较火的微服务系统中。不过,由于 Spring Cloud 在微服务中应用更加广泛,所以,我觉得一般我们提 Dubbo 的话,大部分是分布式系统的情况。

View File

@ -10,7 +10,7 @@ RPCRemote Procedure Call—远程过程调用它是一种通过网络
http://www.importnew.com/22003.html http://www.importnew.com/22003.html
![RPC原理图](http://my-blog-to-use.oss-cn-beijing.aliyuncs.com/18-12-6/37345851.jpg) ![RPC原理图](https://my-blog-to-use.oss-cn-beijing.aliyuncs.com/18-12-6/37345851.jpg)
1. 服务消费方client调用以本地调用方式调用服务 1. 服务消费方client调用以本地调用方式调用服务
2. client stub接收到调用后负责将方法、参数等组装成能够进行网络传输的消息体 2. client stub接收到调用后负责将方法、参数等组装成能够进行网络传输的消息体
@ -24,7 +24,7 @@ http://www.importnew.com/22003.html
下面再贴一个网上的时序图: 下面再贴一个网上的时序图:
![RPC原理时序图](http://my-blog-to-use.oss-cn-beijing.aliyuncs.com/18-12-6/32527396.jpg) ![RPC原理时序图](https://my-blog-to-use.oss-cn-beijing.aliyuncs.com/18-12-6/32527396.jpg)
### RPC 解决了什么问题? ### RPC 解决了什么问题?

View File

@ -17,7 +17,7 @@
### 视频 ### 视频
- [网易云课堂——58集精通java教程Spring框架开发](http://study.163.com/course/courseMain.htm?courseId=1004475015#/courseDetail?tab=1&35) - [网易云课堂——58集精通java教程Spring框架开发](https://study.163.com/course/courseMain.htm?courseId=1004475015#/courseDetail?tab=1&35)
- [慕课网相关视频](https://www.imooc.com/) - [慕课网相关视频](https://www.imooc.com/)
- **黑马视频和尚硅谷视频(非常推荐):** 微信公众号:“**JavaGuide**”后台回复关键字 “**1**” 免费领取。 - **黑马视频和尚硅谷视频(非常推荐):** 微信公众号:“**JavaGuide**”后台回复关键字 “**1**” 免费领取。
@ -44,7 +44,7 @@ AOP思想的实现一般都是基于 **代理模式** 在JAVA中一般采用J
推荐阅读: 推荐阅读:
- [静态代理、JDK动态代理、CGLIB动态代理讲解](http://www.cnblogs.com/puyangsky/p/6218925.html) 我们知道AOP思想的实现一般都是基于 **代理模式** 所以在看下面的文章之前建议先了解一下静态代理以及JDK动态代理、CGLIB动态代理的实现方式。 - [静态代理、JDK动态代理、CGLIB动态代理讲解](https://www.cnblogs.com/puyangsky/p/6218925.html) 我们知道AOP思想的实现一般都是基于 **代理模式** 所以在看下面的文章之前建议先了解一下静态代理以及JDK动态代理、CGLIB动态代理的实现方式。
- [Spring AOP 入门](https://juejin.im/post/5aa7818af265da23844040c6) 带你入门的一篇文章。这篇文章主要介绍了AOP中的基本概念5种类型的通知BeforeAfterAfter-returningAfter-throwingAroundSpring中对AOP的支持AOP思想的实现一般都是基于代理模式在Java中一般采用JDK动态代理模式Spring AOP 同时支持 CGLIB、ASPECTJ、JDK动态代理 - [Spring AOP 入门](https://juejin.im/post/5aa7818af265da23844040c6) 带你入门的一篇文章。这篇文章主要介绍了AOP中的基本概念5种类型的通知BeforeAfterAfter-returningAfter-throwingAroundSpring中对AOP的支持AOP思想的实现一般都是基于代理模式在Java中一般采用JDK动态代理模式Spring AOP 同时支持 CGLIB、ASPECTJ、JDK动态代理
- [Spring AOP 基于AspectJ注解如何实现AOP](https://juejin.im/post/5a55af9e518825734d14813f) **AspectJ是一个AOP框架它能够对java代码进行AOP编译一般在编译期进行让java代码具有AspectJ的AOP功能当然需要特殊的编译器**可以这样说AspectJ是目前实现AOP框架中最成熟功能最丰富的语言更幸运的是AspectJ与java程序完全兼容几乎是无缝关联因此对于有java编程基础的工程师上手和使用都非常容易。Spring注意到AspectJ在AOP的实现方式上依赖于特殊编译器(ajc编译器)因此Spring很机智回避了这点转向采用动态代理技术的实现原理来构建Spring AOP的内部机制动态织入这是与AspectJ静态织入最根本的区别。**Spring 只是使用了与 AspectJ 5 一样的注解,但仍然没有使用 AspectJ 的编译器,底层依是动态代理技术的实现,因此并不依赖于 AspectJ 的编译器**。 Spring AOP虽然是使用了那一套注解其实实现AOP的底层是使用了动态代理(JDK或者CGLib)来动态植入。至于AspectJ的静态植入不是本文重点所以只提一提。 - [Spring AOP 基于AspectJ注解如何实现AOP](https://juejin.im/post/5a55af9e518825734d14813f) **AspectJ是一个AOP框架它能够对java代码进行AOP编译一般在编译期进行让java代码具有AspectJ的AOP功能当然需要特殊的编译器**可以这样说AspectJ是目前实现AOP框架中最成熟功能最丰富的语言更幸运的是AspectJ与java程序完全兼容几乎是无缝关联因此对于有java编程基础的工程师上手和使用都非常容易。Spring注意到AspectJ在AOP的实现方式上依赖于特殊编译器(ajc编译器)因此Spring很机智回避了这点转向采用动态代理技术的实现原理来构建Spring AOP的内部机制动态织入这是与AspectJ静态织入最根本的区别。**Spring 只是使用了与 AspectJ 5 一样的注解,但仍然没有使用 AspectJ 的编译器,底层依是动态代理技术的实现,因此并不依赖于 AspectJ 的编译器**。 Spring AOP虽然是使用了那一套注解其实实现AOP的底层是使用了动态代理(JDK或者CGLib)来动态植入。至于AspectJ的静态植入不是本文重点所以只提一提。
- [探秘Spring AOP慕课网视频很不错](https://www.imooc.com/learn/869):慕课网视频,讲解的很不错,详细且深入 - [探秘Spring AOP慕课网视频很不错](https://www.imooc.com/learn/869):慕课网视频,讲解的很不错,详细且深入
@ -65,7 +65,7 @@ AOP思想的实现一般都是基于 **代理模式** 在JAVA中一般采用J
### Spring单例与线程安全 ### Spring单例与线程安全
- [Spring框架中的单例模式源码解读](http://www.cnblogs.com/chengxuyuanzhilu/p/6404991.html):单例模式是一种常用的软件设计模式。通过单例模式可以保证系统中一个类只有一个实例。spring依赖注入时使用了 多重判断加锁 的单例模式。 - [Spring框架中的单例模式源码解读](https://www.cnblogs.com/chengxuyuanzhilu/p/6404991.html):单例模式是一种常用的软件设计模式。通过单例模式可以保证系统中一个类只有一个实例。spring依赖注入时使用了 多重判断加锁 的单例模式。
### Spring源码阅读 ### Spring源码阅读

View File

@ -430,7 +430,7 @@ Class B {
- **`TransactionDefinition.PROPAGATION_NOT_SUPPORTED`**: 以非事务方式运行,如果当前存在事务,则把当前事务挂起。 - **`TransactionDefinition.PROPAGATION_NOT_SUPPORTED`**: 以非事务方式运行,如果当前存在事务,则把当前事务挂起。
- **`TransactionDefinition.PROPAGATION_NEVER`**: 以非事务方式运行,如果当前存在事务,则抛出异常。 - **`TransactionDefinition.PROPAGATION_NEVER`**: 以非事务方式运行,如果当前存在事务,则抛出异常。
更多关于事务传播行为的内容请看这篇文章:[《太难了~面试官让我结合案例讲讲自己对 Spring 事务传播行为的理解。》](http://mp.weixin.qq.com/s?__biz=Mzg2OTA0Njk0OA==&mid=2247486668&idx=2&sn=0381e8c836442f46bdc5367170234abb&chksm=cea24307f9d5ca11c96943b3ccfa1fc70dc97dd87d9c540388581f8fe6d805ff548dff5f6b5b&token=1776990505&lang=zh_CN#rd) 更多关于事务传播行为的内容请看这篇文章:[《太难了~面试官让我结合案例讲讲自己对 Spring 事务传播行为的理解。》](https://mp.weixin.qq.com/s?__biz=Mzg2OTA0Njk0OA==&mid=2247486668&idx=2&sn=0381e8c836442f46bdc5367170234abb&chksm=cea24307f9d5ca11c96943b3ccfa1fc70dc97dd87d9c540388581f8fe6d805ff548dff5f6b5b&token=1776990505&lang=zh_CN#rd)
#### 3.3.2 事务隔离级别 #### 3.3.2 事务隔离级别

View File

@ -192,11 +192,11 @@ public OneService getService(status) {
图示: 图示:
![Spring Bean 生命周期](http://my-blog-to-use.oss-cn-beijing.aliyuncs.com/18-9-17/48376272.jpg) ![Spring Bean 生命周期](https://my-blog-to-use.oss-cn-beijing.aliyuncs.com/18-9-17/48376272.jpg)
与之比较类似的中文版本: 与之比较类似的中文版本:
![Spring Bean 生命周期](http://my-blog-to-use.oss-cn-beijing.aliyuncs.com/18-9-17/5496407.jpg) ![Spring Bean 生命周期](https://my-blog-to-use.oss-cn-beijing.aliyuncs.com/18-9-17/5496407.jpg)
## 6. Spring MVC ## 6. Spring MVC
@ -213,12 +213,12 @@ MVC 是一种设计模式,Spring MVC 是一款很优秀的 MVC 框架。Spring M
**Spring MVC 的简单原理图如下:** **Spring MVC 的简单原理图如下:**
![](http://my-blog-to-use.oss-cn-beijing.aliyuncs.com/18-10-11/60679444.jpg) ![](https://my-blog-to-use.oss-cn-beijing.aliyuncs.com/18-10-11/60679444.jpg)
### 6.2 SpringMVC 工作原理了解吗? ### 6.2 SpringMVC 工作原理了解吗?
**原理如下图所示:** **原理如下图所示:**
![SpringMVC运行原理](http://my-blog-to-use.oss-cn-beijing.aliyuncs.com/18-10-11/49790288.jpg) ![SpringMVC运行原理](https://my-blog-to-use.oss-cn-beijing.aliyuncs.com/18-10-11/49790288.jpg)
上图的一个笔误的小问题Spring MVC 的入口函数也就是前端控制器 `DispatcherServlet` 的作用是接收请求,响应结果。 上图的一个笔误的小问题Spring MVC 的入口函数也就是前端控制器 `DispatcherServlet` 的作用是接收请求,响应结果。
@ -340,7 +340,7 @@ String transient4; // not persistent because of @Transient
## 参考 ## 参考
- 《Spring 技术内幕》 - 《Spring 技术内幕》
- <http://www.cnblogs.com/wmyskxz/p/8820371.html> - <https://www.cnblogs.com/wmyskxz/p/8820371.html>
- <https://www.journaldev.com/2696/spring-interview-questions-and-answers> - <https://www.journaldev.com/2696/spring-interview-questions-and-answers>
- <https://www.edureka.co/blog/interview-questions/spring-interview-questions/> - <https://www.edureka.co/blog/interview-questions/spring-interview-questions/>
- https://www.cnblogs.com/clwydjgs/p/9317849.html - https://www.cnblogs.com/clwydjgs/p/9317849.html

View File

@ -164,7 +164,7 @@ CAP仅适用于原子读写的NOSQL场景中并不适合数据库系统。现
**当发生网络分区的时候如果我们要继续服务那么强一致性和可用性只能2选1。也就是说当网络分区之后P是前提决定了P之后才有C和A的选择。也就是说分区容错性Partition tolerance我们是必须要实现的。** **当发生网络分区的时候如果我们要继续服务那么强一致性和可用性只能2选1。也就是说当网络分区之后P是前提决定了P之后才有C和A的选择。也就是说分区容错性Partition tolerance我们是必须要实现的。**
我在网上找了很多文章想看一下有没有文章提到这个不是所谓的3选2用百度半天没找到了一篇用谷歌搜索找到一篇比较不错的如果想深入学习一下CAP就看这篇文章把我这里就不多BB了**《分布式系统之CAP理论》 ** [http://www.cnblogs.com/hxsyl/p/4381980.html](http://www.cnblogs.com/hxsyl/p/4381980.html) 我在网上找了很多文章想看一下有没有文章提到这个不是所谓的3选2用百度半天没找到了一篇用谷歌搜索找到一篇比较不错的如果想深入学习一下CAP就看这篇文章把我这里就不多BB了**《分布式系统之CAP理论》 ** [https://www.cnblogs.com/hxsyl/p/4381980.html](https://www.cnblogs.com/hxsyl/p/4381980.html)
#### BASE 理论 #### BASE 理论

View File

@ -268,8 +268,8 @@ git push origin
**推荐阅读:** **推荐阅读:**
- [Git - 简明指南](http://rogerdudler.github.io/git-guide/index.zh.html) - [Git - 简明指南](https://rogerdudler.github.io/git-guide/index.zh.html)
- [图解Git](http://marklodato.github.io/visual-git-guide/index-zh-cn.html) - [图解Git](https://marklodato.github.io/visual-git-guide/index-zh-cn.html)
- [猴子都能懂得Git入门](https://backlog.com/git-tutorial/cn/intro/intro1_1.html) - [猴子都能懂得Git入门](https://backlog.com/git-tutorial/cn/intro/intro1_1.html)
- https://git-scm.com/book/en/v2 - https://git-scm.com/book/en/v2
- [Generating a new SSH key and adding it to the ssh-agent](https://help.github.com/en/articles/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent) - [Generating a new SSH key and adding it to the ssh-agent](https://help.github.com/en/articles/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent)

View File

@ -6,7 +6,7 @@
## 1. 一键生成 Github 简历 ## 1. 一键生成 Github 简历
通过 [http://resume.github.io/](http://resume.github.io/) 这个网站你可以一键生成一个在线的 Github 简历。 通过 [https://resume.github.io/](https://resume.github.io/) 这个网站你可以一键生成一个在线的 Github 简历。
当时我参加的校招的时候,个人信息那里就放了一个在线的 Github 简历。我觉得这样会让面试官感觉你是一个内行,会提高一些印象分。 当时我参加的校招的时候,个人信息那里就放了一个在线的 Github 简历。我觉得这样会让面试官感觉你是一个内行,会提高一些印象分。

View File

@ -186,12 +186,12 @@
## 杂文闲记 ## 杂文闲记
- [一只准准程序员的唠叨](http://mp.weixin.qq.com/s?__biz=Mzg2OTA0Njk0OA==&mid=2247484932&idx=1&sn=a4f3057ecd4412cb8b18e92058b29680&chksm=cea249cff9d5c0d97580310f6666a4e0c42cfd1ba13dd759850e489c9386dce8c5c35b0a1a95&token=1082669959&lang=zh_CN#rd)(2018-06-09) - [一只准准程序员的唠叨](https://mp.weixin.qq.com/s?__biz=Mzg2OTA0Njk0OA==&mid=2247484932&idx=1&sn=a4f3057ecd4412cb8b18e92058b29680&chksm=cea249cff9d5c0d97580310f6666a4e0c42cfd1ba13dd759850e489c9386dce8c5c35b0a1a95&token=1082669959&lang=zh_CN#rd)(2018-06-09)
- [说几件近期的小事](https://mp.weixin.qq.com/s?__biz=Mzg2OTA0Njk0OA==&mid=2247484900&idx=1&sn=745e8f6027da369ef5f8e349cb5d6657&chksm=cea24a2ff9d5c339c925322ffacdc72dd37bda63238dfb3452540085c1695681e2e79070e2a7&token=1082669959&lang=zh_CN#rd)(2018-08-02) - [说几件近期的小事](https://mp.weixin.qq.com/s?__biz=Mzg2OTA0Njk0OA==&mid=2247484900&idx=1&sn=745e8f6027da369ef5f8e349cb5d6657&chksm=cea24a2ff9d5c339c925322ffacdc72dd37bda63238dfb3452540085c1695681e2e79070e2a7&token=1082669959&lang=zh_CN#rd)(2018-08-02)
- [选择技术方向都要考虑哪些因素](https://mp.weixin.qq.com/s?__biz=Mzg2OTA0Njk0OA==&mid=2247484898&idx=1&sn=fd2ebf9ffd37ab5de1de09cd3272ac0a&chksm=cea24a29f9d5c33fa48f5a57de864cd9382a730578fb18d78b7f06b45504aede18b235b9bc9e&token=1082669959&lang=zh_CN#rd)2018-08-04 - [选择技术方向都要考虑哪些因素](https://mp.weixin.qq.com/s?__biz=Mzg2OTA0Njk0OA==&mid=2247484898&idx=1&sn=fd2ebf9ffd37ab5de1de09cd3272ac0a&chksm=cea24a29f9d5c33fa48f5a57de864cd9382a730578fb18d78b7f06b45504aede18b235b9bc9e&token=1082669959&lang=zh_CN#rd)2018-08-04
- [结束了我短暂的秋招,说点自己的感受](https://mp.weixin.qq.com/s?__biz=Mzg2OTA0Njk0OA==&mid=2247484842&idx=1&sn=4489dfab0ef2479122b71407855afc71&chksm=cea24a61f9d5c3774a8ed67c5fcc3234cb0741fbe831152986e5d1c8fb4f36a003f4fb2f247e&token=1082669959&lang=zh_CN#rd)2018-10-22 - [结束了我短暂的秋招,说点自己的感受](https://mp.weixin.qq.com/s?__biz=Mzg2OTA0Njk0OA==&mid=2247484842&idx=1&sn=4489dfab0ef2479122b71407855afc71&chksm=cea24a61f9d5c3774a8ed67c5fcc3234cb0741fbe831152986e5d1c8fb4f36a003f4fb2f247e&token=1082669959&lang=zh_CN#rd)2018-10-22
- [【周日闲谈】最近想说的几件小事](https://mp.weixin.qq.com/s?__biz=Mzg2OTA0Njk0OA==&mid=2247484818&idx=1&sn=e14b0a08537456eb15ba49cf5e70ff74&chksm=cea24a59f9d5c34fe0a9e0567d867b85a81d1f19b0ea8e6a3c14161e436508de9adfeb2a5e6a&token=1082669959&lang=zh_CN#rd)(2018-11-18) - [【周日闲谈】最近想说的几件小事](https://mp.weixin.qq.com/s?__biz=Mzg2OTA0Njk0OA==&mid=2247484818&idx=1&sn=e14b0a08537456eb15ba49cf5e70ff74&chksm=cea24a59f9d5c34fe0a9e0567d867b85a81d1f19b0ea8e6a3c14161e436508de9adfeb2a5e6a&token=1082669959&lang=zh_CN#rd)(2018-11-18)
- [做公众号这一年的经历和一件“大事”](http://mp.weixin.qq.com/s?__biz=Mzg2OTA0Njk0OA==&mid=2247484746&idx=1&sn=a519a9e3d638bff5c65008f7de167e4b&chksm=cea24a81f9d5c397ca9ac5668ba6cb18b38065e0e282a34ebc077a2dea98de3f1eb285ea5f09&token=1082669959&lang=zh_CN#rd)(2019-03-10) - [做公众号这一年的经历和一件“大事”](https://mp.weixin.qq.com/s?__biz=Mzg2OTA0Njk0OA==&mid=2247484746&idx=1&sn=a519a9e3d638bff5c65008f7de167e4b&chksm=cea24a81f9d5c397ca9ac5668ba6cb18b38065e0e282a34ebc077a2dea98de3f1eb285ea5f09&token=1082669959&lang=zh_CN#rd)(2019-03-10)
- [几经周折,公众号终于留言功能啦!](https://mp.weixin.qq.com/s?__biz=Mzg2OTA0Njk0OA==&mid=2247485007&idx=1&sn=096a436cd6a9251c23b8effc3cfa5076&chksm=cea24984f9d5c092d1f7740d1c3e0ea347562ba0aa597507ce275c5bdf1c8bd608328ee756ba&token=1082669959&lang=zh_CN#rd)(2019-03-15) - [几经周折,公众号终于留言功能啦!](https://mp.weixin.qq.com/s?__biz=Mzg2OTA0Njk0OA==&mid=2247485007&idx=1&sn=096a436cd6a9251c23b8effc3cfa5076&chksm=cea24984f9d5c092d1f7740d1c3e0ea347562ba0aa597507ce275c5bdf1c8bd608328ee756ba&token=1082669959&lang=zh_CN#rd)(2019-03-15)
- [写在毕业季的大学总结!细数一下大学干过的“傻事”。](https://mp.weixin.qq.com/s?__biz=Mzg2OTA0Njk0OA==&mid=2247485358&idx=1&sn=3aaf1163fe13351e06c76b70f2bd33bd&chksm=cea24865f9d5c1735b51c707c8f5ade16af7eca304540205ab0fb1284f99034d418b9858d7db&token=1667678311&lang=zh_CN#rd) (2019-06-11) - [写在毕业季的大学总结!细数一下大学干过的“傻事”。](https://mp.weixin.qq.com/s?__biz=Mzg2OTA0Njk0OA==&mid=2247485358&idx=1&sn=3aaf1163fe13351e06c76b70f2bd33bd&chksm=cea24865f9d5c1735b51c707c8f5ade16af7eca304540205ab0fb1284f99034d418b9858d7db&token=1667678311&lang=zh_CN#rd) (2019-06-11)
- [入职一个月的职场小白,谈谈自己这段时间的感受](https://mp.weixin.qq.com/s?__biz=Mzg2OTA0Njk0OA==&mid=2247485540&idx=1&sn=4492eece8f7738e99350118040e14a79&chksm=cea247aff9d5ceb9e7c67f418d8a8518c550fd7dd269bf2c9bdef83309502273b4b9f1e7021f&token=1333232257&lang=zh_CN&scene=21#wechat_redirect) - [入职一个月的职场小白,谈谈自己这段时间的感受](https://mp.weixin.qq.com/s?__biz=Mzg2OTA0Njk0OA==&mid=2247485540&idx=1&sn=4492eece8f7738e99350118040e14a79&chksm=cea247aff9d5ceb9e7c67f418d8a8518c550fd7dd269bf2c9bdef83309502273b4b9f1e7021f&token=1333232257&lang=zh_CN&scene=21#wechat_redirect)