自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(404)
  • 收藏
  • 关注

原创 mysql 5.7基于组提交的并行复制

mysql

2022-10-27 19:58:04 615 1

原创 mysql幻读问题

问题:什么样的情况叫做幻读? Mysql 可重复读隔离级别下,到底能不能阻止幻读? 什么是当前读,什么是快照读?幻读的定义:事务A 按照一定条件进行数据读取, 期间事务B 插入了相同搜索条件的新数据,事务A再次按照原先条件进行读取时,发现了事务B 新插入的数据 称为幻读如果事务A 按一定条件搜索, 期间事务B 删除了符合条件的某一条数据,导致事务A 再次读取时数据少了一条。这种情况归为 不可重复读准备工作:Mysql 隔离级别为 可重复读;CREATE TABLE `a.

2021-12-01 14:37:02 779

原创 git 回退版本操作

1、当前分支下git log --pretty=oneline查看完成后,需要回退到那个分支就复制版本号,如果只是回退到上一次操作git reset --hard HEAD^或者 git reset --hard 60037ab9451099f1e4b8b77ca5156403024d20d02、本地分支已经回滚到 5efd5a8aa5d5b22a73a1569087faa57d5484adf9框红的是另外一个分支的内容,所以回滚到 5efd5a8aa5d5b22a73a1.

2021-11-16 19:44:21 734

原创 mysql Innodb在RR级别如何避免幻读

什么是幻读 事务不是独立执行时发生的一种现象,例如第一个事务对一个表中的数据进行了修改,这种修改涉及到表中的全部数据行。 同时,第二个事务也修改这个表中的数据,这种修改是向表中插入一行新数据。那么,以后就会发生操作第一个事务的用户发现表中还有没有修改的数据行,就好象 发生了幻觉一样。 mysql如何实现避免幻读 在快照读读情况下,mysql通过mvcc来避免幻读。 在当前读读情况下,mysql通过next-key来避免幻读 什么是mvcc mvcc全称是multi v..

2021-07-23 11:18:47 375

原创 java @ConfigurationProperties(springboot)和@Value(java)的区别

在编写项目代码时,我们要求更灵活的配置,更好的模块化整合。在 Spring Boot 项目中,为满足以上要求,我们将大量的参数配置在 application.properties 或 application.yml 文件中,通过@ConfigurationProperties注解,我们可以方便的获取这些参数值...

2021-06-10 16:33:53 209

原创 java DAO层注解@param和控制层@RequestParam注解

@Param:用来在DAO层中声明参数,如:List<News> selectByUserIdAndOffset(@Param("userId") int userId, @Param("offset") int offset, @Param("limit") int limit);

2021-06-10 16:05:23 1838

原创 微服务阿里分布式事务解决方案seata(^_^)

Seata 是什么?Seata 是一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务。Seata 将为用户提供了 AT、TCC、SAGA 和 XA 事务模式,为用户打造一站式的分布式解决方案。

2021-06-04 15:29:04 242

原创 Spring注解中@Configuration和@Configurable

@Configuration写成了@Configurable,这两个长得很像,所以顺便探究下,有什么区别。@Configuration该注解是可以用来替代XML文件。以前我们配置bean时,都是写在applicationContext.xml文件中的。有了这个注解后,我们就可以编写一个类在其上面加上该注解。即配置类。在配置类中可以在方法上加@Bean注解定义其中的Bean@Configurable现在假设,我们想在非Spring管理的类中使用依赖注入;比如:手动new出来..

2021-05-20 10:46:02 921 1

原创 NIO中的零拷贝技术

现在好多rpc框架调用都是使用netty作为网路通信框架的底层原理netty使用Java NIO的同步非阻塞,Java NIO的技术核心:零拷贝技术Kafka,dubbo,MQ都是采用Java NIO零拷贝技术提升文件读取性能。2. JavaNIO中的零拷贝定义从WIKI的定义中,我们看到“零拷贝”是指计算机操作的过程中,CPU不需要为数据在内存之间的拷贝消耗资源。而它通常是指计算机在网络上发送文件时,不需要将文件内容拷贝到用户空间(User Space)而直接在内核空间(Kern.

2021-03-30 17:58:52 337

转载 二叉树、平衡二叉树、B树,B+树

索引是一种数据结构,用于帮助我们在大量数据中快速定位到我们想要查找的数据。索引最形象的比喻就是图书的目录了。注意这里的大量,数据量大了索引才显得有意义,如果我想要在 [1,2,3,4] 中找到 4 这个数据,直接对全数据检索也很快,没有必要费力气建索引再去查找。索引在 MySQL 数据库中分三类:B+ 树索引 Hash 索引 全文索引我们今天要介绍的是工作开发中最常接触到的 InnoDB 存储引擎中的 B+ 树索引。要介绍 B+ 树索引,就不得不提二叉查找树,平衡二叉树和 B 树这三种数据结

2021-02-05 09:55:53 939

原创 Spring中的Aware(^_^)

简介Spring框架中提供了许多实现了Aware接口的类,这些类主要是为了辅助Spring访问容器中的数据,比如BeanNameAware,这个类能够在Spring容器加载的过程中将Bean的名字(id)赋值给变量。常用的AwareBeanNameAware:能够获取bean的名称,即是id BeanFactoryAware:获取BeanFactory实例 ApplicationContextAware:获取ApplicationContext MessageSourceAwar..

2021-02-01 16:34:24 2162

原创 Java中object类finalize()方法

java提供了一个finalize方法,可以帮助我们进行资源释放,类似于C++中的析构函数。但是目前普遍的认识是不要使用,为什么呢?就是因为对java虚拟机的垃圾回收有影响。这篇文章对其进行一个说明。一、为什么有影响我们都知道一个对象如果没有了任何引用,java虚拟机就认为这个对象没什么用了,就会对其进行垃圾回收,但是如果这个对象包含了finalize函数,性质就不一样了。怎么不一样了呢?java虚拟机在进行垃圾回收的时候,一看到这个对象类含有finalize函数,就把这个函数交给Finaliz

2021-01-29 18:30:08 668

原创 mybatis sql注入

2021-01-25 17:23:12 178

原创 JDK8新特性

1.1 函数式编程 1.2 Lambda表达式 1.2.1 语法 1.2.2 函数接口 1.2.3 类型检查、类型推断 1.2.4 局部变量限制 1.2.5 使用示例 2.1 流介绍 2.2 使用流 2.3 并行流 4.1 介绍 4.2 使用说明 4.3 注意事项 6.1 LocalDate/LocalTime/LocalDateTime 6.2 TemporalAdjusters 6.3 DateTimeFormatter下面对几个常用的特性做下重点说明。一

2021-01-15 16:34:01 393 1

原创 mysql主从复制(读写分离)数据不一致解决方案(^_^^_^^_^)

mysql引入redis后,暂不考虑主从复制和读写分离,我们的策略是:一、读的时候更新缓存呢(推荐)分析如下:我们在操作数据库写的时候,删除缓存,更新数据库,然后在读的时候,更新缓存(这个操作如果不是强一致性的情况下,我们这4步操作都不需要加锁,可以通过设置key的过期时间来解决数据的最终一致性)二、写的时候更新缓存呢(不推荐)分析如下:我们在操作数据库写的时候,去更新缓存,更新数据库,读的时候直接读缓存即可(这样在高并发的场景下,需要保证这二步操作的原子性,影响性能,不推荐)在读.

2020-12-10 15:30:38 3331 1

原创 在MySQL中重复的插入数据不抛异常(性能待验证)

最常见的方式就是为字段设置主键或唯一索引,当插入重复数据时,抛出错误,程序终止,但这会给后续处理带来麻烦,因此需要对插入语句做特殊处理,尽量避开或忽略异常,下面我简单介绍一下,感兴趣的朋友可以尝试一下:这里为了方便演示,我新建了一个user测试表,主要有id,username,sex,address这4个字段,其中主键为id(自增),同时对username字段设置了唯一索引:01 insert ignore into(这个可以使用下)即插入数据时,如果数据存在,则忽略此次插入,前提条件是插入的数

2020-11-12 17:25:10 3292

原创 MySQL中,当update修改数据与原数据相同时会再次执行吗?

一、背景本文主要测试MySQL执行update语句时,针对与原数据(即未修改)相同的update语句会在MySQL内部重新执行吗?二、测试环境MySQL5.7.25Centos 7.4三、binlog_format为ROW1、参数image2、测试步骤session1imagesession2imagesession1image3、总结在binlog_format=row和binlog_row_image=FULL时,由于MyS

2020-11-12 17:01:34 423

原创 Git撤销&回滚操作(git reset 和 get revert)(^_^^_^)

git的工作流工作区:即自己当前分支所修改的代码,git add xx 之前的!不包括 git add xx 和 git commit xxx 之后的。暂存区:已经 git add xxx 进去,且未 git commit xxx 的。本地分支:已经git commit -m xxx 提交到本地分支的。这里写图片描述代码回滚在上传代码到远程仓库的时候,不免会出现问题,任何过程都有可能要回滚代码:1、在工作区的代码git checkout -- a.txt # 丢弃某个文件,..

2020-11-12 14:57:13 9514

原创 git版本回退的最佳操作

使用git开发的过程中,存在误提交的时候怎么办呢?不用慌张,强大的git提供了两种版本回退的方式,可以让你恢复提交之前的内容:方式一:reset(不推荐)通过reset的方式,把head指针指向之前的某次提交,reset之后,后面的版本就找不到了操作步骤如下:1、在gitlab上找到要恢复的版本号,如:139dcfaa558e3276b30b6b2e5cbbb9c00bbdca962、在客户端执行如下命令(执行前,先将本地代码切换到对应分支):gitreset--har...

2020-11-12 11:38:26 1701

原创 spring事务提交后一系列相关异步操作(例如MQ或者线程池)(^_^^_^)

1、场景在常见的操作中,我们需要在数据库操作完成(事务提交完成)后进行一系列相关操作,如redis更新操作、发送消息到其他系统等操作。2、方案可以使用spring自带的事务处理机制完成。继承 TransactionSynchronizationAdapter 类执行相关操作。先看一下TransactionSynchronizationAdapter 的源码方法/* * Copyright 2002-2012 the original author or authors. * * Li

2020-10-13 14:36:19 1070

原创 @PostConstruct注解

1、从Java EE5规范开始,Servlet中增加了两个影响Servlet生命周期的注解,@PostConstruct和@PreDestroy,这两个注解被用来修饰一个非静态的void()方法。写法有如下两种方式:@PostConstruct注解的方法将会在依赖注入完成后被自动调用。@PostConstructpublic void someMethod(){}或者public @PostConstruct void someMethod(){}被@PostConstruct修饰的

2020-10-12 18:37:05 430

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

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

2020-08-31 15:16:16 2025

原创 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 8524 1

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

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

2020-07-05 12:32:12 1457

原创 线程池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 2354

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

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

2020-06-05 15:17:19 538

原创 锁和事务冲突

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

2020-06-01 17:48:13 4230

原创 RabbitMq常见面试题

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

2020-05-27 11:09:09 278

原创 双向链表的结构图

2020-05-26 15:03:31 1199

原创 实现幂等性的几种方式

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

2020-05-15 10:03:18 2020

原创 String类和常量池常见面试题

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

2020-04-07 11:20:13 408 2

原创 java并发编程原子性类Atomic

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

2020-04-03 10:30:42 153

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

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

2020-03-30 11:56:54 314

原创 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 1363

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

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

2020-03-09 10:14:47 2068

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

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

2020-01-15 15:56:20 296

原创 Java 对象动态设置属性值

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

2019-12-23 10:48:06 2235

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

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

2019-10-12 15:42:13 391

原创 分布式锁超时问题的处理(只是参考,推荐使用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-12 15:31:08 9331 3

原创 JDK1.8引入的stream

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

2019-10-10 11:15:06 313

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除