![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java
文章平均质量分 71
掉发的小王
与其临渊羡⻥,不如退⽽结⽹。小王博客基地
展开
-
全网最全synchronized锁升级过程
在面试题中经常会有这么一道面试题,谈一下synchronized锁升级过程?之前背了一些,很多文章也说了,到底怎么什么条件才会触发升级,一直不太明白。实践是检验真理的唯一标准,今天就和大家一起实践一下,什么条件才会升级!经过实战,我们知道了每一个的切换条件,可以在面试中好好的回答了。不至于面试官反问一下就不坚定了!关于切换到重量级锁后,有兴趣的话,可以下载openJDK源码去看一下关于和源码下载地址:是 OpenJDK 中实现 Java同步机制的核心部分,它负责管理对象监视器。原创 2023-11-14 10:50:10 · 1455 阅读 · 14 评论 -
Java基本数据类型只有八种?第九种告诉你
今天看了一下Oracle官网的JVM规范,发现基本数据不止有八种。这个东西一直都是说着八种,官网把放在八种基本数据类型一起说的,我们可以理解为第九种!常说的八种用于存储常见的数值和字符数据,第九种是指向 Java 虚拟机指令的操作码的指针,属于内部使用的!说的时候一般忽略,小编这里把它作为第九种不知道合不合适,欢迎讨论哈!结论咱们都说的差不多了,下面我们一起来看看定义和文档吧!Oracle JVM规范1.8文档byteshortintlongcharfloatdoubleboolean。原创 2023-09-25 09:50:10 · 131 阅读 · 0 评论 -
再使用System.out.println()打印收拾东西回家
今天没事干的时候,无意间点到了一个中的println()方法,一个闪亮的关键字冲击着我的眼睛。不知道大家知不知道,那就是加锁的。但凡有锁的地方肯定会性能是有损耗的,当然得在并发的情况下!无锁—>偏向锁—>自旋锁—>轻量级锁—>重量级锁轻量级锁和偏向锁通常不涉及内核态切换在到重量级锁时涉及到用户态和内核态的切换,很影响性能的!有兴趣的可以自己研究一下synchronized的锁升级和降级!下面我们回归正题,看一下这个!虽然在快速测试和学习阶段很有用,但在实际的应用程序中,频繁使用它可能会导致一系列问题。原创 2023-09-19 09:42:48 · 188 阅读 · 0 评论 -
踩坑日记:BigDecimal四大坑,真的会用BigDecimal?
最近在项目中使用BigDecimal存储订单的数量,数据库保留三位小数。需求是数量变化了就会有其他操作,头脑发热顺手写了个equals进行判断是不是相等!后来怎么测都是不相等!百思不得其解,看了一下equals方法才知道!BigDecimal值的比较官方推荐是compareTo的,如果数据库没有保留小数,用equals是没问题,但是不建议,非常不建议!!前几天写了一下BigDecimalSpringboot全局配置实现BigDecimal返回前端去除小数点后多余的0今天就总结一下BigDecimal。原创 2023-06-30 07:30:00 · 678 阅读 · 1 评论 -
Arrays.asList()得到的是真的ArrayList?操作修改集合大坑
今天在看阿里Java规范的时候看到一条规范,经常使用,却一直没有注意的一条!【强制】使用工具类把数组转换成集合时,不能使用其修改集合相关的方法,它的方法会抛出异常。『说明』:asList 的返回对象是一个Arrays 内部类并没有实现集合的修改方法。Arrays.asList 体现的是适配器模式,只是转换接口,后台的数据仍是数组。第一种情况:list.add(“yangguanbao”);运行时异常。第二种情况:str[0] = “change”;list 中的元素也会随之修改,反之亦然。原创 2023-06-13 15:57:30 · 463 阅读 · 2 评论 -
Java中常见字符串拼接九种方式,总有一款你喜欢!
在 Java 编程中,字符串拼接是一项非常基础的操作,它涉及到了很多日常开发工作中常见的场景,例如拼接 SQL 语句、构建 HTTP 请求参数等等。因此,对于掌握好字符串拼接技巧不仅有助于提高代码效率,而且能够避免一些潜在的性能问题。下面我们就来列举出来几种方式,搭配例子!在 Java 中,字符串拼接是很常见的操作。不同的场景需要选择合适的字符串拼接方式,以达到更高的效率和更好的代码可读性。理解字符串拼接的不同方式,选择适合当前场景的方法能够提高代码效率、可读性和可维护性。原创 2023-06-12 07:30:00 · 20886 阅读 · 0 评论 -
Java SPI概念、实现原理、优缺点、应用场景、使用步骤、实战SPI案例
在当今互联网时代,应用程序越来越复杂,对于我们开发人员来说,如何实现高效的组件化和模块化已经成为了一个重要的问题。而Java SPI(Service Provider Interface)机制,作为一种基于接口的服务发现机制,可以帮助我们更好地解决这个问题。这样会程序具有高度的灵活性、解耦、可扩展性!在本篇博客中,我们将深入探讨Java SPI 的概念、实现原理、优缺点、应用场景和使用步骤,并通过实战演示来说明如何使用 Java SPI 实现各种功能。原创 2023-06-01 07:00:00 · 15514 阅读 · 37 评论 -
Spring事务失效常见的五种方式及其解决方案【源码篇】
在Web 开发中,Spring 框架已经成为了众多开发者的首选。Spring 的声明式事务管理是其中最重要的特性之一,它可以帮助我们简化业务逻辑的复杂度,并且确保在出现异常情况时数据的一致性。事务失效情况很常见,但我们只要注意,就可以避免事情发生!在本文中,我将详细地介绍Spring 声明式事务的源码实现和事务失效常见的五种情况,并给出有效的解决方案。其实我们常说的事务失效是声明式事务()的失效,本文也是从声明式事务来进行演示的!原创 2023-05-22 17:35:57 · 2673 阅读 · 18 评论 -
告别空指针让代码变优雅,Optional使用图文例子源码解读
我们在开发中最常见的异常就是,防不胜防啊,相信大家肯定被坑过!这种基本出现在获取数据库信息中、三方接口,获取的对象为空,再去get出现!解决方案当然简单,只需要判断一下,不是空在去后续操作,为空返回!所有在JDK8时出现了专门处理的方案,出来很早了,但是小编惭愧一直没有去使用它!最近在看《Java开发手册》,一直想着提高自己的代码水平,文中就指出了使用Optional来解决!Optional.ofNullable(需要判断的对象).ifPresent(具体操作)原创 2023-02-28 09:23:00 · 1229 阅读 · 18 评论 -
Java一次返回中国所有省市区三级树形级联+前端vue展示【200ms内】
中国省市区还是不少的,省有34个,市有391个,区有1101个,这是以小编的库里的,可能不是最新的,但是个数也差不了多少。当一次返回所有的数据,并且还要组装成一个三级树,一般的for,会循环次。这样就是千万级的,加上与数据库交互,你跑半天也跑不完。最后的处理是组长提供的思路,果然很快。如果大家有比小编更加快的方式,欢迎留言交流哈!如果觉得有用,还请动动大家的发财小手点点关注哈!!!有缘人才可以看得到的哦!!!点击访问!小编自己的网站,里面也是有很多好的文章哦!原创 2022-09-08 15:49:29 · 2555 阅读 · 1 评论 -
lombok注解@SneakyThrows探索以及与try catch、throws Exception的区别
一、前言今天小编在一个开源项目中看到了lombok注解@SneakyThrows,于是探索实践了一下,有些事情还是要自己操作一下,不然还真的不知道!!以前就看到项目里有@SneakyThrows注解,一直没去管他和手动try catch还有往上抛异常有什么区别?今天就和大家一起探索一下!!先说一下结论,赶时间的朋友看了就可以走了哈!!我们发现,@SneakyThrows注解在编译的时候自动帮我们try catch,使用@SneakyThrows是为了让代码更加简洁,加快我们的开发效率!!二、导入原创 2022-05-10 12:42:30 · 1750 阅读 · 2 评论 -
Json格式的字符串修改对应Key的Value值,并保存到原json字符串中
一、前言小编今天在工作工程中,遇到了一个处理json字符串的问题,经过半小时的测试,最终解决了此问题!记录一下,为后来人铺路。小编先说一下需求哈:我们要把json字符串中的指定key的value修改并重新返回一个修改后的json字符串!二、需求确认简单说就是:把[{"childs":[{"address":"山东","phone":"12344444"}],"password":"123","username":"wang"}]childs集合里新增一条,然后再替换一下原来的json字符原创 2022-05-09 14:31:57 · 4600 阅读 · 6 评论 -
SpringBoot返回枚举对象中的所有属性以对象的形式返回(一个@JSONType解决)
一、前言最近小编在开发中遇到个问题,就是关于枚举方面的使用。一些固定不变的数据我们可以通过枚举来定义,减少对数据库的查询。是一种常见的开发技巧!常见场景的需求是:通过某一个属性获取对应的枚举属性的另一个值;还有就是常量枚举,比如一下统一返回状态和编码!小编的需求是把枚举中的所有属性都取出来,转成实体类那种返回给前端!最简单的解决就是拿到所有的然后便利加到新的集合里,这样还需要定义一个实体类来接收转一下!这样有点麻烦,小编也是无意发现了,项目中有以前大佬留下来的一个注解@JSONType(seria原创 2022-03-24 09:30:49 · 3918 阅读 · 2 评论 -
SpringBoot+Vue+Mybatis+Redis实现汽车租赁系统【毕设专用、源码、数据库设计】
一、前言汽车租赁系统,很常见的一个系统,但是网上还是以前的老框架实现的,于是我打算从设计到开发都用现在比较流行的新框架。想学习或者做毕设的可以私信联系哦!!二、技术栈- 后端技术SpringSpringBootMybatis- 前端技术vueElement UIaxiosnodeecharts- 数据库MySQLRedis三、管理员界面展示管理员登录界面:管理员修改密码界面:添加车系界面:添加车辆界面:用户管理界面:订单管理界面:评价管理原创 2022-03-14 08:51:58 · 1382 阅读 · 2 评论 -
JDK自带javap命令反编译class文件和Jad反编译class文件(推荐使用jad)
一、前言我们在日常学习中,对一个java代码有问题,不知道jvm内部怎么进行解析的时候;有个伟大壮举就是反编译,这样就可以看到jvm内部怎么进行对这个java文件解析的!我们可以使用JDK自带的javap命令来进行反编译,反编译出来的如果看不太明白,可以使用Jad工具来配合使用。还有就是把jar包完全反编译为我们写的代码的是GD-GUI,有兴趣可以去官网看一下哈,小编这里不做进一步说明。JD-GUI官网下载地址。我们今天以String string = new String("wang") + new原创 2022-03-09 14:51:25 · 5732 阅读 · 2 评论 -
JDK8中String的intern()方法详细解读【内存图解+多种例子+1.1w字长文】
文章目录一、前言二、图文理解String创建对象1.例子一2.例子二3.例子三4.例子四5.例子五6.例子六三、深入理解intern()方法1. 源码查看2. 例子一3. 例子二4. 例子三5. 例子四6. 例子五7. 例子六四、总结一、前言String字符串在我们日常开发中最常用的,当然还有他的两个兄弟StringBuilder和StringBuilder。他三个的区别也是面试中经常问到的,大家如果不知道,就要先去看看了哈!最近也是看周志明老师的深入JVM一书中写到关于intern()方法的介绍,小编原创 2022-03-07 18:07:15 · 1117 阅读 · 6 评论 -
【全网最全】JSR303参数校验与全局异常处理(从理论到实践别用if判断参数了)
文章目录一、前言二、JSR303简介三、导入依赖四、常用注解五、@Validated、@Valid区别六、常用使用测试1. 实体类添加校验2. 统一返回类型3. 测试类4. 普通测试结果5. 我们把异常返回给页面6. 异常处理结果七、抽离全局异常处理1. 心得体会2. 书写ExceptionControllerAdvice3. 测试结果八、分组校验1. 需求2. 创建分组接口(不需写任何内容)3. 在需要二义性的字段上添加分组4. 不同Controller添加校验规则5. 测试九、自定义校验1.定义自定义原创 2022-03-02 11:04:53 · 1515 阅读 · 4 评论 -
Java使用stream来把list集合转化为树形结构(一行解决超简单递归)
一、前言我们在日常开发中,必不可少的就是树形结构。有的时候可以使用mybatis的resultMap进行转化,有的时候需要进行Java进行手动转化为树结构。今天和大家分析一个JDK8新特性Stream来实现list到树形结构的转化!二、创建返回前端的实体类VOimport lombok.Data;import java.util.List;/** * @author wangzhenjun * @date 2022/2/28 10:28 */@Datapublic class Node原创 2022-03-01 11:23:37 · 6991 阅读 · 2 评论 -
JUC在深入面试题——三种方式实现线程等待和唤醒(wait/notify,await/signal,LockSupport的park/unpark)
文章目录一、前言二、wait/notify的使用1. 代码演示2. 执行结果3. 测试不在代码块执行(`把上面代码注释1给删除`)4. 修改代码5. 总结三、await/signal的使用1. 代码演示2. 执行结果3. 测试不在代码块执行(`把上面代码注释1给删除`)4. 修改代码5. 总结四、LockSupport的park/unpark的使用1. LockSupport介绍2. park源码查看3. unpark源码查看4. 代码演示5. 结果展示6. 修改代码7. 与前两者比的优点8.总结9.白话文原创 2022-02-22 16:57:44 · 773 阅读 · 0 评论 -
力扣算法经典第一题——两数之和(Java两种方式实现)
一、题目难度:简单给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。你可以按任意顺序返回答案。二、示例示例 1:输入:nums = [2,7,11,15], target = 9输出:[0,1]解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。示例 2:输入:nums原创 2022-02-21 17:52:38 · 711 阅读 · 0 评论 -
HashMap底层原理及jdk1.8源码解读【吐血整理1.3w字长文】
文章目录一、前言二、存储结构介绍三、源码分析之常用变量解读四、源码分析之构造方法解读五、源码分析之常用方法解读1、tableSizeFor方法解读2、hash方法解读3、put方法解读4、resize方法解读5、get和containsKey方法解读6、remove方法解读六、总结一、前言写在前面:小编码字收集资料花了一天的时间整理出来,对你有帮助一键三连走一波哈,谢谢啦!!HashMap在我们日常开发中可谓经常遇到,HashMap 源码和底层原理在现在面试中是必问的。所以我们要掌握一下,也是作为两年原创 2022-02-17 17:41:13 · 1186 阅读 · 0 评论 -
Java面试必问之线程池的创建使用、线程池的核心参数、线程池的底层工作原理
一、前言大家在面试过程中,必不可少的问题是线程池,小编也是在面试中被问啥傻了,JUC就了解的不多。加上做系统时,很少遇到,自己也是一知半解,最近看了尚硅谷阳哥的课,恍然大悟,特写此文章记录一下!如果还不了解线程池的小伙伴,一定要认真看完,你会有收获的哈!!二、线程池创建使用答:使用Executors看一下源码是有好多个,经常用的也就三个,今天就展示靠上的五种。//创建一个定长线程池,超出的线程会在队列中等待ExecutorService executorService = Executors.ne原创 2022-01-17 10:42:48 · 593 阅读 · 0 评论 -
集合不安全之 ArrayList及其三种解决方案【CopyOnWriteArrayList 、synchronizedList、Vector 】
文章目录一、前言二、为什么线程不安全三、解决方案一CopyOnWriteArrayList (推荐,读多写少场景)四、Collections.synchronizedList(加锁)五、Vector (加锁)六、synchronizedList、Vector都是加锁,区别?七、总结一、前言我们在高并发的场景下,难免会出现并发问题,特别是ArrayList这种常用的集合。这种事情还是要考虑的,今天就带大家一起看一下ArrayList为什么不安全?有哪些解决方案呢?二、为什么线程不安全1. 出错演示i原创 2022-01-06 08:00:00 · 727 阅读 · 2 评论 -
java计算两个字符串日期的相差天数【jdk8新特性LocalDateTime和Hutool两种方式实现】
一、前言我们在开发过程中,必不可少的就是对字符串日期的操作,特别是求相差天数。搜了一下大部分都是使用Calendar来进行计算的,今天我们来介绍两种比较好的方法。hutooljkd8新特性LocalDateTime二、Hutool实现1. 导入maven<dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-all</artifactId> &原创 2022-01-05 08:28:36 · 5688 阅读 · 2 评论 -
判断MultipartFile是否为空,全面判断
看了网上好多,不过都不全面,试试我的,包你满意// 看清楚导入的包import org.springframework.util.ObjectUtils;public String upload(@RequestParam("file") MultipartFile file){ if (ObjectUtils.isEmpty(file) || file.getSize() <= 0) { throw new SystemException("上传文件大小为空"); } retu原创 2021-12-29 08:00:00 · 9552 阅读 · 4 评论 -
IDEA高级Debug使用——对lambda表达式进行加断点,条件断点
一、前言我们在使用IDEA中最常用的就是debug,很多人只是让他停下来看一下,很多高阶的不知道怎么使用,小编也是最近才知道!所以马上分享给大家,这里主要是对Stream留的debug,也就是lambda表达式进行debug。还有条件断点,符合条件的才会被断点捕捉到。二、干货一:对lambda表达式进行加断点public class Debug { public static void main(String[] args) { debugStream(); }原创 2021-12-20 16:40:14 · 7308 阅读 · 0 评论 -
1-3年Java开发工程师面试心得分享,精选面试题40道[2021-11-18持续更新]
一、前言小编从事Java开发不到两年时间,最近也是面试过很多家公司,不说什么大厂。咱只能分享一下自己在面试过程中问到的问题,总结一下,希望可以帮助到您!!答案有时间会补上去,有了问题可以先自己百度一下,网上还是有很多的答案的。二、Java基础面试题1. 访问修饰符public,private,protected,default的区别?修饰符同包下子类当前类其他包下public可以可以可以可以protected可以可以可以不可以default可以原创 2021-11-18 15:58:48 · 1136 阅读 · 0 评论 -
计算两个字符串类型的日期相差的天数或者小时数,计算日期字符串到今天的年龄
一、前言我们在开发过程中经常遇到字符串类型的日期,我们会对他们进行种种的修改和调整,最近就是遇到了一个需求,让我们计算两个字符串类型的日期间隔,还有用户填完出生日期,后台处理一下给用户字段的age填上年龄。本来是自己计算的,后来发现了HuTool这个工具包帮助我们整合了,我们直接调用方法即可,接下来让我们试试吧!二、导入HuTool包<dependency> <groupId>cn.hutool</groupId> <artifactId>原创 2021-11-12 08:30:00 · 823 阅读 · 0 评论 -
你还在使用if来判断是否实体类或者某个属性为空吗?教你使用Assert.notNull()[断言]
一、前言最近在阅读公司项目的代码时,看到了一个工具类:org.springframework.util下的方法很多很好用,今天带大家一起了解一下这个工具类的**Assert.notNull()**方法,来告别if判断实体类是否为null和某个属性是否为null。二、方法展示import org.springframework.util.Assert;public class AssertTest { public static void main(String[] args) {原创 2021-11-11 08:30:00 · 1336 阅读 · 3 评论 -
解决单例模式中懒汉式不支持高并发,饿汉式不支持懒加载问题最简单方法——基于枚举类型的单例实现
一、前言解决单例模式中懒汉式不支持高并发,饿汉式不支持懒加载问题,确实很多小编也是写过—>DCL(Double Check Lock双重检锁机制)解决单例模式中懒汉式不支持高并发,饿汉式不支持懒加载问题静态内部类解决单例模式中懒汉式不支持高并发,饿汉式不支持懒加载问题大家都可以看一下。二、代码实现- 单例模式对象import java.util.concurrent.atomic.AtomicInteger;public class Single { private Ato原创 2021-11-10 08:30:00 · 855 阅读 · 0 评论 -
只会用DCL(Double Check Lock双重检锁机制)来解决懒汉式并发问题吗?静态内部类实现你不试试?
一、前言我们在网上随处可见使用DCL解决懒汉式中存在的并发问题,这样加锁也是很麻烦,最近看了极客时间的王老师的课,才知道静态内部类也可以轻松实现。如果DCL解决不太清楚,可以先看一下—>DCL解决懒汉式并发问题二、代码实现- 静态内部类代码import lombok.Data;import java.util.concurrent.atomic.AtomicInteger;@Datapublic class Phone { //手机余额 private Atomi原创 2021-11-09 08:30:00 · 485 阅读 · 0 评论 -
DCL(Double Check Lock双重检锁机制)解决单例模式中懒汉式不支持高并发,饿汉式不支持懒加载问题
一、前言我们在使用单例模式时,一般有两种选择,一个是懒汉式,一个是饿汉式。但是这两种都是有各自的缺点,无法满足我们的需求,所以DCL(Double Check Lock双端检锁机制)出现了,一种既支持延迟加载、又支持高并发的单例实现方式。如果不清楚懒汉式为什么不支持高并发可以看一下这篇文章—>单例模式的懒汉模式为什么在高并发中会出现问题二、具体实现- DCL单例模式import lombok.Data;import java.util.concurrent.atomic.AtomicI原创 2021-11-08 08:30:00 · 1105 阅读 · 0 评论 -
单例模式的懒汉模式为什么在高并发中会出现问题?一个代码例子告诉你
一、前言我们对于单例模式我觉得是23种设计模式中大家最熟悉的一个,但是我们真的理解清楚了吗?小编最近才想到都说懒汉模式不合适出现在高并发中,会出现并发问题,于是小编研究了一下才发现,今天就带大家用一个例子来证明是不是高并发会出现错误!!二、懒汉模式优缺点- 优点:懒汉式相对于饿汉式的优势是支持延迟加载- 缺定:懒汉式有性能问题,不支持高并发三、案例分析- 手机数量类:import lombok.Data;@Datapublic class Phone { //手机余量原创 2021-11-05 15:20:34 · 634 阅读 · 0 评论 -
面向对象、设计原则、设计模式、编程规范、重构,这五者有何关系?
文章目录一、前言二、总纲图二、面向对象三、设计原则四、设计模式五、编程规范六、代码重构七、五者之间的联系一、前言我们在实际开发中似乎只是为了实现一个需求而去进行开发,忘记了Java本身的优势点,原来的面向对象变成似乎还是面向过程面向数据库进行编程。封装、抽象、继承、多态似乎越来越多的人被忽略,一些设计模式也是生拉硬套,根本发挥不了其真正的优势和效率,代码规范更是少有人遵循,你会发现有的人写的代码杂乱无章。这是我听了王老师的课的一些感悟,自己也记录一下,为了自己复习和让更多的人可以学习到。这篇文章下面的内原创 2021-11-03 09:23:57 · 337 阅读 · 0 评论 -
[Java基础面试题一]深入谈谈final、finally、 finalize 有什么不同?吊打面试官
文章目录一、前言二、典型回答三、深入谈final四、深入谈finally五、深入谈finalize六、总结一、前言作为Java后端开发者,小编在面试过程中90%都会问到的Java基础面试题: final、finally、 finalize 有什么不同?以前都是简单说说用法和实践角度回答的.直到看了极客时间的课程在知道自己回答只是皮毛,路很长,写一篇博客出来让大家一起学习,如有侵权,联系删除哈!!!课程地址二、典型回答- final可以用来修饰类、方法、变量,分别有不同的意义,final 修饰的原创 2021-11-02 15:03:37 · 528 阅读 · 0 评论 -
Java实现微信拼手气红包随机金额算法
一、红包的架构设计简介本文是基于平台创建红包活动时即提前分配好红包金额的策略需要输入条件:总金额,红包数量,最小金额,最大金额 金额浮动阀值[0.0, 1.0]我们可以通过调节阀值来达到正态分布的效果二、生成随机红包工具类import java.math.BigDecimal;import java.util.ArrayList;import java.util.List;import java.util.Random;import java.util.concurrent.Copy转载 2021-10-08 13:46:49 · 1193 阅读 · 0 评论 -
Spring Cloud - Nacos与Eureka区别及如何选型
一、前言Nacos与Eureka均提供注册中心和服务治理功能,以下为两者差异和选型方案。二、功能差异模块NacosEureka说明注册中心是是服务治理基本功能,负责服务中心化注册配置中心是否Eureka需要配合Config实现配置中心,且不提供管理界面动态刷新是否Eureka需要配合MQ实现配置动态刷新,Nacos采用Netty保持TCP长连接实时推送可用区AZ是是对服务集群划分不同区域,实现区域隔离,并提供容灾自动切换分组是转载 2021-09-28 09:04:51 · 4556 阅读 · 0 评论 -
同步/异步/阻塞/非阻塞/BIO/NIO/AIO一文全搞懂(结合现实例子)
一、常规的误区假设有一个展示用户详情的需求,分两步,先调用一个HTTP接口拿到详情数据,然后使用适合的视图展示详情数据。如果网速很慢,代码发起一个HTTP请求后,就卡住不动了,直到十几秒后才拿到HTTP响应,然后继续往下执行。这个时候你问别人,刚刚代码发起的这个请求是不是一个同步请求,对方一定回答是。这是对的,它确实是。但你要问它为什么是呢?对方一定是这样回答的,“因为发起请求后,代码就卡住不动了,直到拿到响应后才可以继续往下执行”。我相信很多人也都是这样认为的,其实这是不对的,是把因果关系搞反了转载 2021-09-27 09:21:12 · 443 阅读 · 0 评论 -
Lombok插件@Accessors(chain = true)开启链式开发
一、来源@Accessors注解是来自这个包下—>lombok.experimental二、功能介绍@Accessors 注解用来配置lombok如何产生和显示get和set的方法,@Accessors(chain = true)加上参数以后就可以开启链式编程.传统set方法赋值(臃肿、占空间) Person person = new Person(); person.setName("wang"); person.setSex("男"); person.setEmail("123原创 2021-09-26 08:31:38 · 3711 阅读 · 2 评论 -
CAS场景及解决ABA问题
CAS场景及例子假如你往地上仍1万块钱,是不是一定会丢呢?这要看情况了,如果是在人来人往的都市,可以说肯定会丢的。如果你跑到无人区扔地上,可以说肯定不会丢。可以看到,都是把东西无保护的放到公共区域里,结果却相差很大。这说明安全问题还和公共区域的环境状况有关系。比如我把数据放到公共区域的堆内存中,但是始终都只会有1个线程,也就是单线程模型,那这数据肯定是安全的。再者说,2个线程操作同一个数据和200个线程操作同一个数据,这个数据的安全概率是完全不一样的。肯定线程越多数据不安全的概率越大,线程越少数据不转载 2021-09-23 08:49:56 · 352 阅读 · 0 评论