提交 0fd9229f 编写于 作者: C CyC2018

auto commit

上级 d7bbeab6
<!-- ![](https://img.shields.io/badge/update-today-blue.svg) ![](https://img.shields.io/badge/gitbook-making-lightgrey.svg)</br> -->
| Ⅰ | Ⅱ | Ⅲ | Ⅳ | Ⅴ | Ⅵ | Ⅶ | Ⅷ | Ⅸ | Ⅹ |
| :--------: | :---------: | :---------: | :---------: | :---------: | :---------:| :---------: | :-------: | :-------:| :------:|
|网络[:cloud:](#网络-cloud) |操作系统[:computer:](#操作系统-computer)| 算法[:pencil2:](#数据结构与算法-pencil2)| 面向对象[:couple:](#面向对象-couple) |数据库[:floppy_disk:](#数据库-floppy_disk)| Java [:coffee:](#java-coffee)| 分布式[:sweat_drops:](#分布式-sweat_drops)| 工具[:hammer:](#工具-hammer)| 编码实践[:speak_no_evil:](#编码实践-speak_no_evil)| 后记[:memo:](#后记-memo) |
| 算法[:pencil2:](#数据结构与算法-pencil2) | 操作系统[:computer:](#操作系统-computer)|网络[:cloud:](#网络-cloud) | 面向对象[:couple:](#面向对象-couple) |数据库[:floppy_disk:](#数据库-floppy_disk)| Java [:coffee:](#java-coffee)| 分布式[:sweat_drops:](#分布式-sweat_drops)| 工具[:hammer:](#工具-hammer)| 编码实践[:speak_no_evil:](#编码实践-speak_no_evil)| 后记[:memo:](#后记-memo) |
</br>
:loudspeaker: 本仓库不参与商业行为,不向读者收取任何费用。
......@@ -9,15 +9,19 @@
:loudspeaker: This repository is not engaging in business activities, and does not charge readers any fee.
</br></br>
## 网络 :cloud:
## 数据结构与算法 :pencil2:
> [计算机网络](https://github.com/CyC2018/InnterviewNotes/blob/master/notes/计算机网络.md)
> [算法](https://github.com/CyC2018/InnterviewNotes/blob/master/notes/算法.md)
整理自《计算机网络 第七版》,重点内容会在标题后面加 \*
整理自《算法 第四版》
> [HTTP](https://github.com/CyC2018/InnterviewNotes/blob/master/notes/HTTP.md)
> [剑指 Offer 题解](https://github.com/CyC2018/InnterviewNotes/blob/master/notes/剑指%20offer%20题解.md)
整理自《图解 HTTP》
《剑指 Offer 第二版》的最优解,在牛客网在线编程中出现的题目都已 AC。
> [Leetcode 题解](https://github.com/CyC2018/InnterviewNotes/blob/master/notes/Leetcode%20题解.md)
对题目做了一个分类,并对每种题型的解题思路做了总结。
## 操作系统 :computer:
......@@ -29,19 +33,17 @@
整理自《鸟哥的 Linux 私房菜》
## 数据结构与算法 :pencil2:
> [算法](https://github.com/CyC2018/InnterviewNotes/blob/master/notes/算法.md)
## 网络 :cloud:
整理自《算法 第四版》
> [计算机网络](https://github.com/CyC2018/InnterviewNotes/blob/master/notes/计算机网络.md)
> [剑指 Offer 题解](https://github.com/CyC2018/InnterviewNotes/blob/master/notes/剑指%20offer%20题解.md)
整理自《计算机网络 第七版》,重点内容会在标题后面加 \*
《剑指 Offer 第二版》的最优解,在牛客网在线编程中出现的题目都已 AC。
> [HTTP](https://github.com/CyC2018/InnterviewNotes/blob/master/notes/HTTP.md)
> [Leetcode 题解](https://github.com/CyC2018/InnterviewNotes/blob/master/notes/Leetcode%20题解.md)
整理自《图解 HTTP》
对题目做了一个分类,并对每种题型的解题思路做了总结。
## 面向对象 :couple:
......
......@@ -1027,13 +1027,13 @@ public class ThreadUnsafeExample {
# 十、Java 内存模型
Java 内存模型图屏蔽各种硬件和操作系统的内存访问差异,以实现让 Java 程序在各种平台下都能达到一致的内存访问效果。
Java 内存模型图屏蔽各种硬件和操作系统的内存访问差异,以实现让 Java 程序在各种平台下都能达到一致的内存访问效果。
## 主内存与工作内存
处理器上的寄存器的读写的速度比内存快几个数量级,为了解决这种速度矛盾,在它们之间加入了高速缓存。
加入高速缓存带来了一个新的问题:缓存一致性。如果多个缓存共享同一块主内存区域,那么多个缓存的数据可能会不一致。CPU 使用一致性协议来解决一致性问题。
加入高速缓存带来了一个新的问题:缓存一致性。如果多个缓存共享同一块主内存区域,那么多个缓存的数据可能会不一致,需要一些协议来解决这个问题。
<div align="center"> <img src="../pics//68778c1b-15ab-4826-99c0-3b4fd38cb9e9.png"/> </div><br>
......@@ -1153,7 +1153,7 @@ public class AtomicSynchronizedExample {
可见性指当一个线程修改了共享变量的值,其它线程能够立即得知这个修改。Java 内存模型是通过在变量修改后将新值同步回主内存,在变量读取前从主内存刷新变量值来实现可见性的。
volatile 可保证可见性。synchronized 也能够保证可见性,对一个变量执行 unlock 操作之前,必须把变量值同步回主内存。final 关键字也能保证可见性:被 final 关键字修饰的字段在构造器中一旦初始化完成,并且没有发生 this 逃逸(其它线程可以通过 this 引用访问到初始化了一的对象),那么其它线程就能看见 final 字段的值。
volatile 可保证可见性。synchronized 也能够保证可见性,对一个变量执行 unlock 操作之前,必须把变量值同步回主内存。final 关键字也能保证可见性:被 final 关键字修饰的字段在构造器中一旦初始化完成,并且没有发生 this 逃逸(其它线程可以通过 this 引用访问到初始化了一的对象),那么其它线程就能看见 final 字段的值。
对前面的线程不安全示例中的 cnt 变量用 volatile 修饰,不能解决线程不安全问题。因为 volatile 并不能保证操作的原子性。
......@@ -1203,7 +1203,7 @@ volatile 关键字通过添加内存屏障的方式来禁止指令重排,即
> Thread Start Rule
Thread 对象的 start() 方法先行发生于此线程的每一个动作。
Thread 对象的 start() 方法调用先行发生于此线程的每一个动作。
<div align="center"> <img src="../pics//thread-start-rule.png"/> </div><br>
......@@ -1276,7 +1276,7 @@ public V put(K key, V value) {
}
```
多线程环境下,应当尽量使对象为不可变,来满足线程安全。
多线程环境下,应当尽量使对象为不可变,来满足线程安全。
### 2. 绝对线程安全
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册