synchronized 加锁 this 和 class 的区别?

synchronized 是 Java 语言中处理并发问题的一种常用手段,它也被我们亲切地称之为“Java 内置锁”,由此可见其地位之高。然而 synchronized 却有着多种用法,当它修饰不同对象时,其意义也是不同的,下面我们一起来看。 ​

原创 点赞0 阅读650 收藏0 评论0 1 天前

RPC三连问:什么是RPC框架?实现原理呢?与SOA、REST有啥区别?

RPC (Remote Procedure Call)即远程过程调用,是分布式系统常见的一种通信方法。它允许程序调用另一个地址空间(通常是共享网络的另一台机器上)的过程或函数,而不用程序员显式编码这个远程调用的细节。 除 RPC 之外,常见的多系统数据交互方案还有分布式消息队列、HTTP 请求调用、数据库和分布式缓存等。 其中 RPC 和 HTTP 调用是没有经过中间件的,它们是端到端系统的直接数据交互。

原创 点赞1 阅读1023 收藏1 评论1 5 天前

进击大厂--Redis实战高频面试题解:缓存穿透、缓存击穿、缓存雪崩

进击大厂--Redis实战高频面试题解:缓存穿透、缓存击穿、缓存雪崩

原创 点赞1 阅读783 收藏1 评论1 6 天前

掌握JVM 运行时数据区,其实不是很难,加薪也是要技巧可言的.

Java 内存区域和内存模型是不一样的东西,内存区域是指 Jvm 运行时将数据分区域存储,强调对内存空间的划分。 而内存模型(Java Memory Model,简称 JMM )是定义了线程和主内存之间的抽象关系,即 JMM 定义了 JVM 在计算机内存(RAM)中的工作方式, 如果我们要想深入了解Java并发编程,就要先理解好Java内存模型。

原创 点赞1 阅读1057 收藏1 评论1 6 天前

关于MyBatis的三种分页方式,你学废了吗?

分页是我们在开发中绕不过去的一个坎!当你的数据量大了的时候,一次性将所有数据查出来不现实,所以我们一般都是分页查询的,减轻服务端的压力,提升了速度和效率!也减轻了前端渲染的压力! 注意:由于 java 允许的最大整数为 2147483647,所以 limit 能使用的最大整数也是 2147483647,一次性取出大量数据可能引起内存溢出,所以在大数据查询场合慎重使用!

原创 推荐 点赞1 阅读1198 收藏1 评论1 7 天前

用了这么久的PageHelper,你知道原生的分页查询原理和步骤吗?

分页查询则是在页面上将本来很多的数据分段显示,每页显示用户自定义的行数。可提高用户体验度,同时减少一次性加载,内存溢出风险。

原创 推荐 点赞1 阅读8373 收藏1 评论1 11 天前

SpringBoot 整合 Redis,一篇解决“缓存”的所有问题!

MySQL的自增id都定义了初始值,然后不断加步长。虽然自然数没有上限,但定义了表示这个数的字节长度,计算机存储就有上限。比如,无符号整型(unsigned int)是4个字节,上限就是2^32 - 1。那自增id用完,会怎么样?

原创 推荐 点赞1 阅读1239 收藏1 评论1 11 天前

Redis三连问:为什么要用 Redis?为什么是单线程的?缓存雪崩?

面试题1:为什么要用 Redis ?业务在哪块儿用到的? 追问1:Redis里有哪些数据类型? 追问2:Redis与Memcached有哪些区别? 追问3:那Redis怎样防止异常数据不丢失的?如何持久化? 面试题2:Redis为啥是单线程的? 追问1:单线程只使用了单核CPU,太浪费,有什么办法发挥多核CPU的性能嘛? 面试题3:聊一下对缓存穿透、缓存击穿、缓存雪崩的理解吧? 追问1:那你说一下针对缓存击穿的解决方法?

原创 推荐 点赞1 阅读1476 收藏2 评论1 13 天前

面试被问到HashMap底层原理?莫慌,我一次性给你讲清楚!

面试被问到HashMap底层原理?莫慌,我一次性给你讲清楚!

原创 推荐 点赞1 阅读556 收藏1 评论1 17 天前

怒肝15天,终将Kafka的 “重平衡” 一举拿下!

如果对RocketMQ或者对消息中间件有所了解的话,消费端在进行消息消费时至少需要先进行队列(分区)的负载,即一个消费组内的多个消费者如何对订阅的主题中的队列进行负载均衡,当消费者新增或减少、队列增加或减少时能否自动重平衡,做到应用无感知,直接决定了程序伸缩性,其说明图如下:

原创 推荐 点赞3 阅读2075 收藏1 评论1 18 天前

图文并茂,33张图解ReentrantReadWriteLock源码!

我的英文名叫ReentrantReadWriteLock(后面简称RRW),大家喜欢叫我读写锁,因为我常年混迹在读多写少的场景。

原创 推荐 点赞1 阅读1551 收藏1 评论1 19 天前

ArrayList和LinkedList使用不当,性能差距居然会如此之大?

在面试的时候,经常会被问到几个问题: ArrayList和LinkedList的区别,相信大部分朋友都能回答上: ArrayList是基于数组实现,LinkedList是基于链表实现 当随机访问List时,ArrayList比LinkedList的效率更高,等等 当被问到ArrayList和LinkedList的使用场景是什么时,大部分朋友的答案可能是: ArrayList和LinkedList在新增、删除元素时,LinkedList的效率要高于 ArrayList,而在遍历的时候,ArrayList的效率要高于LinkedList 那这个回答是否准确呢?今天我们就来研究研究!

原创 推荐 点赞2 阅读940 收藏1 评论1 20 天前

你有认真地看过 ConcurrentHashMap1.8 源码 吗?

在工作中我们经常会使用到HashMap,但是我们知道在并发环境下HashMap是线程不安全的,我们可以使用HashTable也是同HashMap一样是java.util包下属于java亲生的;但是如果你翻阅过HashTable的源码你会发现每个方法上都加了synchronized关键字;锁是方法级别的锁的颗粒度太大,就会影响性能!所以就算的java亲生的也不建议使用!那我们在并发环境下使用什么呢?这个时候Doug Lea大佬又站了出来,为什么是又呢?如果你看过我的AQS源码讲解你就知道AQS也是Doug Lea写的;可以说Doug Lea作者对HashMap进行了优化创作出了ConcurrentHashMap,同样是在JUC包下!

原创 点赞2 阅读861 收藏1 评论1 21 天前

为什么有了AtomicLong还要在JDK1.8推出了LongAdder?

为什么有了AtomicLong还要在JDK1.8推出了LongAdder?

原创 推荐 点赞1 阅读811 收藏1 评论1 21 天前