自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 一篇搞定Redis分布式锁及分布式锁的自研

redis分布式锁

2025-01-19 16:48:13 601

原创 快速实现持久化登录态:分布式session共享

在传统的单服务器架构中,如果服务器宕机或需要重启进行维护,所有用户的会话都会丢失。参考主流网站的登录实现,可以发现,即便你关闭了当前网站,再次打开时,也不用重新登录,填写用户名密码。在开发过程中,如果没有存储session在任意第三方平台(MySQL、Redis)中,每次重启后端都得重新登录,非常麻烦。

2025-01-13 16:36:34 508

原创 一篇搞定多级缓存:Redis分布式缓存+Caffeine本地缓存

看看官方介绍:Redis的重要特性总结存储在内存更高效的数据结构(用c语言编写,足够底层O(∩_∩)O)支持复制,集群;高可用!面试题:Redis为什么这么快?可以从官方给出的这几个方面回答。

2025-01-03 18:16:07 2211

原创 Spring AOP切面编程的应用:权限校验

在业务上,有些功能需要区分权限。为了区分哪些功能需要更高一级的权限才能访问,需要在代码上做进一步的增强。

2024-12-20 16:00:54 1088

原创 二分查找+二维数组展开:搜索二维矩阵(leetcode.74)

这种映射方法有效的原因在于矩阵的存储顺序通常是按行优先(row-major order)。这意味着在内存中,矩阵的第一行的所有元素连续存储,然后是第二行的所有元素,依此类推。但是这都不重要,最后还是要把 int midValue = matrix[mid / col][mid % col];因此,matrix[mid / cols][mid % cols] 实际上就是 matrix[1][1],其值为 11。显然二维数组需要两个索引,两层循环,不能直接用一层遍历的二分法。怎么可能这么快结束!

2024-12-08 23:20:54 416

原创 RabbitMQ_死信队列是什么?有什么用?如何绑定死信队列?

官方解释:简单说,就是过期或被拒绝的消息与其直接丢弃,不如放在一个叫"死信队列(与正常队列没有区别)"的队列中,然后再做特殊处理。这个过程确保了即使在消息过期或被拒绝确认的情况下,消息也不会丢失,而是会被安全地存储并转发到目标队列,直到它们被成功处理并确认。通过至少一次死信处理,RabbitMQ提供了更高的消息传递可靠性。如何判断死信?消费者使用basic.reject或 basic.nack声明消费失败,并且消息的requeue参数设置为false。

2024-12-08 20:21:51 1160

原创 Spring Cloud Gateway 整合Redis实现限流(RateLimiter)

一句话概括:默认使用令牌桶算法,如果触发限流,返回HTTP响应状态码429。编写配置类(根据IP限流)

2024-12-07 20:26:52 708

原创 Dubbo远程调用失败:java.lang.IllegalStateException: Failed to check the status of the service com....

VMware 虚拟机需要禁用VMnet1。

2024-12-04 21:45:09 173

原创 详细图解:新版IDEA内置Git上传项目到远程仓库操作流程

公共的远程仓库有gitee(国内) , github , gitlab 等。选择一个你喜欢的代码托管平台(这里用的是。点击创建本地仓库后,你项目文件目录下就会有.git文件夹(默认是隐藏的,需要在查看中手动配置查看隐藏项目)创建完成后将远程仓库地址复制到IDEA的url中(git remote add 后面的地址)),在平台上新建一个远程仓库(一个本地仓库对应一个远程仓库,基本上一个仓库放一个项目)此时右键你的项目就会出现Git选项,然后配置远程仓库地址。刷新一下你的远程仓库就能看到上传的项目了。

2024-12-03 17:50:16 1484

原创 快速掌握反射和动态代理

动态代理是一种设计模式,它允许在运行时创建一个实现了一组给定接口的新类。这个新类可以对原始类的方法调用进行拦截和增强,而不需要修改原始类的代码。简单点说:无侵入式地给代码增加额外功能,避免破坏原有的代码结构(不会破坏原有的石山代码)假如我们有业务类A:学编程类,想要在此基础上增加更多的业务(非核心),可以创建代理类B。特点:通过生成被代理类的子类来实现代理功能,需要继承被代理类。代理类(B)如何知道要有被代理类(A)的方法代理?transient 的值是 128。interface 的值是 512。

2024-12-01 12:09:00 262

原创 Java方法引用语法

在Java中,方法引用是一种简洁的语法,用来直接引用已存在的方法或构造函数。它们通常与Lambda表达式一起使用,并且可以看作是Lambda表达式的简化形式。方法引用主要用于提高代码的可读性和简洁性。

