From 7c5d6d752114ba16929fe07ce4ab31bf2146e9b4 Mon Sep 17 00:00:00 2001 From: crossoverJie Date: Thu, 5 Apr 2018 21:47:24 +0800 Subject: [PATCH 01/41] :memo: Writing docs. --- README.md | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index abb0594..84f40b4 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,13 @@ Java 知识点,继续完善中。 如果对你有帮助请点下 `Star`,有疑问欢迎提 [Issues](https://github.com/crossoverJie/Java-Interview/issues),有好的想法请提 [PR](https://github.com/crossoverJie/Java-Interview/pulls)。 -### Java 集合 + +常用集合 | Java 多线程 | Java 内存模型 | 分布式相关 |常用框架\第三方组件|架构设计|DB 相关|数据结构与算法|附加技能 +---- | --- | --- | ---| ---| ---| ---| ---| --- + + + +### 常用集合 - [ArrayList/Vector 底层分析](https://github.com/crossoverJie/Java-Interview/blob/master/MD/ArrayList.md) - [LinkedList 底层分析](https://github.com/crossoverJie/Java-Interview/blob/master/MD/LinkedList.md) - [HashMap 底层分析](https://github.com/crossoverJie/Java-Interview/blob/master/MD/HashMap.md) @@ -22,7 +28,7 @@ Java 知识点,继续完善中。 - [深入理解线程通信](https://github.com/crossoverJie/Java-Interview/blob/master/MD/concurrent/thread-communication.md) - [交替打印奇偶数](https://github.com/crossoverJie/Java-Interview/blob/master/src/main/java/com/crossoverjie/actual/TwoThread.java) -### JMM(Java 内存模型) +### Java 内存模型 - [Java 运行时内存划分](https://github.com/crossoverJie/Java-Interview/blob/master/MD/MemoryAllocation.md) - [类加载机制](https://github.com/crossoverJie/Java-Interview/blob/master/MD/ClassLoad.md) - [OOM 分析](https://github.com/crossoverJie/Java-Interview/blob/master/MD/OOM-analysis.md) @@ -34,17 +40,15 @@ Java 知识点,继续完善中。 - [基于 Redis 的分布式锁](https://github.com/crossoverJie/distributed-lock-redis) -### 常用框架 +### 常用框架\第三方组件 - [Spring Bean 生命周期](https://github.com/crossoverJie/Java-Interview/blob/master/MD/spring/spring-bean-lifecycle.md) - [Spring AOP 的实现原理](https://github.com/crossoverJie/Java-Interview/blob/master/MD/SpringAOP.md) - -### SpringBoot - SpringBoot 启动过程 - -### Tomcat - Tomcat 类加载机制 + + ### 架构设计 - [秒杀系统设计](https://github.com/crossoverJie/Java-Interview/blob/master/MD/Spike.md) - [分布式缓存设计](https://github.com/crossoverJie/Java-Interview/blob/master/MD/Cache-design.md) From 805ebc20640e1ecda3ba279849f8328d7902e59b Mon Sep 17 00:00:00 2001 From: crossoverJie Date: Thu, 5 Apr 2018 21:53:58 +0800 Subject: [PATCH 02/41] :memo: Writing docs. --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 84f40b4..764596f 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ Java 知识点,继续完善中。 如果对你有帮助请点下 `Star`,有疑问欢迎提 [Issues](https://github.com/crossoverJie/Java-Interview/issues),有好的想法请提 [PR](https://github.com/crossoverJie/Java-Interview/pulls)。 -常用集合 | Java 多线程 | Java 内存模型 | 分布式相关 |常用框架\第三方组件|架构设计|DB 相关|数据结构与算法|附加技能 +[常用集合](https://github.com/crossoverJie/Java-Interview/blob/master/README.md#%E5%B8%B8%E7%94%A8%E9%9B%86%E5%90%88) | [Java 多线程](https://github.com/crossoverJie/Java-Interview/blob/master/README.md#java-%E5%A4%9A%E7%BA%BF%E7%A8%8B) | [Java 内存模型](https://github.com/crossoverJie/Java-Interview/blob/master/README.md#java-%E5%86%85%E5%AD%98%E6%A8%A1%E5%9E%8B) | [分布式相关](https://github.com/crossoverJie/Java-Interview/blob/master/README.md#%E5%88%86%E5%B8%83%E5%BC%8F%E7%9B%B8%E5%85%B3) |[常用框架\第三方组件](https://github.com/crossoverJie/Java-Interview/blob/master/README.md#%E5%B8%B8%E7%94%A8%E6%A1%86%E6%9E%B6%E7%AC%AC%E4%B8%89%E6%96%B9%E7%BB%84%E4%BB%B6)|[架构设计](https://github.com/crossoverJie/Java-Interview/blob/master/README.md#%E6%9E%B6%E6%9E%84%E8%AE%BE%E8%AE%A1)|[DB 相关](https://github.com/crossoverJie/Java-Interview/blob/master/README.md#db-%E7%9B%B8%E5%85%B3)|[数据结构与算法](https://github.com/crossoverJie/Java-Interview/blob/master/README.md#%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84%E4%B8%8E%E7%AE%97%E6%B3%95)|[附加技能](https://github.com/crossoverJie/Java-Interview/blob/master/README.md#%E9%99%84%E5%8A%A0%E6%8A%80%E8%83%BD) ---- | --- | --- | ---| ---| ---| ---| ---| --- @@ -39,6 +39,8 @@ Java 知识点,继续完善中。 ### 分布式相关 - [基于 Redis 的分布式锁](https://github.com/crossoverJie/distributed-lock-redis) +- [分布式缓存设计](https://github.com/crossoverJie/Java-Interview/blob/master/MD/Cache-design.md) +- [分布式 ID 生成器](https://github.com/crossoverJie/Java-Interview/blob/master/MD/ID-generator.md) ### 常用框架\第三方组件 @@ -51,8 +53,6 @@ Java 知识点,继续完善中。 ### 架构设计 - [秒杀系统设计](https://github.com/crossoverJie/Java-Interview/blob/master/MD/Spike.md) -- [分布式缓存设计](https://github.com/crossoverJie/Java-Interview/blob/master/MD/Cache-design.md) -- [分布式 ID 生成器](https://github.com/crossoverJie/Java-Interview/blob/master/MD/ID-generator.md) ### DB 相关 From 4b4ac023bbf84e6b42fbfc6ce0230e59beae76da Mon Sep 17 00:00:00 2001 From: crossoverJie Date: Sat, 7 Apr 2018 12:13:37 +0800 Subject: [PATCH 03/41] :memo: Writing docs. --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 764596f..4796da7 100644 --- a/README.md +++ b/README.md @@ -71,6 +71,7 @@ Java 知识点,继续完善中。 - [三种方式反向打印单向链表](https://github.com/crossoverJie/Java-Interview/blob/master/src/main/java/com/crossoverjie/algorithm/ReverseNode.java) - [合并两个排好序的链表](https://github.com/crossoverJie/Java-Interview/blob/master/src/main/java/com/crossoverjie/algorithm/MergeTwoSortedLists.java) - [两个栈实现队列](https://github.com/crossoverJie/Java-Interview/blob/master/src/main/java/com/crossoverjie/algorithm/TwoStackQueue.java) +- [动手实现一个 LRU cache](http://crossoverjie.top/2018/04/07/algorithm/LRU-cache/) ### 附加技能 From ebea5f1ea073a7092b50032c4e1a9f408a04bc49 Mon Sep 17 00:00:00 2001 From: crossoverJie Date: Sat, 7 Apr 2018 12:18:27 +0800 Subject: [PATCH 04/41] :memo: Writing docs. --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 4796da7..6ece559 100644 --- a/README.md +++ b/README.md @@ -38,7 +38,7 @@ Java 知识点,继续完善中。 ### 分布式相关 -- [基于 Redis 的分布式锁](https://github.com/crossoverJie/distributed-lock-redis) +- [基于 Redis 的分布式锁](http://crossoverjie.top/2018/03/29/distributed-lock/distributed-lock-redis/) - [分布式缓存设计](https://github.com/crossoverJie/Java-Interview/blob/master/MD/Cache-design.md) - [分布式 ID 生成器](https://github.com/crossoverJie/Java-Interview/blob/master/MD/ID-generator.md) From a81a74f23539cec9c79069b1113986977fe6ea13 Mon Sep 17 00:00:00 2001 From: crossoverJie Date: Sat, 7 Apr 2018 12:35:35 +0800 Subject: [PATCH 05/41] =?UTF-8?q?:art:=20=E6=94=B9=E8=BF=9B=E4=BB=A3?= =?UTF-8?q?=E7=A0=81=E7=9A=84=E7=BB=93=E6=9E=84/=E6=A0=BC=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/com/crossoverjie/actual/LRUMap.java | 8 ++------ src/test/java/com/crossoverjie/actual/LRUMapTest.java | 4 ++-- 2 files changed, 4 insertions(+), 8 deletions(-) diff --git a/src/main/java/com/crossoverjie/actual/LRUMap.java b/src/main/java/com/crossoverjie/actual/LRUMap.java index 906660c..c0a4596 100644 --- a/src/main/java/com/crossoverjie/actual/LRUMap.java +++ b/src/main/java/com/crossoverjie/actual/LRUMap.java @@ -131,14 +131,10 @@ private void addNode(K key, V value) { if (cacheSize == nodeCount) { //删除尾结点 delTail(); - - //写入头结点 - addHead(node); - } else { - addHead(node); - } + //写入头结点 + addHead(node); } diff --git a/src/test/java/com/crossoverjie/actual/LRUMapTest.java b/src/test/java/com/crossoverjie/actual/LRUMapTest.java index 371eb3b..0423007 100644 --- a/src/test/java/com/crossoverjie/actual/LRUMapTest.java +++ b/src/test/java/com/crossoverjie/actual/LRUMapTest.java @@ -56,7 +56,7 @@ public void get() throws Exception { } @Test - public void get3() throws Exception { + public void get2() throws Exception { LRUMap lruMap = new LRUMap(3) ; lruMap.put("1",1) ; lruMap.put("2",2) ; @@ -72,7 +72,7 @@ public void get3() throws Exception { } @Test - public void get4() throws Exception { + public void get3() throws Exception { LRUMap lruMap = new LRUMap(3) ; lruMap.put("1",1) ; lruMap.put("2",2) ; From 602c3a278d10b7eacb56a06559b2153bb7825b94 Mon Sep 17 00:00:00 2001 From: crossoverJie Date: Tue, 10 Apr 2018 11:44:02 +0800 Subject: [PATCH 06/41] :memo: Writing docs. --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 6ece559..c02b0a1 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ Java 知识点,继续完善中。 如果对你有帮助请点下 `Star`,有疑问欢迎提 [Issues](https://github.com/crossoverJie/Java-Interview/issues),有好的想法请提 [PR](https://github.com/crossoverJie/Java-Interview/pulls)。 -[常用集合](https://github.com/crossoverJie/Java-Interview/blob/master/README.md#%E5%B8%B8%E7%94%A8%E9%9B%86%E5%90%88) | [Java 多线程](https://github.com/crossoverJie/Java-Interview/blob/master/README.md#java-%E5%A4%9A%E7%BA%BF%E7%A8%8B) | [Java 内存模型](https://github.com/crossoverJie/Java-Interview/blob/master/README.md#java-%E5%86%85%E5%AD%98%E6%A8%A1%E5%9E%8B) | [分布式相关](https://github.com/crossoverJie/Java-Interview/blob/master/README.md#%E5%88%86%E5%B8%83%E5%BC%8F%E7%9B%B8%E5%85%B3) |[常用框架\第三方组件](https://github.com/crossoverJie/Java-Interview/blob/master/README.md#%E5%B8%B8%E7%94%A8%E6%A1%86%E6%9E%B6%E7%AC%AC%E4%B8%89%E6%96%B9%E7%BB%84%E4%BB%B6)|[架构设计](https://github.com/crossoverJie/Java-Interview/blob/master/README.md#%E6%9E%B6%E6%9E%84%E8%AE%BE%E8%AE%A1)|[DB 相关](https://github.com/crossoverJie/Java-Interview/blob/master/README.md#db-%E7%9B%B8%E5%85%B3)|[数据结构与算法](https://github.com/crossoverJie/Java-Interview/blob/master/README.md#%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84%E4%B8%8E%E7%AE%97%E6%B3%95)|[附加技能](https://github.com/crossoverJie/Java-Interview/blob/master/README.md#%E9%99%84%E5%8A%A0%E6%8A%80%E8%83%BD) +[常用集合](https://github.com/crossoverJie/Java-Interview/blob/master/README.md#%E5%B8%B8%E7%94%A8%E9%9B%86%E5%90%88) | [Java 多线程](https://github.com/crossoverJie/Java-Interview/blob/master/README.md#java-%E5%A4%9A%E7%BA%BF%E7%A8%8B) | [JVM](https://github.com/crossoverJie/Java-Interview/blob/master/README.md#JVM) | [分布式相关](https://github.com/crossoverJie/Java-Interview/blob/master/README.md#%E5%88%86%E5%B8%83%E5%BC%8F%E7%9B%B8%E5%85%B3) |[常用框架\第三方组件](https://github.com/crossoverJie/Java-Interview/blob/master/README.md#%E5%B8%B8%E7%94%A8%E6%A1%86%E6%9E%B6%E7%AC%AC%E4%B8%89%E6%96%B9%E7%BB%84%E4%BB%B6)|[架构设计](https://github.com/crossoverJie/Java-Interview/blob/master/README.md#%E6%9E%B6%E6%9E%84%E8%AE%BE%E8%AE%A1)|[DB 相关](https://github.com/crossoverJie/Java-Interview/blob/master/README.md#db-%E7%9B%B8%E5%85%B3)|[数据结构与算法](https://github.com/crossoverJie/Java-Interview/blob/master/README.md#%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84%E4%B8%8E%E7%AE%97%E6%B3%95)|[附加技能](https://github.com/crossoverJie/Java-Interview/blob/master/README.md#%E9%99%84%E5%8A%A0%E6%8A%80%E8%83%BD) ---- | --- | --- | ---| ---| ---| ---| ---| --- @@ -28,7 +28,7 @@ Java 知识点,继续完善中。 - [深入理解线程通信](https://github.com/crossoverJie/Java-Interview/blob/master/MD/concurrent/thread-communication.md) - [交替打印奇偶数](https://github.com/crossoverJie/Java-Interview/blob/master/src/main/java/com/crossoverjie/actual/TwoThread.java) -### Java 内存模型 +### JVM - [Java 运行时内存划分](https://github.com/crossoverJie/Java-Interview/blob/master/MD/MemoryAllocation.md) - [类加载机制](https://github.com/crossoverJie/Java-Interview/blob/master/MD/ClassLoad.md) - [OOM 分析](https://github.com/crossoverJie/Java-Interview/blob/master/MD/OOM-analysis.md) From 8c416f87e729ea343c5cd0f6184a812e6e7cce55 Mon Sep 17 00:00:00 2001 From: crossoverJie Date: Tue, 10 Apr 2018 11:45:04 +0800 Subject: [PATCH 07/41] :memo: Writing docs. --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index c02b0a1..fbf5f18 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ Java 知识点,继续完善中。 如果对你有帮助请点下 `Star`,有疑问欢迎提 [Issues](https://github.com/crossoverJie/Java-Interview/issues),有好的想法请提 [PR](https://github.com/crossoverJie/Java-Interview/pulls)。 -[常用集合](https://github.com/crossoverJie/Java-Interview/blob/master/README.md#%E5%B8%B8%E7%94%A8%E9%9B%86%E5%90%88) | [Java 多线程](https://github.com/crossoverJie/Java-Interview/blob/master/README.md#java-%E5%A4%9A%E7%BA%BF%E7%A8%8B) | [JVM](https://github.com/crossoverJie/Java-Interview/blob/master/README.md#JVM) | [分布式相关](https://github.com/crossoverJie/Java-Interview/blob/master/README.md#%E5%88%86%E5%B8%83%E5%BC%8F%E7%9B%B8%E5%85%B3) |[常用框架\第三方组件](https://github.com/crossoverJie/Java-Interview/blob/master/README.md#%E5%B8%B8%E7%94%A8%E6%A1%86%E6%9E%B6%E7%AC%AC%E4%B8%89%E6%96%B9%E7%BB%84%E4%BB%B6)|[架构设计](https://github.com/crossoverJie/Java-Interview/blob/master/README.md#%E6%9E%B6%E6%9E%84%E8%AE%BE%E8%AE%A1)|[DB 相关](https://github.com/crossoverJie/Java-Interview/blob/master/README.md#db-%E7%9B%B8%E5%85%B3)|[数据结构与算法](https://github.com/crossoverJie/Java-Interview/blob/master/README.md#%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84%E4%B8%8E%E7%AE%97%E6%B3%95)|[附加技能](https://github.com/crossoverJie/Java-Interview/blob/master/README.md#%E9%99%84%E5%8A%A0%E6%8A%80%E8%83%BD) +[常用集合](https://github.com/crossoverJie/Java-Interview/blob/master/README.md#%E5%B8%B8%E7%94%A8%E9%9B%86%E5%90%88) | [Java 多线程](https://github.com/crossoverJie/Java-Interview/blob/master/README.md#java-%E5%A4%9A%E7%BA%BF%E7%A8%8B) | [JVM](https://github.com/crossoverJie/Java-Interview/blob/master/README.md#jvm) | [分布式相关](https://github.com/crossoverJie/Java-Interview/blob/master/README.md#%E5%88%86%E5%B8%83%E5%BC%8F%E7%9B%B8%E5%85%B3) |[常用框架\第三方组件](https://github.com/crossoverJie/Java-Interview/blob/master/README.md#%E5%B8%B8%E7%94%A8%E6%A1%86%E6%9E%B6%E7%AC%AC%E4%B8%89%E6%96%B9%E7%BB%84%E4%BB%B6)|[架构设计](https://github.com/crossoverJie/Java-Interview/blob/master/README.md#%E6%9E%B6%E6%9E%84%E8%AE%BE%E8%AE%A1)|[DB 相关](https://github.com/crossoverJie/Java-Interview/blob/master/README.md#db-%E7%9B%B8%E5%85%B3)|[数据结构与算法](https://github.com/crossoverJie/Java-Interview/blob/master/README.md#%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84%E4%B8%8E%E7%AE%97%E6%B3%95)|[附加技能](https://github.com/crossoverJie/Java-Interview/blob/master/README.md#%E9%99%84%E5%8A%A0%E6%8A%80%E8%83%BD) ---- | --- | --- | ---| ---| ---| ---| ---| --- From aba48b40b0ae4544f6233d06041b8a7072c98c32 Mon Sep 17 00:00:00 2001 From: crossoverJie Date: Fri, 20 Apr 2018 00:07:00 +0800 Subject: [PATCH 08/41] :white_check_mark: Adding tests. --- .../com/crossoverjie/actual/LRUMapTest.java | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/src/test/java/com/crossoverjie/actual/LRUMapTest.java b/src/test/java/com/crossoverjie/actual/LRUMapTest.java index 0423007..eb9dcc2 100644 --- a/src/test/java/com/crossoverjie/actual/LRUMapTest.java +++ b/src/test/java/com/crossoverjie/actual/LRUMapTest.java @@ -39,6 +39,37 @@ public void put2() throws Exception { System.out.println(lruMap.toString()); } + @Test + public void put3() throws Exception { + LRUMap lruMap = new LRUMap(4) ; + lruMap.put("1",1) ; + lruMap.put("2",2) ; + lruMap.put("3",3) ; + lruMap.put("2",2) ; + + System.out.println(lruMap.toString()); + + lruMap.put("4",4) ; + System.out.println(lruMap.toString()); + + lruMap.put("5",5) ; + System.out.println(lruMap.toString()); + } + + @Test + public void put4() throws Exception { + LRUMap lruMap = new LRUMap(3) ; + lruMap.put("1",1) ; + lruMap.put("2",2) ; + lruMap.put("3",3) ; + + System.out.println(lruMap.toString()); + lruMap.put("2",2) ; + + System.out.println(lruMap.toString()); + + } + @Test public void get() throws Exception { LRUMap lruMap = new LRUMap(3) ; From 74fe30272e8fa7a8525c59ab56e4d912a9200bd6 Mon Sep 17 00:00:00 2001 From: crossoverJie Date: Sat, 28 Apr 2018 17:15:12 +0800 Subject: [PATCH 09/41] :memo: Writing docs. --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index fbf5f18..5136aae 100644 --- a/README.md +++ b/README.md @@ -38,6 +38,7 @@ Java 知识点,继续完善中。 ### 分布式相关 +- [分布式限流](http://crossoverjie.top/2018/04/28/sbc/sbc7-Distributed-Limit/) - [基于 Redis 的分布式锁](http://crossoverjie.top/2018/03/29/distributed-lock/distributed-lock-redis/) - [分布式缓存设计](https://github.com/crossoverJie/Java-Interview/blob/master/MD/Cache-design.md) - [分布式 ID 生成器](https://github.com/crossoverJie/Java-Interview/blob/master/MD/ID-generator.md) From aef66b4449e23c888da8447befb8c1fa3bdcee7a Mon Sep 17 00:00:00 2001 From: crossoverJie Date: Wed, 2 May 2018 00:42:29 +0800 Subject: [PATCH 10/41] :memo: Writing docs. --- MD/Limiting.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/MD/Limiting.md b/MD/Limiting.md index e97f23d..2b76019 100644 --- a/MD/Limiting.md +++ b/MD/Limiting.md @@ -54,4 +54,5 @@ ``` -> [更多信息](https://crossoverjie.top/2017/08/11/sbc4/) +1. [单 JVM 限流](http://crossoverjie.top/2017/08/11/sbc4/) +2. [分布式限流](http://crossoverjie.top/2018/04/28/sbc/sbc7-Distributed-Limit/) From 58ecde3e83253ef5f691ae765cf9497d40c420f5 Mon Sep 17 00:00:00 2001 From: TGhoul <649269913@qq.com> Date: Fri, 4 May 2018 10:57:51 +0800 Subject: [PATCH 11/41] =?UTF-8?q?line7=20=E5=8B=98=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 数据修改为数组 --- MD/HashMap.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/MD/HashMap.md b/MD/HashMap.md index 2f1b86b..eed6823 100644 --- a/MD/HashMap.md +++ b/MD/HashMap.md @@ -4,7 +4,7 @@ ![](https://ws2.sinaimg.cn/large/006tNc79gy1fn84b0ftj4j30eb0560sv.jpg) -如图所示,HashMap 底层是基于数据和链表实现的。其中有两个重要的参数: +如图所示,HashMap 底层是基于数组和链表实现的。其中有两个重要的参数: - 容量 - 负载因子 @@ -41,4 +41,4 @@ get 和 put 类似,也是将传入的 Key 计算出 index ,如果该位置 大大提高了查询效率。 -多线程场景下推荐使用 [ConcurrentHashMap](https://github.com/crossoverJie/Java-Interview/blob/master/MD/ConcurrentHashMap.md)。 \ No newline at end of file +多线程场景下推荐使用 [ConcurrentHashMap](https://github.com/crossoverJie/Java-Interview/blob/master/MD/ConcurrentHashMap.md)。 From 097380b377760868044342fc03154cabbc6e5ae3 Mon Sep 17 00:00:00 2001 From: crossoverJie Date: Fri, 4 May 2018 14:55:43 +0800 Subject: [PATCH 12/41] :memo: Writing docs. --- MD/LinkedList.md | 4 ++-- README.md | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/MD/LinkedList.md b/MD/LinkedList.md index e42384d..49d0886 100644 --- a/MD/LinkedList.md +++ b/MD/LinkedList.md @@ -1,8 +1,8 @@ # LinkedList 底层分析 -![](https://ws1.sinaimg.cn/large/006tKfTcgy1fmtdndjiwej30hj06mabj.jpg) +![](https://ws4.sinaimg.cn/large/006tKfTcly1fqzb66c00gj30p7056q38.jpg) -如图所示 `LinkedList` 底层是基于双向链表实现的,也是实现了 `List` 接口,所以也拥有 List 的一些特点。 +如图所示 `LinkedList` 底层是基于双向链表实现的,也是实现了 `List` 接口,所以也拥有 List 的一些特点(JDK1.7/8 之后取消了循环,修改为双向链表)。 ## 新增方法 diff --git a/README.md b/README.md index 5136aae..7821496 100644 --- a/README.md +++ b/README.md @@ -12,10 +12,10 @@ Java 知识点,继续完善中。 ### 常用集合 -- [ArrayList/Vector 底层分析](https://github.com/crossoverJie/Java-Interview/blob/master/MD/ArrayList.md) -- [LinkedList 底层分析](https://github.com/crossoverJie/Java-Interview/blob/master/MD/LinkedList.md) -- [HashMap 底层分析](https://github.com/crossoverJie/Java-Interview/blob/master/MD/HashMap.md) -- [LinkedHashMap 底层分析](https://github.com/crossoverJie/Java-Interview/blob/master/MD/collection/LinkedHashMap.md) +- [ArrayList/Vector](https://github.com/crossoverJie/Java-Interview/blob/master/MD/ArrayList.md) +- [LinkedList](https://github.com/crossoverJie/Java-Interview/blob/master/MD/LinkedList.md) +- [HashMap](https://github.com/crossoverJie/Java-Interview/blob/master/MD/HashMap.md) +- [LinkedHashMap](https://github.com/crossoverJie/Java-Interview/blob/master/MD/collection/LinkedHashMap.md) ### Java 多线程 - [多线程中的常见问题](https://github.com/crossoverJie/Java-Interview/blob/master/MD/Thread-common-problem.md) From 94b5cda0c1886944398f46a2f66ad3e73db3e248 Mon Sep 17 00:00:00 2001 From: crossoverJie Date: Sat, 5 May 2018 12:59:16 +0800 Subject: [PATCH 13/41] :memo: Writing docs. --- MD/HashMap.md | 25 +++++++++++++ MD/collection/HashSet.md | 2 +- README.md | 3 +- .../com/crossoverjie/basic/HashMapTest.java | 37 +++++++++++++++++++ 4 files changed, 65 insertions(+), 2 deletions(-) create mode 100644 src/main/java/com/crossoverjie/basic/HashMapTest.java diff --git a/MD/HashMap.md b/MD/HashMap.md index eed6823..46fcfdf 100644 --- a/MD/HashMap.md +++ b/MD/HashMap.md @@ -22,6 +22,31 @@ get 和 put 类似,也是将传入的 Key 计算出 index ,如果该位置上是一个链表就需要遍历整个链表,通过 `key.equals(k)` 来找到对应的元素。 +## 遍历方式 + + +```java + Iterator> entryIterator = map.entrySet().iterator(); + while (entryIterator.hasNext()) { + Map.Entry next = entryIterator.next(); + System.out.println("key=" + next.getKey() + " value=" + next.getValue()); + } +``` + +```java +Iterator iterator = map.keySet().iterator(); + while (iterator.hasNext()){ + String key = iterator.next(); + System.out.println("key=" + key + " value=" + map.get(key)); + + } +``` + +**强烈建议**使用第一种 EntrySet 进行遍历。 + +第一种可以把 key value 同时取出,第二种还得需要通过 key 取一次 value,效率较低。 + + ## notice 在并发环境下使用 `HashMap` 容易出现死循环。 diff --git a/MD/collection/HashSet.md b/MD/collection/HashSet.md index 5df569d..5f02627 100644 --- a/MD/collection/HashSet.md +++ b/MD/collection/HashSet.md @@ -19,7 +19,7 @@ ## 构造函数 -``` +```java public HashSet() { map = new HashMap<>(); } diff --git a/README.md b/README.md index 7821496..c71796c 100644 --- a/README.md +++ b/README.md @@ -15,6 +15,7 @@ Java 知识点,继续完善中。 - [ArrayList/Vector](https://github.com/crossoverJie/Java-Interview/blob/master/MD/ArrayList.md) - [LinkedList](https://github.com/crossoverJie/Java-Interview/blob/master/MD/LinkedList.md) - [HashMap](https://github.com/crossoverJie/Java-Interview/blob/master/MD/HashMap.md) +- [HashSet](https://github.com/crossoverJie/Java-Interview/blob/master/MD/HashMap.md) - [LinkedHashMap](https://github.com/crossoverJie/Java-Interview/blob/master/MD/collection/LinkedHashMap.md) ### Java 多线程 @@ -67,7 +68,7 @@ Java 知识点,继续完善中。 - [是否为快乐数字](https://github.com/crossoverJie/Java-Interview/blob/master/src/main/java/com/crossoverjie/algorithm/HappyNum.java#L38-L55) - [链表是否有环](https://github.com/crossoverJie/Java-Interview/blob/master/src/main/java/com/crossoverjie/algorithm/LinkLoop.java#L32-L59) - [从一个数组中返回两个值相加等于目标值的下标](https://github.com/crossoverJie/Java-Interview/blob/master/src/main/java/com/crossoverjie/algorithm/TwoSum.java#L38-L59) -- [一致 Hash 算法](https://github.com/crossoverJie/Java-Interview/blob/master/MD/Consistent-Hash.md) +- [一致性 Hash 算法](https://github.com/crossoverJie/Java-Interview/blob/master/MD/Consistent-Hash.md) - [限流算法](https://github.com/crossoverJie/Java-Interview/blob/master/MD/Limiting.md) - [三种方式反向打印单向链表](https://github.com/crossoverJie/Java-Interview/blob/master/src/main/java/com/crossoverjie/algorithm/ReverseNode.java) - [合并两个排好序的链表](https://github.com/crossoverJie/Java-Interview/blob/master/src/main/java/com/crossoverjie/algorithm/MergeTwoSortedLists.java) diff --git a/src/main/java/com/crossoverjie/basic/HashMapTest.java b/src/main/java/com/crossoverjie/basic/HashMapTest.java new file mode 100644 index 0000000..8e9edef --- /dev/null +++ b/src/main/java/com/crossoverjie/basic/HashMapTest.java @@ -0,0 +1,37 @@ +package com.crossoverjie.basic; + +import java.security.Key; +import java.util.HashMap; +import java.util.Iterator; +import java.util.Map; + +/** + * Function: + * + * @author crossoverJie + * Date: 05/05/2018 12:42 + * @since JDK 1.8 + */ +public class HashMapTest { + public static void main(String[] args) { + Map map = new HashMap<>(16); + map.put("1", 1); + map.put("2", 2); + map.put("3", 3); + map.put("4", 4); + + Iterator> entryIterator = map.entrySet().iterator(); + while (entryIterator.hasNext()) { + Map.Entry next = entryIterator.next(); + System.out.println("key=" + next.getKey() + " value=" + next.getValue()); + } + System.out.println("============="); + + Iterator iterator = map.keySet().iterator(); + while (iterator.hasNext()){ + String key = iterator.next(); + System.out.println("key=" + key + " value=" + map.get(key)); + + } + } +} From 2c4a6f29f89ff1dd6d6525838397a0b200ccbcd1 Mon Sep 17 00:00:00 2001 From: crossoverJie Date: Tue, 8 May 2018 18:29:40 +0800 Subject: [PATCH 14/41] :memo: Writing docs. --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index c71796c..085d3f8 100644 --- a/README.md +++ b/README.md @@ -55,6 +55,7 @@ Java 知识点,继续完善中。 ### 架构设计 - [秒杀系统设计](https://github.com/crossoverJie/Java-Interview/blob/master/MD/Spike.md) +- [秒杀架构实践](http://crossoverjie.top/2018/05/07/ssm/SSM18-seconds-kill/) ### DB 相关 From 3372ba43cadb6647d6bb0a6574a228c918ae448c Mon Sep 17 00:00:00 2001 From: crossoverJie Date: Wed, 16 May 2018 14:10:31 +0800 Subject: [PATCH 15/41] :memo: Writing docs. --- MD/collection/HashSet.md | 2 +- README.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/MD/collection/HashSet.md b/MD/collection/HashSet.md index 5f02627..a18212d 100644 --- a/MD/collection/HashSet.md +++ b/MD/collection/HashSet.md @@ -1,4 +1,4 @@ -# HashSet 底层分析 +# HashSet `HashSet` 是一个不允许存储重复元素的集合,它的实现比较简单,只要理解了 `HashMap`,`HashSet` 就水到渠成了。 diff --git a/README.md b/README.md index 085d3f8..89734cc 100644 --- a/README.md +++ b/README.md @@ -15,7 +15,7 @@ Java 知识点,继续完善中。 - [ArrayList/Vector](https://github.com/crossoverJie/Java-Interview/blob/master/MD/ArrayList.md) - [LinkedList](https://github.com/crossoverJie/Java-Interview/blob/master/MD/LinkedList.md) - [HashMap](https://github.com/crossoverJie/Java-Interview/blob/master/MD/HashMap.md) -- [HashSet](https://github.com/crossoverJie/Java-Interview/blob/master/MD/HashMap.md) +- [HashSet](https://github.com/crossoverJie/Java-Interview/blob/master/MD/collection/HashSet.md) - [LinkedHashMap](https://github.com/crossoverJie/Java-Interview/blob/master/MD/collection/LinkedHashMap.md) ### Java 多线程 From a16789517642aac74808a874e79863ed20a552a0 Mon Sep 17 00:00:00 2001 From: crossoverJie Date: Sun, 20 May 2018 17:00:35 +0800 Subject: [PATCH 16/41] :memo: Writing docs. --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 89734cc..a8a5417 100644 --- a/README.md +++ b/README.md @@ -48,11 +48,11 @@ Java 知识点,继续完善中。 - [Spring Bean 生命周期](https://github.com/crossoverJie/Java-Interview/blob/master/MD/spring/spring-bean-lifecycle.md) - [Spring AOP 的实现原理](https://github.com/crossoverJie/Java-Interview/blob/master/MD/SpringAOP.md) +- 基于 Netty 的长连接心跳 - SpringBoot 启动过程 - Tomcat 类加载机制 - ### 架构设计 - [秒杀系统设计](https://github.com/crossoverJie/Java-Interview/blob/master/MD/Spike.md) - [秒杀架构实践](http://crossoverjie.top/2018/05/07/ssm/SSM18-seconds-kill/) From 73bf1a99603a35a39c548e0b93b1fe39781d3bd3 Mon Sep 17 00:00:00 2001 From: rosuH Date: Fri, 25 May 2018 08:56:02 +0800 Subject: [PATCH 17/41] Update LinkedList.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 源码中的实现应该是判断 index 是否超过 size 的一半,如果超过了,那么从尾结点开始遍历 这样做可以将性能从原来的`O(n)`提升为`O(n/2)`,故而应该是约接近中间结点,耗时越久。 --- MD/LinkedList.md | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/MD/LinkedList.md b/MD/LinkedList.md index 49d0886..1e0a4f6 100644 --- a/MD/LinkedList.md +++ b/MD/LinkedList.md @@ -56,9 +56,12 @@ 由此可以看出是使用二分查找来看 `index` 离 size 中间距离来判断是从头结点正序查还是从尾节点倒序查。 -这样的效率是非常低的,特别是当 index 距离 size 的中间位置越远时。 +- `node()`会以`O(n/2)`的性能去获取一个结点 + - 如果索引值大于链表大小的一半,那么将从尾结点开始遍历 + +这样的效率是非常低的,特别是当 index 越接近 size 的中间值时。 总结: - LinkedList 插入,删除都是移动指针效率很高。 -- 查找需要进行遍历查询,效率较低。 \ No newline at end of file +- 查找需要进行遍历查询,效率较低。 From 5a9e6fceb0463706bae9897e38f022313b5a4762 Mon Sep 17 00:00:00 2001 From: crossoverJie Date: Mon, 28 May 2018 15:05:46 +0800 Subject: [PATCH 18/41] :memo: Writing docs. --- README.md | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index a8a5417..b4b4df6 100644 --- a/README.md +++ b/README.md @@ -6,8 +6,8 @@ Java 知识点,继续完善中。 如果对你有帮助请点下 `Star`,有疑问欢迎提 [Issues](https://github.com/crossoverJie/Java-Interview/issues),有好的想法请提 [PR](https://github.com/crossoverJie/Java-Interview/pulls)。 -[常用集合](https://github.com/crossoverJie/Java-Interview/blob/master/README.md#%E5%B8%B8%E7%94%A8%E9%9B%86%E5%90%88) | [Java 多线程](https://github.com/crossoverJie/Java-Interview/blob/master/README.md#java-%E5%A4%9A%E7%BA%BF%E7%A8%8B) | [JVM](https://github.com/crossoverJie/Java-Interview/blob/master/README.md#jvm) | [分布式相关](https://github.com/crossoverJie/Java-Interview/blob/master/README.md#%E5%88%86%E5%B8%83%E5%BC%8F%E7%9B%B8%E5%85%B3) |[常用框架\第三方组件](https://github.com/crossoverJie/Java-Interview/blob/master/README.md#%E5%B8%B8%E7%94%A8%E6%A1%86%E6%9E%B6%E7%AC%AC%E4%B8%89%E6%96%B9%E7%BB%84%E4%BB%B6)|[架构设计](https://github.com/crossoverJie/Java-Interview/blob/master/README.md#%E6%9E%B6%E6%9E%84%E8%AE%BE%E8%AE%A1)|[DB 相关](https://github.com/crossoverJie/Java-Interview/blob/master/README.md#db-%E7%9B%B8%E5%85%B3)|[数据结构与算法](https://github.com/crossoverJie/Java-Interview/blob/master/README.md#%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84%E4%B8%8E%E7%AE%97%E6%B3%95)|[附加技能](https://github.com/crossoverJie/Java-Interview/blob/master/README.md#%E9%99%84%E5%8A%A0%E6%8A%80%E8%83%BD) ----- | --- | --- | ---| ---| ---| ---| ---| --- +[常用集合](https://github.com/crossoverJie/Java-Interview/blob/master/README.md#%E5%B8%B8%E7%94%A8%E9%9B%86%E5%90%88) | [Java 多线程](https://github.com/crossoverJie/Java-Interview/blob/master/README.md#java-%E5%A4%9A%E7%BA%BF%E7%A8%8B) | [JVM](https://github.com/crossoverJie/Java-Interview/blob/master/README.md#jvm) | [分布式相关](https://github.com/crossoverJie/Java-Interview/blob/master/README.md#%E5%88%86%E5%B8%83%E5%BC%8F%E7%9B%B8%E5%85%B3) |[常用框架\第三方组件](https://github.com/crossoverJie/Java-Interview/blob/master/README.md#%E5%B8%B8%E7%94%A8%E6%A1%86%E6%9E%B6%E7%AC%AC%E4%B8%89%E6%96%B9%E7%BB%84%E4%BB%B6)|[架构设计](https://github.com/crossoverJie/Java-Interview/blob/master/README.md#%E6%9E%B6%E6%9E%84%E8%AE%BE%E8%AE%A1)|[DB 相关](https://github.com/crossoverJie/Java-Interview/blob/master/README.md#db-%E7%9B%B8%E5%85%B3)|[数据结构与算法](https://github.com/crossoverJie/Java-Interview/blob/master/README.md#%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84%E4%B8%8E%E7%AE%97%E6%B3%95)|Netty 相关|[附加技能](https://github.com/crossoverJie/Java-Interview/blob/master/README.md#%E9%99%84%E5%8A%A0%E6%8A%80%E8%83%BD) +---- | --- | --- | ---| ---| ---| ---| ---| ---|--- @@ -76,6 +76,9 @@ Java 知识点,继续完善中。 - [两个栈实现队列](https://github.com/crossoverJie/Java-Interview/blob/master/src/main/java/com/crossoverjie/algorithm/TwoStackQueue.java) - [动手实现一个 LRU cache](http://crossoverjie.top/2018/04/07/algorithm/LRU-cache/) +### Netty 相关 +- [SpringBoot 整合长连接心跳机制](https://crossoverjie.top/2018/05/24/netty/Netty(1)TCP-Heartbeat/) + ### 附加技能 - [TCP/IP 协议](https://github.com/crossoverJie/Java-Interview/blob/master/MD/TCP%3AIP.md) From 80f22362f525dcf9c857d9395506fd2af6822775 Mon Sep 17 00:00:00 2001 From: crossoverJie Date: Mon, 28 May 2018 15:07:50 +0800 Subject: [PATCH 19/41] :memo: Writing docs. --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index b4b4df6..3d1965c 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ Java 知识点,继续完善中。 如果对你有帮助请点下 `Star`,有疑问欢迎提 [Issues](https://github.com/crossoverJie/Java-Interview/issues),有好的想法请提 [PR](https://github.com/crossoverJie/Java-Interview/pulls)。 -[常用集合](https://github.com/crossoverJie/Java-Interview/blob/master/README.md#%E5%B8%B8%E7%94%A8%E9%9B%86%E5%90%88) | [Java 多线程](https://github.com/crossoverJie/Java-Interview/blob/master/README.md#java-%E5%A4%9A%E7%BA%BF%E7%A8%8B) | [JVM](https://github.com/crossoverJie/Java-Interview/blob/master/README.md#jvm) | [分布式相关](https://github.com/crossoverJie/Java-Interview/blob/master/README.md#%E5%88%86%E5%B8%83%E5%BC%8F%E7%9B%B8%E5%85%B3) |[常用框架\第三方组件](https://github.com/crossoverJie/Java-Interview/blob/master/README.md#%E5%B8%B8%E7%94%A8%E6%A1%86%E6%9E%B6%E7%AC%AC%E4%B8%89%E6%96%B9%E7%BB%84%E4%BB%B6)|[架构设计](https://github.com/crossoverJie/Java-Interview/blob/master/README.md#%E6%9E%B6%E6%9E%84%E8%AE%BE%E8%AE%A1)|[DB 相关](https://github.com/crossoverJie/Java-Interview/blob/master/README.md#db-%E7%9B%B8%E5%85%B3)|[数据结构与算法](https://github.com/crossoverJie/Java-Interview/blob/master/README.md#%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84%E4%B8%8E%E7%AE%97%E6%B3%95)|Netty 相关|[附加技能](https://github.com/crossoverJie/Java-Interview/blob/master/README.md#%E9%99%84%E5%8A%A0%E6%8A%80%E8%83%BD) +[常用集合](https://github.com/crossoverJie/Java-Interview/blob/master/README.md#%E5%B8%B8%E7%94%A8%E9%9B%86%E5%90%88) | [Java 多线程](https://github.com/crossoverJie/Java-Interview/blob/master/README.md#java-%E5%A4%9A%E7%BA%BF%E7%A8%8B) | [JVM](https://github.com/crossoverJie/Java-Interview/blob/master/README.md#jvm) | [分布式相关](https://github.com/crossoverJie/Java-Interview/blob/master/README.md#%E5%88%86%E5%B8%83%E5%BC%8F%E7%9B%B8%E5%85%B3) |[常用框架\第三方组件](https://github.com/crossoverJie/Java-Interview/blob/master/README.md#%E5%B8%B8%E7%94%A8%E6%A1%86%E6%9E%B6%E7%AC%AC%E4%B8%89%E6%96%B9%E7%BB%84%E4%BB%B6)|[架构设计](https://github.com/crossoverJie/Java-Interview/blob/master/README.md#%E6%9E%B6%E6%9E%84%E8%AE%BE%E8%AE%A1)|[DB 相关](https://github.com/crossoverJie/Java-Interview/blob/master/README.md#db-%E7%9B%B8%E5%85%B3)|[数据结构与算法](https://github.com/crossoverJie/Java-Interview/blob/master/README.md#%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84%E4%B8%8E%E7%AE%97%E6%B3%95)|[Netty 相关](https://github.com/crossoverJie/Java-Interview#netty-%E7%9B%B8%E5%85%B3)|[附加技能](https://github.com/crossoverJie/Java-Interview/blob/master/README.md#%E9%99%84%E5%8A%A0%E6%8A%80%E8%83%BD) ---- | --- | --- | ---| ---| ---| ---| ---| ---|--- From 1907758238fb76964a581014c8c47b69bf79df51 Mon Sep 17 00:00:00 2001 From: crossoverJie Date: Mon, 28 May 2018 15:08:52 +0800 Subject: [PATCH 20/41] :memo: Writing docs. --- README.md | 1 - 1 file changed, 1 deletion(-) diff --git a/README.md b/README.md index 3d1965c..0b0d615 100644 --- a/README.md +++ b/README.md @@ -48,7 +48,6 @@ Java 知识点,继续完善中。 - [Spring Bean 生命周期](https://github.com/crossoverJie/Java-Interview/blob/master/MD/spring/spring-bean-lifecycle.md) - [Spring AOP 的实现原理](https://github.com/crossoverJie/Java-Interview/blob/master/MD/SpringAOP.md) -- 基于 Netty 的长连接心跳 - SpringBoot 启动过程 - Tomcat 类加载机制 From fa314f38f1e5ceceeaa7c76102b3261f13973f5f Mon Sep 17 00:00:00 2001 From: crossoverJie Date: Mon, 4 Jun 2018 15:12:34 +0800 Subject: [PATCH 21/41] :memo: Writing docs. --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 0b0d615..afca72f 100644 --- a/README.md +++ b/README.md @@ -87,4 +87,4 @@ Java 知识点,继续完善中。 > crossoverJie#gmail.com -![](https://ws4.sinaimg.cn/large/006tKfTcly1fochm4as0sj30by0bydgh.jpg) +![](https://ws4.sinaimg.cn/large/006tKfTcly1frz5ynzxk4j30rs0rsaaf.jpg) From 9499cda4d05a82996d9c82d56c0a5644f6257785 Mon Sep 17 00:00:00 2001 From: crossoverJie Date: Mon, 4 Jun 2018 15:25:56 +0800 Subject: [PATCH 22/41] :memo: Writing docs. --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index afca72f..4fbd55a 100644 --- a/README.md +++ b/README.md @@ -87,4 +87,4 @@ Java 知识点,继续完善中。 > crossoverJie#gmail.com -![](https://ws4.sinaimg.cn/large/006tKfTcly1frz5ynzxk4j30rs0rsaaf.jpg) +![](https://ws1.sinaimg.cn/large/006tKfTcly1frz6eaf3s4j308c0au0ss.jpg) \ No newline at end of file From 42aede7b3d3710e5f54e215cd699a45a49049d7c Mon Sep 17 00:00:00 2001 From: crossoverJie Date: Tue, 12 Jun 2018 18:50:57 +0800 Subject: [PATCH 23/41] :white_check_mark: Adding tests.guava cache test --- .../crossoverjie/guava/CacheLoaderTest.java | 82 +++++++++++++++++++ 1 file changed, 82 insertions(+) create mode 100644 src/main/java/com/crossoverjie/guava/CacheLoaderTest.java diff --git a/src/main/java/com/crossoverjie/guava/CacheLoaderTest.java b/src/main/java/com/crossoverjie/guava/CacheLoaderTest.java new file mode 100644 index 0000000..5cf3381 --- /dev/null +++ b/src/main/java/com/crossoverjie/guava/CacheLoaderTest.java @@ -0,0 +1,82 @@ +package com.crossoverjie.guava; + +import com.google.common.cache.CacheBuilder; +import com.google.common.cache.CacheLoader; +import com.google.common.cache.LoadingCache; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.concurrent.ExecutionException; +import java.util.concurrent.LinkedBlockingQueue; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.atomic.AtomicLong; + +/** + * Function: + * + * @author crossoverJie + * Date: 2018/6/12 15:33 + * @since JDK 1.8 + */ +public class CacheLoaderTest { + private final static Logger LOGGER = LoggerFactory.getLogger(CacheLoaderTest.class); + private LoadingCache loadingCache ; + private final static Long KEY = 1L; + + + private final static LinkedBlockingQueue QUEUE = new LinkedBlockingQueue<>(1000); + + + private void init() throws InterruptedException { + loadingCache = CacheBuilder.newBuilder() + .expireAfterWrite(2, TimeUnit.SECONDS) + .build(new CacheLoader() { + @Override + public AtomicLong load(Long key) throws Exception { + return new AtomicLong(0L); + } + }); + + + for (int i = 0; i < 5; i++) { + QUEUE.put(i); + } + } + + private void checkAlert() { + try { + + + TimeUnit.SECONDS.sleep(5); + + LOGGER.info("当前缓存值={}", loadingCache.get(KEY)); + loadingCache.get(KEY).incrementAndGet(); + + } catch (ExecutionException |InterruptedException e ) { + LOGGER.error("Exception", e); + } + } + public static void main(String[] args) throws InterruptedException { + CacheLoaderTest cacheLoaderTest = new CacheLoaderTest() ; + cacheLoaderTest.init(); + + + + while (true) { + + try { + Integer integer = QUEUE.poll(200, TimeUnit.MILLISECONDS); + if (null == integer) { + break; + } + //TimeUnit.SECONDS.sleep(5); + cacheLoaderTest.checkAlert(); + LOGGER.info("job running times={}", integer); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + } + + +} From a59792b04d655acfbc91cf40b8f7c6a468a2293e Mon Sep 17 00:00:00 2001 From: crossoverJie Date: Wed, 13 Jun 2018 00:29:19 +0800 Subject: [PATCH 24/41] :white_check_mark: Adding tests. --- .../crossoverjie/guava/CacheLoaderTest.java | 28 +++++++++++-------- 1 file changed, 17 insertions(+), 11 deletions(-) diff --git a/src/main/java/com/crossoverjie/guava/CacheLoaderTest.java b/src/main/java/com/crossoverjie/guava/CacheLoaderTest.java index 5cf3381..7547aa5 100644 --- a/src/main/java/com/crossoverjie/guava/CacheLoaderTest.java +++ b/src/main/java/com/crossoverjie/guava/CacheLoaderTest.java @@ -3,6 +3,7 @@ import com.google.common.cache.CacheBuilder; import com.google.common.cache.CacheLoader; import com.google.common.cache.LoadingCache; +import com.google.common.collect.Interner; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -20,8 +21,8 @@ */ public class CacheLoaderTest { private final static Logger LOGGER = LoggerFactory.getLogger(CacheLoaderTest.class); - private LoadingCache loadingCache ; - private final static Long KEY = 1L; + private LoadingCache loadingCache ; + private final static Integer KEY = 1000; private final static LinkedBlockingQueue QUEUE = new LinkedBlockingQueue<>(1000); @@ -30,29 +31,34 @@ public class CacheLoaderTest { private void init() throws InterruptedException { loadingCache = CacheBuilder.newBuilder() .expireAfterWrite(2, TimeUnit.SECONDS) - .build(new CacheLoader() { + .maximumSize(3) + + .build(new CacheLoader() { @Override - public AtomicLong load(Long key) throws Exception { - return new AtomicLong(0L); + public AtomicLong load(Integer key) throws Exception { + return new AtomicLong(0); } }); - for (int i = 0; i < 5; i++) { + for (int i = 10; i < 15; i++) { QUEUE.put(i); } } - private void checkAlert() { + private void checkAlert(Integer integer) { try { + loadingCache.put(integer,new AtomicLong(integer)); + + //TimeUnit.SECONDS.sleep(5); - TimeUnit.SECONDS.sleep(5); - LOGGER.info("当前缓存值={}", loadingCache.get(KEY)); + LOGGER.info("当前缓存值={},缓存大小={}", loadingCache.get(KEY),loadingCache.size()); + LOGGER.info("缓存的所有内容={}",loadingCache.asMap().toString()); loadingCache.get(KEY).incrementAndGet(); - } catch (ExecutionException |InterruptedException e ) { + } catch (ExecutionException e ) { LOGGER.error("Exception", e); } } @@ -70,7 +76,7 @@ public static void main(String[] args) throws InterruptedException { break; } //TimeUnit.SECONDS.sleep(5); - cacheLoaderTest.checkAlert(); + cacheLoaderTest.checkAlert(integer); LOGGER.info("job running times={}", integer); } catch (InterruptedException e) { e.printStackTrace(); From 89afa05738e44abdb4db009dc9b94a39981c88ec Mon Sep 17 00:00:00 2001 From: crossoverJie Date: Wed, 13 Jun 2018 10:26:44 +0800 Subject: [PATCH 25/41] :white_check_mark: Adding tests. --- src/main/java/com/crossoverjie/guava/CacheLoaderTest.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/crossoverjie/guava/CacheLoaderTest.java b/src/main/java/com/crossoverjie/guava/CacheLoaderTest.java index 7547aa5..7f9a367 100644 --- a/src/main/java/com/crossoverjie/guava/CacheLoaderTest.java +++ b/src/main/java/com/crossoverjie/guava/CacheLoaderTest.java @@ -31,7 +31,6 @@ public class CacheLoaderTest { private void init() throws InterruptedException { loadingCache = CacheBuilder.newBuilder() .expireAfterWrite(2, TimeUnit.SECONDS) - .maximumSize(3) .build(new CacheLoader() { @Override @@ -49,9 +48,9 @@ public AtomicLong load(Integer key) throws Exception { private void checkAlert(Integer integer) { try { - loadingCache.put(integer,new AtomicLong(integer)); + //loadingCache.put(integer,new AtomicLong(integer)); - //TimeUnit.SECONDS.sleep(5); + TimeUnit.SECONDS.sleep(5); LOGGER.info("当前缓存值={},缓存大小={}", loadingCache.get(KEY),loadingCache.size()); @@ -60,6 +59,8 @@ private void checkAlert(Integer integer) { } catch (ExecutionException e ) { LOGGER.error("Exception", e); + } catch (InterruptedException e) { + e.printStackTrace(); } } public static void main(String[] args) throws InterruptedException { From 9308bad69e7e2d6c5d43ce84f043700362e57427 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E6=8C=AF=E8=8D=9F?= <605951224@qq.com> Date: Wed, 13 Jun 2018 14:43:21 +0900 Subject: [PATCH 26/41] =?UTF-8?q?HashMap=E9=81=8D=E5=8E=86=E7=AC=AC?= =?UTF-8?q?=E4=B8=89=E7=A7=8D=E6=96=B9=E5=BC=8FforEach=E6=B7=BB=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit HashMap遍历第三种方式forEach添加 --- MD/HashMap.md | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/MD/HashMap.md b/MD/HashMap.md index 46fcfdf..2786def 100644 --- a/MD/HashMap.md +++ b/MD/HashMap.md @@ -42,9 +42,15 @@ Iterator iterator = map.keySet().iterator(); } ``` +```java +map.forEach((key,value)->{ + System.out.println("key=" + key + " value=" + value); +}); +``` + **强烈建议**使用第一种 EntrySet 进行遍历。 -第一种可以把 key value 同时取出,第二种还得需要通过 key 取一次 value,效率较低。 +第一种可以把 key value 同时取出,第二种还得需要通过 key 取一次 value,效率较低, 第三种通过外层遍历table,内层遍历链表或红黑树。 ## notice From 59924d4a11106b011e7287c9c9ce9068d338a08a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E6=8C=AF=E8=8D=9F?= <605951224@qq.com> Date: Wed, 13 Jun 2018 18:13:00 +0900 Subject: [PATCH 27/41] =?UTF-8?q?=E6=B7=BB=E5=8A=A0JDK1.8=E8=AF=B4?= =?UTF-8?q?=E6=98=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 添加JDK1.8说明 --- MD/HashMap.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MD/HashMap.md b/MD/HashMap.md index 2786def..74014e6 100644 --- a/MD/HashMap.md +++ b/MD/HashMap.md @@ -50,7 +50,7 @@ map.forEach((key,value)->{ **强烈建议**使用第一种 EntrySet 进行遍历。 -第一种可以把 key value 同时取出,第二种还得需要通过 key 取一次 value,效率较低, 第三种通过外层遍历table,内层遍历链表或红黑树。 +第一种可以把 key value 同时取出,第二种还得需要通过 key 取一次 value,效率较低, 第三种需要JDK1.8以上,通过外层遍历table,内层遍历链表或红黑树。 ## notice From c7fc93df8c85f1d6904853cffeddc0c65242ad3f Mon Sep 17 00:00:00 2001 From: crossoverJie Date: Thu, 14 Jun 2018 00:05:36 +0800 Subject: [PATCH 28/41] :bulb: Documenting source code. --- MD/HashMap.md | 2 +- src/main/java/com/crossoverjie/basic/HashMapTest.java | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/MD/HashMap.md b/MD/HashMap.md index 74014e6..7146e6b 100644 --- a/MD/HashMap.md +++ b/MD/HashMap.md @@ -50,7 +50,7 @@ map.forEach((key,value)->{ **强烈建议**使用第一种 EntrySet 进行遍历。 -第一种可以把 key value 同时取出,第二种还得需要通过 key 取一次 value,效率较低, 第三种需要JDK1.8以上,通过外层遍历table,内层遍历链表或红黑树。 +第一种可以把 key value 同时取出,第二种还得需要通过 key 取一次 value,效率较低, 第三种需要 `JDK1.8` 以上,通过外层遍历 table,内层遍历链表或红黑树。 ## notice diff --git a/src/main/java/com/crossoverjie/basic/HashMapTest.java b/src/main/java/com/crossoverjie/basic/HashMapTest.java index 8e9edef..011910b 100644 --- a/src/main/java/com/crossoverjie/basic/HashMapTest.java +++ b/src/main/java/com/crossoverjie/basic/HashMapTest.java @@ -33,5 +33,10 @@ public static void main(String[] args) { System.out.println("key=" + key + " value=" + map.get(key)); } + + System.out.println("============="); + map.forEach((key, value) -> { + System.out.println("key=" + key + " value=" + map.get(key)); + }); } } From ace190a2a525dc5dd930cbacc1f7037dd6f6bd6c Mon Sep 17 00:00:00 2001 From: crossoverJie Date: Thu, 14 Jun 2018 00:11:53 +0800 Subject: [PATCH 29/41] :memo: Writing docs. --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 4fbd55a..1ccb343 100644 --- a/README.md +++ b/README.md @@ -48,6 +48,7 @@ Java 知识点,继续完善中。 - [Spring Bean 生命周期](https://github.com/crossoverJie/Java-Interview/blob/master/MD/spring/spring-bean-lifecycle.md) - [Spring AOP 的实现原理](https://github.com/crossoverJie/Java-Interview/blob/master/MD/SpringAOP.md) +- [Guava 源码分析(Cache 原理)](https://crossoverjie.top/2018/06/13/guava/guava-cache/) - SpringBoot 启动过程 - Tomcat 类加载机制 @@ -87,4 +88,4 @@ Java 知识点,继续完善中。 > crossoverJie#gmail.com -![](https://ws1.sinaimg.cn/large/006tKfTcly1frz6eaf3s4j308c0au0ss.jpg) \ No newline at end of file +![](https://ws2.sinaimg.cn/large/006tKfTcly1fsa01u7ro1j30gs0howfq.jpg) \ No newline at end of file From 0e99a087a4e1fe329f2f044811c19aca9917d7df Mon Sep 17 00:00:00 2001 From: crossoverJie Date: Thu, 14 Jun 2018 00:20:14 +0800 Subject: [PATCH 30/41] :memo: Writing docs. --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 1ccb343..9876ddd 100644 --- a/README.md +++ b/README.md @@ -6,8 +6,8 @@ Java 知识点,继续完善中。 如果对你有帮助请点下 `Star`,有疑问欢迎提 [Issues](https://github.com/crossoverJie/Java-Interview/issues),有好的想法请提 [PR](https://github.com/crossoverJie/Java-Interview/pulls)。 -[常用集合](https://github.com/crossoverJie/Java-Interview/blob/master/README.md#%E5%B8%B8%E7%94%A8%E9%9B%86%E5%90%88) | [Java 多线程](https://github.com/crossoverJie/Java-Interview/blob/master/README.md#java-%E5%A4%9A%E7%BA%BF%E7%A8%8B) | [JVM](https://github.com/crossoverJie/Java-Interview/blob/master/README.md#jvm) | [分布式相关](https://github.com/crossoverJie/Java-Interview/blob/master/README.md#%E5%88%86%E5%B8%83%E5%BC%8F%E7%9B%B8%E5%85%B3) |[常用框架\第三方组件](https://github.com/crossoverJie/Java-Interview/blob/master/README.md#%E5%B8%B8%E7%94%A8%E6%A1%86%E6%9E%B6%E7%AC%AC%E4%B8%89%E6%96%B9%E7%BB%84%E4%BB%B6)|[架构设计](https://github.com/crossoverJie/Java-Interview/blob/master/README.md#%E6%9E%B6%E6%9E%84%E8%AE%BE%E8%AE%A1)|[DB 相关](https://github.com/crossoverJie/Java-Interview/blob/master/README.md#db-%E7%9B%B8%E5%85%B3)|[数据结构与算法](https://github.com/crossoverJie/Java-Interview/blob/master/README.md#%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84%E4%B8%8E%E7%AE%97%E6%B3%95)|[Netty 相关](https://github.com/crossoverJie/Java-Interview#netty-%E7%9B%B8%E5%85%B3)|[附加技能](https://github.com/crossoverJie/Java-Interview/blob/master/README.md#%E9%99%84%E5%8A%A0%E6%8A%80%E8%83%BD) ----- | --- | --- | ---| ---| ---| ---| ---| ---|--- +[常用集合](https://github.com/crossoverJie/Java-Interview/blob/master/README.md#%E5%B8%B8%E7%94%A8%E9%9B%86%E5%90%88) | [Java 多线程](https://github.com/crossoverJie/Java-Interview/blob/master/README.md#java-%E5%A4%9A%E7%BA%BF%E7%A8%8B) | [JVM](https://github.com/crossoverJie/Java-Interview/blob/master/README.md#jvm) | [分布式相关](https://github.com/crossoverJie/Java-Interview/blob/master/README.md#%E5%88%86%E5%B8%83%E5%BC%8F%E7%9B%B8%E5%85%B3) |[常用框架\第三方组件](https://github.com/crossoverJie/Java-Interview/blob/master/README.md#%E5%B8%B8%E7%94%A8%E6%A1%86%E6%9E%B6%E7%AC%AC%E4%B8%89%E6%96%B9%E7%BB%84%E4%BB%B6)|[架构设计](https://github.com/crossoverJie/Java-Interview/blob/master/README.md#%E6%9E%B6%E6%9E%84%E8%AE%BE%E8%AE%A1)|[DB 相关](https://github.com/crossoverJie/Java-Interview/blob/master/README.md#db-%E7%9B%B8%E5%85%B3)|[数据结构与算法](https://github.com/crossoverJie/Java-Interview/blob/master/README.md#%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84%E4%B8%8E%E7%AE%97%E6%B3%95)|[Netty 相关](https://github.com/crossoverJie/Java-Interview#netty-%E7%9B%B8%E5%85%B3)|[附加技能](https://github.com/crossoverJie/Java-Interview/blob/master/README.md#%E9%99%84%E5%8A%A0%E6%8A%80%E8%83%BD)|[联系作者](https://github.com/crossoverJie/Java-Interview#%E8%81%94%E7%B3%BB%E4%BD%9C%E8%80%85) +---- | --- | --- | ---| ---| ---| ---| ---| ---|---|--- From c34aa6b90ad1058eef9bceafb925d16338d66b54 Mon Sep 17 00:00:00 2001 From: crossoverJie Date: Thu, 14 Jun 2018 00:27:39 +0800 Subject: [PATCH 31/41] :memo: Writing docs. --- .github/ISSUE_TEMPLATE | 13 +++++++++++++ .github/PULL_REQUEST_TEMPLATE | 16 ++++++++++++++++ 2 files changed, 29 insertions(+) create mode 100644 .github/ISSUE_TEMPLATE create mode 100644 .github/PULL_REQUEST_TEMPLATE diff --git a/.github/ISSUE_TEMPLATE b/.github/ISSUE_TEMPLATE new file mode 100644 index 0000000..beaefa8 --- /dev/null +++ b/.github/ISSUE_TEMPLATE @@ -0,0 +1,13 @@ +**在提交issue之前请回答以下问题,谢谢!** + +> 建议首先查看是否已经有类似的 Issues + +### 你使用的是哪个版本 + +### 预期结果 + +### 实际结果 + +### 重现结果的步骤 + +### 其他相关信息 \ No newline at end of file diff --git a/.github/PULL_REQUEST_TEMPLATE b/.github/PULL_REQUEST_TEMPLATE new file mode 100644 index 0000000..ba68d9d --- /dev/null +++ b/.github/PULL_REQUEST_TEMPLATE @@ -0,0 +1,16 @@ +如果是文字类 PR,请按照 (中文排版指北)[https://github.com/sparanoid/chinese-copywriting-guidelines] 进行编写。 + +**What kind of change does this PR introduce?** (check at least one) + +- [ ] Bugfix +- [ ] Feature +- [ ] Code style update +- [ ] Refactor +- [ ] Build-related changes +- [ ] Other, please describe: + + +**The description of the PR:** + + +**Other information:** \ No newline at end of file From 26bc43be4a8dd34a8178a722f68fa741c83edca5 Mon Sep 17 00:00:00 2001 From: crossoverJie Date: Thu, 14 Jun 2018 00:29:28 +0800 Subject: [PATCH 32/41] :memo: Writing docs. --- .github/ISSUE_TEMPLATE | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/ISSUE_TEMPLATE b/.github/ISSUE_TEMPLATE index beaefa8..f556da0 100644 --- a/.github/ISSUE_TEMPLATE +++ b/.github/ISSUE_TEMPLATE @@ -1,6 +1,6 @@ **在提交issue之前请回答以下问题,谢谢!** -> 建议首先查看是否已经有类似的 Issues +> 建议首先查看是否已经有类似的 Issues (提交时可删除该提示) ### 你使用的是哪个版本 From a6828ae53b9d0995031ffbb04117147e630a746d Mon Sep 17 00:00:00 2001 From: crossoverJie Date: Thu, 14 Jun 2018 00:35:09 +0800 Subject: [PATCH 33/41] :memo: Writing docs. --- .github/PULL_REQUEST_TEMPLATE | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/PULL_REQUEST_TEMPLATE b/.github/PULL_REQUEST_TEMPLATE index ba68d9d..28a3805 100644 --- a/.github/PULL_REQUEST_TEMPLATE +++ b/.github/PULL_REQUEST_TEMPLATE @@ -1,4 +1,4 @@ -如果是文字类 PR,请按照 (中文排版指北)[https://github.com/sparanoid/chinese-copywriting-guidelines] 进行编写。 +如果是文字类 PR,请按照 [中文排版指北](https://github.com/sparanoid/chinese-copywriting-guidelines) 进行编写(提交时可删除该提示)。 **What kind of change does this PR introduce?** (check at least one) From f26eb8913a91167b3f578f275140318f24f41efe Mon Sep 17 00:00:00 2001 From: crossoverJie Date: Fri, 22 Jun 2018 11:40:19 +0800 Subject: [PATCH 34/41] :memo: Writing docs. --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 9876ddd..1b508e2 100644 --- a/README.md +++ b/README.md @@ -82,6 +82,7 @@ Java 知识点,继续完善中。 ### 附加技能 - [TCP/IP 协议](https://github.com/crossoverJie/Java-Interview/blob/master/MD/TCP%3AIP.md) +- [一个学渣的阿里之路](https://crossoverjie.top/2018/06/21/personal/Interview-experience/) ### 联系作者 From 75482a3ea95ac377221554600bdb733a3ad2920d Mon Sep 17 00:00:00 2001 From: crossoverJie Date: Fri, 22 Jun 2018 22:25:13 +0800 Subject: [PATCH 35/41] =?UTF-8?q?:pencil2:=20Fixing=20typos.=E6=B0=B8?= =?UTF-8?q?=E4=B9=85=E4=BB=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- MD/MemoryAllocation.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MD/MemoryAllocation.md b/MD/MemoryAllocation.md index dfd8f0c..ff9080e 100644 --- a/MD/MemoryAllocation.md +++ b/MD/MemoryAllocation.md @@ -28,7 +28,7 @@ ## 方法区 方法区主要用于存放已经被虚拟机加载的类信息,如`常量,静态变量`。 -这块区域也被称为`老年代`。 +这块区域也被称为`永久代`。 ### 运行时常量池 From 2629c767feaf6e03609066b9c4dc3b9a43575df3 Mon Sep 17 00:00:00 2001 From: crossoverJie Date: Tue, 26 Jun 2018 15:19:14 +0800 Subject: [PATCH 36/41] :truck: Moving or renaming files. --- MD/{TCP:IP.md => TCP-IP.md} | 0 README.md | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) rename MD/{TCP:IP.md => TCP-IP.md} (100%) diff --git a/MD/TCP:IP.md b/MD/TCP-IP.md similarity index 100% rename from MD/TCP:IP.md rename to MD/TCP-IP.md diff --git a/README.md b/README.md index 1b508e2..c89ff7b 100644 --- a/README.md +++ b/README.md @@ -81,7 +81,7 @@ Java 知识点,继续完善中。 ### 附加技能 -- [TCP/IP 协议](https://github.com/crossoverJie/Java-Interview/blob/master/MD/TCP%3AIP.md) +- [TCP/IP 协议](https://github.com/crossoverJie/Java-Interview/blob/master/MD/TCP-IP.md) - [一个学渣的阿里之路](https://crossoverjie.top/2018/06/21/personal/Interview-experience/) From a61f88554ccfdff4c557c411c0d7fe958af5d848 Mon Sep 17 00:00:00 2001 From: crossoverJie Date: Mon, 2 Jul 2018 22:01:02 +0800 Subject: [PATCH 37/41] :construction_worker: Adding CI build system. --- .travis.yml | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 .travis.yml diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000..9396aad --- /dev/null +++ b/.travis.yml @@ -0,0 +1,9 @@ +language: java + +install: mvn install -DskipTests=true -Dmaven.javadoc.skip=true +script: mvn -DskipTests=true clean install + + +branches: + only: + - master \ No newline at end of file From 907420217f6810fc0e803e90999f6a73aa8a4486 Mon Sep 17 00:00:00 2001 From: crossoverJie Date: Mon, 2 Jul 2018 22:22:19 +0800 Subject: [PATCH 38/41] :busts_in_silhouette: Add contributor(s). --- README.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/README.md b/README.md index c89ff7b..fdcb6e6 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,9 @@ +[![Build Status](https://travis-ci.org/crossoverJie/Java-Interview.svg?branch=master)](https://travis-ci.org/crossoverJie/Java-Interview) +[![QQ群](https://img.shields.io/badge/QQ%E7%BE%A4-787381170-yellowgreen.svg)](https://jq.qq.com/?_wv=1027&k=5HPYvQk) + +[qq0groupsvg]: https://img.shields.io/badge/QQ%E7%BE%A4-787381170-yellowgreen.svg +[qq0group]: https://jq.qq.com/?_wv=1027&k=5HPYvQk + Java 知识点,继续完善中。 > 多数是一些 Java 基础知识、底层原理、算法详解。也有上层应用设计,其中不乏一些大厂面试真题。 From f8b96f900b64434092cf4e6710e8c4d00b07a85a Mon Sep 17 00:00:00 2001 From: crossoverJie Date: Thu, 5 Jul 2018 20:06:58 +0800 Subject: [PATCH 39/41] :memo: Writing docs. --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index fdcb6e6..bc2b5bb 100644 --- a/README.md +++ b/README.md @@ -84,6 +84,7 @@ Java 知识点,继续完善中。 ### Netty 相关 - [SpringBoot 整合长连接心跳机制](https://crossoverjie.top/2018/05/24/netty/Netty(1)TCP-Heartbeat/) +- [从线程模型的角度看 Netty 为什么是高性能的?](https://crossoverjie.top/2018/07/04/netty/Netty(2)Thread-model/) ### 附加技能 From 9651f9a6c70d8cf599ffe86e82e5944a2872dc7b Mon Sep 17 00:00:00 2001 From: crossoverJie Date: Fri, 6 Jul 2018 01:30:01 +0800 Subject: [PATCH 40/41] :memo: Writing docs. --- MD/newObject.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MD/newObject.md b/MD/newObject.md index 50c80d3..6c091b4 100644 --- a/MD/newObject.md +++ b/MD/newObject.md @@ -46,7 +46,7 @@ ### Eden 区分配 简单的来说对象都是在堆内存中分配的,往细一点看则是优先在 `Eden` 区分配。 -这里就涉及到堆内存的划分了,为了方便垃圾回收,JVM 将对内存分为新生代和老年代。 +这里就涉及到堆内存的划分了,为了方便垃圾回收,JVM 将堆内存分为新生代和老年代。 而新生代中又会划分为 `Eden` 区,`from Survivor、to Survivor` 区。 From 2448742b3cd0f9659c189bce54f733b053e0c282 Mon Sep 17 00:00:00 2001 From: crossoverJie Date: Fri, 6 Jul 2018 01:33:34 +0800 Subject: [PATCH 41/41] :memo: Writing docs. --- MD/Thread-common-problem.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MD/Thread-common-problem.md b/MD/Thread-common-problem.md index a8a0734..1669307 100644 --- a/MD/Thread-common-problem.md +++ b/MD/Thread-common-problem.md @@ -4,7 +4,7 @@ 多线程并不一定是要在多核处理器才支持的,就算是单核也是可以支持多线程的。 CPU 通过给每个线程分配一定的时间片,由于时间非常短通常是几十毫秒,所以 CPU 可以不停的切换线程执行任务从而达到了多线程的效果。 -但是由于在线程切换的时候需要保存本次执行的信息([详见](https://github.com/crossoverJie/Java-Interview/blob/master/MemoryAllocation.md#%E7%A8%8B%E5%BA%8F%E8%AE%A1%E6%95%B0%E5%99%A8)),在该线程被 CPU 剥夺时间片后又再次运行恢复上次所保存的信息的过程就成为上下文切换。 +但是由于在线程切换的时候需要保存本次执行的信息([详见](https://github.com/crossoverJie/Java-Interview/blob/master/MD/MemoryAllocation.md#%E7%A8%8B%E5%BA%8F%E8%AE%A1%E6%95%B0%E5%99%A8)),在该线程被 CPU 剥夺时间片后又再次运行恢复上次所保存的信息的过程就成为上下文切换。 > 上下文切换是非常耗效率的。