自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 ArrayList数组的扩容JDK6、JDK7、JDK8的不同版本的比较

ArrayList数组的扩容JDK6、JDK7、JDK8的不同版本的比较

2023-04-26 14:58:12 175

原创 @Transactional注解的失效场景

引言昨天公众号粉丝咨询了一个问题,说自己之前面试被问@Transactional注解哪些场景下会失效,一时语塞致使面试失败。所以今天简单的和大家分享一下@Transactional相关的知识。@Transactional 注解相信大家并不陌生,平时开发中很常用的一个注解,它能保证方法内多个数据库操作要么同时成功、要么同时失败。使用@Transactional注解时需要注意许多的细节,不然你会发现@Transactional总是莫名其妙的就失效了。一、事务事务管理在系统开发中是不可缺少的一部分

2022-04-08 16:54:48 393

原创 IDEA:Springboot项目的properties或yml文件中不提示,文件没有小绿叶图标

版本:IDEA Ultimate 2019.2在IDEA创建的Springboot项目中,application.properties文件(或yml)添加配置时需要提示,IDEA本身支持这个功能,由Spring Support和Spring Assistant两个插件提供支持,默认这个两个插件应该是安装的,没有的自己加一下就好了。IDEA是把这个配置关联到Spring,这样就能给出提示。如果不能提示的,确认一下图标是否是小绿叶。正常能提示的文件图标应该是小绿叶的,如:目前不能提示的主要原因是ID

2021-12-31 00:20:26 2001

原创 分布式事务之柔性事务

一. 定义在电商领域等互联网场景下,传统的事务在数据库性能和处理能力上都暴露出了瓶颈。在分布式领域基于CAP理论以及BASE理论,有人就提出了柔性事务的概念。CAP(一致性、可用性、分区容忍性)理论大家都理解很多次了,这里不再叙述。说一下BASE理论,它是在CAP理论的基础之上的延伸。包括基本可用(Basically Available)、柔性状态(Soft State)、最终一致性(Eventual Consistency)。基本可用:分布式系统出现故障的时候,允许损失一部分可用性。比如,阿里双十一

2021-12-21 17:56:24 1682

原创 Redis缓存穿透、击穿与雪崩

服务的高可用问题不会详细分析解决方案的底层(专题)缓存穿透(查不到)概念缓存穿透的概念很简单,用户想要查询一个数据,发现redis内存数据库没有,也就是缓存没有命中,于是向持久层数据库查询。发现也没有,于是本次查询失败。当用户很多的时候,缓存都没有命中(秒杀!),于是都去请求了持久层数据库。这会给持久层数据库造成很大的压力,这时候就相当于出现了缓存穿透。解决方案布隆过滤器布隆过滤器是一种数据结构,对所有可能查询的参数以hash形式存储,在控制层先进行校验,不符合.

2021-10-28 15:11:12 82

原创 Bitmap简介

