自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 mysql InnoDB引擎各种隔离级别的加锁机制

上述语句我们在执行时,是能成功的插入数据的,通过锁分析也可得知在RC隔离级别下,对于普通索引的数据我们只加了行级锁,但是没有加gap lock的。当我们在执行步骤4时其实就会被阻塞了,数据是没办法插入成功的,因为此时在age的的非唯一索引上加了age=4的数据的行级别锁,在非主键键索引上在age(3,4)(4,44)之间加了gap lock。最终发现,执行到步骤4时,数据是可以插入成功的,那就是因为,我们age为64的数据不在gap锁锁定age的范围(3,4),(4,44)范围内。行级锁+间隙锁组成的锁。

2024-08-22 12:25:59 1430

原创 如何在项目当中进行JVM调优

调整调整了一个比较小的堆内存,只是作为演示,给大家看一下日志的数据。对比上面的数据,我们发现内存过小,吞吐量急剧下降,Gc的时间也变长。根据上面的信息,我们可以看到题主的电脑的gc的相关信息,题主使用的默认的堆大小。gcviewer是一个对于gc日志的调优工具,我们可以在github上去下载源码自己编译成jar包,或者直接下载编译好的jar包。设置完成后,我们启动项目就可以在设置的目录找到打印的gc文件日志。在项目启动之前设置启动参数,具体的参数设置,请参考。

2024-08-20 12:35:20 1140

原创 MySQL InnoDB引擎四大特性ACID实现方案分析

基于上述的理解,我们就可以知道mysql的事物的四大特性的实现方案,也清除了为什么只有InnoDB引擎才能实现事务,而MyISAM不支持事务的原因。对于每个事务都是一个不可分割的最小工作单元,整个事务中的所有操作要么全部成功,要么全部失败,对于一个事务来说,不可能只执行其中的一部分操作,这就是事务的原子性。隔离性是指当多个事务同时对数据库进行操作时,每个事务都是独立的,一个事务的操作不会影响到其他事务,对于不同的隔离级别,隔离性的实现方案也有所不同。所谓的ACID模式,就是我们常说的事物的四大特性。

2024-08-18 12:20:22 980

原创 关于volatile关键字为什么不能保证原子性(图文分析)

对于多线程的数据访问,其实是跟我们的JMM内存模型有关系,在java内存模型当中的定义,所有的数据都会写到主内存当中,其它的数据需要操作时,将主内存的数据copy一份到自己线程私有的内存空间使用,操作完成后再将数据写回到主内存当中。,因为线程2感知不到主内存的变化,所以打印的值不会收到影响。,因为加了volatile,所以线程能感知到主内存的变化,不会再使用线程内保存的数据,会从主内存读取。1.加载数据到本地线程(如果这个操作之前,数据已经写回到主内存,就能保证a的原子性,但这是不可能的)

2024-08-16 22:02:43 930

原创 Spring GateWay自定义断言工厂

这样,我们可以在上线了灰度的微服务集群时,只需要将数据库当中需要路由到灰度环境的用户的特殊状态位gray设置为true即可,这样我们就可以在网关层对不同的用户分发到不同的集群当中。NOTE:大家在使用时,因为我使用的loadblance进行路由转发的,所有需要将服务都注册到注册中心当中。当我们的用户为生产的用户时。当我们用户为灰度的用户时。

2024-08-16 17:09:44 454

原创 Nacos启动报错:Cannot determine JNI library name for ARCH=‘x86‘ OS=‘windows 11‘ name=‘rocksdb‘

直接修改启动文件startup.cmd,将java_home地址直接指向我们其他的jdk路径。

2024-08-16 00:25:52 343

原创 Redis三个版本(3.x,4.x,6.x)对于多线程的使用比对

redis 3.x不支持多线程,请求数据顺序执行,对于多个客户端并发访问redis-server时的执行状态如下,我们假如每个圆圈的执行时间是一致的代表一个执行单位,那么redis3.x的执行时间就是六个执行单位。对于redis6.x,开启多线程执行后,主线程的顺序执行只在执行阶段,前置的解析阶段,到后面的返回阶段都可以交由子线程去执行。. 对于redis4.x而言,其能支持的多线程的命令比较有限。

