自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 java You aren‘t using a compiler supported by lombok, so lombok will not work and has been disabled

需要在pom文件添加这个。然后reload项目。

2024-07-25 15:13:44 179

原创 oracle 查询锁表

如果有数据 看数据是那个服务的,重启下那个服务即可;如果能定位问题代码 可以看下代码为什么产生锁表。oracle 查询锁表。

2024-07-25 15:13:11 544

原创 一次完整的支付链路

前端界面展示支付二维码,客户扫码支付,支付成功后,钱到支付宝账户;支付宝发起回调通知,调用商城系统回调接口,回调接口将支付流水(用户转给品牌商的流水)状态修改为支付成功;然后将收款单状态流转为已收款,将订单流转为待出库;同时发起两次转账请求,一个是品牌商转账给经销商,一个是品牌商转账给中间商的手续费;通过返回的应收账款信息,前端组装数据,调用生成收款单接口,此接口调用支付宝支付1011请求,生成支付流水(此时支付流水为用户转给品牌商),1011请求此时默认返回待支付状态,与支付二维码返回给前端。

2024-07-12 11:34:06 158

原创 springboot 程序运行一段时间后收不到redis订阅的消息

springboot 程序运行一段时间后收不到redis订阅的消息。

2024-07-12 11:32:32 481

原创 Redis 输入输出缓冲区解析

缓冲区的功能是用一块内存空间来暂时存放命令数据,以免出现因为数据和命令的处理速度慢于发送速度而导致的数据丢失和性能问题。但因为缓冲区的内存空间有限,如果往里面写入数据的速度持续地大于从里面读取数据的速度,会导致缓冲区需要越来越多的内存来暂存数据。缓冲区占用的内存超出了设定的上限阈值时,会出现缓冲区溢出。如果发生了溢出,会丢数据了。随着累积的数据越来越多,缓冲区占用内存空间越来越大,一旦耗尽了 Redis 实 例所在机器的可用内存,就会导致 Redis 实例崩溃。

2024-07-10 14:04:00 1179

原创 mysql判断时间段是否重合

SELECT CASE WHEN t1.start_time = t2.start_time THEN ‘重合’ ELSE ‘不重合’ END AS result。mysql判断时间段是否重合。

2024-07-10 14:03:30 315

原创 小程序中UnionID,AppID,AppSecret,OpenID怎么理解?

比喻(假设):就像每个人(用户)在每个国家(小程序)有不同的身份证(OpenID),在中国有在中国的身份证,在美国有在美国的身份证;每一个人有一个全球身份证(UnionID),即在不同的小程序用户的UnionID不变。AppID:小程序的身份证号码,是微信公众平台上的小程序 ID,有了它,微信客户端才能确定你的小程序“身份”,并使用微信提供的高级接口。同一个用户在不同的小程序中的 OpenID 是不一样的。UnionID:同一用户,对同一个微信开放平台下的不同应用,UnionID 是相同的。

2024-06-26 15:35:43 288

原创 jvm强引用软引用弱引用虚引用

当垃圾回收器准备回收一个对象时,如果发现它还有虚引用,就会在回收对象后,将这个虚引用加入引用队列,以通知应用程序对象的回收情况。相对的,软引用、弱引用和虚引用的对象是软可触及、弱可触及和虚可触及的,在一定条件下,都是可以被回收的。弱引用和软引用一样,在构造弱引用时,也可以指定一个引用队列,当弱引用对象被回收时,就会加入指定的引用队列,通过这个队列可以跟踪对象的回收情况。在 Java 程序中,最常见的引用类型是强引用(普通系统 99%以上都是强引用),也就是我们最常见的普通对象引用,也是默认的引用类型。

2024-06-26 15:35:10 911

原创 增加了redis分布式锁,但是还是生成了重复数据

增加了redis分布式锁,但是还是生成了重复数据。

2024-06-20 22:41:50 698

原创 count()和count(1)和count(字段)的区别

使用,当要统计的数量比较大时,发现count(*)花费的时间比较多,相对来说count(1)花费的时间比较少。1、如果你的没有主键,那么count(1)比count(*)快;如果有主键的话,那主键(联合主键)作为count的条件也比count(*)要快。2、如果你的表只有一个字段的话那count(*)就是最快的。3、如果count(1)是聚索引,id,那肯定是count(1)快,但是差的很小的。因为count(*),自动会优化指定到那一个字段。

2024-06-20 22:39:52 138

原创 并发修改账户余额不一致问题与解决方法悲观锁select…for update

并发修改账户余额不一致问题与解决方法悲观锁select…for update。

2024-06-19 10:46:35 180

原创 threadlocal详解

