- 博客(42)
- 收藏
- 关注
原创 MySQL EXPLAIN 命令详解
MySQL EXPLAIN命令详解 EXPLAIN是MySQL中用于分析SQL查询执行计划的关键命令,帮助开发者优化查询性能。其输出包含12个重要字段: id:查询标识符,表示查询顺序 select_type:查询类型(SIMPLE、PRIMARY、SUBQUERY等) table:涉及的表名 type:访问类型(const、eq_ref、ref等),反映查询效率 possible_keys/key:可能/实际使用的索引 rows:估计需要检查的行数 Extra:额外信息(如Using index、Usin
2025-06-04 16:11:01
646
原创 HashMap 的底层原理
HashMap 是 Java 中最常用的基于哈希表的Map实现,它存储键值对(key-value),具有 **O(1) 平均时间复杂度** 的查询、插入和删除性能。其底层实现涉及 **数组 + 链表 + 红黑树** 的结构,并在 Java 8 中进行了优化(链表转红黑树)。下面详细分析其核心机制:
2025-06-03 22:26:47
1115
原创 java常见集合有什么
Java集合框架分为Collection和Map两大类。Collection接口包含List(有序可重复,如ArrayList查询快、LinkedList增删快)、Set(无序不可重复,如HashSet快速去重、TreeSet自动排序)和Queue(如PriorityQueue优先级队列)。Map接口存储键值对,包括无序的HashMap、有序的LinkedHashMap/TreeMap,以及线程安全的ConcurrentHashMap。工具类Collections和Arrays提供集合操作辅助功能。不同集合
2025-06-03 15:33:57
910
原创 Redis事务详解:原理、使用与注意事项
Redis事务详解:原理、使用与注意事项 Redis事务通过MULTI、EXEC、DISCARD命令实现一组命令的打包执行,具有以下特点:1) 无隔离级别概念;2) 不保证原子性,错误命令不会影响后续执行;3) 无自动回滚机制。事务错误分为入队错误(导致事务终止)和执行错误(不影响其他命令)。WATCH命令可实现乐观锁机制,监控键值是否被修改。Redis事务存在不支持回滚、命令受限等局限性,建议保持事务简短,复杂场景可使用Lua脚本实现原子操作。与关系型数据库不同,Redis事务更侧重命令的批量执行而非AC
2025-05-31 21:44:22
915
原创 OpenFeign vs MQ:微服务通信如何选型?详解同步与异步的适用场景
摘要 在微服务架构中,OpenFeign和MQ是两种典型的服务通信方式,各有适用场景。OpenFeign采用同步HTTP调用,适合需要实时响应和强一致性的业务(如支付、登录),但存在耦合性高和性能瓶颈问题。MQ通过异步消息队列实现解耦,适用于事件驱动、耗时操作和高并发场景(如订单处理、秒杀),但需处理消息可靠性和延迟问题。实际项目中常组合使用,如核心业务用OpenFeign确保实时性,非关键流程用MQ异步处理。选择时需权衡实时性、一致性与系统解耦需求。
2025-05-29 22:26:56
1341
原创 接口幂等性和防止请求重复区别
摘要: 幂等性与防止请求重复处理本质相通,但侧重点不同。幂等性确保多次请求结果一致(如支付扣款一次),而防重复处理聚焦避免同一请求多次执行(如用户重复提交)。两者共用技术方案(Token、乐观锁等),但选择需结合场景:用户交互场景适用Token+限流,数据一致性场景需乐观锁+分布式锁,高并发场景推荐MQ+Token。实际应用中,防重复处理常作为实现幂等性的手段。
2025-05-29 14:41:54
769
原创 对称加密与非对称加密在 JWT 中的应用详解
JSON Web Token(JWT)是一种开放标准(RFC 7519),用于在各方之间安全地传输声明(Claims)。JWT 通常由三部分组成:Header(头部)、Payload(载荷) 和 Signature(签名)。其中,签名 是 JWT 的核心,用于确保数据的完整性和真实性。本文详细介绍了 对称加密(如 HS256) 和 非对称加密(如 RS256/ES256) 在 JWT 中的应用,包括它们的定义、特点、常见算法及应用场景。重点讲解了两种加密方
2025-05-18 21:46:28
1112
原创 The bean ‘XX‘, could not be registered. A bean with that name has already been defined in null and
The bean '1.FeignClientSpecification', defined in null, could not be registered. A bean with that name has already been defined in null and overriding is disabled.在使用Spring Cloud Feign时,可能会遇到FeignClientSpecification无法注册的问题,原因是存在多个同名的Feign客户端Bean。默认情况下,Spri
2025-05-18 21:01:20
540
原创 MyBatis-Plus 映射配置详解(含数据库表、实体类、配置),resultMap,association,collection,n+1,一对一,一对多,嵌套查询,嵌套结果
本文详细介绍了 MyBatis-Plus 的映射配置,涵盖了数据库表设计、实体类定义、MyBatis 配置、XML 映射参数详解,以及一对一、一对多关系的处理方式。首先,通过 SQL 语句创建了用户表、用户详情表和订单表,并定义了对应的实体类。接着,配置了 MyBatis-Plus 的驼峰映射和基础 Mapper。在 XML 映射配置部分,详细讲解了基础 resultMap 和包含一对一、一对多关系的完整 resultMap,并提供了嵌套结果和嵌套查询两种方式的 SQL 配置。最后,文章解释了 N+1 查询
2025-05-15 15:45:46
874
原创 hashCode()和equals(),为什么使用Map要重写这两个,为什么重写了hashCode,equals也需要重写
在Java中,hashCode()和equals()方法在对象比较和存储中起着关键作用。默认情况下,hashCode()返回对象内存地址的int值,而equals()比较对象的内存地址。在HashMap中,存储规则依赖于这两个方法:首先通过hashCode()确定存储位置,若发生哈希冲突,则使用equals()判断对象是否相同。若未重写这两个方法,属性值相同的对象可能因内存地址不同而被视为不同对象,导致重复存储。仅重写equals()或hashCode()也会导致类似问题。因此,为了确保HashMap正确存
2025-05-12 20:29:24
732
原创 lua入门语法,包含安装,注释,变量,循环等
一种脚本语言,设计的目的是为了能够在一些应用程序提供灵活的扩展功能和定制功能。全局变量,在任意一个地方都可以看到,本地变量,在当前的文件,在代码块中才可以看到-- 全局变量赋值a=1-- 局部变量赋值local b=2如果变量没有初始化:则 它的值为nil 这和java中的null不同。
2025-05-12 15:24:02
1233
1
原创 SPU SKU
Standard Product Unit,即标准化产品单元。SPU可以理解为一个大类别的产品集合,它代表的是一组具有共同特征的商品。以手机为例,“苹果iPhone 14”就是一个SPU。不管它是蓝色、白色,128GB存储还是256GB存储,只要是“苹果iPhone 14”这个型号的手机,都可以归到“苹果iPhone 14”这个SPU下面。简单来说,SPU就是对一类产品的统称,它强调的是产品的共性,不涉及具体的规格、颜色、配置等细节差异。
2025-05-07 17:29:54
242
原创 FastDFS,分布式文件存储系统,介绍+配置+工具类
随着文件逐渐增多,单台计算机已经存储不下这么多数据,需要用多台计算机存储不同的数据或进行备份,这样就需要有一个管理系统管理不同的计算机节点,这就是分布式管理系统。是一款轻量级的分布式文件存储系统,可以对文件进行管理,功能包括文件存储,文件访问,文件同步等,解决了发容量存储和负载均衡的问题。tracker:追踪者服务器,任务是协调调用,起到负载均衡的作用。group:组,相同的组提供冗余备份,不同的组提供扩容。storage:存储节点,提供文件管理的服务。FastDFS的下载流程。fastDFS的角色。
2025-05-07 16:50:05
544
原创 idea使用lombok错误,找不到符号,明明编译没问题,运行报错
问题找不到方法经常遇到这样的小伙伴看到这个是不是一头雾水,明明我编译没有我问题,运行就出现问题,真的很生气。下面介绍解决这个问题的几种方法。
2025-05-06 17:17:19
905
1
原创 git push问题,通用解决方法,Push failed unable to access ‘https://github.com: Couldn‘t connect to server
使用git提交时,明明刚刚提交还是好好的,突然就提交不了了,例如下面这种情况。如果 fetch也失败,说明是网络问题,而非 push 特有的问题。这样就可以清除 Git 的代理设置,让其直接连接网络进行操作。如果ping不同,说明是网络问题,检查自己的网络和vpm。如果不成功说明是说明是仓库 URL 或网络问题。排除自己网络的问题,可能是代理问题。
2025-05-06 16:57:12
339
原创 idea更换jdk版本操作
有时候我们有更换jdk版本的问题,自己电脑可能有多个版本,下面来介绍修改jdk版本修改修改什么地方。再修改pom即可,还有环境变量即可,希望有帮到大家!
2025-05-06 16:44:50
661
原创 设计模式(二):结构型设计模式,组合模式,适配器模式,外观模式,桥接模式
抽象部分定义控制逻辑,我要实现什么样的东西,需要依赖于实现部分,但是不需要知道他的具体实现,只需要去依赖一个具体实现不需要关心它怎么实现。对象结构型模式:对象结构型模式关心对象和类之间的组合,在一个类中,应用另一个类的对象,形成更大的结构。类结构型模式:类结构型模式关心类和类之间的组合,通过继承来组合类,形成更大的结构。组合模式的核心思想是将对象构建成树形结构,叶子节点是树形结构的基本元素,没有子节点,组合节点是树形结构中的容器,可以有子节点。复用性:可以复用现有的类,而不需要修改它们的代码。
2025-04-01 09:34:00
940
原创 redis使用快速入门,依赖,测试,序列化配置,客户端选择
在Spring Date Redis的RedisTemplate,能够将任何类型的对象转换成redis能够接收的字节,但是一般默认采用的序列化方式是JDK的序列化方式,这种序列化的缺点是占用空间大,难看懂,一般使用redis需要自己指定序列化方式,key一般是String类型的,value一般是Object类型的,所以key使用的序列化器是StringRedisSerializer,value使用的序列化器是GenericJackson2JsonRedisSerializer。pool有默认值,可以配置。
2025-03-29 15:07:30
1181
原创 redis主从同步,全量同步,增量同步
repl_baklog:循环缓存数组,记录主机写的操作命令,主机和从机进行数据同步,主机将循环数组的数据发送给从机,从机执行同步数据。在主从节点进行第一次数据同步的时候,或者从节点宕机,主机数据覆盖了从机未同步的数据。在第一次同步之后,大部分的同步做增量同步,第一次同步之后,增量同步也是持续的。全量同步生成RDB文件,在将文件通过网络传输到从机,消耗太大。replid:数据集的id,表示是哪一个数据集的。offset:偏移量,记录服务同步数据到哪个地方。同步主节点和从节点之间差异的部分。
2025-03-26 17:58:55
555
原创 linux系统,Redis安装说明,最详细
如果客户端连接不了redis,可能是防火墙没有开,开启端口即可,如果不知道怎么开启,可以参考着篇文章,怎么查看防火墙状态,怎么开启指定端口,怎么删除端口等,都有详细说明。大多数企业都是基于Linux服务器来部署项目,而且Redis官方也没有提供Windows版本的安装包。方式启动,则必须修改Redis配置文件,就在我们之前解压的redis安装包下(Redis的官方网站地址:https://redis.io/在官网下载一个版本的redis的tar包,上传到虚拟机中。,会阻塞整个会话窗口,窗口关闭或者按下。
2025-03-25 22:29:20
1841
原创 linux,防火墙,firewall,常用命令
• 安全性考虑 :仅开放必要的端口,并限制访问来源,以减少潜在的安全风险。例如,可以指定允许的 IP 地址或子网访问特定端口。• 检查服务名称 :如果使用服务名称开放端口,确保服务名称正确。如果你需要开放一个端口范围,可以使用 CIDR 表示法。• 说明 :此设置在防火墙重启后会恢复,除非同时进行了永久删除。为了使端口开放设置在防火墙重启后依然有效,需要添加。• 说明 :此设置在防火墙重启后会失效。,但需要确认你的系统中是否已定义该服务。),但不希望重启防火墙,可以使用。
2025-03-25 22:15:01
985
原创 分布式锁,rediss,redisson,看门狗,可重入,可重试
分布式锁是一种锁机制,用户解决同一个共享资源被多个线程并发访问的问题,使用分布式锁可以避免并发安全,数据不一致的情况。
2025-03-24 22:23:08
1518
原创 分布式锁,redisson,redis
分布式锁是一种锁机制,用于在分布式环境下,解决多个线程并发访问同一共享资源的问题,避免了并发冲突和数据不一致的问题。
2025-03-24 10:41:26
361
原创 Session和Cookie
• 定义 :Session 是一种服务器端的机制,用于在服务器上存储用户的状态信息。它通过一个唯一的标识符(Session ID)来区分不同的用户会话。• 特点 :• 数据存储在服务器端。• Session ID 通常通过 Cookie 传递给客户端。• 适合存储敏感信息(如用户登录状态、购物车内容等)。• 生命周期由服务器控制,通常会设置超时时间。特性CookieSession存储位置客户端(浏览器)服务器端安全性较低,容易被窃取或篡改较高,数据存储在服务器端。
2025-03-23 17:42:05
846
原创 设计模式(一):创建型设计模式,工厂模式,建造者模式,单例模式
例如我要配置一台电脑,我有好几个方案,方案一是配置为(4060显卡,32G内存,1T硬盘空间),方案二是配置为(3050显卡,16G内存,512G硬盘空间),我根据我的需要告诉装机师傅,我要按照什么方案配置,按照方案一配置一台性能好的电脑,按照方案二配置一台性能弱一点的电脑,我的电脑就是产品,方案就是具体建造者,师傅就是指挥者,这个过程实现了构建与表示分离,可以根据不同的构建方案出现不同的表示(电脑)。角色·······························
2025-03-23 11:37:20
881
原创 @PathVariable 和 @RequestParam
•用于从 URL 路径中提取变量,适用于标识资源的唯一性,如用户 ID、订单 ID 等。•用于从查询字符串中提取参数,适用于过滤、排序、分页等动态查询条件。• 根据具体的业务需求选择合适的注解,可以使代码更加清晰和易于维护。
2025-03-21 08:30:42
462
原创 Java Stream流,史上最全,玩转Stream流,过滤,分组,规约,集合等
forEach方法用于对流中的每个元素执行指定的操作。这是一个终端操作,意味着在调用forEach后,流的处理将结束,不会再进行后续的操作。方法也用于对流中的每个元素执行指定的操作,但与forEach不同的是,保证按照流的顺序依次处理每个元素。这在并行流中尤其有用,可以确保元素按原始顺序被处理。peek方法用于在流的每个元素上执行某些操作,但不会改变流中的数据。它主要用于调试或记录日志等场景,因为它允许你在流的中间操作中插入副作用操作(如打印),而不影响流的处理。Stream 的执行模型。
2025-03-13 23:09:48
2371
原创 什么是多态,多态的作用
多态是面向对象编程中的一个核心概念,它允许不同的对象对同一消息做出不同的响应。简单来说,多态意味着“多种形态”,通过多态,你可以使用统一的接口来处理不同类型的对象。多态允许你编写通用的代码,这些代码可以处理多种不同类型的对象,只要这些对象实现了相同的接口或继承自相同的父类。这样可以提高代码的可扩展性和可维护性,使代码更加灵活。方法被重载了三次,根据传入参数的不同,会调用不同的。方法时,会根据实际对象的类型调用相应子类的方法。类型的引用可以调用不同形状的。接口,并提供了不同的。
2025-03-04 08:42:50
412
原创 redisson锁重试机制,看门狗机制,Redisson原码
在tryLock方法中,可以有三个参数,一个是重试等待时间(-1,默认是不等待),一个是锁过期时间(-1,默认是30秒),一个是时间的单位(null,默认是毫秒),如果我们的锁过期时间未设置,就会启用看门狗机制,过期时间是30秒,锁获取后,在释放之前,定时任务每十秒更新锁的过期时间成30秒,确保如果我们没有设置过期时间,出现问题未手动释放锁的时候能够(崩溃)能够自己释放锁。如果一个线程获取不到锁不会立即失败而是在一段时间内继续尝试获取锁。在Redisson实现分布式锁,使用开门狗机制更新锁的过期时间。
2025-02-23 00:25:48
232
原创 redisson重入锁的原理
redisson实现了可重入锁,Rlock,实现的大概原理是,采用hash结构用来存储锁,其中大key表示表示这把锁是否存在,用小key表示当前这把锁被哪个线程持有,小key的值记录的同一线程获取锁的次数,同一个线程可以多次获取同一把锁,每次获取计数器加一。在特殊的业务中,一个方法一调用方法二,两个方法调用之前需要获取这一把锁,如果锁获取不到之后需要等待,那么,调用方法一的时候获取这把锁,调用方法二的之后获取不到,这个时候就产生了死锁。一个线程可以多次获取同一把锁。为什么要使用同一把锁?
2025-02-22 17:46:31
161
原创 Redisson,分布式锁
Redisson 是一个基于的开源 Java 客户端工具库,提供了丰富的分布式数据结构和功能,其中是其核心特性之一。它简化了分布式系统中锁的实现,解决了传统基于 Redis 实现分布式锁的复杂性问题。
2025-02-22 15:03:08
450
原创 黑马点评,redisson,秒杀,一人一单,线程安全,10单
在黑马点评课程中实战篇-18.分布式锁-Redisson快速入门,使用了redisson但是还是有线程安全,一个用户下了多个订单,可以把获取锁,判断锁放在带有事务的方法中。
2025-02-21 01:27:43
232
原创 @Autowired和@Resource什么区别
如果项目更强调遵循 Java 标准规范,且希望代码具有更好的可移植性,建议使用@Resource。如果项目是基于 Spring 框架开发,更倾向于使用 Spring 特有的功能和特性,@Autowired是一个不错的选择,并且结合@Qualifier注解可以灵活地控制注入的 Bean。Bean在注册的时候如果使用的方式是@Component及其衍生注解,使用的是类名首字母小写作为Bean的名称,如果使用@Bean注解,使用的是方法名作为Bean的名称。
2025-02-20 23:33:07
594
原创 全局唯一ID,全局唯一ID工具类,reids自增
在特殊情况下,如果使用主键自增,id太过于规律,容易被别人发现额外的信息,我们在设置id的时候需要考虑唯一性,安全性(不规律),可靠性(唯一),递增性(递增有利于创建索引)。生成全局唯一ID的方式有很多种,这里介绍使用redis自增生成全局唯一ID。序列号:32bit,秒内计数器,每秒可以产生2^32次方个不同id。不直接使用redis主键自增,在原来的基础上添加其他的信息。时间戳:31bit,以秒为单位,可以使用69年。符号位:1bit,表示正数永远为0。为什么要自己生成全局唯一ID。
2025-02-18 18:17:51
348
原创 IDEA-Search Everywhere-点击两次shift
在idea编写代码,经常需要涉及到中英文的切换,不小心就会触发Search Everywhere,真的烦。1. 使用快捷键打开设置,crtl+alt+s,打开settings。下面是修改这个快捷键和禁用双修饰做快捷键的方法。2. 打开keymap,添加修改快捷键。之后就可以安心的按shift了。3. 禁用双修饰做快捷键。
2024-10-16 22:18:58
617
2
原创 Charm Bracelet
题目大意:有一个背包的容量是n,现在有m件物品,每一件物品的容量是w,价值是v,在不超过背包容量的请款下,最多能装多少价值。思路:就是套模板,前提是得理解这个模板的意思。这道题就是一道对经典的背包问题。
2023-04-10 20:44:51
177
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人