From 02c75583bdbf76d05f54aad3c8b056cf64eb1eef Mon Sep 17 00:00:00 2001 From: Wonder Date: Sat, 18 Oct 2025 23:51:14 +0800 Subject: [PATCH] =?UTF-8?q?=20=F0=9F=93=9DDocs:=20=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=E5=AF=B9=E4=BA=8E=E7=82=B9=E8=B5=9E=E6=8E=A5=E5=8F=A3=E9=94=81?= =?UTF-8?q?=E7=9A=84=E8=A7=A3=E9=87=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 617aeee..5740972 100644 --- a/README.md +++ b/README.md @@ -41,4 +41,19 @@ CREATE UNIQUE INDEX idx_userId_blogId ON thumb (userId, blogId); 答: - 博客服务中需要使用点赞服务查询博客对应的点赞情况列表以返回对应视图。 - 点赞服务中需要使用博客服务更新单条博客的点赞计数器。 -- 两个服务之间产生了**循环依赖**,Spring Boot 2.6 以后的版本默认不允许循环依赖,这里可以使用懒加载的方式避免这一问题。 \ No newline at end of file +- 两个服务之间产生了**循环依赖**,Spring Boot 2.6 以后的版本默认不允许循环依赖,这里可以使用懒加载的方式避免这一问题。 + +3. 点赞接口加锁对象是什么? + +答: +- 加锁目的是为了避免用户并发请求造成数据不一致。 +- 不能对帖子加锁,因为帖子是全局的,加锁会导致其他用户无法点赞。 +- 因此需要对用户加锁,故而实际上是将每个用户的 id 当作锁。 + +4. 点赞接口的锁具体如何处理? + +答: +`synchronized (("LOCK-USERID-" + loginUser.getId().toString()).intern()) ` +- 每个用户持有一个唯一 id,因此考虑把 id 对应的 String 常量池对象加锁。 +- 为了避免对程序中其他需要使用该字符串常量的地方产生影响,这里对字符串作出处理 `"LOCK-USERID-" + loginUser.getId().toString()` +- 并且我们需要将字符串放到常量池中,调用 `intern()` 方法。