Skip to content

Commit e8db2c5

Browse files
committed
update docs
1 parent 053eba2 commit e8db2c5

17 files changed

+1141
-599
lines changed

README.md

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@
2222

2323
## 📖 内容
2424

25+
> [Java 面试题集 💯](docs/java-interview.md)
26+
2527
### Java 基础
2628

2729
> [Java 基础](docs/basics) 总结 Java 的一些基础特性。
@@ -66,7 +68,6 @@
6668
6769
![img](https://raw.githubusercontent.com/dunwu/images/master/snap/20200221175827.png)
6870

69-
- [Java 并发面试题集 💯](docs/concurrent/java-concurrent-interview.md)
7071
- [Java 并发简介](docs/concurrent/java-concurrent-introduction.md) - 关键词:`进程``线程`
7172
- [Java 线程基础](docs/concurrent/java-thread.md) - 关键词:`Thread``Runnable``Callable``Future`
7273
- [Java 并发核心机制](docs/concurrent/java-concurrent-basic-mechanism.md) - 关键词:`synchronized``volatile``CAS``ThreadLocal`
@@ -129,9 +130,9 @@
129130
- [java-design-patterns](https://github.com/iluwatar/java-design-patterns)
130131
- [advanced-java](https://github.com/doocs/advanced-java)
131132

132-
## 🚪 传送门
133+
## 🚪 传送
133134

134-
◾ 🏠 [LINUX-TUTORIAL 首页](https://github.com/dunwu/linux-tutorial) ◾ 🎯 [我的博客](https://github.com/dunwu/blog)
135+
◾ 🏠 [JAVACORE 首页](https://github.com/dunwu/javacore) ◾ 🎯 [我的博客](https://github.com/dunwu/blog)
135136

136137
> 你可能会感兴趣:
137138

docs/README.md

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ footer: CC-BY-SA-4.0 Licensed | Copyright © 2018-Now Dunwu
99

1010
# JavaCore
1111

12-
> ☕ JavaCore 是一个 Java 核心技术教程。
12+
> **JavaCore** 是一个 Java 核心技术教程。
1313
>
1414
> - 🔁 项目同步维护:[Github](https://github.com/dunwu/javacore/) | [Gitee](https://gitee.com/turnon/javacore/)
1515
> - 📖 电子书阅读:[Github Pages](https://dunwu.github.io/javacore/) | [Gitee Pages](http://turnon.gitee.io/javacore/)
@@ -20,6 +20,8 @@ footer: CC-BY-SA-4.0 Licensed | Copyright © 2018-Now Dunwu
2020

2121
## 📖 内容
2222

23+
> [Java 面试题集 💯](docs/java-interview.md)
24+
2325
### Java 基础
2426

2527
> [Java 基础](basics) 总结 Java 的一些基础特性。
@@ -50,6 +52,8 @@ footer: CC-BY-SA-4.0 Licensed | Copyright © 2018-Now Dunwu
5052

5153
> [Java 容器](container) 涉及许多数据结构知识点,所以设立专题进行总结。
5254
55+
![img](https://raw.githubusercontent.com/dunwu/images/master/snap/20200221175550.png)
56+
5357
- [Java 容器简介](container/java-container.md)
5458
- [Java 容器之 List](container/java-container-list.md) - 关键词:`List``ArrayList``LinkedList`
5559
- [Java 容器之 Map](container/java-container-map.md) - 关键词:`Map``HashMap``LinkedHashMap``TreeMap``WeakHashMap`
@@ -60,16 +64,17 @@ footer: CC-BY-SA-4.0 Licensed | Copyright © 2018-Now Dunwu
6064

6165
> [Java 并发](concurrent) 知识点庞杂且难懂,特设专题进行总结。
6266
63-
- [Java 并发面试题集 💯](concurrent/java-concurrent-interview.md)
67+
![img](https://raw.githubusercontent.com/dunwu/images/master/snap/20200221175827.png)
68+
6469
- [Java 并发简介](concurrent/java-concurrent-introduction.md) - 关键词:`进程``线程`
6570
- [Java 线程基础](concurrent/java-thread.md) - 关键词:`Thread``Runnable``Callable``Future`
66-
- [Java 内存模型](concurrent/java-memory-model.md) - 关键词:`JMM``原子性``可见性``有序性``Happens-Before`
6771
- [Java 并发核心机制](concurrent/java-concurrent-basic-mechanism.md) - 关键词:`synchronized``volatile``CAS``ThreadLocal`
68-
- [Java 并发锁](concurrent/java-lock.md) - 关键词:`AQS``ReentrantLockA``ReentrantReadWriteLock``Condition`
72+
- [Java 并发锁](concurrent/java-lock.md) - 关键词:`AQS``ReentrantLock``ReentrantReadWriteLock``Condition`
6973
- [Java 原子类](concurrent/java-atomic-class.md) - 关键词:`CAS``Atomic`
7074
- [Java 并发容器](concurrent/java-concurrent-container.md) - 关键词:`ConcurrentHashMap``CopyOnWriteArrayList`
7175
- [Java 线程池](concurrent/java-thread-pool.md) - 关键词:`Executor``ExecutorService``ThreadPoolExecutor``Executors`
7276
- [Java 并发工具类](concurrent/java-concurrent-tools.md) - 关键词:`CountDownLatch``CyclicBarrier``Semaphore`
77+
- [Java 内存模型](concurrent/java-memory-model.md) - 关键词:`JMM``原子性``可见性``有序性``Happens-Before`
7378

7479
### Java IO
7580

@@ -85,6 +90,8 @@ footer: CC-BY-SA-4.0 Licensed | Copyright © 2018-Now Dunwu
8590

8691
> [Java 虚拟机](jvm) 记录了 JVM 的基本机制。
8792
93+
![img](https://raw.githubusercontent.com/dunwu/images/master/snap/20200221180028.png)
94+
8895
- [JVM 内存区域](jvm/jvm-memory.md) - 关键词:程序计数器、虚拟机栈、本地方法栈、堆、方法区、运行时常量池、直接内存、`OutOfMemoryError``StackOverflowError`
8996
- [JVM 垃圾收集](jvm/jvm-gc.md) - 关键词:`GC Roots``Serial``Parallel``CMS``G1``Minor GC``Full GC`
9097
- [JVM 字节码](jvm/jvm-bytecode.md) - 关键词:`bytecode``asm``javassist`
@@ -121,9 +128,9 @@ footer: CC-BY-SA-4.0 Licensed | Copyright © 2018-Now Dunwu
121128
- [java-design-patterns](https://github.com/iluwatar/java-design-patterns)
122129
- [advanced-java](https://github.com/doocs/advanced-java)
123130

124-
## 🚪 传送门
131+
## 🚪 传送
125132

126-
◾ 🏠 [LINUX-TUTORIAL 首页](https://github.com/dunwu/linux-tutorial) ◾ 🎯 [我的博客](https://github.com/dunwu/blog)
133+
◾ 🏠 [JAVACORE 首页](https://github.com/dunwu/javacore) ◾ 🎯 [我的博客](https://github.com/dunwu/blog)
127134

128135
> 你可能会感兴趣:
129136

docs/advanced/README.md

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,15 @@
22

33
> Java 高级总结 Java 的一些高级特性。
44
5-
## 内容
5+
## 📖 内容
66

77
- [Java 正则](java-regex.md)
88
- [Java 编码和加密](java-crypto.md)
99
- [Java 本地化](java-locale.md)
1010
- [JavaJDK8](jdk8.md)
11+
12+
## 📚 资料
13+
14+
## 🚪 传送
15+
16+
◾ 🏠 [JAVACORE 首页](https://github.com/dunwu/javacore) ◾ 🎯 [我的博客](https://github.com/dunwu/blog)

docs/basics/README.md

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
> Java 基础篇总结 Java 的一些基础特性。
44
5-
## 内容
5+
## 📖 内容
66

77
- [Java 开发环境](java-develop-env.md)
88
- [Java 基础语法特性](java-basic-grammar.md)
@@ -17,8 +17,12 @@
1717
- [Java 反射](java-reflection.md)
1818
- [Java 注解](java-annotation.md)
1919

20-
## 资料
20+
## 📚 资料
2121

2222
- [Java 编程思想](https://book.douban.com/subject/2130190/)
2323
- [Java 核心技术(卷 1)](https://book.douban.com/subject/3146174/)
2424
- [Head First Java](https://book.douban.com/subject/4496038/)
25+
26+
## 🚪 传送
27+
28+
◾ 🏠 [JAVACORE 首页](https://github.com/dunwu/javacore) ◾ 🎯 [我的博客](https://github.com/dunwu/blog)

docs/basics/java-data-type.md

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,9 @@
22

33
> **📦 本文以及示例源码已归档在 [javacore](https://github.com/dunwu/javacore/)**
44
5-
## 数据类型分类
5+
![img](http://dunwu.test.upcdn.net/snap/1553754196283.png)
6+
7+
## 一、数据类型分类
68

79
Java 中的数据类型有两类:
810

@@ -42,7 +44,7 @@ Java 语言提供了 **8** 种基本类型,大致分为 **4** 类
4244
>
4345
> 这篇文章对于基本数据类型和引用类型的内存存储讲述比较生动。
4446
45-
## 数据转换
47+
## 二、数据转换
4648

4749
Java 中,数据类型转换有两种方式:
4850

@@ -105,7 +107,7 @@ int x = (int)f;
105107
System.out.println("x = " + x);
106108
```
107109

108-
## 装箱和拆箱
110+
## 三、装箱和拆箱
109111

110112
### 包装类、装箱、拆箱
111113

@@ -203,13 +205,9 @@ System.out.println("i1 == i4 is [" + (i1 == i4) + "]"); // 自动拆箱
203205
1. 装箱操作会创建对象,频繁的装箱操作会造成不必要的内存消耗,影响性能。所以**应该尽量避免装箱。**
204206
2. 基础数据类型的比较操作使用 `==`,包装类的比较操作使用 `equals` 方法。
205207

206-
## 小结
207-
208-
![img](http://dunwu.test.upcdn.net/snap/1553754196283.png!zp)
209-
210208
## 参考资料
211209

212-
- [Java编程思想](https://book.douban.com/subject/2130190/)
213-
- [Java核心技术(卷 1)](https://book.douban.com/subject/3146174/)
210+
- [《Java 编程思想(Thinking in java)》](https://item.jd.com/10058164.html)
211+
- [《Java 核心技术 卷 I 基础知识》](https://item.jd.com/12759308.html)
214212
- [Java基本数据类型和引用类型](https://juejin.im/post/59cd71835188255d3448faf6)
215213
- [深入剖析 Java 中的装箱和拆箱](https://www.cnblogs.com/dolphin0520/p/3780005.html)

docs/basics/java-reflection.md

Lines changed: 54 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
>
55
> 🔁 本文中的示例代码已归档到:「[javacore](https://github.com/dunwu/javacore/tree/master/codes/javacore-basics/src/main/java/io/github/dunwu/javacore/reflect)
66
7-
## 简介
7+
## 一、反射简介
88

99
### 什么是反射
1010

@@ -27,7 +27,7 @@
2727
- **破坏封装性** - 反射调用方法时可以忽略权限检查,因此可能会破坏封装性而导致安全问题。
2828
- **内部曝光** - 由于反射允许代码执行在非反射代码中非法的操作,例如访问私有字段和方法,所以反射的使用可能会导致意想不到的副作用,这可能会导致代码功能失常并可能破坏可移植性。反射代码打破了抽象,因此可能会随着平台的升级而改变行为。
2929

30-
## 反射机制
30+
## 二、反射机制
3131

3232
### 类加载过程
3333

@@ -57,7 +57,7 @@ User user = new User();
5757
2. JVM 会去本地磁盘查找 `User.class` 文件并加载 JVM 内存中。
5858
3. JVM 通过调用类加载器自动创建这个类对应的 `Class` 对象,并且存储在 JVM 的方法区。注意:**一个类有且只有一个 `Class` 对象**
5959

60-
## 使用反射
60+
## 三、使用反射
6161

6262
### java.lang.reflect 包
6363

@@ -384,7 +384,7 @@ public static Object newInstance(Class<?> componentType, int length)
384384
}
385385
```
386386

387-
## 动态代理
387+
## 四、动态代理
388388

389389
动态代理是反射的一个非常重要的应用场景。动态代理常被用于一些 Java 框架中。例如 Spring 的 AOP ,Dubbo 的 SPI 接口,就是基于 Java 动态代理实现的。
390390

@@ -435,15 +435,15 @@ class Proxy extends Subject {
435435
>
436436
> 静态代理模式固然在访问无法访问的资源,增强现有的接口业务功能方面有很大的优点,但是大量使用这种静态代理,会使我们系统内的类的规模增大,并且不易维护;并且由于 Proxy 和 RealSubject 的功能本质上是相同的,Proxy 只是起到了中介的作用,这种代理在系统中的存在,导致系统结构比较臃肿和松散。
437437
438-
### 动态代理
438+
### JDK 动态代理
439439

440440
为了解决静态代理的问题,就有了创建动态代理的想法:
441441

442442
在运行状态中,需要代理的地方,根据 Subject 和 RealSubject,动态地创建一个 Proxy,用完之后,就会销毁,这样就可以避免了 Proxy 角色的 class 在系统中冗杂的问题了。
443443

444-
![img](http://dunwu.test.upcdn.net/snap/1553614585028.png!zp)
444+
![img](http://dunwu.test.upcdn.net/snap/1553614585028.png)
445445

446-
Java 动态代理基于经典代理模式,引入了一个 InvocationHandlerInvocationHandler 负责统一管理所有的方法调用。
446+
Java 动态代理基于经典代理模式,引入了一个 `InvocationHandler``InvocationHandler` 负责统一管理所有的方法调用。
447447

448448
动态代理步骤:
449449

@@ -460,7 +460,7 @@ Java 动态代理基于经典代理模式,引入了一个 InvocationHandler,
460460

461461
在 Java 的动态代理机制中,有两个重要的类(接口),一个是 `InvocationHandler` 接口、另一个则是 `Proxy` 类,这一个类和一个接口是实现我们动态代理所必须用到的。
462462

463-
### InvocationHandler 接口
463+
#### InvocationHandler 接口
464464

465465
`InvocationHandler` 接口定义:
466466

@@ -487,7 +487,7 @@ Object invoke(Object proxy, Method method, Object[] args) throws Throwable
487487

488488
如果不是很明白,等下通过一个实例会对这几个参数进行更深的讲解。
489489

490-
### Proxy 类
490+
#### Proxy 类
491491

492492
`Proxy` 这个类的作用就是用来动态创建一个代理对象的类,它提供了许多的方法,但是我们用的最多的就是 `newProxyInstance` 这个方法:
493493

@@ -499,11 +499,11 @@ public static Object newProxyInstance(ClassLoader loader, Class<?>[] interfaces,
499499

500500
参数说明:
501501

502-
- **loader** - 一个 ClassLoader 对象,定义了由哪个 ClassLoader 对象来对生成的代理对象进行加载。
503-
- **interfaces** - 一个 Interface 对象的数组,表示的是我将要给我需要代理的对象提供一组什么接口,如果我提供了一组接口给它,那么这个代理对象就宣称实现了该接口(多态),这样我就能调用这组接口中的方法了
504-
- **h** - 一个 InvocationHandler 对象,表示的是当我这个动态代理对象在调用方法的时候,会关联到哪一个 InvocationHandler 对象上
502+
- **loader** - 一个 `ClassLoader` 对象,定义了由哪个 `ClassLoader` 对象来对生成的代理对象进行加载。
503+
- **interfaces** - 一个 `Class<?>` 对象的数组,表示的是我将要给我需要代理的对象提供一组什么接口,如果我提供了一组接口给它,那么这个代理对象就宣称实现了该接口(多态),这样我就能调用这组接口中的方法了
504+
- **h** - 一个 `InvocationHandler` 对象,表示的是当我这个动态代理对象在调用方法的时候,会关联到哪一个 `InvocationHandler` 对象上
505505

506-
### 动态代理实例
506+
#### JDK 动态代理实例
507507

508508
上面的内容介绍完这两个接口(类)以后,我们来通过一个实例来看看我们的动态代理模式是什么样的:
509509

@@ -644,18 +644,51 @@ public abstract java.lang.String io.github.dunwu.javacore.reflect.InvocationHand
644644

645645
正好就是我们的 Subject 接口中的两个方法,这也就证明了当我通过代理对象来调用方法的时候,起实际就是委托由其关联到的 handler 对象的 invoke 方法中来调用,并不是自己来真实调用,而是通过代理的方式来调用的。
646646

647-
## 小结
647+
#### JDK 动态代理小结
648648

649-
![img](http://dunwu.test.upcdn.net/cs/java/javacore/xmind/Java反射.svg!zp)
649+
代理类与委托类实现同一接口,主要是通过代理类实现 `InvocationHandler` 并重写 `invoke` 方法来进行动态代理的,在 `invoke` 方法中将对方法进行处理。
650650

651-
![img](http://dunwu.test.upcdn.net/cs/java/javacore/xmind/Java代理.svg!zp)
651+
JDK 动态代理特点:
652+
653+
- 优点:相对于静态代理模式,不需要硬编码接口,代码复用率高。
654+
655+
- 缺点:强制要求代理类实现 `InvocationHandler` 接口。
656+
657+
658+
### CGLIB 动态代理
659+
660+
CGLIB 提供了与 JDK 动态代理不同的方案。很多框架,例如 Spring AOP 中,就使用了 CGLIB 动态代理。
661+
662+
CGLIB 底层,其实是借助了 ASM 这个强大的 Java 字节码框架去进行字节码增强操作。
663+
664+
CGLIB 动态代理的工作步骤:
665+
666+
- 生成代理类的二进制字节码文件;
667+
- 加载二进制字节码,生成 `Class` 对象( 例如使用 `Class.forName()` 方法 );
668+
- 通过反射机制获得实例构造,并创建代理类对象。
669+
670+
CGLIB 动态代理特点:
671+
672+
优点:使用字节码增强,比 JDK 动态代理方式性能高。可以在运行时对类或者是接口进行增强操作,且委托类无需实现接口。
673+
674+
缺点:不能对 `final` 类以及 `final` 方法进行代理。
675+
676+
> 参考:[深入理解 CGLIB 动态代理机制](https://www.jianshu.com/p/9a61af393e41)
677+
678+
## 五、小结
679+
680+
![img](http://dunwu.test.upcdn.net/cs/java/javacore/xmind/Java反射.svg)
681+
682+
![img](http://dunwu.test.upcdn.net/cs/java/javacore/xmind/Java代理.svg)
652683

653684
## 参考资料
654685

655-
- [Java编程思想](https://book.douban.com/subject/2130190/)
656-
- [Java核心技术(卷 1)](https://book.douban.com/subject/3146174/)
686+
- [Java 编程思想](https://book.douban.com/subject/2130190/)
687+
- [Java 核心技术(卷 1)](https://book.douban.com/subject/3146174/)
657688
- [深入解析 Java 反射(1) - 基础](https://www.sczyh30.com/posts/Java/java-reflection-1/)
658-
- [Java基础之—反射(非常重要)](https://blog.csdn.net/sinat_38259539/article/details/71799078)
689+
- [Java 基础之—反射(非常重要)](https://blog.csdn.net/sinat_38259539/article/details/71799078)
659690
- [官方 Reflection API 文档](https://docs.oracle.com/javase/tutorial/reflect/index.html)
660-
- [Java的动态代理机制详解](https://www.cnblogs.com/xiaoluo501395377/p/3383130.html)
661-
- [Java动态代理机制详解(JDK 和 CGLIB,Javassist,ASM)](https://blog.csdn.net/luanlouis/article/details/24589193)
691+
- [Java 的动态代理机制详解](https://www.cnblogs.com/xiaoluo501395377/p/3383130.html)
692+
- [Java 动态代理机制详解(JDK 和 CGLIB,Javassist,ASM)](https://blog.csdn.net/luanlouis/article/details/24589193)
693+
- [深入理解 JDK 动态代理机制](https://www.jianshu.com/p/471c80a7e831)
694+
- [深入理解 CGLIB 动态代理机制](https://www.jianshu.com/p/9a61af393e41)

docs/concurrent/README.md

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,22 +2,25 @@
22

33
> Java 并发总结、整理 Java 并发编程相关知识点。
44
5-
## 内容
5+
## 📖 内容
66

7-
- [Java 并发面试题集 💯](java-concurrent-interview.md)
87
- [Java 并发简介](java-concurrent-introduction.md) - 关键词:`进程``线程`
98
- [Java 线程基础](java-thread.md) - 关键词:`Thread``Runnable``Callable``Future`
10-
- [Java 内存模型](java-memory-model.md) - 关键词:`JMM``原子性``可见性``有序性``Happens-Before`
119
- [Java 并发核心机制](java-concurrent-basic-mechanism.md) - 关键词:`synchronized``volatile``CAS``ThreadLocal`
12-
- [Java 并发锁](java-lock.md) - 关键词:`synchronized``volatile``CAS``ThreadLocal`
13-
- [Java 原子类](java-atomic-class.md) - 关键词:`CAS``atomic`
10+
- [Java 并发锁](java-lock.md) - 关键词:`AQS``ReentrantLock``ReentrantReadWriteLock``Condition`
11+
- [Java 原子类](java-atomic-class.md) - 关键词:`CAS``Atomic`
1412
- [Java 并发容器](java-concurrent-container.md) - 关键词:`ConcurrentHashMap``CopyOnWriteArrayList`
1513
- [Java 线程池](java-thread-pool.md) - 关键词:`Executor``ExecutorService``ThreadPoolExecutor``Executors`
1614
- [Java 并发工具类](java-concurrent-tools.md) - 关键词:`CountDownLatch``CyclicBarrier``Semaphore`
15+
- [Java 内存模型](java-memory-model.md) - 关键词:`JMM``原子性``可见性``有序性``Happens-Before`
1716

18-
## 资源
17+
## 📚 资料
1918

2019
- [《Java 并发编程实战》](https://item.jd.com/10922250.html)
2120
- [《Java 并发编程的艺术》](https://item.jd.com/11740734.html)
2221
- [《深入理解 Java 虚拟机》](https://item.jd.com/11252778.html)
2322
- [《Effective Java 中文版》](https://item.jd.com/12507084.html)
23+
24+
## 🚪 传送
25+
26+
◾ 🏠 [JAVACORE 首页](https://github.com/dunwu/javacore) ◾ 🎯 [我的博客](https://github.com/dunwu/blog)

0 commit comments

Comments
 (0)