朋友们在遇到线程安全问题的时候,大多数情况下可能会使用synchronized关键字,每次只允许一个线程进入锁定的方法或代码块,这样就可以保证操作的原子性,保证对公共资源的修改不会出现莫名其妙的问题。这种加锁的机制,在并发量小的情况下还好,如果并发量较大时,会有大量的线程等待同一个对象锁,会造成系统吞吐量直线下降。JDK的开发者可能也考虑到使用synchronized的弊端,于是出现了volatile 和 ThreadLocal等另外的思路解决线程安全问题。

2024-06-19 10:45:57 1091

原创 哪些东西可以放入GC Roots

哪些东西可以放入gcroot。

2024-06-18 14:20:40 135

原创 Lua脚本

3. 替代redis的事务功能:redis自带的事务功能很鸡肋,而redis的lua脚本几乎实现了常规的事务功能,官方推荐如果要使用redis的事务功能可以用redis lua替代。2. 原子操作:Redis会将整个脚本作为一个整体执行,中间不会被其他命令插入。管道不是原子的,不过redis的批量操作命令(类似mset)是原子的。1. 减少网络开销:本来5次网络请求的操作,可以用一个请求完成,原先5次请求的逻辑放在redis服务器上完成。arg [arg …key [key …numkeys 是键的数量。

2024-06-18 14:20:07 375

原创 什么是redission的看门狗?

看门狗。

2024-06-04 17:29:46 841

原创 看门狗机制概述

看门狗机制是Redission提供的一种自动延期机制,这个机制使得Redission提供的分布式锁是可以自动续期的。看门狗机制提供的默认超时时间是30*1000毫秒,也就是30秒如果一个线程获取锁后,运行程序到释放锁所花费的时间大于锁自动释放时间(也就是看门狗机制提供的超时时间30s),那么Redission会自动给redis中的目标锁延长超时时间。在Redission中想要启动看门狗机制,那么我们就不用获取锁的时候自己定义leaseTime(锁自动释放时间)。如果自己定义了锁自动释放时间的话,无论是通过。

2024-06-04 17:29:14 928

原创 过滤器(filter)和拦截器(Interceptor)的区别以及使用场景

过滤器实现的是 javax.servlet.Filter 接口,而这个接口是在Servlet规范中定义的,也就是说过滤器Filter 的使用要依赖于Tomcat等容器,导致它只能在web程序中使用。拦截器 Interceptor 是在请求进入servlet后,在进入Controller之前进行预处理的,Controller 中渲染了对应的视图之后请求结束。过滤器和拦截器 底层实现方式不相同,过滤器是基于函数回调的,拦截器则是基于Java的反射机制(动态代理)实现的。过滤器 和 拦截器的触发时机不同。

2024-05-31 11:20:24 1017

原创 访问github加速方法续集dev-sidecar

访问github加速方法续集dev-sidecar。

2024-05-31 11:19:52 402

原创 访问github加速方法

对 GitHub 说"爱"太难了:访问慢、图片加载不出来。本项目无需安装任何程序,仅需 5 分钟。GitHub 访问速度慢的问题GitHub 项目中的图片显示不出的问题让你"爱"上 GitHub。注:本项目还处于测试阶段,仅在本机测试通过,如有问题欢迎提issues。

2024-05-30 09:16:04 871

原创 设计模式-状态模式

在阎宏博士的《JAVA与模式》一书中开头是这样描述状态(State)模式的:**  状态模式,又称状态对象模式(Pattern of Objects for States),状态模式是对象的行为模式。****  状态模式允许一个对象在其内部状态改变的时候改变其行为。这个对象看上去就像是改变了它的类一样。**

2024-05-30 09:15:15 1210

原创 防刷发送短信验证码接口的五种简单好用方法绝对够用

1.前端调用发送短信接口前,通过密钥(1234abcd)与加密算法,将miyao1234+(16位英文字母与数字字符串) 例如miyao1234wgly1noKSXg47Mn6 进行加密。5.如果解密后包含约定字符串miyao1234,则通过校验,此时注意⚠️,需要将此校验码存入redis,下次如果有相同校验码 则提示重复。前端增加图形验证码,点击发送按钮后增加60s倒计时,60s后才可以再次点击。3.后端接收到后对校验码进行解密,如果解密失败,提示失败。2.前端调用发送短信接口时,将校验码传递给后端。

2024-05-29 00:11:48 1973

原创 一次完整的JVM堆外内存泄漏故障排查记录

记录一次线上JVM堆外内存泄漏问题的排查过程与思路,其中夹带一些JVM内存分配机制以及常用的JVM问题排查指令和工具分享,希望对大家有所帮助。在整个排查过程中,我也走了不少弯路,但是在文章中我仍然会把完整的思路和想法写出来,当做一次经验教训,给后人参考,文章最后也总结了下内存泄漏问题快速排查的几个原则。故障描述和排查过程故障原因和解决方案分析JVM堆内内存和堆外内存分配原理常用的进程内存泄漏排查指令和工具介绍和使用文章撰写不易,请大家多多支持我的原创技术公众号:后端技术漫谈。

2024-05-29 00:11:10 739

原创 【秒杀系统】秒杀系统实战(四):缓存与数据库双写一致性深度分析

微笑挖坑,努力填坑。———— 已经拥有黑眼圈,但还没学会小猪老师时间管理学的蛮三刀同学本文是秒杀系统的第四篇,我们来讨论秒杀系统中缓存热点数据的问题,进一步延伸到数据库和缓存的双写一致性问题,并且给出了实现代码。零基础上手秒杀系统(一):防止超卖。

2024-05-28 09:25:20 968

原创 【秒杀系统】零基础上手秒杀系统(三):抢购接口隐藏 + 单用户限制频率

时光飞逝,两周过去了,是时候继续填坑了,不然又要被网友喷了。本文是秒杀系统的第三篇,通过实际代码讲解,帮助你了解秒杀系统设计的关键点,上手实际项目。抢购接口隐藏单用户限制频率(单位时间内限制访问次数)当然,这两个措施放在任何系统中都有用,严格来说并不是秒杀系统独特的设计,所以今天的内容也会比较的通用。零基础上手秒杀系统(一):防止超卖本项目的代码开源在了Github,大家随意使用:希望大家多多支持我的公主号:后端技术漫谈。

2024-05-28 09:24:47 703

原创 【秒杀系统】零基础上手秒杀系统(二):令牌桶限流 + 再谈超卖

本文是秒杀系统的第二篇,通过实际代码讲解,帮助你快速的了解秒杀系统的关键点,上手实际项目。本篇主要讲解接口限流措施,接口限流其实定义也非常广,接口限流本身也是系统安全防护的一种措施令牌桶限流单用户访问频率限流抢购接口隐藏此外,前文发出后很多同学对于乐观锁在高并发时无法卖出全部商品提出了“严正抗议”,所以还是在本篇中补充讲解下乐观锁与悲观锁。从零开始打造简易秒杀系统:防止超卖从零开始打造简易秒杀系统:接口限流(令牌桶限流)+ 再谈超卖。

2024-05-27 10:37:51 462

原创 【秒杀系统】从零开始打造简易秒杀系统(一):防止超卖

大家好,好久不发文章了。(快一个月了- -)最近有很多学习的新知识想和大家分享,但无奈最近项目蛮忙的,很多文章写了一半搁置在了笔记里,待以后慢慢补充发布。本文主要是通过实际代码讲解,帮助你一步步搭建一个简易的秒杀系统。从而快速的了解秒杀系统的主要难点,并且迅速上手实际项目。从零开始打造简易秒杀系统:乐观锁防止超卖从零开始打造简易秒杀系统:令牌桶限流从零开始打造简易秒杀系统:Redis 缓存从零开始打造简易秒杀系统:消息队列异步处理订单欢迎关注我的公众号:后端技术漫谈(二维码见底部)

2024-05-27 10:37:19 744

原创 消除if...else是9条锦囊妙计

最近在做代码重构,发现了很多代码的烂味道。其他的不多说,今天主要说说那些又臭又长的if…else要如何重构。在介绍更更优雅的编程之前,让我们一起回顾一下,不好的if…else代码。

2024-05-26 20:35:54 251

原创 聊聊spring事务失效的12种场景,太坑了

对于从事java开发工作的同学来说,spring的事务肯定再熟悉不过了。在某些业务场景下,如果一个请求中,需要同时写入多张表的数据。为了保证操作的原子性(要么同时成功,要么同时失败),避免数据不一致的情况,我们一般都会用到spring事务。,就能轻松搞定事务。我猜大部分小伙伴也是这样用的,而且一直用一直爽。但如果你使用不当,它也会坑你于无形。今天我们就一起聊聊,事务失效的一些场景,说不定你已经中招了。不信,让我们一起看看。

2024-05-26 20:35:24 362

原创 厉害了,spring中竟然有12种定义bean的方法

在庞大的java体系中,spring有着举足轻重的地位,它给每位开发者带来了极大的便利和惊喜。我们都知道spring是创建和管理bean的工厂,它提供了多种定义bean的方式,能够满足我们日常工作中的多种业务场景。那么问题来了,你知道spring中有哪些方式可以定义bean?我估计很多人会说出以下三种:没错,但我想说的是以上三种方式只是开胃小菜,实际上spring的功能远比你想象中更强大。各位看官如果不信,请继续往下看。

2024-05-24 11:35:27 310

原创 编程式事务

建议在项目中少使用@Transactional注解开启事务。但并不是说一定不能用它,如果项目中有些业务逻辑比较简单,而且不经常变动,使用@Transactional注解开启事务开启事务也无妨,因为它更简单,开发效率更高,但是千万要小心事务失效的问题。在spring中为了支持编程式事务,专门提供了一个类:TransactionTemplate,在它的execute方法中,就实现了事务的功能。注解声明式事务,我更建议大家使用,基于。

2024-05-24 11:34:39 355

原创 一次完整的JVM堆外内存泄漏故障排查记录

记录一次线上JVM堆外内存泄漏问题的排查过程与思路,其中夹带一些JVM内存分配机制以及常用的JVM问题排查指令和工具分享,希望对大家有所帮助。在整个排查过程中,我也走了不少弯路,但是在文章中我仍然会把完整的思路和想法写出来,当做一次经验教训,给后人参考,文章最后也总结了下内存泄漏问题快速排查的几个原则。故障描述和排查过程故障原因和解决方案分析JVM堆内内存和堆外内存分配原理常用的进程内存泄漏排查指令和工具介绍和使用文章撰写不易,请大家多多支持我的原创技术公众号:后端技术漫谈。

2024-05-23 15:22:21 1072

原创 8srping循环依赖

循环依赖:说白是一个或多个对象实例之间存在直接或间接的依赖关系,这种依赖关系构成了构成一个环形调用。第一种情况:自己依赖自己的直接依赖第二种情况:两个对象之间的直接依赖第三种情况:多个对象之间的间接依赖图片前面两种情况的直接循环依赖比较直观,非常好识别,但是第三种间接循环依赖的情况有时候因为业务代码调用层级很深,不容易识别出来。

2024-05-23 15:21:36 1815

原创 spring中那些让你爱不释手的代码技巧(续集

说实话,个人认为springboot自带的Conditional系列已经可以满足我们绝大多数的需求了。但如果你有比较特殊的场景,也可以自定义自定义Conditional。@OverrideSystem.out.println("实现自定义逻辑");第三步,使用@MyConditionOnProperty注解。

2024-05-22 15:21:18 700

原创 spring中那些让你爱不释手的代码技巧

singleton 单例,每次从spring容器中获取到的bean都是同一个对象。prototype 多例,每次从spring容器中获取到的bean都是不同的对象。RequestScope 同一次请求从spring容器中获取到的bean都是同一个对象。SessionScope 同一个会话从spring容器中获取到的bean都是同一个对象。即便如此,有些场景还是无法满足我们的要求。比如,我们想在同一个线程中从spring容器获取到的bean都是同一个对象,该怎么办?

2024-05-22 11:29:41 470

原创 spring aop聊点不一样的东西

前几篇文章本打算写spring aop的,但是强忍着没有写(旁白:也有可能是没想好该怎么写😝),就是为了今天整个专题,因为它是spring中最核心的技术之一,实在太重要了。关于spring aop的文章网上一搜一大堆,但我想写点不一样的东西,尝试一种全新的写作风格,希望您会喜欢。

2024-05-12 14:41:17 613

原创 mybatis的日志功能是如何设计的

else不好,7种条件判断太多了,并非优雅的编程。定义了LogException异常,该异常是日志功能的专属异常,如果你有看过mybatis其他源码的话,不难发现,其他功能也定义专属异常,比如:DataSourceException等,这是mybatis的惯用手法,主要是为了将异常细粒度的划分,以便更快定位问题。看到这里,聪明的你可能会有这样的疑问,从上图可以看出mybatis定义了8种useXXXLogging方法,但是在前面的static静态代码块中却只调用了6种,这是为什么?我们用一张图来总结一下。

2024-05-12 14:40:07 303

原创 @Value竟然能玩出这么多花样

对于从事java开发工作的小伙伴来说,spring框架肯定再熟悉不过了。spring给开发者提供了非常丰富的api,满足我们日常的工作需求。如果想要创建bean实例,可以使用@Controller、@Service、@Repository、@Component等注解。如果想要依赖注入某个对象,可以使用@Autowired和@Resource注解。如果想要开启事务,可以使用@Transactional注解。如果想要动态读取配置文件中的某个系统属性,可以使用@Value注解。等等,还有很多。。。

2024-05-10 10:05:32 791

原创 @Autowired的这些新姿势,你学会了

最近review别人代码的时候,看到了一些@Autowired不一样的用法,觉得有些意思,特定花时间研究了一下,收获了不少东西,现在分享给大家。也许@Autowired比你想象中更强大。

2024-05-10 10:04:40 710

原创 synchronized 锁升级过程

synchronized 锁升级过程Java中的synchronized锁升级过程是JVM为了提高并发性能而引入的一种优化策略,它在JDK 1.6及更高版本中得到了显著的改进。

2024-04-10 16:39:15 398

原创 2简单抢红包代码

简单抢红包代码。

2024-04-10 16:38:32 437

空空如也

空空如也

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

TA关注的人

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