9/10字节技术中台一面凉经

本文探讨了分布式锁在项目中的应用,重点讲解了Redis组件的setnx指令原理,以及如何通过UUID避免误解锁。同时,针对Redis分布式锁可能遇到的问题,如实例挂起后的处理进行了分析。此外,还深入剖析了Java中字符串常量池和堆内存的分配情况。
摘要由CSDN通过智能技术生成

1、 你说你的项目用到的公司的分布式锁组件,这个组件什么实现原理,你能讲一讲吗?

分布式锁要保证

  • 互斥性。 对同一个key进行操作。使用redis的setnx指令,该key不存在时才能设置成功,如果存在则不操作。
  • 避免死锁的发生。 设置key时同时为该key设置过期时间。
  • 避免误解锁。 将该key的值设置成对应的ip值。当然也有可能被该机器实例的不同redis实例误解锁。因此可以使用UUID作为值。

使用redis分布式锁存在问题
设置key和过期时间不是原子操作: setNx保证
防止误解锁: 设置value为UUID
假设这么一个场景,setnx了获得了锁,锁的时间没有到期,但是持有锁的redis实例挂了,这个时候存在一些问题,你觉得这个问题该怎么解决?

Java基础考核

在这里插入图片描述
String byteStyle =“Inspire Creativity” + “,” + “Enrich Life”
这段代码生成了几个string对象:
首先在堆中找"Inspire Creativity"字符串,不存在,则使用new String创建一个对象。
后面","、“Enrich Life"也分别创建对象。
由于String是不可变的,使用“+”实际上是先把String转为StringBuilder然后使用StringBuilder的append方法添加,所以"Inspire Creativity” + “,”
实际上是:

StringBuilder sb = new StringBuilder(“Inspire Creativity”)
sb.append(“,”);
然后在返回新的String对象,return sb.toString()

所以一共生成6个对象。

在这里插入图片描述

String str = new String(“abc”),“abc”在内存中是怎么分配的?

堆和字符串常量池中,当你new String(“abc”)时,其实会先在字符串常量区生成一个abc的对象,然后new String()时会在堆中分配空间,然后此时会把字符串常量区中abc复制一个给堆中的String,故abc应该在堆中和字符串常量区

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值