From cd88d7c0a6921d9083071f277e83cd3159e22ad1 Mon Sep 17 00:00:00 2001 From: SnailClimb Date: Mon, 17 Jun 2019 18:03:13 +0800 Subject: [PATCH] Update:optimize content --- README.md | 8 ++-- docs/java/Multithread/AQS.md | 15 ++++--- docs/java/Multithread/Atomic.md | 39 ++++++++++++++++--- ...71\345\231\250\346\200\273\347\273\223.md" | 13 ++++++- docs/java/What's New in JDK8/Java8Tutorial.md | 13 ++++++- ...31\347\250\213\346\216\250\350\215\220.md" | 2 - ...45\345\205\267\346\200\273\347\273\223.md" | 2 + ...03\345\234\276\345\233\236\346\224\266.md" | 11 +++++- ...05\345\255\230\345\214\272\345\237\237.md" | 25 +++++++++--- ...73\345\212\240\350\275\275\345\231\250.md" | 2 + ...40\350\275\275\350\277\207\347\250\213.md" | 4 +- ...07\344\273\266\347\273\223\346\236\204.md" | 6 +-- 12 files changed, 110 insertions(+), 30 deletions(-) diff --git a/README.md b/README.md index 8a7b83fcc30..e56b6c6c51b 100644 --- a/README.md +++ b/README.md @@ -18,9 +18,11 @@

- - + 阿里云618 2折起! + + 零成本开启敏捷研发 +

