Skip to content

Commit f096ece

Browse files
authored
Merge pull request #5 from zhonghuasheng/master
Merge pull request zhonghuasheng#165 from zhonghuasheng/develop
2 parents 252dd6e + 4efc2df commit f096ece

File tree

7 files changed

+35
-34
lines changed

7 files changed

+35
-34
lines changed

README.md

Lines changed: 16 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -14,31 +14,25 @@
1414
# Java
1515

1616
#### `Java基础`
17-
* [Java基础](java/basic/java-basic.md)
18-
* [JDBC基础](https://github.com/zhonghuasheng/JAVA/blob/master/jdbc/src/main/java/com/zhonghuasheng/jdbc/learn01/BasicSteps.java)
19-
* [Java集合](java/basic/java-collection.md)
20-
* [Java多线程系列](java/basic/java-thread.md)
21-
* [JUC系列](java/basic/java-thread-juc.md)
22-
* [Java IO基础](java/basic/java-io-nio.md)
23-
* [如何学习Java的NIO](http://note.youdao.com/noteshare?id=5ea48ae4fd97f7a7bb4bd9d036ba4d11)
24-
* [并行与并发的区别](http://note.youdao.com/noteshare?id=07f1542ba53ff20ccf6e036a1a8a52d1)
25-
* [线程安全](http://note.youdao.com/noteshare?id=6f65c98d2421430a5faa8e129ee77cb7)
17+
[Java基础](java/basic/java-basic.md)
18+
 [JDBC基础](https://github.com/zhonghuasheng/JAVA/blob/master/jdbc/src/main/java/com/zhonghuasheng/jdbc/learn01/BasicSteps.java)
19+
 [Java集合](java/basic/java-collection.md)
20+
 [Java多线程系列](java/basic/java-thread.md)
21+
 [JUC系列](java/basic/java-thread-juc.md)
22+
 [Java IO基础](java/basic/java-io-nio.md)
2623

2724
#### `Java虚拟机`
28-
* [Java虚拟机概述](http://note.youdao.com/noteshare?id=04255aa8ae9ab45ed502296d57c736d3&sub=D4C06128EBBD414C91D85B7F89AB0C91)
29-
* [Java内存模型(JMM)概述](http://note.youdao.com/noteshare?id=853bd6ff9802006899b9e0837fece691&sub=wcp1576467027359972)
30-
* [volatile关键字解析](http://note.youdao.com/noteshare?id=b463861623604a614e0ceb2e27f4b36e&sub=ED4A85833F6F4531A65BBC382E218D32)
31-
* [Java内存区域和对象创建及内存分配](http://note.youdao.com/noteshare?id=c5cc62733e28ed05ea252db5243ca797&sub=3386EF7F877C493DACA2FDD53BC0E0E4)
32-
* [JVM垃圾回收机制](http://note.youdao.com/noteshare?id=210c03900e584c1001b4b16d4060dc89&sub=wcp1581062973917549)
33-
* [JVM堆内存(heap)及垃圾回收总结](http://note.youdao.com/noteshare?id=27f16d42fea30933884b640a941e8587&sub=wcp1580995061039682)
34-
* [Java对象的创建过程解析](http://note.youdao.com/noteshare?id=720b1f1bef16d494b767edeaf52e1eee&sub=wcp158116390844063)
25+
[Java虚拟机概述](http://note.youdao.com/noteshare?id=04255aa8ae9ab45ed502296d57c736d3&sub=D4C06128EBBD414C91D85B7F89AB0C91)
26+
 [Java内存模型(JMM)概述](http://note.youdao.com/noteshare?id=853bd6ff9802006899b9e0837fece691&sub=wcp1576467027359972)
27+
 [volatile关键字解析](http://note.youdao.com/noteshare?id=b463861623604a614e0ceb2e27f4b36e&sub=ED4A85833F6F4531A65BBC382E218D32)
28+
 [Java内存区域和对象创建及内存分配](http://note.youdao.com/noteshare?id=c5cc62733e28ed05ea252db5243ca797&sub=3386EF7F877C493DACA2FDD53BC0E0E4)
29+
 [JVM垃圾回收机制](http://note.youdao.com/noteshare?id=210c03900e584c1001b4b16d4060dc89&sub=wcp1581062973917549)
30+
 [JVM堆内存(heap)及垃圾回收总结](http://note.youdao.com/noteshare?id=27f16d42fea30933884b640a941e8587&sub=wcp1580995061039682)
31+
 [Java对象的创建过程解析](http://note.youdao.com/noteshare?id=720b1f1bef16d494b767edeaf52e1eee&sub=wcp158116390844063)
3532

3633
#### `Java Web`
37-
* [Servlet基础](java/javaweb/servlet.md)
38-
* [JSP基础](java/javaweb/jsp.md)
39-
* [JSP是不是被淘汰](https://github.com/zhonghuasheng/JAVA/wiki/%E5%AF%B9%E5%A4%A7%E5%9E%8BJAVA-Web%E9%A1%B9%E7%9B%AE%E4%B8%8B%E4%BD%BF%E7%94%A8JSP%E7%9A%84%E6%80%9D%E8%80%83)
40-
* [JSP Velocity FreeMarker对比](https://github.com/zhonghuasheng/JAVA/wiki/JSP---Velocity---FreeMarker%E5%AF%B9%E6%AF%94)
41-
* [JSTL库安装](https://www.runoob.com/jsp/jsp-jstl.html)
34+
[Servlet基础](java/javaweb/servlet.md)
35+
 [JSP基础](java/javaweb/jsp.md)
4236

4337
# Spring大家族
4438

@@ -264,6 +258,6 @@
264258
<h2 align="center">技术栈</h2>
265259
<center>
266260

267-
![](tutorial-2020-02-15.png)
261+
![](tutorial-2020-02-16.png)
268262

269263
</center>

java/basic/concurrent.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
[并行与并发的区别](http://note.youdao.com/noteshare?id=07f1542ba53ff20ccf6e036a1a8a52d1)
2+
[线程安全](http://note.youdao.com/noteshare?id=6f65c98d2421430a5faa8e129ee77cb7)

java/basic/java-io-nio.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ IO是Java中的一种输入和输出的功能,Java中对这种操作叫做对
88
## 学习计划
99
* [讲的最好的同步/异步/阻塞/非阻塞/BIO/NIO/AIO的文章](http://note.youdao.com/noteshare?id=e00d8caf0973471780b8ca880e1c5bf9&sub=wcp1578879502523399)
1010
* [零拷贝](http://note.youdao.com/noteshare?id=13101142e0a628da85eca4a52df1596b&sub=wcp1579073093657123)
11+
* [如何学习Java的NIO](http://note.youdao.com/noteshare?id=5ea48ae4fd97f7a7bb4bd9d036ba4d11)
1112

1213
## 学习笔记
1314
NIO是同步的IO,是因为程序需要IO操作时,必须获得了IO权限后亲自进行IO操作才能进行下一步操作。AIO是对NIO的改进(所以AIO又叫NIO.2),它是基于Proactor模型的。每个socket连接在事件分离器注册 IO完成事件 和 IO完成事件处理器。程序需要进行IO时,向分离器发出IO请求并把所用的Buffer区域告知分离器,分离器通知操作系统进行IO操作,操作系统自己不断尝试获取IO权限并进行IO操作(数据保存在Buffer区),操作完成后通知分离器;分离器检测到 IO完成事件,则激活 IO完成事件处理器,处理器会通知程序说“IO已完成”,程序知道后就直接从Buffer区进行数据的读写。

java/basic/java-thread-juc.md

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
CAS(Compare And Swap,即比较再交换)。jdk5增加了并发包java.util.concurrent.*,其下面的类使用CAS算法实现了区别于synchronouse同步锁的一种乐观锁。JDK 5之前Java语言是靠synchronized关键字保证同步的,这是一种独占锁,也是是悲观锁。
88

99
> 对CAS算法的理解
10-
对CAS的理解,CAS是一种无锁算法,CAS有3个操作数,内存值V,旧的预期值A,要修改的新值B。当且仅当预期值A和内存值V相同时,将内存值V修改为B,否则什么都不做。
10+
对CAS的理解,CAS是一种无锁算法,CAS有3个操作数,内存值V,旧的预期值A,要修改的新值B。当且仅当预期值A和内存值V相同时,将内存值V修改为B,否则什么都不做,并返回false。可能会有面试官问 CAS 底层是如何实现的,在JAVA中,CAS通过调用C++库实现,由C++库再去调用CPU指令集。不同体系结构中,cpu指令还存在着明显不同。比如,x86 CPU 提供 cmpxchg 指令;而在精简指令集的体系架构中,(如“load and reserve”和“store conditional”)实现的,在大多数处理器上 CAS 都是个非常轻量级的操作,这也是其优势所在
1111
CAS比较与交换的伪代码可以表示为:
1212
```java
1313
do{
@@ -30,18 +30,18 @@ CAS(比较并交换)是`CPU指令级`的操作,只有一步原子操作,
3030
* 只能保证一个共享变量的原子操作
3131

3232
## Unsafe类解读
33+
* Unsafe类是在sun.misc包下,不属于Java标准。但是很多Java的基础类库,包括一些被广泛使用的高性能开发库都是基于Unsafe类开发的,比如Netty、Hadoop、Kafka等。
34+
* 使用Unsafe可用来直接访问系统内存资源并进行自主管理,Unsafe类在提升Java运行效率,增强Java语言底层操作能力方面起了很大的作用。
35+
* Unsafe可认为是Java中留下的后门,提供了一些低层次操作,如直接内存访问、线程调度等。
36+
* 官方并不建议使用Unsafe。
3337

34-
## 什么是CAS
35-
1. 什么是CAS操作
36-
CAS(compare-and-swap)直译即比较并交换,提供原子化的读改写能力,是Java 并发中所谓 lock-free 机制的基础。
37-
CAS的思想很简单:三个参数,一个当前内存值V、旧的预期值A、即将更新的值B,当且仅当预期值A和内存值V相同时,将内存值修改为B并返回true,否则什么都不做,并返回false。
38-
可能会有面试官问 CAS 底层是如何实现的,在JAVA中,CAS通过调用C++库实现,由C++库再去调用CPU指令集。不同体系结构中,cpu指令还存在着明显不同。比如,x86 CPU 提供 cmpxchg 指令;而在精简指令集的体系架构中,(如“load and reserve”和“store conditional”)实现的,在大多数处理器上 CAS 都是个非常轻量级的操作,这也是其优势所在。
39-
* CAS的缺点有以下几个方面:
40-
* ABA问题
41-
如果某个线程在CAS操作时发现,内存值和预期值都是A,就能确定期间没有线程对值进行修改吗?答案未必,如果期间发生了 A -> B -> A 的更新,仅仅判断数值是 A,可能导致不合理的修改操作。针对这种情况,Java 提供了 AtomicStampedReference 工具类,通过为引用建立类似版本号(stamp)的方式,来保证 CAS 的正确性。
42-
* 循环时间长开销大
43-
CAS中使用的失败重试机制,隐藏着一个假设,即竞争情况是短暂的。大多数应用场景中,确实大部分重试只会发生一次就获得了成功。但是总有意外情况,所以在有需要的时候,还是要考虑限制自旋的次数,以免过度消耗 CPU。
44-
* 只能保证一个共享变量的原子操作
38+
> Unsafe的大部分API都是native的方法,主要包括以下几类:
39+
1. Class相关。主要提供Class和它的静态字段的操作方法。
40+
2. Object相关。主要提供Object和它的字段的操作方法。
41+
3. Arrray相关。主要提供数组及其中元素的操作方法。
42+
4. 并发相关。主要提供低级别同步原语,如CAS、线程调度、volatile、内存屏障等。
43+
5. Memory相关。提供了直接内存访问方法(绕过Java堆直接操作本地内存),可做到像C一样自由利用系统内存资源。
44+
6. 系统相关。主要返回某些低级别的内存信息,如地址大小、内存页大小。
4545

4646
## JUC原子类
4747
### JUC原子类介绍
@@ -110,4 +110,5 @@ public final int getAndAddInt(Object var1, long var2, int var4) {
110110

111111
# 引用
112112
* 什么是CAS https://www.jianshu.com/p/ab2c8fce878b
113+
* 一篇看懂Java中的Unsafe类 https://www.jb51.net/article/140726.htm
113114
* 浅谈AtomicInteger实现原理 https://www.jianshu.com/p/cea1f9619e8f

java/javaweb/jsp.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,9 @@
99
* [JSP-HTTP状态码](#JSP-HTTP状态码)
1010
* [JSP表单处理](#JSP表单处理)
1111
* [JSP编码设置](#JSP编码设置)
12+
* [JSP是不是被淘汰](https://github.com/zhonghuasheng/JAVA/wiki/%E5%AF%B9%E5%A4%A7%E5%9E%8BJAVA-Web%E9%A1%B9%E7%9B%AE%E4%B8%8B%E4%BD%BF%E7%94%A8JSP%E7%9A%84%E6%80%9D%E8%80%83)
13+
* [JSP Velocity FreeMarker对比](https://github.com/zhonghuasheng/JAVA/wiki/JSP---Velocity---FreeMarker%E5%AF%B9%E6%AF%94)
14+
* [JSTL库安装](https://www.runoob.com/jsp/jsp-jstl.html)
1215

1316
## JSP简介
1417

tutorial-2020-02-15.png

-618 KB
Binary file not shown.

tutorial-2020-02-16.png

840 KB
Loading

0 commit comments

Comments
 (0)