自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(21)
  • 资源 (1)
  • 收藏
  • 关注

原创 事务的特性

幻读是指在一个事务内部,无法看到其他并行事务插入的新记录,因为这些新记录被其他事务锁定,导致当前事务无法读取到这些新记录。在不可重复读隔离级别下,事务在读取某行数据时,其他事务可以修改该行数据,这就可能导致在同一事务中多次读取同一行数据时,结果不一致。为了解决不可重复读问题,需要正确地设置事务之间的隔离级别和锁定策略,以确保在事务执行期间,其他事务不能修改或读取该事务已经读取的数据。然而,在事务T1再次读取相同的数据时,由于事务T2的修改已经被撤销,数据又恢复到原始状态,导致无法重复读取相同的数据。

2023-09-01 10:44:20 1542

原创 Spring事务的传播行为(Propagation Behavior)

例如,如果methodA()在一个事务中调用methodB(),而methodB()没有事务,那么根据@Transactional注解的设置,methodB()将在自己的事务中执行,或者与methodA()的事务共享数据(如果@Transactional注解的传播属性设置为PROPAGATION_NESTED)。需要注意的是,事务传播是在方法调用时发生的,因此在一个事务中的方法调用另一个没有事务的方法时,将会根据@Transactional注解的设置来决定是否创建新的事务。

2023-09-01 09:11:08 151

原创 博客摘录「 【MySQL】事务及其隔离性/隔离级别」2023年8月31日