Bitmap简介1. BitMapBit-map的基本思想就是用一个bit位来标记某个元素对应的Value,而Key即是该元素。由于采用了Bit为单位来存储数据,因此在存储空间方面,可以大大节省。(PS:划重点节省存储空间)假设有这样一个需求:在20亿个随机整数中找出某个数m是否存在其中,并假设32位操作系统,4G内存在Java中,int占4字节,1字节=8位(1 byte = 8 bit)如果每个数字用int存储,那就是20亿个int,因而占用的空间约为 (2000000000*...

2021-09-14 16:18:06 263

原创 redis中hash何时用ziplist

hash时什么情况才用ziplist同时满足以下条件:1. 哈希对象保存的所有键值的字符串长度小于64字节;2. 哈希对象保存的键值对数量小于512个;使用ziplist的优点:ziplist1. 为什么不直接用hastable:相比hashtable,ziplist结构少了指针,大大的减少了内存的使用,而内存对于redis来说弥足珍贵,2. 为什么不用 linklist?ziplist存储时内存分配是连续的,查询更快,这里的快只是相对双端队列ziplist如

2021-09-11 18:02:24 540

原创 INNDB中何时使用MVCC的快照数据?何时使用当前数据?

在MVCC中,读操作可以分成两类,快照读(Snapshot read)和当前读(current read)。快照读,读取的是记录的可见版本(可能是历史版本,即最新的数据可能正在被当前执行的事务并发修改),不会对返回的记录加锁;而当前读,读取的是记录的最新版本,并且会对返回的记录加锁,保证其他事务不会并发修改这条记录。在MySQL InnoDB中,简单的select操作,如select * from table where ? 都属于快照读;属于当前读的包含以下操作:select * from ta.

2021-09-03 17:17:29 136

原创 B+树的插入和删除过程

前言上一篇已经详细的介绍了什么是B树,但B树这种结构仍有不足之处,比如对范围检索就比较费劲,所以科学大佬们就继续改造扩展,在B树的基础上发明了B+树,上篇文章中也简单提到过B+树,本篇我们就来详细的学习一下。B+树的结构定义首先B+树是B树的一种扩展,在B+树里面,非叶子节点不再存储数据,仅仅存在索引,而叶子这点存储具体的数据,并且最底层的数据直接之间从做到右是按照从小到大的顺序分布,并且是一个双链表的结构。也就是说的所有的关键码均出现在叶节点上,各层节点中的关键码均是下一层相应节点中的最大或者

2021-08-30 19:47:07 2015

原创 事务的隔离级别

事务隔离级别介绍隔离级别 脏读 不可重复读 幻读 未提交读(Read uncommitted) 可能 可能 可能 已提交读(Read committed) 不可能 可能 可能 可重复读(Repeatable read) 不可能 不可能 可能 可串行化(Serializable ) 不可能 不可能 不可能 第一个隔离级别叫做:Read Uncommitted(未提交读),一个事务可以读取到.

2021-08-04 17:00:55 62

原创 数据库的脏读、不可重复读、幻读

1、脏读我们有两个事务,一个是 Transaction A,一个是 Transaction B,在第一个事务里面,它首先通过一个 where id=1 的条件查询一条数据,返回 name=Ada,age=16 的这条数据。然后第二个事务,它同样地是去操作 id=1 的这行数据,它通过一个 update的语句,把这行 id=1 的数据的 age 改成了 18,但是注意,它没有提交事务。这个时候,在第一个事务里面,它再次去执行相同的查询操作,发现数据发生了变化,获取到的数据 age 变成了 ...

2021-08-04 16:41:34 190

原创 @Transaction不回滚事务问题

发现项目中使用@Transactional注解事务,抛了异常却不回滚,分析下原因。一、声明式事务特性先来了解一下@Transactional注解事务的特性,以便于更好排查问题1、service类(一般不建议在接口上)上添加@Transactional,可以将整个类纳入spring事务管理,在每个业务方法执行时都会开启一个事务,这些事务采用相同的管理方式。2、@Transactional 注解只能应用到 public 的方法上。 如果应用在protected、private或者 package

2021-07-14 20:47:00 493

原创 给定a、b两个文件,各存放50亿个url,每个url各占64字节,内存限制是4G,让你找出a、b文件共同的url?

思路一:可以估计每个文件的大小为5G*64=300G,远大于4G。所以不可能将其完全加载到内存中处理。考虑采取分而治之的方法。 遍历文件a,对每个url求取hash(url)%1000,然后根据所得值将url分别存储到1000个小文件(设为a0,a1,...a999)当中。这样每个小文件的大小约为300M。遍历文件b,采取和a相同的方法将url分别存储到1000个小文件(b0,b1....b999)中。这样处理后,所有可能相同的url都在对应的小文件(a0 vs b0, a1 vs b1....a999

2020-12-22 11:48:43 665

原创 java程序服务器CPU占用过高问题排查步骤及问题解决

1、cpu过高是那个程序造成的?使用top命令2、更具PID来查看具体是那个进程下对应的线程造成,及通过进程来确定cpu过高的线程tid。命令:Ps -mp pid -o THREAD,tid,time3、因为线程的id都是16进制的需要将10进制转换成16进制,方法:1、直接使用计算器方法:2、使用命令得到结果:得到这三个数的16进制为别为3ec4,3ec5,3ec74、jstack查看进程信息然后利用grep来过滤对应的线程id信息。通过jst..

2020-05-27 08:39:17 568

原创 i++和++i是否为原子操作?怎么确保原子性

一.i++i++的操作分三步:(1)栈中取出i(2)i自增1(3)将i存到栈所以i++不是原子操作,上面的三个步骤中任何一个步骤同时操作,都可能导致i的值不正确自增二.++i在多核的机器上,cpu在读取内存i时也会可能发生同时读取到同一值,这就导致两次自增,实际只增加了一次。综上,我认为i++和++i都不是原子操作。三、确保原子性1、加锁2、为了保证其原子性,可以使用AtomicInteger类的getAndIncrement()方法实...

2020-05-25 02:26:08 2971

原创 Java String类为什么是final的?作用是什么?

1.为了实现字符串池 2.为了线程安全 3.为了实现String可以创建HashCode不可变性 首先你要理解final的用途,在分析String为什么要用final修饰,final可以修饰类,方法和变量,并且被修饰的类或方法,被final修饰的类不能被继承,即它不能拥有自己的子类,被final修饰的方法不能被重写, final修饰的变量,无论是类属性、对象属性、形参还是局部变量,都需要进行初始化操作。在了解final的用途后,在看String为...

2020-05-25 02:15:45 273

转载 mysql事务,select for update,及数据的一致性处理

转载:https://www.cnblogs.com/houweijian/p/5869243.html在MySQL的InnoDB中,预设的Tansaction isolation level 为REPEATABLE READ(可重读)在SELECT 的读取锁定主要分为两种方式:  SELECT ... LOCK IN SHARE MODE   SELECT ... FOR UPDATE  这两种方式在事务(Transaction) 进行当中SELECT 到同一个数据表时,都必须等.

2020-05-19 18:45:41 141

原创 mysql事务的隔离级别及原理实现和spring的事务隔离级别.

事务隔离级别介绍隔离级别 脏读 不可重复读 幻读 未提交读(Read uncommitted) 可能 可能 可能 已提交读(Read committed) 不可能 可能 可能 可重复读(Repeatable read) 不可能 不可能 可能 可串行化(Serializable ) 不可能 不可能 不可能 Read uncommitted 读未提交公司发工资了,把50000元打到我的账号上,.

2020-05-12 01:42:57 639

原创 Spring事务配置—图,方便记忆

Spring事务配置——图解说明

2020-05-12 00:57:55 114

原创 spring事务的配置以及事务传播机制和相关的测试demo

在实际项目中为了保证数据的一致性,事务是非常重要的,而spring对事务的支持方便了我们对事务相关操作的开发.事务的配置方式spring支持编程式事务管理和声明式事务管理两种方式。  编程式事务管理使用TransactionTemplate或者直接使用底层的PlatformTransactionManager。对于编程式事务管理,spring推荐使用TransactionTemplate。  声明式事务管理建立在AOP之上的。其本质是对方法前后进行拦截,然后在目标方法开始之前创建或者..

2020-05-12 00:39:31 389 2

原创 eureka服务下架、服务续期及eureka源码分析

服务下架如上图所示一路debug走InstanceRegistry(发布事件)——>AbstractInstanceRegistry(真正操作)——>PeerAwareInstanceRegistryImpl(集群同步),设计采取责任链模式遵循单一职责原则.InstanceResource #cancelLease()——>InstanceRegistry#cancel发布事件EurekaInstanceCanceledEvent——>AbstractIn...

2020-05-10 16:32:55 285

原创 eureka-server服务注册的实现、集群同步及eureka源码分析

eureka是基于jersey框架写的一个注册中心,主要功能提供了服务注册,服务下架,服务续约,集群同步等功能.jersey是一个类似于springmvc的框架,只不过mvc是基于servlet的,jersey是基于filter的,二者在使用上也很类似,mvc发请求被servlet拦截到反射调用controller,而jersey是被filter拦截到调用resource, 二者的原理基本一致。1、为什么加@EnableEurekaServer就能启动注册@Target(Element.

2020-05-10 12:47:59 552

原创 eureka源码之eureka-client服务注册/心跳机制

入口public class EurekaClientAutoConfiguration {....省略……// 获取当前微服务的相关的配置信息@Bean @ConditionalOnMissingBean(value = EurekaInstanceConfig.class, search = SearchStrategy.CURRENT) public EurekaInstanceConfigBean eurekaInstanceConfigBean(I...

2020-05-10 00:18:58 369

原创 注解@AutoConfigureBefore 和 @AutoConfigureAfter的区别和作用,并举例说明

最近在看ribbion负载均衡的源码问题,想看一下@LoadBalanced的使用,在看源码的时候,无意中发现@AutoConfigureBefore 和 @AutoConfigureAfter想知道加载顺序如何?猜想根据@AutoConfigureBefore 和 @AutoConfigureAfter两个的字面意思就我们猜测如下:1、使用@AutoConfigureBefore@AutoConfigureBefore(AAAA.class)public class CCCC

2020-05-09 09:42:51 2907 6

原创 eureka源码分析,草稿

eureka的主要功能是什么?1、服务注册 源码 2、服务下架 源码 3、心跳链接 源码 4、集群原理 源码 5、自我保护机制 源码注:eureka的1、2、3可以看作是eureka的增删改. eureka的底层是一个jersey的框架.InstanceRegistry的关系图InstanceRegistry是有springcloud开发的,其上面都是由eur...

2020-05-07 01:39:25 75

原创 Spring的扩展接口之FactoryBean

相关的接口详情请看我之前写的一片关于FactoryBean和BeanFactory的区别的文章,里面有相关的实例https://blog.csdn.net/dianxiaoer20111/article/details/105673161

2020-05-02 02:39:49 110

原创 @Conditional注解 详细讲解及示例,及相应的源码分析

@Conditional是Spring4新提供的注解,它的作用是按照一定的条件进行判断,满足条件给容器注册bean。直接上代码看效果实例1,在没有设置@Conditional时配置类@Configuration@ComponentScan("com.lquan.condition")public class ConditionConfig { //@Condit...

2020-05-02 02:29:32 234

原创 高并发情况下如何保证数据的一致性,从哪些放方面下手.

1.业务层面乐观锁CAS业务层面乐观锁CAS,使用版本号解决ABA问题,实际使用中使用时间戳,更新的时候把查出来的时间戳带上,如果更新失败可以自旋,获取最近值和时间戳,直到更新成功。2.DB层面开启一个事务DB层面开启一个事务,然后select一行for update给这一行加上排它锁,再去更新行,然后提交,其他事务就会阻塞在select for update。3.分布式锁...

2020-05-01 16:49:15 732

原创 Spring中一个配置类添加@Congfiguration和没有@Congfiguration的区别是什么?源码分析

直接上代码实例看效果1、添加@Congfiguration的@Configuration@ComponentScan("com.lquan.scan.scan1")public class Configration {}测试类public class Test { public static void main(String[] args) { // ...

2020-04-29 02:14:50 424

转载 spring源码中BeanFactory、BeanDefinition、BeanDefinitionRegistry、AnnotatedBeanDefinition几个关键的接口及相关实现

前言在前面分析Spring IoC容器的时候,贯穿全文的一个概念:Bean定义信息。它是Spring容器的一个核心概念,那么本文就深入分析一下BeanDefinition这个接口(类)。Spring容器启动的过程中,会将Bean解析成Spring内部的BeanDefinition结构。 不管是是通过xml配置文件的\<Bean>标签,还是通过注解配置的@Bean,它最终都会被解...

2020-04-27 00:59:23 772

原创 注解@Mapper、@MapperScan区别和使用场景及实例

1、@Mapper注解:作用:在接口类上添加了@Mapper,在编译之后会生成相应的接口实现类添加位置:接口类上面@Mapperpublic interface UserDAO { //代码}如果想要每个接口都要变成实现类,那么需要在每个接口类上加上@Mapper注解,比较麻烦,解决这个问题用@MapperScan2、@MapperScan作用:...

2020-04-26 12:07:48 1214

原创 Spring和SpringBoot中的@Component 和@ComponentScan注解用法介绍和注意事项及相关实例

@ComponentScan如果你理解了ComponentScan,你就理解了SpringSpring是一个依赖注入(dependency injection)框架。所有的内容都是关于bean的定义及其依赖关系定义Spring Beans的第一步是使用正确的注解@Component或@Service或@Repository.但是,Spring不知道你定义了某个bean除非它知道从哪里可...

2020-04-26 11:57:42 959

原创 Spring注解中@Configuration和@Configurable的区别及具体案例实现

@Configuration该注解是可以用来替代XML文件。以前我们配置bean时,都是写在applicationContext.xml文件中的。有了这个注解后,我们就可以编写一个类在其上面加上该注解。即配置类。在配置类中可以在方法上加@Bean注解定义其中的Bean@Configurable现在假设,我们想在非Spring管理的类中使用依赖注入;比如:手动new出来的对象,正常情...

2020-04-26 11:26:16 526

原创 为什么需要重写equals方法

默认equals在比较两个对象时,是看他们是否指向同一个地址的。但有时,希望两个对象只要是某些属性相同就认为他们的quals为true。比如:Student s1 = new Student(1,"name");Student s2 = new Student(1,"name");如果不重写equals的话,他们是不相同的,因为引用s1和s2指向的堆内存地址显然不一样,所以我们要重些eq...

2020-04-22 14:45:34 698

原创 BeanFactory和FactoryBean的区别及相关分析

我所用的Spring版本是5.0.x的版本BeanFactory和FactoryBean都是接口1、BeanFactory用于访问SpringBean容器的根接口。这是bean容器的基本客户机视图;由BeanFactory中使用的对象实现的接口,这些对象本身就是单个对象的工厂,直接利用getbean()来获取对应的实例话bean的注意:其中BeanFactory的F...

2020-04-22 08:19:12 628

原创 线程池参数及拒绝策略

java多线程开发时,常常用到线程池技术,这篇文章是对创建java线程池时的七个参数的详细解释。当需要加入进程时:(1)当前线程数小于核心线程数,当前线程直接运行。(2)当前线程数大于核心线程数,当前线程会加入到阻塞队列中,(3)此时阻塞队列未满,直接加入,等待机会运行。(4) 此时阻塞队列已满,但此时线程数小于最大线程数,则直接创建线程运行。(5)此时线程数大于等于...

2020-04-05 20:43:09 475

原创 CAS的ABA问题详解及解决办法

CAS的ABA问题详解ABA问题在多线程场景下CAS会出现ABA问题,关于ABA问题这里简单科普下,例如有2个线程同时对同一个值(初始值为A)进行CAS操作,这三个线程如下 1.线程1,期望值为A,欲更新的值为B 2.线程2,期望值为A,欲更新的值为B 线程1抢先获得CPU时间片,而线程2因为其他原因阻塞了,线程1取值与期望的A值比较,发现相等然后将值更新为B,然后这个时候出现...

2020-04-01 11:12:56 354

原创 mysql底层数据结构之--BTree结构及相关数据结构了解

BTree特性BTree又叫多路平衡查找树,一颗m叉的BTree特性如下:树中每个节点最多包含m个孩子。 除根节点与叶子节点外,每个节点至少有[ceil(m/2)]个孩子。 若根节点不是叶子节点,则至少有两个孩子。 所有的叶子节点都在同一层。 每个非叶子节点由n个key与n+1个指针组成,其中[ceil(m/2)-1] <= n <= m-1 。BTr...

2019-11-12 17:31:12 462

原创 MySQL的索引要使用B 树,而不是其它树

InnoDB的一棵B+树可以存放多少行数据?答案:约2千万为什么是这么多?因为这是可以算出来的,要搞清楚这个问题,先从InnoDB索引数据结构、数据组织方式说起。计算机在存储数据的时候,有最小存储单元,这就好比现金的流通最小单位是一毛。在计算机中,磁盘存储数据最小单元是扇区,一个扇区的大小是512字节,而文件系统(例如XFS/EXT4)的最小单元是块,一个块的大小是4k,而对于...

2019-10-22 20:53:33 151

转载 Linux vmstat命令实战详解

vmstat命令是最常见的Linux/Unix监控工具,可以展现给定时间间隔的服务器的状态值,包括服务器的CPU使用率,内存使用,虚拟内存交换情况,IO读写情况。这个命令是我查看Linux/Unix最喜爱的命令,一个是Linux/Unix都支持,二是相比top,我可以看到整个机器的CPU,内存,IO的使用情况,而不是单单看到各个进程的CPU使用率和内存使用率(使用场景不一样)。一般vmstat工具...

2018-12-11 16:24:43 86

C语言第一章课件

C语言第一章课件 清华大学出版社唐浩强出版版本

2012-08-26

空空如也

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

TA关注的人

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