auto commit
This commit is contained in:
parent
dab9968c69
commit
d461027654
@ -1020,7 +1020,7 @@ ForkJoinPool 实现了工作窃取算法来提高 CPU 的利用率。每个线
|
|||||||
|
|
||||||
如果多个线程对同一个共享数据进行访问而不采取同步操作的话,那么操作的结果是不一致的。
|
如果多个线程对同一个共享数据进行访问而不采取同步操作的话,那么操作的结果是不一致的。
|
||||||
|
|
||||||
以下代码演示了 1000 个线程同时对 cnt 执行自增操作,操作结束之后它的值一般情况下小于 1000。
|
以下代码演示了 1000 个线程同时对 cnt 执行自增操作,操作结束之后它的值有可能小于 1000。
|
||||||
|
|
||||||
```java
|
```java
|
||||||
public class ThreadUnsafeExample {
|
public class ThreadUnsafeExample {
|
||||||
|
@ -207,7 +207,7 @@ ResultSet rs = stmt.executeQuery();
|
|||||||
|
|
||||||
拒绝服务攻击(denial-of-service attack,DoS),亦称洪水攻击,其目的在于使目标电脑的网络或系统资源耗尽,使服务暂时中断或停止,导致其正常用户无法访问。
|
拒绝服务攻击(denial-of-service attack,DoS),亦称洪水攻击,其目的在于使目标电脑的网络或系统资源耗尽,使服务暂时中断或停止,导致其正常用户无法访问。
|
||||||
|
|
||||||
分布式拒绝服务攻击(distributed denial-of-service attack,DDoS),指攻击者使用网络上两个或以上被攻陷的电脑作为“僵尸”向特定的目标发动“拒绝服务”式攻击。
|
分布式拒绝服务攻击(distributed denial-of-service attack,DDoS),指攻击者使用两个或以上被攻陷的电脑作为“僵尸”向特定的目标发动“拒绝服务”式攻击。
|
||||||
|
|
||||||
# 参考资料
|
# 参考资料
|
||||||
|
|
||||||
|
@ -9,6 +9,7 @@
|
|||||||
* [三、可靠性](#三可靠性)
|
* [三、可靠性](#三可靠性)
|
||||||
* [发送端的可靠性](#发送端的可靠性)
|
* [发送端的可靠性](#发送端的可靠性)
|
||||||
* [接收端的可靠性](#接收端的可靠性)
|
* [接收端的可靠性](#接收端的可靠性)
|
||||||
|
* [参考资料](#参考资料)
|
||||||
<!-- GFM-TOC -->
|
<!-- GFM-TOC -->
|
||||||
|
|
||||||
|
|
||||||
@ -29,15 +30,10 @@
|
|||||||
发布与订阅模式和观察者模式有以下不同:
|
发布与订阅模式和观察者模式有以下不同:
|
||||||
|
|
||||||
- 观察者模式中,观察者和主题都知道对方的存在;而在发布与订阅模式中,发布者与订阅者不知道对方的存在,它们之间通过频道进行通信。
|
- 观察者模式中,观察者和主题都知道对方的存在;而在发布与订阅模式中,发布者与订阅者不知道对方的存在,它们之间通过频道进行通信。
|
||||||
- 观察者模式是同步的,当事件触发时,主题会去调用观察者的方法,然后等待方法返回;而发布与订阅模式是异步的,发布者向频道发送一个消息之后,就不需要关心订阅者何时去订阅这个消息。
|
- 观察者模式是同步的,当事件触发时,主题会调用观察者的方法,然后等待方法返回;而发布与订阅模式是异步的,发布者向频道发送一个消息之后,就不需要关心订阅者何时去订阅这个消息,可以立即返回。
|
||||||
|
|
||||||
<div align="center"> <img src="../pics//bee1ff1d-c80f-4b3c-b58c-7073a8896ab2.jpg"/> </div><br>
|
<div align="center"> <img src="../pics//bee1ff1d-c80f-4b3c-b58c-7073a8896ab2.jpg"/> </div><br>
|
||||||
|
|
||||||
参考:
|
|
||||||
|
|
||||||
- [Observer vs Pub-Sub](http://developers-club.com/posts/270339/)
|
|
||||||
- [消息队列中点对点与发布订阅区别](https://blog.csdn.net/lizhitao/article/details/47723105)
|
|
||||||
|
|
||||||
# 二、使用场景
|
# 二、使用场景
|
||||||
|
|
||||||
## 异步处理
|
## 异步处理
|
||||||
@ -78,3 +74,8 @@
|
|||||||
|
|
||||||
- 保证接收端处理消息的业务逻辑具有幂等性:只要具有幂等性,那么消费多少次消息,最后处理的结果都是一样的。
|
- 保证接收端处理消息的业务逻辑具有幂等性:只要具有幂等性,那么消费多少次消息,最后处理的结果都是一样的。
|
||||||
- 保证消息具有唯一编号,并使用一张日志表来记录已经消费的消息编号。
|
- 保证消息具有唯一编号,并使用一张日志表来记录已经消费的消息编号。
|
||||||
|
|
||||||
|
# 参考资料
|
||||||
|
|
||||||
|
- [Observer vs Pub-Sub](http://developers-club.com/posts/270339/)
|
||||||
|
- [消息队列中点对点与发布订阅区别](https://blog.csdn.net/lizhitao/article/details/47723105)
|
||||||
|
@ -770,7 +770,7 @@ public class HeapSort<T extends Comparable<T>> extends Sort<T> {
|
|||||||
|
|
||||||
| 算法 | 稳定 | 时间复杂度 | 空间复杂度 | 备注 |
|
| 算法 | 稳定 | 时间复杂度 | 空间复杂度 | 备注 |
|
||||||
| :---: | :---: |:---: | :---: | :---: |
|
| :---: | :---: |:---: | :---: | :---: |
|
||||||
| 选择排序 | ×| N<sup>2</sup> | 1 | |
|
| 选择排序 | × | N<sup>2</sup> | 1 | |
|
||||||
| 冒泡排序 | √ | N<sup>2</sup> | 1 | |
|
| 冒泡排序 | √ | N<sup>2</sup> | 1 | |
|
||||||
| 插入排序 | √ | N \~ N<sup>2</sup> | 1 | 时间复杂度和初始顺序有关 |
|
| 插入排序 | √ | N \~ N<sup>2</sup> | 1 | 时间复杂度和初始顺序有关 |
|
||||||
| 希尔排序 | × | N 的若干倍乘于递增序列的长度 | 1 | |
|
| 希尔排序 | × | N 的若干倍乘于递增序列的长度 | 1 | |
|
||||||
|
30
notes/缓存.md
30
notes/缓存.md
@ -6,6 +6,7 @@
|
|||||||
* [五、缓存问题](#五缓存问题)
|
* [五、缓存问题](#五缓存问题)
|
||||||
* [六、数据分布](#六数据分布)
|
* [六、数据分布](#六数据分布)
|
||||||
* [七、一致性哈希](#七一致性哈希)
|
* [七、一致性哈希](#七一致性哈希)
|
||||||
|
* [参考资料](#参考资料)
|
||||||
<!-- GFM-TOC -->
|
<!-- GFM-TOC -->
|
||||||
|
|
||||||
|
|
||||||
@ -29,10 +30,6 @@
|
|||||||
|
|
||||||
- LRU(Least Recently Used):最近最久未使用策略,优先淘汰最久未使用的数据,也就是上次被访问时间距离现在最远的数据。该策略可以保证内存中的数据都是热点数据,也就是经常被访问的数据,从而保证缓存命中率。
|
- LRU(Least Recently Used):最近最久未使用策略,优先淘汰最久未使用的数据,也就是上次被访问时间距离现在最远的数据。该策略可以保证内存中的数据都是热点数据,也就是经常被访问的数据,从而保证缓存命中率。
|
||||||
|
|
||||||
参考资料:
|
|
||||||
|
|
||||||
- [缓存那些事](https://tech.meituan.com/cache_about.html)
|
|
||||||
|
|
||||||
# 二、LRU
|
# 二、LRU
|
||||||
|
|
||||||
以下是一个基于 双向链表 + HashMap 的 LRU 算法实现,对算法的解释如下:
|
以下是一个基于 双向链表 + HashMap 的 LRU 算法实现,对算法的解释如下:
|
||||||
@ -143,10 +140,6 @@ public class LRU<K, V> implements Iterable<K> {
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
源代码:
|
|
||||||
|
|
||||||
- [CyC2018/Algorithm](https://github.com/CyC2018/Algorithm/tree/master/Caching)
|
|
||||||
|
|
||||||
# 三、缓存位置
|
# 三、缓存位置
|
||||||
|
|
||||||
## 浏览器
|
## 浏览器
|
||||||
@ -169,7 +162,7 @@ public class LRU<K, V> implements Iterable<K> {
|
|||||||
|
|
||||||
使用 Redis、Memcache 等分布式缓存将数据缓存在分布式缓存系统中。
|
使用 Redis、Memcache 等分布式缓存将数据缓存在分布式缓存系统中。
|
||||||
|
|
||||||
相对于本地缓存来说,分布式缓存单独部署,可以根据需求分配硬件资源。不仅如此,服务器集群都可以访问分布式缓存。而本地缓存需要在服务器集群之间进行同步,实现和性能开销上都非常大。
|
相对于本地缓存来说,分布式缓存单独部署,可以根据需求分配硬件资源。不仅如此,服务器集群都可以访问分布式缓存,而本地缓存需要在服务器集群之间进行同步,实现和性能开销上都非常大。
|
||||||
|
|
||||||
## 数据库缓存
|
## 数据库缓存
|
||||||
|
|
||||||
@ -177,7 +170,7 @@ MySQL 等数据库管理系统具有自己的查询缓存机制来提高 SQL 查
|
|||||||
|
|
||||||
# 四、CDN
|
# 四、CDN
|
||||||
|
|
||||||
内容分发网络(Content distribution network,CDN)是一种通过互连的网络系统,利用更靠近用户的服务器更快更可靠地将 HTML、CSS、JavaScript、音乐、图片、视频等静态资源分发给用户。
|
内容分发网络(Content distribution network,CDN)是一种互连的网络系统,它利用更靠近用户的服务器从而更快更可靠地将 HTML、CSS、JavaScript、音乐、图片、视频等静态资源分发给用户。
|
||||||
|
|
||||||
CDN 主要有以下优点:
|
CDN 主要有以下优点:
|
||||||
|
|
||||||
@ -187,11 +180,6 @@ CDN 主要有以下优点:
|
|||||||
|
|
||||||
<div align="center"> <img src="../pics//15313ed8-a520-4799-a300-2b6b36be314f.jpg"/> </div><br>
|
<div align="center"> <img src="../pics//15313ed8-a520-4799-a300-2b6b36be314f.jpg"/> </div><br>
|
||||||
|
|
||||||
参考资料:
|
|
||||||
|
|
||||||
- [内容分发网络](https://zh.wikipedia.org/wiki/%E5%85%A7%E5%AE%B9%E5%82%B3%E9%81%9E%E7%B6%B2%E8%B7%AF)
|
|
||||||
- [How Aspiration CDN helps to improve your website loading speed?](https://www.aspirationhosting.com/aspiration-cdn/)
|
|
||||||
|
|
||||||
# 五、缓存问题
|
# 五、缓存问题
|
||||||
|
|
||||||
## 缓存穿透
|
## 缓存穿透
|
||||||
@ -213,7 +201,7 @@ CDN 主要有以下优点:
|
|||||||
|
|
||||||
- 为了防止缓存在同一时间大面积过期导致的缓存雪崩,可以通过观察用户行为,合理设置缓存过期时间来实现;
|
- 为了防止缓存在同一时间大面积过期导致的缓存雪崩,可以通过观察用户行为,合理设置缓存过期时间来实现;
|
||||||
- 为了防止缓存服务器宕机出现的缓存雪崩,可以使用分布式缓存,分布式缓存中每一个节点只缓存部分的数据,当某个节点宕机时可以保证其它节点的缓存仍然可用。
|
- 为了防止缓存服务器宕机出现的缓存雪崩,可以使用分布式缓存,分布式缓存中每一个节点只缓存部分的数据,当某个节点宕机时可以保证其它节点的缓存仍然可用。
|
||||||
- 也可以在进行缓存预热,避免在系统刚启动不久由于还未将大量数据进行缓存而导致缓存雪崩。
|
- 也可以进行缓存预热,避免在系统刚启动不久由于还未将大量数据进行缓存而导致缓存雪崩。
|
||||||
|
|
||||||
## 缓存一致性
|
## 缓存一致性
|
||||||
|
|
||||||
@ -243,10 +231,6 @@ CDN 主要有以下优点:
|
|||||||
- 能保持数据原有的顺序;
|
- 能保持数据原有的顺序;
|
||||||
- 并且能够准确控制每台服务器存储的数据量,从而使得存储空间的利用率最大。
|
- 并且能够准确控制每台服务器存储的数据量,从而使得存储空间的利用率最大。
|
||||||
|
|
||||||
参考资料:
|
|
||||||
|
|
||||||
- 大规模分布式存储系统
|
|
||||||
|
|
||||||
# 七、一致性哈希
|
# 七、一致性哈希
|
||||||
|
|
||||||
Distributed Hash Table(DHT) 是一种哈希分布方式,其目的是为了克服传统哈希分布在服务器节点数量变化时大量数据失效的问题。
|
Distributed Hash Table(DHT) 是一种哈希分布方式,其目的是为了克服传统哈希分布在服务器节点数量变化时大量数据失效的问题。
|
||||||
@ -267,6 +251,10 @@ Distributed Hash Table(DHT) 是一种哈希分布方式,其目的是为了
|
|||||||
|
|
||||||
数据不均匀主要是因为节点在哈希环上分布的不均匀,这种情况在节点数量很少的情况下尤其明显。解决方式是通过增加虚拟节点,然后将虚拟节点映射到真实节点上。虚拟节点的数量比真实节点来得大,那么虚拟节点在哈希环上分布的均匀性就会比原来的真实节点好,从而使得数据分布也更加均匀。
|
数据不均匀主要是因为节点在哈希环上分布的不均匀,这种情况在节点数量很少的情况下尤其明显。解决方式是通过增加虚拟节点,然后将虚拟节点映射到真实节点上。虚拟节点的数量比真实节点来得大,那么虚拟节点在哈希环上分布的均匀性就会比原来的真实节点好,从而使得数据分布也更加均匀。
|
||||||
|
|
||||||
参考资料:
|
# 参考资料
|
||||||
|
|
||||||
|
- 大规模分布式存储系统
|
||||||
|
- [缓存那些事](https://tech.meituan.com/cache_about.html)
|
||||||
- [一致性哈希算法](https://my.oschina.net/jayhu/blog/732849)
|
- [一致性哈希算法](https://my.oschina.net/jayhu/blog/732849)
|
||||||
|
- [内容分发网络](https://zh.wikipedia.org/wiki/%E5%85%A7%E5%AE%B9%E5%82%B3%E9%81%9E%E7%B6%B2%E8%B7%AF)
|
||||||
|
- [How Aspiration CDN helps to improve your website loading speed?](https://www.aspirationhosting.com/aspiration-cdn/)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user