2024-11-30 17:02:26 313

原创 快速掌握Stream API的常见用法

创建数组。

2024-11-30 02:05:59 192

原创 Dubbo远程调用生产者无法使用Mybatis Plus解决方案:org.apache.dubbo.rpc.RpcException: Failed to invoke the method getO

在使用Dubbo进行远程调用时,consumer无法使用provider里的Mybatis Plus框架,代码和报错如下:STRICT。

2024-11-29 18:48:51 1180

原创 RedisTemplate 序列化代码配置

在 Redis 中存储的数据通常是字节序列,当这些字节序列表示的是 UTF-8 编码的文本时,它们会被显示为十六进制格式或转义字符。如果RedisTemplate无序列化配置的话,中文缓存会以这种形式存储。

2024-11-29 18:29:00 203

原创 前端返回的id与数据库不一致问题

前后端id不一致问题

2024-11-29 18:12:13 316

原创 LogStash报错:could not find jruby in D:\ElasticStack\logstash-7.17.24\vendor\jruby“

在bin目录下输入:logstash -e 'input { stdin { } } output { stdout {} }'如果要选择7开头的版本,在View past releases选择。注意网页要切换成英文,不然会重定向。

2024-11-06 02:27:22 167

原创 Leetcode150.逆波兰表达式求值(Java)

例2:遇到前三个数字放入栈中。遇到 / 后,将前两个数字依次弹出(顺序为5,13),第二个弹出的是被除数13,第一个是除数5。将运算结果放入栈中,此时栈里为 元素为13/5 和 4。例1:遇到数字2 ,1放入栈中,遇到 + 则弹出前两个数字(顺序为1 ,2),将前两个数字进行相加后再放回栈中。然后遇到3放入栈中,遇到 * 将两个前两个数字(3 和 3)弹出相乘后,放入栈中。如果遍历到四个运算符之一,则将栈弹出两次,然后将弹出的两个数operand1和operand2做运算,运算结果再push进栈里。

2024-06-23 19:21:07 378

原创 Leetcode 225. 用队列实现栈 && 232.用栈实现队列(jvav)

题目:请你仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通栈的全部四种操作(pushtoppop和empty本题可采用一个队列或两个队列完成,这里我使用一个队列实现栈,更加简洁,理解起来也不难。栈的特点是先进后出,队列则是先进先出。也就是说要让队列从先进先出转化为先进后出。要实现这一点,只需让队列先进的元素弹出(除了最后一个元素),再让其添加到该队列中。如上图所示,将4前面的所有元素弹出再添加到队尾, 就能得到右边栈相同的最外面的元素在最前面。

2024-06-20 14:53:22 736

原创 Leetcode 707. 设计链表(Java)

经典的链表题,对加深链表数据结构的理解有很大帮助。由于链表中涉及添加与删除的操作需要三个节点配合 ,而涉及头节点的操作只有两个节点,无法得知头节点前一个节点, 故引用虚拟头节点作为实际头节点的前一个节点,可使问题简单化。如下图所示,dummy虚拟头节点索引可看作为-1,在head之前。

2024-06-16 20:01:04 1787

原创 一张图看懂数据库连接 - MySQL数据库中实现七种Join操作

左外连接(Left Outer Join):它会从左表中选择所有的行,并且会根据连接条件检索右表中与左表中行匹配的行。这里先引入MySQL数据库的基本配置,以下图的员工表和部门表为例,查找员工的id(employee_id)和部门名字(department_name),这样,即使有些员工没有与部门表中的记录匹配,他们仍然会出现在结果中,并且部门信息列会填充为 NULL。需要注意的是,此时要连接的外表为employees员工表 , where筛选条件应改为e.department_id。

2024-06-09 14:10:55 782 1

原创 leetcode 203 移除链表元素

假设需要删除的val 的值为1 , 下图则需要删除三个节点,需要用while循环遍历后续节点判断是否应该删除。显然,使用if判断仍有缺陷 , 因为只能删除一个节点,如果后续仍有节点满足,则无法满足题意。表示A节点的下一个元素从节点B(A->next) 指向 C(A->next->next)//把头节点的下一个值赋值给头节点。//把头节点的下一个值赋值给头节点。head->val == val 就无法实现,所以要先判断头节点。代码可表示为 A->next = A->next->next。

2024-05-29 21:19:31 201 2

空空如也

空空如也

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

TA关注的人

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