推荐使用 https://snailclimb.top/JavaGuide/ 在线阅读(访问速度慢的话,请使用 https://snailclimb.gitee.io/javaguide ),在线阅读内容本仓库同步一致。这种方式阅读的优势在于:有侧边栏阅读体验更好,Gitee pages 的访问速度相对来说也比较快。 @@ -71,7 +73,7 @@ ### 容器 -* [常见面试题](docs/java/collection/Java集合框架常见面试题.md) +* [Java容器常见面试题/知识点总结](docs/java/collection/Java集合框架常见面试题.md) * [ArrayList 源码学习](docs/java/collection/ArrayList.md) * [LinkedList 源码学习](docs/java/collection/LinkedList.md) * [HashMap(JDK1.8)源码学习](docs/java/collection/HashMap.md) diff --git a/docs/java/Multithread/AQS.md b/docs/java/Multithread/AQS.md index a62f6d27a27..d1fe5df940c 100644 --- a/docs/java/Multithread/AQS.md +++ b/docs/java/Multithread/AQS.md @@ -1,5 +1,5 @@ -**目录:** +点击关注[公众号](#公众号)及时获取笔主最新更新文章,并可免费领取本文档配套的《Java面试突击》以及Java工程师必备学习资源。 - [1 AQS 简单介绍](#1-aqs-简单介绍) @@ -23,10 +23,6 @@ > 常见问题:AQS原理?;CountDownLatch和CyclicBarrier了解吗,两者的区别是什么?用过Semaphore吗? -**本节思维导图:** - -![并发编程面试必备:AQS 原理以及 AQS 同步组件总结](http://my-blog-to-use.oss-cn-beijing.aliyuncs.com/18-10-31/61115865.jpg) - ### 1 AQS 简单介绍 AQS的全称为(AbstractQueuedSynchronizer),这个类在java.util.concurrent.locks包下面。 @@ -471,3 +467,12 @@ CyclicBarrier和CountDownLatch的区别这部分内容参考了如下两篇文 ReentrantLock 和 synchronized 的区别在上面已经讲过了这里就不多做讲解。另外,需要注意的是:读写锁 ReentrantReadWriteLock 可以保证多个线程可以同时读,所以在读操作远大于写操作的时候,读写锁就非常有用了。 +## 公众号 + +如果大家想要实时关注我更新的文章以及分享的干货的话,可以关注我的公众号。 + +**《Java面试突击》:** 由本文档衍生的专为面试而生的《Java面试突击》V2.0 PDF 版本[公众号](#公众号)后台回复 **"面试突击"** 即可免费领取! + +**Java工程师必备学习资源:** 一些Java工程师常用学习资源公众号后台回复关键字 **“1”** 即可免费无套路获取。 + +![我的公众号](https://my-blog-to-use.oss-cn-beijing.aliyuncs.com/2019-6/167598cd2e17b8ec.png) \ No newline at end of file diff --git a/docs/java/Multithread/Atomic.md b/docs/java/Multithread/Atomic.md index 1afb5f56511..05f4f2c9199 100644 --- a/docs/java/Multithread/Atomic.md +++ b/docs/java/Multithread/Atomic.md @@ -1,8 +1,28 @@ -> 个人觉得这一节掌握基本的使用即可! +点击关注[公众号](#公众号)及时获取笔主最新更新文章,并可免费领取本文档配套的《Java面试突击》以及Java工程师必备学习资源。 -**本节思维导图:** +> 个人觉得这一节掌握基本的使用即可! -![](https://user-gold-cdn.xitu.io/2018/10/30/166c58b785368234?w=1200&h=657&f=png&s=49615) + + +- [1 Atomic 原子类介绍](#1-atomic-原子类介绍) +- [2 基本类型原子类](#2-基本类型原子类) + - [2.1 基本类型原子类介绍](#21-基本类型原子类介绍) + - [2.2 AtomicInteger 常见方法使用](#22-atomicinteger-常见方法使用) + - [2.3 基本数据类型原子类的优势](#23-基本数据类型原子类的优势) + - [2.4 AtomicInteger 线程安全原理简单分析](#24-atomicinteger-线程安全原理简单分析) +- [3 数组类型原子类](#3-数组类型原子类) + - [3.1 数组类型原子类介绍](#31-数组类型原子类介绍) + - [3.2 AtomicIntegerArray 常见方法使用](#32-atomicintegerarray-常见方法使用) +- [4 引用类型原子类](#4-引用类型原子类) + - [4.1 引用类型原子类介绍](#41--引用类型原子类介绍) + - [4.2 AtomicReference 类使用示例](#42-atomicreference-类使用示例) + - [4.3 AtomicStampedReference 类使用示例](#43-atomicstampedreference-类使用示例) + - [4.4 AtomicMarkableReference 类使用示例](#44-atomicmarkablereference-类使用示例) +- [5 对象的属性修改类型原子类](#5-对象的属性修改类型原子类) + - [5.1 对象的属性修改类型原子类介绍](#51-对象的属性修改类型原子类介绍) + - [5.2 AtomicIntegerFieldUpdater 类使用示例](#52-atomicintegerfieldupdater-类使用示例) + + ### 1 Atomic 原子类介绍 @@ -12,7 +32,7 @@ Atomic 翻译成中文是原子的意思。在化学上,我们知道原子是 并发包 `java.util.concurrent` 的原子类都存放在`java.util.concurrent.atomic`下,如下图所示。 -![ JUC 原子类概览](https://user-gold-cdn.xitu.io/2018/10/30/166c4ac08d4c5547?w=317&h=367&f=png&s=13267) +![JUC原子类概览](https://my-blog-to-use.oss-cn-beijing.aliyuncs.com/2019-6/JUC原子类概览.png) 根据操作的数据类型,可以将JUC包中的原子类分为4类 @@ -136,7 +156,7 @@ Thread-0 ------ currentValue=1, finalValue=2, compareAndSet Result=true 上面三个类提供的方法几乎相同,所以我们这里以 AtomicInteger 为例子来介绍。 **AtomicInteger 类常用方法** - + ```java public final int get() //获取当前的值 public final int getAndSet(int newValue)//获取当前的值,并设置新的值 @@ -525,3 +545,12 @@ class User { 23 ``` +## 公众号 + +如果大家想要实时关注我更新的文章以及分享的干货的话,可以关注我的公众号。 + +**《Java面试突击》:** 由本文档衍生的专为面试而生的《Java面试突击》V2.0 PDF 版本[公众号](#公众号)后台回复 **"面试突击"** 即可免费领取! + +**Java工程师必备学习资源:** 一些Java工程师常用学习资源公众号后台回复关键字 **“1”** 即可免费无套路获取。 + +![我的公众号](https://my-blog-to-use.oss-cn-beijing.aliyuncs.com/2019-6/167598cd2e17b8ec.png) \ No newline at end of file diff --git "a/docs/java/Multithread/\345\271\266\345\217\221\345\256\271\345\231\250\346\200\273\347\273\223.md" "b/docs/java/Multithread/\345\271\266\345\217\221\345\256\271\345\231\250\346\200\273\347\273\223.md" index 22873b3d9fd..645b279b121 100644 --- "a/docs/java/Multithread/\345\271\266\345\217\221\345\256\271\345\231\250\346\200\273\347\273\223.md" +++ "b/docs/java/Multithread/\345\271\266\345\217\221\345\256\271\345\231\250\346\200\273\347\273\223.md" @@ -1,3 +1,4 @@ +点击关注[公众号](#公众号)及时获取笔主最新更新文章,并可免费领取本文档配套的《Java面试突击》以及Java工程师必备学习资源。 @@ -214,10 +215,18 @@ PriorityBlockingQueue 并发控制采用的是 **ReentrantLock**,队列为无 使用跳表实现Map 和使用哈希算法实现Map的另外一个不同之处是:哈希并不会保存元素的顺序,而跳表内所有的元素都是排序的。因此在对跳表进行遍历时,你会得到一个有序的结果。所以,如果你的应用需要有序性,那么跳表就是你不二的选择。JDK 中实现这一数据结构的类是ConcurrentSkipListMap。 - - ## 七 参考 - 《实战Java高并发程序设计》 - https://javadoop.com/post/java-concurrent-queue - https://juejin.im/post/5aeebd02518825672f19c546 + +## 公众号 + +如果大家想要实时关注我更新的文章以及分享的干货的话,可以关注我的公众号。 + +**《Java面试突击》:** 由本文档衍生的专为面试而生的《Java面试突击》V2.0 PDF 版本[公众号](#公众号)后台回复 **"面试突击"** 即可免费领取! + +**Java工程师必备学习资源:** 一些Java工程师常用学习资源公众号后台回复关键字 **“1”** 即可免费无套路获取。 + +![我的公众号](https://my-blog-to-use.oss-cn-beijing.aliyuncs.com/2019-6/167598cd2e17b8ec.png) \ No newline at end of file diff --git a/docs/java/What's New in JDK8/Java8Tutorial.md b/docs/java/What's New in JDK8/Java8Tutorial.md index 8bf59a6a686..9b473ea7d03 100644 --- a/docs/java/What's New in JDK8/Java8Tutorial.md +++ b/docs/java/What's New in JDK8/Java8Tutorial.md @@ -1,3 +1,5 @@ +点击关注[公众号](#公众号)及时获取笔主最新更新文章,并可免费领取本文档配套的《Java面试突击》以及Java工程师必备学习资源。 + 随着 Java 8 的普及度越来越高,很多人都提到面试中关于Java 8 也是非常常问的知识点。应各位要求和需要,我打算对这部分知识做一个总结。本来准备自己总结的,后面看到Github 上有一个相关的仓库,地址: [https://github.com/winterbe/java8-tutorial](https://github.com/winterbe/java8-tutorial)。这个仓库是英文的,我对其进行了翻译并添加和修改了部分内容,下面是正文了。 @@ -916,9 +918,16 @@ System.out.println(hints2.length); // 2 @interface MyAnnotation {} ``` - - ## Where to go from here? 关于Java 8的新特性就写到这了,肯定还有更多的特性等待发掘。JDK 1.8里还有很多很有用的东西,比如`Arrays.parallelSort`, `StampedLock`和`CompletableFuture`等等。 +## 公众号 + +如果大家想要实时关注我更新的文章以及分享的干货的话,可以关注我的公众号。 + +**《Java面试突击》:** 由本文档衍生的专为面试而生的《Java面试突击》V2.0 PDF 版本[公众号](#公众号)后台回复 **"Java面试突击"** 即可免费领取! + +**Java工程师必备学习资源:** 一些Java工程师常用学习资源[公众号](#公众号)后台回复关键字 **“1”** 即可免费无套路获取。 + +![我的公众号](https://user-gold-cdn.xitu.io/2018/11/28/167598cd2e17b8ec?w=258&h=258&f=jpeg&s=27334) \ No newline at end of file diff --git "a/docs/java/What's New in JDK8/Java8\346\225\231\347\250\213\346\216\250\350\215\220.md" "b/docs/java/What's New in JDK8/Java8\346\225\231\347\250\213\346\216\250\350\215\220.md" index 43e4539ccac..7de58352a5f 100644 --- "a/docs/java/What's New in JDK8/Java8\346\225\231\347\250\213\346\216\250\350\215\220.md" +++ "b/docs/java/What's New in JDK8/Java8\346\225\231\347\250\213\346\216\250\350\215\220.md" @@ -1,5 +1,3 @@ - - ### 书籍 - **《Java8 In Action》** diff --git "a/docs/java/jvm/JDK\347\233\221\346\216\247\345\222\214\346\225\205\351\232\234\345\244\204\347\220\206\345\267\245\345\205\267\346\200\273\347\273\223.md" "b/docs/java/jvm/JDK\347\233\221\346\216\247\345\222\214\346\225\205\351\232\234\345\244\204\347\220\206\345\267\245\345\205\267\346\200\273\347\273\223.md" index b0bf10fb5d9..ad0a6545287 100644 --- "a/docs/java/jvm/JDK\347\233\221\346\216\247\345\222\214\346\225\205\351\232\234\345\244\204\347\220\206\345\267\245\345\205\267\346\200\273\347\273\223.md" +++ "b/docs/java/jvm/JDK\347\233\221\346\216\247\345\222\214\346\225\205\351\232\234\345\244\204\347\220\206\345\267\245\345\205\267\346\200\273\347\273\223.md" @@ -1,3 +1,5 @@ +点击关注[公众号](#公众号)及时获取笔主最新更新文章,并可免费领取本文档配套的《Java面试突击》以及Java工程师必备学习资源。 + - [JDK 监控和故障处理工具总结](#jdk-监控和故障处理工具总结) diff --git "a/docs/java/jvm/JVM\345\236\203\345\234\276\345\233\236\346\224\266.md" "b/docs/java/jvm/JVM\345\236\203\345\234\276\345\233\236\346\224\266.md" index b73c5412667..7cd573d6022 100644 --- "a/docs/java/jvm/JVM\345\236\203\345\234\276\345\233\236\346\224\266.md" +++ "b/docs/java/jvm/JVM\345\236\203\345\234\276\345\233\236\346\224\266.md" @@ -1,3 +1,4 @@ +点击关注[公众号](#公众号)及时获取笔主最新更新文章,并可免费领取本文档配套的《Java面试突击》以及Java工程师必备学习资源。 @@ -252,7 +253,7 @@ JDK1.2 以后,Java 对引用的概念进行了扩充,将引用分为强引 ### 3.1 标记-清除算法 -算法分为“标记”和“清除”阶段:首先标记出所有需要回收的对象,在标记完成后统一回收所有被标记的对象。它是最基础的收集算法,效率也很高,但是会带来两个明显的问题: +该算法分为“标记”和“清除”阶段:首先标记出所有需要回收的对象,在标记完成后统一回收所有被标记的对象。它是最基础的收集算法,后续的算法都是对其不足进行改进得到。这种垃圾收集算法会带来两个明显的问题: 1. **效率问题** 2. **空间问题(标记清除后会产生大量不连续的碎片)** @@ -391,7 +392,15 @@ G1 收集器的运作大致分为以下几个步骤: - https://my.oschina.net/hosee/blog/644618 - +## 公众号 +如果大家想要实时关注我更新的文章以及分享的干货的话,可以关注我的公众号。 + +**《Java面试突击》:** 由本文档衍生的专为面试而生的《Java面试突击》V2.0 PDF 版本[公众号](#公众号)后台回复 **"Java面试突击"** 即可免费领取! + +**Java工程师必备学习资源:** 一些Java工程师常用学习资源[公众号](#公众号)后台回复关键字 **“1”** 即可免费无套路获取。 + +![我的公众号](https://user-gold-cdn.xitu.io/2018/11/28/167598cd2e17b8ec?w=258&h=258&f=jpeg&s=27334) diff --git "a/docs/java/jvm/Java\345\206\205\345\255\230\345\214\272\345\237\237.md" "b/docs/java/jvm/Java\345\206\205\345\255\230\345\214\272\345\237\237.md" index 6b023f9a3ad..3bbb8652e6c 100644 --- "a/docs/java/jvm/Java\345\206\205\345\255\230\345\214\272\345\237\237.md" +++ "b/docs/java/jvm/Java\345\206\205\345\255\230\345\214\272\345\237\237.md" @@ -1,3 +1,5 @@ +点击关注[公众号](#公众号)及时获取笔主最新更新文章,并可免费领取本文档配套的《Java面试突击》以及Java工程师必备学习资源。 + - [Java 内存区域详解](#java-内存区域详解) @@ -203,7 +205,7 @@ JDK1.4 中新加入的 **NIO(New Input/Output) 类**,引入了一种基于** ### 3.1 对象的创建 下图便是 Java 对象的创建过程,我建议最好是能默写出来,并且要掌握每一步在做什么。 -![Java 对象的创建过程 ](https://user-gold-cdn.xitu.io/2018/8/22/16561e59a4135869?w=950&h=279&f=png&s=28529) +![Java创建对象的过程](https://my-blog-to-use.oss-cn-beijing.aliyuncs.com/2019-6/Java创建对象的过程.png) #### Step1:类加载检查 @@ -218,7 +220,7 @@ JDK1.4 中新加入的 **NIO(New Input/Output) 类**,引入了一种基于** 选择以上两种方式中的哪一种,取决于 Java 堆内存是否规整。而 Java 堆内存是否规整,取决于 GC 收集器的算法是"标记-清除",还是"标记-整理"(也称作"标记-压缩"),值得注意的是,复制算法内存也是规整的 -![](https://user-gold-cdn.xitu.io/2018/8/22/16561e59a40a2c3d?w=1426&h=333&f=png&s=26346) +![内存分配的两种方式](https://my-blog-to-use.oss-cn-beijing.aliyuncs.com/2019-6/内存分配的两种方式.png) **内存分配并发问题(补充内容,需要掌握)** @@ -254,11 +256,12 @@ JDK1.4 中新加入的 **NIO(New Input/Output) 类**,引入了一种基于** 建立对象就是为了使用对象,我们的 Java 程序通过栈上的 reference 数据来操作堆上的具体对象。对象的访问方式有虚拟机实现而定,目前主流的访问方式有**①使用句柄**和**②直接指针**两种: 1. **句柄:** 如果使用句柄的话,那么 Java 堆中将会划分出一块内存来作为句柄池,reference 中存储的就是对象的句柄地址,而句柄中包含了对象实例数据与类型数据各自的具体地址信息; -![使用句柄 ](https://user-gold-cdn.xitu.io/2018/4/27/16306b9573968946?w=786&h=362&f=png&s=109201) + + ![对象的访问定位-使用句柄](https://my-blog-to-use.oss-cn-beijing.aliyuncs.com/2019-6/对象的访问定位-使用句柄.png) 2. **直接指针:** 如果使用直接指针访问,那么 Java 堆对象的布局中就必须考虑如何放置访问类型数据的相关信息,而 reference 中存储的直接就是对象的地址。 -![使用直接指针 ](https://user-gold-cdn.xitu.io/2018/4/27/16306ba3a41b6b65?w=766&h=353&f=png&s=99172) +![对象的访问定位-直接指针](https://my-blog-to-use.oss-cn-beijing.aliyuncs.com/2019-6/对象的访问定位-直接指针.png) **这两种对象访问方式各有优势。使用句柄来访问的最大好处是 reference 中存储的是稳定的句柄地址,在对象被移动时只会改变句柄中的实例数据指针,而 reference 本身不需要修改。使用直接指针访问方式最大的好处就是速度快,它节省了一次指针定位的时间开销。** @@ -306,7 +309,7 @@ System.out.println(str2==str3);//false ```java String str1 = "str"; String str2 = "ing"; - + String str3 = "str" + "ing";//常量池中的对象 String str4 = str1 + str2; //在堆上创建的新的对象 String str5 = "string";//常量池中的对象 @@ -314,7 +317,7 @@ System.out.println(str2==str3);//false System.out.println(str3 == str5);//true System.out.println(str4 == str5);//false ``` -![](https://user-gold-cdn.xitu.io/2018/8/22/16561e59a4d13f92?w=593&h=603&f=png&s=22265) +![](https://my-blog-to-use.oss-cn-beijing.aliyuncs.com/2019-6/字符串拼接.png) 尽量避免多个字符串拼接,因为这样会重新创建对象。如果需要改变字符串的话,可以使用 StringBuilder 或者 StringBuffer。 ### 4.2 String s1 = new String("abc");这句话创建了几个字符串对象? @@ -418,3 +421,13 @@ i4=i5+i6 true - - - + +## 公众号 + +如果大家想要实时关注我更新的文章以及分享的干货的话,可以关注我的公众号。 + +**《Java面试突击》:** 由本文档衍生的专为面试而生的《Java面试突击》V2.0 PDF 版本[公众号](#公众号)后台回复 **"Java面试突击"** 即可免费领取! + +**Java工程师必备学习资源:** 一些Java工程师常用学习资源[公众号](#公众号)后台回复关键字 **“1”** 即可免费无套路获取。 + +![我的公众号](https://user-gold-cdn.xitu.io/2018/11/28/167598cd2e17b8ec?w=258&h=258&f=jpeg&s=27334) \ No newline at end of file diff --git "a/docs/java/jvm/\347\261\273\345\212\240\350\275\275\345\231\250.md" "b/docs/java/jvm/\347\261\273\345\212\240\350\275\275\345\231\250.md" index fa93f93adfa..fe434252432 100644 --- "a/docs/java/jvm/\347\261\273\345\212\240\350\275\275\345\231\250.md" +++ "b/docs/java/jvm/\347\261\273\345\212\240\350\275\275\345\231\250.md" @@ -1,3 +1,5 @@ +点击关注[公众号](#公众号)及时获取笔主最新更新文章,并可免费领取本文档配套的《Java面试突击》以及Java工程师必备学习资源。 + - [回顾一下类加载过程](#回顾一下类加载过程) diff --git "a/docs/java/jvm/\347\261\273\345\212\240\350\275\275\350\277\207\347\250\213.md" "b/docs/java/jvm/\347\261\273\345\212\240\350\275\275\350\277\207\347\250\213.md" index e08c5040a1b..97385002eee 100644 --- "a/docs/java/jvm/\347\261\273\345\212\240\350\275\275\350\277\207\347\250\213.md" +++ "b/docs/java/jvm/\347\261\273\345\212\240\350\275\275\350\277\207\347\250\213.md" @@ -1,3 +1,5 @@ +点击关注[公众号](#公众号)及时获取笔主最新更新文章,并可免费领取本文档配套的《Java面试突击》以及Java工程师必备学习资源。 + - [类加载过程](#类加载过程) @@ -78,7 +80,7 @@ Class 文件需要加载到虚拟机中之后才能运行和使用,那么虚 - 《实战Java虚拟机》 - -### 公众号 +## 公众号 如果大家想要实时关注我更新的文章以及分享的干货的话,可以关注我的公众号。 diff --git "a/docs/java/jvm/\347\261\273\346\226\207\344\273\266\347\273\223\346\236\204.md" "b/docs/java/jvm/\347\261\273\346\226\207\344\273\266\347\273\223\346\236\204.md" index 2e427deb55c..7dfc9fb0258 100644 --- "a/docs/java/jvm/\347\261\273\346\226\207\344\273\266\347\273\223\346\236\204.md" +++ "b/docs/java/jvm/\347\261\273\346\226\207\344\273\266\347\273\223\346\236\204.md" @@ -1,3 +1,5 @@ +点击关注[公众号](#公众号)及时获取笔主最新更新文章,并可免费领取本文档配套的《Java面试突击》以及Java工程师必备学习资源。 + - [类文件结构](#类文件结构) @@ -15,8 +17,6 @@ -> 公众号JavaGuide 后台回复关键字“1”,免费获取JavaGuide配套的Java工程师必备学习资源(文末有公众号二维码)。 - # 类文件结构 ## 一 概述 @@ -213,7 +213,7 @@ Class 文件存储格式中对方法的描述与对字段的描述几乎采用 - - 《实战 Java 虚拟机》 -### 公众号 +## 公众号 如果大家想要实时关注我更新的文章以及分享的干货的话,可以关注我的公众号。