1.Redis介绍Redis是一个高性能的键值存储系统,支持多种数据结构。包含五种基本类型String(字符串)、Hash(哈希)、List(列表)、Set(集合)、Zset(有序集合),和三种特殊类型Geo(地理位置)、HyperLogLog(基数统计)、Bitmaps(位图)。每种数据结构都是为了解决特定问题而设计的,适用不同的场景。想要用好Redis,必须了解底层实现原理和使用技巧,同时结合具体的业务场景和需求进行选择和使用。无论是工作还是面试中,这些必备的知识。下面就详细介绍一下每种数据类型的使用方式、实现原理和适用场景。2.String(字符串)String(字符串)是Redis中最
1.Redis介绍Redis是一个高性能的键值存储系统,支持多种数据结构。包含五种基本类型String(字符串)、Hash(哈希)、List(列表)、Set(集合)、Zset(有序集合),和三种特殊类型Geo(地理位置)、HyperLogLog(基数统计)、Bitmaps(位图)。每种数据结构都是为了解决特定问题而设计的,适用不同的场景。想要用好Redis,必须了解底层实现原理和使用技巧,同时结合具体的业务场景和需求进行选择和使用。无论是工作还是面试中,这些必备的知识。下面就详细介绍一下每种数据类型的使用方式、实现原理和适用场景。2.String(字符串)String(字符串)是Redis中最
上篇文章我们讲了synchronized的用法和实现原理,我们总爱说synchronized是重量级锁,volatile是轻量级锁。为什么volatile是轻量级锁,体现在哪些方面?以及volatile的作用和实现原理是怎样的?本篇带你一块学习一下。1.volatile是什么?volatile是Java提供的一种轻量级的同步机制。与synchronized修饰方法、代码块不同,volatile只用来修饰变量。并且与synchronized、ReentrantLock等重量级锁不同的是,volatile更轻量级,因为它不会引起线程上下文的切换和调度。2.volatile的作用说volatile作
上篇文章我们讲了synchronized的用法和实现原理,我们总爱说synchronized是重量级锁,volatile是轻量级锁。为什么volatile是轻量级锁,体现在哪些方面?以及volatile的作用和实现原理是怎样的?本篇带你一块学习一下。1.volatile是什么?volatile是Java提供的一种轻量级的同步机制。与synchronized修饰方法、代码块不同,volatile只用来修饰变量。并且与synchronized、ReentrantLock等重量级锁不同的是,volatile更轻量级,因为它不会引起线程上下文的切换和调度。2.volatile的作用说volatile作
synchronized作为Java程序员最常用同步工具,很多人却对它的用法和实现原理一知半解,以至于还有不少人认为synchronized是重量级锁,性能较差,尽量少用。但不可否认的是synchronized依然是并发首选工具,连volatile、CAS、ReentrantLock都无法动摇synchronized的地位。synchronized是工作面试中的必备技能,今天就跟着一灯一块深入剖析synchronized的底层原理。1.synchronized作用synchronized是Java提供一种隐式锁,无需开发者手动加锁释放锁。保证多线程并发情况下数据的安全性,实现了同一个时刻只有一
synchronized作为Java程序员最常用同步工具,很多人却对它的用法和实现原理一知半解,以至于还有不少人认为synchronized是重量级锁,性能较差,尽量少用。但不可否认的是synchronized依然是并发首选工具,连volatile、CAS、ReentrantLock都无法动摇synchronized的地位。synchronized是工作面试中的必备技能,今天就跟着一灯一块深入剖析synchronized的底层原理。1.synchronized作用synchronized是Java提供一种隐式锁,无需开发者手动加锁释放锁。保证多线程并发情况下数据的安全性,实现了同一个时刻只有一
上篇文章谈到BlockingQueue的使用场景,并重点分析了ArrayBlockingQueue的实现原理,了解到ArrayBlockingQueue底层是基于数组实现的阻塞队列。但是BlockingQueue的实现类中,有一种阻塞队列比较特殊,就是SynchronousQueue(同步移交队列),队列长度为0。作用就是一个线程往队列放数据的时候,必须等待另一个线程从队列中取走数据。同样,从队列中取数据的时候,必须等待另一个线程往队列中放数据。这样特殊的队列,有什么应用场景呢?1.SynchronousQueue用法先看一个SynchronousQueue的简单用例:/***@author一
上篇文章谈到BlockingQueue的使用场景,并重点分析了ArrayBlockingQueue的实现原理,了解到ArrayBlockingQueue底层是基于数组实现的阻塞队列。但是BlockingQueue的实现类中,有一种阻塞队列比较特殊,就是SynchronousQueue(同步移交队列),队列长度为0。作用就是一个线程往队列放数据的时候,必须等待另一个线程从队列中取走数据。同样,从队列中取数据的时候,必须等待另一个线程往队列中放数据。这样特殊的队列,有什么应用场景呢?1.SynchronousQueue用法先看一个SynchronousQueue的简单用例:/***@author一
作者:宁海翔1前言对象拷贝,是我们在开发过程中,绕不开的过程,既存在于Po、Dto、Do、Vo各个表现层数据的转换,也存在于系统交互如序列化、反序列化。Java对象拷贝分为深拷贝和浅拷贝,目前常用的属性拷贝工具,包括Apache的BeanUtils、Spring的BeanUtils、Cglib的BeanCopier、mapstruct都是浅拷贝。1.1深拷贝深拷贝:对基本数据类型进行值传递,对引用数据类型,创建一个新的对象,并复制其内容称为深拷贝。深拷贝常见有以下四种实现方式:构造函数Serializable序列化实现Cloneable接口JSON序列化1.2浅拷贝浅拷贝:对基本数据类型进行值
作者:宁海翔1前言对象拷贝,是我们在开发过程中,绕不开的过程,既存在于Po、Dto、Do、Vo各个表现层数据的转换,也存在于系统交互如序列化、反序列化。Java对象拷贝分为深拷贝和浅拷贝,目前常用的属性拷贝工具,包括Apache的BeanUtils、Spring的BeanUtils、Cglib的BeanCopier、mapstruct都是浅拷贝。1.1深拷贝深拷贝:对基本数据类型进行值传递,对引用数据类型,创建一个新的对象,并复制其内容称为深拷贝。深拷贝常见有以下四种实现方式:构造函数Serializable序列化实现Cloneable接口JSON序列化1.2浅拷贝浅拷贝:对基本数据类型进行值