2024-08-15 20:21:58 557

原创 spring通过AOP+SPEL表达式解析实现注解式日志框架开发

那么我们如何在Log对象当中的msg参数不一致的情况下使用AOP来实现一个通用的记录模板了,这个就是题主今天想分享的内容。通过使用Spring AOP结合Spring SPEL表达式的机制,我们就可以实现在接口上加注解的。提供先进的推理,复杂的指令,更多的创造力。

2024-08-14 23:52:13 474

原创 关于ThreadLocal内存泄漏的探讨

今天题主在查看关于ThreadLocal的文章时,发现一个问题,就是网上主流的说法都是只要一个线程持有ThreadLocal对象时,在使用结束后不对ThreadLocal当中得数据进行remove就会造成内存泄漏。Note:题主使用的jdk版本是17,visualVM2.1.9。

2024-08-14 17:33:07 956

原创 通过Spring注解校验枚举参数的合法性

首先定义一个枚举校验器,题主这边的枚举校验器只能校验,String类型和Integer类型。如果需要支持其他的类型,请各位coder自行实现。/*** 枚举校验注解处理类*/@Override@Overrideif (!try {List

2024-08-13 22:07:06 405

原创 MySQL中使用InnoDB引擎数据存储格式分析

存储InnoDB引擎支持四种行格式:Redundant,Compact,Dynamic,Compress。下图四种行格式的对比图。鉴于上述的三种格式比较类似,题主选用Compact格式进行分析他们的行数据存储格式分析。假设我现在有如下的一张学生表,其中name和age及interest默认都为空。对于上述的四种行格式的对比,区别最大的就是是否支持紧凑型存储。

2024-08-13 17:57:56 668

原创 关于Redis默认缓存模式旁路缓存会出现的问题

上面的三种模式的可以处理的业务场景其实并不相同,但实际的工作中其实我们只用到了Cache Aside Pattern模式,我们使用的第三方框架也是默认使用的这种方式。但是题主在这里有一个大胆的想法,我们是否可以使用异步缓存写入的形式去处理,先更新redis,然后将更新数据写入到一个有序对列,通过可靠性消费去消费数据更新数据库的数据,在高并发的场景下,如何避免数据不一致的情况了。当出现并发情况时,就会出现,如图所示的情况,线程2读取到的数据和数据库的最新数据不一致。

2024-08-12 23:42:42 329

原创 ios端通过微信小程序客服助手进行支付

通过微信小程序助手进行订单支付

2024-08-12 13:49:05 1400

原创 通过SSE创建ChatGPT 聊天时token解析异常

线上项目在做用户聊天时,需要扣减用户的聊天权益次数,在spring security中定义了一个JwtAuthenticationTokenFilter,用于对用户的token解析,在非流水式的用户聊天对答请求时,逻辑业务处理正常代码如下。

2024-08-11 23:50:36 206 3

原创 通过Embedding向量模型解析QA问题,结合prompt实现垂直领域GPT助手

在我们对接ChatGPT时,不论是国内的阿里云的qwen-turbo或者是OpenAI的gpt-4o,我们都会发现在某些垂直领域的场景下内容回答的不是很好的情况,接下来我将通过text-embedding向量模型结合prompt提示词来实现对垂直领域问题的完善。例如:question:阿尔茨海默病是什么?answer:阿尔茨海默病是一种渐进性脑部疾病,会导致痴呆。它会影响记忆、思维和行为,并随着时间推移而恶化。在人工智能(AI)领域中,“prompt” 是指向模型提供输入以引导其生成特定输出的文本或指令。

2024-08-11 23:01:25 837

原创 Mybatis源码分析

我们都知道,mybatis框架是一个半自动的ORM框架,可以简化我们对于数据库连接的管理,以及可以对于所有的查询配置的统一维护。是对于传统的JDBC连接操作的二次封装。这样其实我们都需要手动的获取连接数据,关闭流数据。为了解决上面的一些列问题,mybatis引入了一系列的组件来解决出现的问题。

2024-08-11 19:11:43 236

空空如也

空空如也

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

TA关注的人

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