From e3ae3dbc601c9c40445f178e31e98d502ddf298f Mon Sep 17 00:00:00 2001 From: Guide Date: Sat, 22 Apr 2023 10:43:21 +0800 Subject: [PATCH] =?UTF-8?q?[docs=20update]serialVersionUID=20=E8=A7=A3?= =?UTF-8?q?=E9=87=8A=E5=AE=8C=E5=96=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/java/basis/serialization.md | 8 ++++++++ docs/system-design/schedule-task.md | 2 +- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/docs/java/basis/serialization.md b/docs/java/basis/serialization.md index 0f04d8a3..ce95d768 100644 --- a/docs/java/basis/serialization.md +++ b/docs/java/basis/serialization.md @@ -83,6 +83,14 @@ public class RpcRequest implements Serializable { `static` 修饰的变量是静态变量,位于方法区,本身是不会被序列化的。 `static` 变量是属于类的而不是对象。你反序列之后,`static` 变量的值就像是默认赋予给了对象一样,看着就像是 `static` 变量被序列化,实际只是假象罢了。 +官方说明如下: + +> A serializable class can declare its own serialVersionUID explicitly by declaring a field named `"serialVersionUID"` that must be `static`, `final`, and of type `long`; +> +> 如果想显式指定 `serialVersionUID` ,则需要在类中使用 `static` 和 `final` 关键字来修饰一个 `long` 类型的变量,变量名字必须为 `"serialVersionUID"` 。 + +也就是说,`serialVersionUID` 只是用来被 JVM 识别,实际并没有被序列化。 + **如果有些字段不想进行序列化怎么办?** 对于不想进行序列化的变量,可以使用 `transient` 关键字修饰。 diff --git a/docs/system-design/schedule-task.md b/docs/system-design/schedule-task.md index 3ed550f7..9f621a5e 100644 --- a/docs/system-design/schedule-task.md +++ b/docs/system-design/schedule-task.md @@ -147,7 +147,7 @@ Kafka、Dubbo、ZooKeeper、Netty 、Caffeine 、Akka 中都有对时间轮的 时间轮简单来说就是一个环形的队列(底层一般基于数组实现),队列中的每一个元素(时间格)都可以存放一个定时任务列表。 -时间轮中的每个时间格代表了时间轮的基本时间跨度或者说时间精度,加入时间一秒走一个时间格的话,那么这个时间轮的最高精度就是 1 秒(也就是说 3 s 和 3.9s 会在同一个时间格中)。 +时间轮中的每个时间格代表了时间轮的基本时间跨度或者说时间精度,假如时间一秒走一个时间格的话,那么这个时间轮的最高精度就是 1 秒(也就是说 3 s 和 3.9s 会在同一个时间格中)。 下图是一个有 12 个时间格的时间轮,转完一圈需要 12 s。当我们需要新建一个 3s 后执行的定时任务,只需要将定时任务放在下标为 3 的时间格中即可。当我们需要新建一个 9s 后执行的定时任务,只需要将定时任务放在下标为 9 的时间格中即可。