一般的数据库在可重复读情况的时候,无法屏蔽其他事务insert的数据,因为隔离性实现是对数据加锁完成的,而insert待插入的数据因为并不存在,那么一般加锁无法屏蔽这类问题,这会造成大部分内容虽然是可重复读的,但是insert的数据在可重复读情况被读取出来,导致多次查找时,会多查找出来新的记录,就如同产生了幻觉。这种现象,叫做幻读(phantom read,主要针对插入场景)。很明显,MySQL在RR级别的时候,是解决了幻读问题的(解决的方式是用Next-Key锁 (GAP+行锁)解决的。

2023-08-31 11:27:48 50

原创 JDK动态代理

所以,这段代码的作用就是生成最终的代理对象,方式就是获取到 Subject.class 接口中的所有方法,生成一个新的字节码类,在字节码类中注入 属性 handler,通过 handler 的 invok 方法调用目标对象的方法。动态代理就是一个代理对象,可以对传入的任何对象动态的生产代理对象,然后就可以通过代理对象调用目标方法。静态代理都是针对要代理的对象的方法写死成Java代码,然后调用静态代理对象的对应方法即可。

2023-08-31 09:55:35 64

转载 Java 中new String(“字面量“) 中 “字面量“ 是何时进入字符串常量池的?

因为在 JDK 1.7 之后,字符串常量池不一定就是存字符串对象的,还有可能存储的是一个指向堆中地址的引用,现在说的就是这种情况,注意了,下图是只调用了 s2.intern(),并没有返回给一个变量。首先对象的分配要付出时间和空间上的开销,字符串可以说是和 8 个基本类型一样常用的类型,甚至比 8 个基本类型更加常用,故而频繁的创建字符串对象,对性能的影响是非常大的,所以,用常量池的方式可以很大程度上降低对象创建、分配的次数,从而提升性能。这时,s1 == s2 会返回 fasle。

2023-08-31 08:57:50 97

原创 FactoryBean

FactoryBean

2023-08-30 16:15:10 58

转载 【无标题】

spring cloud alibaba 优秀笔记。

2023-08-03 09:25:09 29

原创 对象深copy

最近使用Map及HashMap的putAll进行对象copy的时候,方向如果value是个对象的时候,还是浅copy,于是乎就上网搜了搜如何深copy,下面是方法之一:public static Object deepClone(Object obj) { try { // 将对象写到流里 ByteArrayOutputStream bo = new ByteArrayOutputSt...

2018-09-26 16:05:09 129

原创 redis 之 安装redis

安装VM及Red hat 7.4:Red Hat Enterprise Linux Server 7.4 安装方法 本文参考自:RedHat 7 安装redis3.2一、配置Yum源1.进入root用户下,[komatsukat@localhost ~]$ su -密码:2.先查看下系统的版本[root@localhost ~]# more /etc/redhat-...

2018-09-12 19:53:55 228

转载 如何实现靠谱的分布式锁?(附SharkLock的设计选择)

分布式锁,是用来控制分布式系统中互斥访问共享资源的一种手段,从而避免并行导致的结果不可控。基本的实现原理和单进程锁是一致的,通过一个共享标识来确定唯一性,对共享标识进行修改时能够保证原子性和和对锁服务调用方的可见性。由于分布式环境需要考虑各种异常因素,为实现一个靠谱的分布式锁服务引入了一定的复杂度。分布式锁服务一般需要能够保证以下几点: 1. 同一时刻只能有一个线程持有锁 2. 锁能够可重...

2018-09-11 18:00:15 260

转载 时间复杂度 log n

预先知道算法的复杂度是一回事,了解其后的原理是另一件事情。不管你是计算机科班出身还是想有效解决最优化问题,如果想要用自己的知识解决实际问题,你都必须理解时间复杂度。先从简单直观的 O(1) 和 O(n) 复杂度说起。O(1) 表示一次操作即可直接取得目标元素(比如字典或哈希表),O(n) 意味着先要检查 n 个元素来搜索目标,但是 O(log n) 是什么意思呢?你第一次听说 O(lo...

2018-09-11 12:50:54 8071

原创 华为笔试题 之 简易压缩算法

一、题目有一种简易压缩算法:针对由全部小写字母组成的字符串,将其中连续超过两个相同字目的部分压缩成连续个数加该字母,其他部分保持原样不变。例如,字符串:aaabccccd 经过压缩成为字符串:3ab4cd。请您编写一个unZip函数,根据输入的字符串,判断其是否为合法压缩过的字符串。 若输入合法,则输出解压后的字符串,否则输出:!error 来报告错误。测试:3ab4cd合法,aa4...

2018-08-16 12:54:23 5697

原创 华为笔试题 之 计算数据最多的类型(有效类型)有多少个数据

一、题目对一个数据a进行分类,分类方法为:此数据a(四个字节大小)的四个字节相加 % 一个给定的值,如果得到的结果小于一个给定的值c,则此结果即为数据a的类型;如果得到的结果大于或者等于c,则此结果无效即为数据a的类型无效。比如一个数据a = 0x01010101,b = 3,按照分类方法计算(0x01 + 0x01 + 0x01 + 0x01)% 3 = 1。所以如果 c = 2,则...

2018-08-14 11:07:41 4272 2

原创 Spring - 注解解析器

Spring Boot-注解解析器Spring中使用了大量自定义的注解,如果通过我们自定义的注解解析器可能达不到预想的效果,必须使用Spring的AnnotationUtils.java类来获取方可正确解析。一、自定义注解解析器解析Spring中的@AliasFor注解@AliasFor注解是Spring中自定义的设置方法设置别名的注解,原理可查看:https://blog.c...

2018-08-13 15:25:04 7394

转载 乐观锁与悲观锁

数据库管理系统(DBMS)中的并发控制的任务是确保在多个事务同时存取数据库中同一数据时不破坏事务的隔离性和统一性以及数据库的统一性。乐观并发控制(乐观锁)和悲观并发控制(悲观锁)是并发控制主要采用的技术手段。无论是悲观锁还是乐观锁,都是人们定义出来的概念,可以认为是一种思想。其实不仅仅是关系型数据库系统中有乐观锁和悲观锁的概念,像memcache、hibernate、tair等都有类似的概...

2018-03-08 19:35:26 101

原创 Java多线程 - 对象及变量的并发访问

1. synchronized同步方法 多个线程调用synchronized声明的方法一定是排队执行的。而且只有共享资源的读写访问才需要同步化,如果不是共享资源,那根本没有同步的必要。 (1)脏读 多线程调用同一个实例对象的同一个方法时,为了避免数据不同步的出现,使用了synchronized关键。 虽然在赋值的方法上做了同步,但是再取值的方法上没有做同步,取值了的时候出现了意象不到的情况,

2017-12-06 17:42:34 265

原创 Java多线程 - 暂停线程

暂停线程意味着此线程还可以恢复运行,Java多线程中,可以使用suspend()方法暂停线程,使用resume()方法使线程恢复运行。 1.suspend()和resume()的使用public class MyThread15 extends Thread{ private Integer i; public Integer getI() { return i;

2017-11-29 11:26:57 243

原创 Java多线程 - 停止线程

停止线程看起来非常简单,但是必须要做好防范措施,以便达到预期效果。 停止一个线程可以使用Thread.stop()方法,但是最好不要用它,虽然它确实可以停止一个线程,但是最好不要用它,因为它是不安全的,而且已经被弃用作废的,将来Java版本中,这个方法将不可用或者不被支持。 Java中有三种方式可以终止线程: a. 使用退出标志,使线程正常退出,就是当run()执行完毕后线程终止。 b. 使

2017-11-29 09:51:05 187

原创 Java多线程 - Thread类中的几个方法

1.实例变量与线程安全 自定义线程类中的实例变量针对其他线程有共享与不共享之分,这在多个线程之间交互时是一个很重要的技术点。 不共享数据的情况:每个线程都有各自的实例变量,多个线程交互时不影响各自的实例变量值,不存在线程安全问题。 共享数据的情况:多个线程访问同一个实例变量,多个线程交互时存在“非线程安全问题”。 “非线程安全”是指多个线程对同一个对象中的实例变量进行操作时值被更改、值不同步

2017-11-27 14:36:51 1695

原创 Java多线程 - 线程的创建

在学习多线程前,需要知道为啥要用多线程,多线程的有点是什么? 使用多任务操作系统(windows,ios)等,都可以最大限度的利用CPU空闲时间来出来其他任务,比如一边让操作系统处理打印机正在打印的数据,一边使用Word编辑文档。而CPU在这些任务之间不停的切换,由于切换的速度非常快,给使用者感受这些任务都是在同时运行。所以使用多线程,可以在同一时间处理多个任务,使系统的运行效率大大提升。线程一个

2017-11-27 13:52:51 151

转载 java定时任务接口ScheduledExecutorService

ScheduledExecutorService 设计思想 ScheduledExecutorService 是基于线程池设计的定时任务类,每个调度任务都会分配到线程池中的一个线程去执行,也就是说,任务是并发执行,互不影响。 需要注意,只有当调度任务来的时候,ScheduledExecutorService才会真正启动一个线程,其余时间ScheduledExecutorService都是出于轮询

2017-11-24 10:41:45 252

高性能MySQL(第二版)

MySQL数据库使目前使用人数最多的开源关系型数据库系统,其InnoDB引擎具有支持事务完整性以及更大的事务并发能力等特性,适用于较大规模的OLTP应用。因此,INNODB引擎在使用MYSQL作为数据库的应用中被广泛使用。而由于使用不当或数据量不断增大,系统复杂性提高等原因造成的性能下降的情况时有发生。因此,有必要总结InnoDB引擎下的MySQL数据库优化的理论与方法,以便为保障业务系统的高效运行提供帮助,本文重点论述Mysql数据库的性能优化技术。

2018-09-12

空空如也

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

TA关注的人

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