11 jaryle

尚未进行身份认证

我要认证

暂无相关简介

等级
TA的排名 2k+

Transactional超时时间控制与mysql事务超时时间

项目使用的是spring+mybatis+mysql,今天,我需要把处理一个业务就是,当用户出金失败时,事务能够回滚,同时减少用户的等待时间,因为我发现当处理失败时,用户需要等上1分钟以上的时间,这是不合理的。那么经过一系列的调查发现:spring的事务超时(使用Java注解方式)和mysql InnoDB事务超时是相互关联的。在一个需要进行事务回滚的方法上加入@Transactional的事务注解,timeout超时时间设置为2秒,也就是说发生事务回滚后,2秒钟后对用户响应。 @Trans.

2020-08-31 15:16:16

java stream list转map

java 8 使用stream流来对集合进行处理:Stream将List转换为Map,使用Collectors.toMap方法进行转换背景:User类,类中分别有id,name,age三个属性。List集合,userList,存储User对象1、指定key-value,value是对象中的某个属性值。Map<Integer,String> userMap1 = userList.stream().collect(Collectors.toMap(User::getId,User.

2020-07-29 10:26:37

同步锁可以使用字符串对象做锁需要注意的事项

Java中使用String作同步锁在Java中String是一种特殊的类型存在,在jdk中String在创建后是共享常量池的,即使在jdk1.8之后实现有所不同,但是功能还是差不多的。借助这个特点我们可以使用String来作同步的锁,比如更新用户信息的时候,可以使用用户的名称作为同步锁,这样不同的用户就可以使用不同的锁,提升并发性能。这个特点扩展开来适当的场景就非常之多了。只不过正因为String的特殊性,java还包含了更多的与字符串相关的工具类,如StringBuffer、StringBui

2020-07-05 12:32:12

线程池ThreadPoolExecutor的三种队列区别

使用方法:1.SynchronousQueueprivate static ExecutorService cachedThreadPool = new ThreadPoolExecutor(4, Runtime.getRuntime().availableProcessors() * 2, 0, TimeUnit.MILLISECONDS, new SynchronousQueue<>(), r -> new Thread(r, "ThreadTest"));Synchronou

2020-06-29 16:45:52

缓存同步、如何保证缓存一致性、缓存误用(^_^)

缓存误用缓存,是互联网分层架构中,非常重要的一个部分,通常用它来降低数据库压力,提升系统整体性能,缩短访问时间。有架构师说“缓存是万金油,哪里有问题,加个缓存,就能优化”,缓存的滥用,可能会导致一些错误用法。缓存,你真的用对了么?误用二:使用缓存未考虑雪崩常规的缓存玩法,如上图:服务先读缓存,缓存命中则返回缓存不命中,再读数据库什么时候会产生雪崩?答:如果缓存挂掉,所有的请求会压到数据库,如果未提前做容量预估,可能会把数据库压垮(在缓存恢复之前,数据库可能一直都起不来),导

2020-06-05 15:17:19

锁和事务冲突

单机里面,完美解决了锁与事务一、使用锁的原因分析:1、使用锁的目的------------多个外部线程同时来竞争使用同一资源时,会彼此影响,导致混乱------------锁的目的,将资源的使用做排它性处理,使同一时间,仅一个线程能访问资源2、并不是所有的资源,都无法同时服务多个线程 ------ 比如,无状态的资源3、无成员变量/成员变量不存在变化的类---- 就是无状态类 ----- 这种类是线程安全的4、有状态的对象,也不一定是不安全的---------- 如果状态变化

2020-06-01 17:48:13

git merge --abort的使用情况

今天的项目工程文件产生了冲突,没办法,显示包内容。三下五除二把冲突解决了,结果发现项目的project文件还是不能打开,但是已经无法回归到解决冲突之前的状态了。执行git merge --abort命令回到解决冲突之前的状态。再重新执行git pull操作。重新解决冲突, 注意看仔细了。总结一下该命令仅仅在合并后导致冲突时才使用。git merge --abort将会抛弃合并过程并且尝试重建合并前的状态。但是,当合并开始时如果存在未commit的文件,git merge --abort在某些情况下将

2020-06-01 10:04:39

RabbitMq常见面试题

使用RabbitMQ有什么好处?1.解耦,系统A在代码中直接调用系统B和系统C的代码,如果将来D系统接入,系统A还需要修改代码,过于麻烦!2.异步,将消息写入消息队列,非必要的业务逻辑以异步的方式运行,加快响应速度3.削峰,并发量大的时候,所有的请求直接怼到数据库,造成数据库连接异常如何避免消息重复投递或重复消费?mq在生产者发送消息时,mq内部会对每条消息生成一个唯一id,作为去重和幂等性的依据((消息投递失败并重传))避免重复的消息进入队列;在消息消费时,要求消息体中必须要有一.

2020-05-27 11:09:09

双向链表的结构图

2020-05-26 15:03:31

实现幂等性的几种方式

1、首先说下什么是幂等性呢对于同一笔业务操作,不管调用多少次,得到的结果都是一样的。2、幂等性设计我们以对接支付宝充值为例,来分析支付回调接口如何设计?如果我们系统中对接过支付宝充值功能的,我们需要给支付宝提供一个回调接口,支付宝回调信息中会携带(out_trade_no【商户订单号】,trade_no【支付宝交易号】),trade_no在支付宝中是唯一的,out_trade_no在商户系统中是唯一的。回调接口实现有以下实现方式。方式1(普通方式)过程如下:1.接收到支付宝支

2020-05-15 10:03:18

String类和常量池常见面试题

1、String的两种创建方式的区别String str1 = "abc";String str2 = new String("abc");sout(str1 == str2);//false其中,第一种方式是从常量池中获取对象,第二种方式是直接在堆内存中创建一个新的对象。2、String 类型的常量池它的主要使用方法有两种:  直接使用双引号声明出来的 St...

2020-04-07 11:20:13

java并发编程原子性类Atomic

1. 原子操作类介绍atomic的实现原理:CAS+volatileCAS是compare and swap的缩写,即比较后(比较内存中的旧值与预期值)交换(将旧值替换成预期值)。它是sun.misc包下Unsafe类提供的功能,需要底层硬件指令集的支撑。volatile变量是为了多个线程间变量的值能及时同步。在并发编程中很容易出现并发安全的问题,有一个很简单的例子就是...

2020-04-03 10:30:42

java基础细节汇总(^_^)

1 HashMap里的hashcode方法和equal方法什么时候需要重写?为什么需要重写?java 比较二个对象是否相等的时候,1 首先判断二个对象的hashcode值是否相等,2 如果相等则比较equal值是否相等,当hashcode和equal值都相等时,则二个对象相等2 为什么要重写equal方法?答案:因为Object的equals方法默认是两个对象的引用的比较,意思就是指向同...

2020-03-30 11:56:54

mybatis中对于多条件if test传递参数为0

今天工作中发现一个Long类型的参数没有传到sql中去,在sql xml配置文件中是使用if test标签判断:<if test="version != null and version != ''">and version = #{version,jdbcType=BigInt}</if>version我传递的参数是0L但是在sql执行时,总是判断没有传...

2020-03-11 23:31:49

select * from for update对于多个事务的隔离情况

事务与锁的关系1、事务与锁是不同的。事务具有ACID(原子性、一致性、隔离性和持久性),锁是用于解决隔离性的一种机制。2、事务的隔离级别通过锁的机制来实现。另外锁有不同的粒度,同时事务也是有不同的隔离级别的。3、开启事务就自动加锁。行级锁:共享锁(s):又称读锁。允许一个事务去读一行,阻止其他事务获得相同数据集的排他锁。若事务T对数据对象A加上S锁,则事务T可以读A但不能修改A...

2020-03-09 10:14:47

ThreadLocal 内存泄漏问题(^_^)

ThreadLocal 的作用是提供线程内的局部变量,这种变量在线程的生命周期内起作用,减少同一个线程内多个函数或者组件之间一些公共变量的传递的复杂度。但是如果滥用ThreadLocal,就可能会导致内存泄漏。下面,我们将围绕三个方面来分析ThreadLocal 内存泄漏的问题:ThreadLocal 实现原理ThreadLocal为什么会内存泄漏ThreadLocal 最佳实践T...

2020-01-15 15:56:20

Java 对象动态设置属性值

Maven引用: <!-- https://mvnrepository.com/artifact/cglib/cglib --> <dependency> <groupId>cglib</groupId> <artifactId>cglib</artif...

2019-12-23 10:48:06

分布式锁介绍的最清楚(^_^^_^)

为什么用分布式锁?在讨论这个问题之前,我们先来看一个业务场景:系统A是一个电商系统,目前是一台机器部署,系统中有一个用户下订单的接口,但是用户下订单之前一定要去检查一下库存,确保库存足够了才会给用户下单。由于系统有一定的并发,所以会预先将商品的库存保存在redis中,用户下单的时候会更新redis的库存。此时系统架构如下:但是这样一来会产生一个问题:假如某个时刻,redis...

2019-10-12 15:34:01

分布式锁超时问题的处理(只是参考,推荐使用redission框架和ZK做分布式锁)

1、redis分布式锁的基本实现redis加锁命令:SETNX resource_name my_random_value PX 30000 这个命令的作用是在只有这个key不存在的时候才会设置这个key的值(NX选项的作用),超时时间设为30000毫秒(PX选项的作用) 这个key的值设为“my_random_value”。这个值必须在所有获取锁请求的客户端里保持唯一。SET...

2019-10-11 15:54:38

JDK1.8引入的stream

为什么需要 StreamStream 作为 Java 8 的一大亮点,它与 java.io 包里的 InputStream 和 OutputStream 是完全不同的概念。它也不同于 StAX 对 XML 解析的 Stream,也不是 Amazon Kinesis 对大数据实时处理的 Stream。Java 8 中的 Stream 是对集合(Collection)对象功能的增强,它专注于对集合...

2019-10-10 11:10:24

查看更多

勋章 我的勋章
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
  • 勤写标兵Lv2
    勤写标兵Lv2
    授予每个自然周发布4篇到6篇原创IT博文的用户。本勋章将于次周周三上午根据用户上周的博文发布情况由系统自动颁发。