自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 布隆过滤器

布隆过滤器解决缓存穿透:把数据库的数据全部存入布隆过滤器,比如通过id查的数据,就把每条数据的id都存入布隆过滤器,查询到的时候,先查布隆过滤器,如果布隆过滤器存在在放行,查redis或数据库。比如存储的元素进行3hash计算,每次计算出的hash值,在bit[]中占一个位置。如果发生hash冲突,不同的元素可能会共用某些bit位。因此,布隆过滤器,只能判断数据可能存在,也没有删除操作。对数据是否存在可能存在误判,误判的概率和hash的次数以及hash表(bit数组)的长度有关。

2023-12-06 17:56:41 376 1

原创 java基础面试

在集合遍历的时候会记录一个expectedModCount。正常来说遍历期间不会发生修改,因此期望修改次数expectedModCount应该等于遍历之前的modCount,但是别的线程修改了集合,导致modCount发生了改变。在使用迭代器对集合对象进行遍历的时候,如果 A 线程正在对集合进行遍历,此时 B 线程对集合进行修改(增加、删除),或者 A 线程在遍历过程中对集合进行修改,都会导致 A 线程抛出ConcurrentModificationException 异常。它表示该集合实际被修改的次数。

2023-12-06 17:56:07 345 1

原创 mysql主从复制和读写分离

Relay log:中继日志。

2023-12-06 17:55:48 357 1

原创 SpringBoot动态数据源和事务

对于事务注解进行进行aop增强。在调用业务方法之前,获取数据库连接,开启事务,把数据库连接放入到ThreadLocal。业务代码至执行完毕,提交事务。项目中配置多个数据库。数据库注解解析的地方。

2023-12-06 17:55:32 386 1

原创 Mybatis插件

参考:https://blog.csdn.net/weixin_44451022/article/details/129214525MyBatis 通过提供插件机制,让我们可以根据自己的需要去增强MyBatis 的功能。MyBatis 的插件可以在不修改原来的代码的情况下,通过拦截的方式,改变四大核心对象的行为,比如处理参数,处理SQL,处理结果。

2023-12-06 17:54:58 331 1

原创 springboot

想要自定义一个starter。1、第一种方式:需要在自己的jar里面创建META-INF/spring.factories。在这个文件里面配置自己项目的自动装配类。推荐使用这种方式,因为代码无侵入2、用@Import(AAA.class)将自己的配置类,用@Import导入,也可以实现就是在启动类上面手动用@Import(AAA.class)3、通过自定义注解实现。

2023-12-06 17:54:32 362 1

原创 如何分库分表

比如订单数据,分到了三个库,但是这三个库还存的有其他的表,比如区域表,这个区域表数据量少,不需要分库分表。这个表跟订单数据在同一个库,订单数据进行了分库存储,那么可以将区域表设置为广播表,三个库里面都有这个区域表。比如把表名改为真实的表名、如果是排序的话,select的字段里面没有返回排序字段,会自动改写为把这个字段也加上,一起返回,在代码中再进行综合排序等等。shardingjdbc会在查询的结果,让每个表的数据都排好序,然后有个指针依次归并数据。内存限制模式就是用多线程一起操作。

2023-12-06 17:53:55 320 1

原创 Mysql面试

但是一旦服务宕机,数据还未来得及写入磁盘,就会丢失数据。为了解决这种情况,会把buffer pool中的数据,在写入一份到Redlog buffer,只要Redlog buffer发生改动,就写入redo log日志。其实就是做了一个丢数据的持久化机制,个人理解,可以异步线程,写入Redlog buffer,然后写入Redlog 日志文件,异步处理不影响主线程就行。4:指的比如存储的是车主自述,该字段存的一段字符串,如果对这个字段创建索引的话,建议创建前缀索引,但是怎么创建,需要再查阅资料。

2023-12-06 17:53:17 851 1

原创 Redis分布式锁

问题解决方案:在锁里面保存线程的唯一性标识,删除锁的时候先判断下标识是不是自己线程的。线程1正常执行完毕业务,获取锁,查看是自己的标识,开始释放锁的操作,但是此时阻塞了,可能垃圾回收导致的等等,这时锁超时,自动释放。然后线程1阻塞结束,继续执行释放锁的动作,结果就把线程2的锁删除了。获取锁的时候每个主节点都获取锁,称为连锁,多个锁,MultiLock。哨兵会在从节点中选取新的主节点,但是从节点没有锁,此时线程2来的话会获取到锁,导致线程安全问题。问题的原因:判断是否是自己的锁和删除锁这两步不是原子性的。

2023-12-06 17:52:59 831 1

原创 Redis面试

redis初始化存储的容量是6,随着redis存入的数据增多,redis会进行扩容,称之为rehash,但是扩容的话就涉及元素 移动,影响性能,为了解决扩容带来的性能形象,进行了渐进式rehash。map/guava做的本地缓存,最主要的特点是 轻量以及快速,生命周期随着 jvm 的销毁而结束,并且在多实例的情况下,每个实例都需要各自保存一份缓存,缓存不具有一致性。redis key的过期时间,记录的时绝对时间,时间戳,比如4点设置10秒后过期,记录的过期时间戳是4点零10秒。假如你的过期key,

2023-12-06 17:52:39 786 1

原创 Mysql索引

参考:https://www.bilibili.com/video/BV1yB4y1v7Jy/?

2023-12-06 17:52:10 881 1

原创 ThreadLocal

set方法,其实是获取当前线程的t.threadLocals字段,该字段就是真正用来存储数据的,而不是ThreadLocal threadLocal = new ThreadLocal<>();3的解释因为调用这些方法的时候,会判断key为null的Entry,如果key为空,那么value应该就需要被清理了。创建线程的时候,会判断主线程的inheritableThreadLocals是否为null,如果不是null,就把主线程中.inheritableThreadLocals的内容复制到子线程。

2023-12-06 17:50:35 803 1

原创 RabbitMq

参考:https://www.bilibili.com/video/BV1mN4y1Z7t9?

2023-11-16 16:48:54 24

原创 MQ面试整理

常见的mqactivemq,优点过时了,不推荐使用rabbitmq,如果公司多语言开发,推荐使用rocketmq,只支持java,阿里大规模使用,电商系统,可以参考阿里,推荐使用kafka:大数据、日志收集推荐使用。

2023-11-16 16:48:31 39 1

原创 懒汉式单例演进到DCL懒汉式 深度全面解析

懒汉式单例演进到DCL懒汉式 深度全面解析本篇文章背景预期第一阶段:普通的懒汉式单例第二阶段:加锁懒汉式单例第三阶段:普通DCL懒汉式单例第四阶段:终极版DCL懒汉式单例小结本篇文章背景网上很多懒汉式单例模式有些存在线程安全问题,有些存在影响性能问题,也有些是DCL懒汉式单例(DCL:Double Checked Locking双重检查锁),是目前很好的懒汉式单例,但是并没有完全解释为什么要用DCL懒汉式,导致大家只能生搬硬套,死记硬背,然后被人问及原因时,一脸茫然,解释不清。预期希望大家看完文章

2021-03-20 20:16:54 263 2

空空如也

空空如也

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

TA关注的人

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