自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

qq_52136981的博客

专注于数据库、java、python、算法等等教学

  • 博客(17)
  • 收藏
  • 关注

原创 基于工厂模式的代码

今天花费了时间去写了一个基于工厂模式的代码重构的demo,因为在不久之前的一次面试当中,面试官有问到代码重构相关的知识点,瞬间又多了一个知识薄弱点,那就简单总结一下对于代码重构方向的简单理解。

2023-06-29 15:11:13 194

原创 乐观锁与悲观锁 // 读写锁与互斥锁

乐观锁与悲观锁属于从数据访问维度设定的两种锁的思想,经常出现在数据库相关问题中,即当数据同时被多个数据访问了,应该持有什么态度对数据进行保护

2022-03-29 21:23:43 1849 52

原创 FastJson指定Long类型序列化方式

快速FAST (比其它任何基于Java的解析器和生成器更快,包括jackson)强大(支持普通JDK类包括任意Java Bean Class、Collection、Map、Date或enum)零依赖(没有依赖其它任何类库除了JDK)我说一般没问题,是指在Java中自己转没问题,但是反给前台后,例如(1737803505039900674)就会变成(1737803505039901000)。雪花算法时,数据库字段为bigint类型,对应到Java实体为Long类型,Long类型在序列化时一般是没有问题的。

2022-03-26 08:30:00 4071 67

原创 redis专题

项目当中通过redis区分命名空间,对于缓存的数据进行分组,不同分组可以有相同的数据,但是同一个分组中不能存在相同的key,新的key会覆盖到旧的key,缓存映射可以缓存key , 对象 类型的数据,通过指定值可以将对象中的某个属性值映射到对应的dto属性中返回给前端,这一过程实在切面中进行的,通过这一举措可以使得大型项目当中的缓存数据分组,降低耦合,结构清晰,便于缓存的分区管理。明确单节点的redis 的并发能力是有上线的,要进一步提高Redis的并发能力,就需要搭建主从集群,是先读写分离。

2022-03-22 19:00:11 4639 128

原创 线程安全的List之CopyOnWriteArrayList

但是存在肯定也是有好处的,就是get(int index)不需要加锁,因为CopyOnWriteArrayList在add/remove操作时,不会修改原数组,所以读操作不会存在线程安全问题。因为迭代的始终是原数组,而所有的变化都发生在原数组的副本上。无法保证实时性,因为“读”和“写”不在同一个数组,且“读”操作没有加互斥锁,所以不能保证强一致性,只能保证最终一致性。看到最后,终归来说是一个多线程下的并发问题,有些人可能觉得这个问题很弱,但是咋说呢,我也遇上了。

2022-03-21 22:37:44 2192 64

原创 MySQL慢查优化 循环/嵌套子查询(DEPENDENT SUBQUERY)

mysql 将会扫描 test 中所有数据,每条数据都将会传到子查询中与 sub_test 关联,子查询不会先被执行,所以如果 test 表很大的话,那么性能上将会出现问题。MySQL执行逻辑是,先根据is_del和classin_err_times把外层数据查出来,然后根据外层的查询结果,又走了一个子查询,这个子查询的执行依赖于外层结果量。通常情况下,我们希望由内到外,先完成子查询的结果,然后再用子查询来驱动外查询的表,完成查询。然后再到 test 中,带入 tid=2,3,4,5,6,取得查询数据。

2022-03-19 23:14:55 5485 104

原创 Kafka 消费端消费重试和死信队列

Spring-Kafka 封装了消费重试和死信队列, 将正常情况下无法被消费的消息称为死信消息(Dead-Letter Message),将存储死信消息的特殊队列称为死信队列(Dead-Letter Queue)。默认情况下,Spring-Kafka 达到配置的重试次数时,【每条消息的失败重试时间,由配置的时间隔决定】Consumer 如果依然消费失败 ,那么该消息就会进入到死信队列。一个监听原始队列,一个监听死信队列,死信队列的Topic的规则是,业务Topic名字+.DLT。

2022-03-18 23:58:51 3567 101

原创 SpringBoot集成Redisson实现接口限流

Redisson是一个在Redis的基础上实现的Java驻内存数据网格(In-Memory Data Grid)。它不仅提供了一系列的分布式的Java常用对象,还提供了许多分布式服务。Redisson的宗旨是促进使用者对Redis的关注分离(Separation of Concern),从而让使用者能够将精力更集中地放在处理业务逻辑上。这不是最高版本,请不要使用最高版本,因为具体使用的Redisson版本,要和你的SpringBoot版本对应。启动工程后,连续请求该接口,请求3次后出现提示“没有可用资源”

