commit
695989ba03
|
@ -1,4 +1,4 @@
|
||||||
<!-- GFM-TOC -->
|
<!-- GFM-TOC -->
|
||||||
* [一、线程状态转换](#一线程状态转换)
|
* [一、线程状态转换](#一线程状态转换)
|
||||||
* [新建(New)](#新建new)
|
* [新建(New)](#新建new)
|
||||||
* [可运行(Runnable)](#可运行runnable)
|
* [可运行(Runnable)](#可运行runnable)
|
||||||
|
@ -264,7 +264,7 @@ public void run() {
|
||||||
|
|
||||||
## InterruptedException
|
## InterruptedException
|
||||||
|
|
||||||
通过调用一个线程的 interrupt() 来中断该线程,如果该线程处于阻塞、限期等待或者无限期等待状态,那么就会抛出 InterruptedException,从而提前结束该线程。但是不能中断 I/O 阻塞和 synchronized 锁阻塞。
|
通过调用一个线程的 interrupt() 来中断该线程,如果该线程处于阻塞、有限期等待或者无限期等待状态,那么就会抛出 InterruptedException,从而提前结束该线程。但是不能中断 I/O 阻塞和 synchronized 锁阻塞。
|
||||||
|
|
||||||
对于以下代码,在 main() 中启动一个线程之后再中断它,由于线程中调用了 Thread.sleep() 方法,因此会抛出一个 InterruptedException,从而提前结束线程,不执行之后的语句。
|
对于以下代码,在 main() 中启动一个线程之后再中断它,由于线程中调用了 Thread.sleep() 方法,因此会抛出一个 InterruptedException,从而提前结束线程,不执行之后的语句。
|
||||||
|
|
||||||
|
@ -1198,7 +1198,7 @@ public static void main(String[] args) throws InterruptedException {
|
||||||
|
|
||||||
可见性指当一个线程修改了共享变量的值,其它线程能够立即得知这个修改。Java 内存模型是通过在变量修改后将新值同步回主内存,在变量读取前从主内存刷新变量值来实现可见性的。
|
可见性指当一个线程修改了共享变量的值,其它线程能够立即得知这个修改。Java 内存模型是通过在变量修改后将新值同步回主内存,在变量读取前从主内存刷新变量值来实现可见性的。
|
||||||
|
|
||||||
主要有有三种实现可见性的方式:
|
主要有三种实现可见性的方式:
|
||||||
|
|
||||||
- volatile
|
- volatile
|
||||||
- synchronized,对一个变量执行 unlock 操作之前,必须把变量值同步回主内存。
|
- synchronized,对一个变量执行 unlock 操作之前,必须把变量值同步回主内存。
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
<!-- GFM-TOC -->
|
<!-- GFM-TOC -->
|
||||||
* [一、概述](#一概述)
|
* [一、概述](#一概述)
|
||||||
* [二、数据类型](#二数据类型)
|
* [二、数据类型](#二数据类型)
|
||||||
* [STRING](#string)
|
* [STRING](#string)
|
||||||
|
@ -363,7 +363,7 @@ List 是一个双向链表,可以通过 lpop 和 lpush 写入和读取消息
|
||||||
|
|
||||||
在分布式场景下,无法使用单机环境下的锁来对多个节点上的进程进行同步。
|
在分布式场景下,无法使用单机环境下的锁来对多个节点上的进程进行同步。
|
||||||
|
|
||||||
可以使用 Reids 自带的 SETNX 命令实现分布式锁,除此之外,还可以使用官方提供的 RedLock 分布式锁实现。
|
可以使用 Redis 自带的 SETNX 命令实现分布式锁,除此之外,还可以使用官方提供的 RedLock 分布式锁实现。
|
||||||
|
|
||||||
## 其它
|
## 其它
|
||||||
|
|
||||||
|
@ -405,7 +405,7 @@ Redis 可以为每个键设置过期时间,当键过期时,会自动删除
|
||||||
|
|
||||||
可以设置内存最大使用量,当内存使用量超出时,会施行数据淘汰策略。
|
可以设置内存最大使用量,当内存使用量超出时,会施行数据淘汰策略。
|
||||||
|
|
||||||
Reids 具体有 6 种淘汰策略:
|
Redis 具体有 6 种淘汰策略:
|
||||||
|
|
||||||
| 策略 | 描述 |
|
| 策略 | 描述 |
|
||||||
| :--: | :--: |
|
| :--: | :--: |
|
||||||
|
@ -555,7 +555,7 @@ Sentinel(哨兵)可以监听集群中的服务器,并在主服务器进入
|
||||||
|
|
||||||
分片是将数据划分为多个部分的方法,可以将数据存储到多台机器里面,这种方法在解决某些问题时可以获得线性级别的性能提升。
|
分片是将数据划分为多个部分的方法,可以将数据存储到多台机器里面,这种方法在解决某些问题时可以获得线性级别的性能提升。
|
||||||
|
|
||||||
假设有 4 个 Reids 实例 R0,R1,R2,R3,还有很多表示用户的键 user:1,user:2,... ,有不同的方式来选择一个指定的键存储在哪个实例中。
|
假设有 4 个 Redis 实例 R0,R1,R2,R3,还有很多表示用户的键 user:1,user:2,... ,有不同的方式来选择一个指定的键存储在哪个实例中。
|
||||||
|
|
||||||
- 最简单的方式是范围分片,例如用户 id 从 0\~1000 的存储到实例 R0 中,用户 id 从 1001\~2000 的存储到实例 R1 中,等等。但是这样需要维护一张映射范围表,维护操作代价很高。
|
- 最简单的方式是范围分片,例如用户 id 从 0\~1000 的存储到实例 R0 中,用户 id 从 1001\~2000 的存储到实例 R1 中,等等。但是这样需要维护一张映射范围表,维护操作代价很高。
|
||||||
- 还有一种方式是哈希分片,使用 CRC32 哈希函数将键转换为一个数字,再对实例数量求模就能知道应该存储的实例。
|
- 还有一种方式是哈希分片,使用 CRC32 哈希函数将键转换为一个数字,再对实例数量求模就能知道应该存储的实例。
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
<!-- GFM-TOC -->
|
<!-- GFM-TOC -->
|
||||||
* [20. 表示数值的字符串](#20-表示数值的字符串)
|
* [20. 表示数值的字符串](#20-表示数值的字符串)
|
||||||
* [题目描述](#题目描述)
|
* [题目描述](#题目描述)
|
||||||
* [解题思路](#解题思路)
|
* [解题思路](#解题思路)
|
||||||
|
@ -318,7 +318,7 @@ private void swap(TreeNode root) {
|
||||||
|
|
||||||
# 28 对称的二叉树
|
# 28 对称的二叉树
|
||||||
|
|
||||||
[NowCder](https://www.nowcoder.com/practice/ff05d44dfdb04e1d83bdbdab320efbcb?tpId=13&tqId=11211&tPage=1&rp=1&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking)
|
[NowCoder](https://www.nowcoder.com/practice/ff05d44dfdb04e1d83bdbdab320efbcb?tpId=13&tqId=11211&tPage=1&rp=1&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking)
|
||||||
|
|
||||||
## 题目描述
|
## 题目描述
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
<!-- GFM-TOC -->
|
<!-- GFM-TOC -->
|
||||||
* [一、跨站脚本攻击](#一跨站脚本攻击)
|
* [一、跨站脚本攻击](#一跨站脚本攻击)
|
||||||
* [二、跨站请求伪造](#二跨站请求伪造)
|
* [二、跨站请求伪造](#二跨站请求伪造)
|
||||||
* [三、SQL 注入攻击](#三sql-注入攻击)
|
* [三、SQL 注入攻击](#三sql-注入攻击)
|
||||||
|
@ -43,7 +43,7 @@
|
||||||
|
|
||||||
### 2. 过滤特殊字符
|
### 2. 过滤特殊字符
|
||||||
|
|
||||||
例如将 `<` 转义为 `<`,将 `>` 转义为 `>`,从而避免 HTML 和 Jascript 代码的运行。
|
例如将 `<` 转义为 `<`,将 `>` 转义为 `>`,从而避免 HTML 和 Javascript 代码的运行。
|
||||||
|
|
||||||
富文本编辑器允许用户输入 HTML 代码,就不能简单地将 `<` 等字符进行过滤了,极大地提高了 XSS 攻击的可能性。
|
富文本编辑器允许用户输入 HTML 代码,就不能简单地将 `<` 等字符进行过滤了,极大地提高了 XSS 攻击的可能性。
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user