2022-03-17 23:40:09 3253 78

原创 Lock4J分布式锁

支持redission,redisTemplate,zookeeper。lock4j是一个分布式锁组件,其提供了多种不同的支持以满足不同性能和环境的需求。引入相关依赖(支持同时存在,不同方法不同锁实现)。立志打造一个简单但富有内涵的分布式锁组件。简单易用,功能强大,扩展性强。

2022-03-17 08:00:00 824 88

原创 Lock4J分布式锁的高级使用

expire 锁过期时间。建议估计好你锁方法运行时常,正常没有复杂业务的增删改查最多几秒,留有一定冗余时间。默认的锁key生成器为 com.baomidou.lock.DefaultLockKeyBuilder。acquire-timeout 可以理解为排队时长,超过这个时才就退出排队,抛出获取锁超时异常。

2022-03-16 08:00:00 1295 106

原创 java中BigDecimal加减乘除基本用法

2022-03-14 23:17:31 1541 79

原创 静态代码块、构造代码块、构造方法的执行顺序

静态代码块是类级别的,而构造代码块和构造方法是实例级别的,因而静态代码块先执行;2.构造代码块:是独立的,必须依附载体才能运行,Java会把构造代码块放到每种构造方法的前面,用于实例化一些共有的实例变量,减少代码量。3、创建子类对象时,子类的静态代码块在父类的静态代码块后面执行,但优先于父类的构造代码块和构造方法;1、在创建一个对象的过程中,三者的执行顺序是:静态代码块 --> 构造代码块 --> 构造方法;1.静态代码块:是在类的加载过程的第三步初始化的时候进行的,主要目的是给类变量赋予初始值。

2022-03-13 23:45:21 1392 42

原创 常用SpringJPA主键生成策略,UUID和自增

在GET方法上使用注解@Id标记这是一个主键,并使用@GeneratedValue和@SequenceGenerator来实现使用Oracle序列来生成主键。主键自增为1,并且在MySQL时,不用序列,直接指定GenerationType.IDENTITY即可。整形自增MySQL中只要设置一个整形列即可,Oracle中需要建立一个SEQUENCE。对于这两种方式的利弊和使用范畴,我觉得,数据库不大的时候,使用UUID比较合适。这里数据库使用Oracle,常用的就是UUID和整形自增。

2022-03-13 02:26:44 3555 46

原创 Java自定义类的加载器

这个是为了保证 如果加载的类是一个系统类,那么会优先由Bootstrap ClassLoader 、Extension ClassLoader先去加载,而不是使用我们自定义的ClassLoader去加载,保证系统的安全!例如上面,我们生成class文件后,可以通过对称加密等方式进行加密,那么拿到的class字节都是加密后,是无法使用的,在上面的getData()方法中我们读取到了文件字节流,可以把该字节流再进行解密。对应的文件是应用程序classpath目录下的所有jar和class等。

2022-03-12 02:22:06 881 39

原创 Centos7上Redis主从集群,增加节点

Redis 通常被称为数据结构服务器,因为值(value)可以是字符串(String)、哈希(Hash)、列表(list)、集合(sets)和有序集合(sorted sets)等类型。Redis 是一个开源的使用 ANSI C 语言编写、遵守 BSD 协议、支持网络、可基于内存、分布式、可选持久性的键值对(Key-Value)存储数据库,并提供多种语言的 API。可以看到7004已经成为了master节点,但是注意,此时7004并没有被分配插槽,所以不会被分配数据,把8004分配给7004作为从节点。

2022-03-10 20:31:20 451 47

原创 使用Redis集合List实现消息队列

区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。使用 List 实现消息队列的优点是消息可以被持久化,List 可以借助 Redis 本身的持久化功能,AOF 或者是 RDB 或混合持久化的方式,用于把数据保存至磁盘,这样当 Redis 重启之后,消息不会丢失。lpush 可以把最新的消息存储到消息队列(List 集合)的首部,而 rpop 可以读取消息队列的尾部,这样就实现了先进先出。

2022-03-10 08:00:00 833 41

原创 使用Redis实现用户最近浏览记录

和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。1,要有失效时间,既然是最近浏览记录,那么就要有一个有效期,不存在我一年没有登录账号了再显示去年我看过记录。3,有模块划分,例如商城,我手机浏览记录和饮料浏览记录是两回事,PC和手机也可能不是一回事。2,有个数限制,不能无限制存放,比如可以限定只存十条记录。4,要有顺序,那个是先看的,那个是后浏览的。

2022-03-08 18:21:19 3477 57

空空如也

空空如也

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

TA关注的人

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