自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 深入理解Redission释放锁过程

这里调用解锁方法unlockInnerAsync同样返回了RFutrue,当lua脚本执行完过后,RFutrue就会变成完成状态,回调用回调函数onComplete,lua脚本就是再unlockInnerAsync里执行的,我们接着往下追。可以看到map存储的是锁的名称和entry对象 entry对象里面放入了线程id,所以释放的时候先从entry移除线程id,如果没有了线程id再从map里移除entry对象。再往下追unlcokAsync这个异步方法。调用unlock方法,往下追。

2025-07-26 12:31:59 337

原创 万字解析Redission ---深入理解Redission上锁过程

调用tyrLock其实就是下面的方法,如果说没有指定锁的过期时间,可以看到这边设置为了-1再往下追,,只需要先看tryAcquire就行,这是获取锁的核心,tryLock后面还有一堆东西现在先不用管这里将等待时间转化为毫秒,获取了当前线程id,当前时间再往下追,可以看到会根据有没有设置锁的超时时间,调用不同的方法,没有设置的话调用的话会进入下面的代码设置看门狗时间getLockWatchdogTimeout,默认是30秒这里也是30*1000化为了毫秒。

2025-07-25 16:47:22 1532

原创 Java八大基本类型

类型内存默认值典型场景byte1字节0二进制数据、紧凑数组short2字节0兼容性场景、小范围整数int4字节0通用整数计算(默认选择)long8字节0L极大整数(时间戳、天文数字)float4字节0.0f低精度科学计算double8字节0.0d高精度计算(默认浮点)char2字节'\u0000'单个字符处理booleanfalse逻辑判断。

2025-07-24 16:58:50 674

原创 String、StringBuffer与StringBuilder

与StringBuffer共享AbstractStringBuilder。String的不可变性不是简单的限制,而是。:锁定当前StringBuffer实例。:所有"修改"操作都返回新对象。:预分配额外空间避免频繁复制。:相同字面量共享内存(通过。:每个public方法使用。:禁止继承破坏不可变性。

2025-07-23 11:40:39 570

原创 TCP头部

为例,假设客户端(Client)向服务器(Server)发送数据包,但未收到ACK确认。服务端使用固定端口(如HTTP=80, HTTPS=443):SSH/Telnet的中断命令(Ctrl+C)客户端通常使用临时端口(1024-65535):0-65535(0-1023为知名端口):5(最小20字节)到15(最大60字节):基于时钟的随机算法(RFC 6528):指定TCP头部长度(以4字节为单位):当URG=1时,指示紧急数据结束位置。:通过选项扩展窗口大小(最高1GB)SYN+ACK:连接建立响应。

2025-07-22 14:19:50 1521

原创 关于TCP四次挥手

FIN(Finish)标志表示发送方已完成数据发送,希望关闭连接。MSL(Maximum Segment Lifetime)通常为30秒或1分钟。2MSL = 2 × MSL(典型值为60秒或120秒):当前序列号(u为已发送数据的最后字节序号+1):确认序列号(w为被动关闭方的最后序列号)FIN包可以携带数据(但通常不携带)通知应用层连接关闭(触发EOF)接收FIN包,检查序列号有效性。FIN包可能重传,确保可靠性。:确认序列号(确认FIN包)接收方需要显式确认FIN包。:确认被动关闭方的FIN。

2025-07-21 15:06:59 604

原创 Java中的intern()方法

时,若常量池中已存在等值字符串,则返回其引用;并返回引用(JDK7+的行为,详见下文)。当创建字符串字面量(如。Java为了优化字符串内存占用,设计了。若不存在,将字符串放入池中再返回引用。这种机制避免了重复字符串的内存浪费。若存在,直接返回池中的引用;不再复制字符串,而是。

2025-07-20 16:32:02 507

原创 tcp三次握手

若仅进行两次握手,当延迟的SYN报文到达时,服务端会误创建新连接,导致客户端收到无效数据,且服务端资源被耗尽(经典的SYN洪水攻击即利用此缺陷)。:第三次握手可携带应用层数据(如HTTP请求),但需谨慎处理,因为连接尚未完全确认。:声明最大报文段大小(以太网MTU 1500 - 40字节TCP/IP头):客户端随机生成初始序列号(ISN),避免历史报文冲突。:显式确认收到客户端序列号(期待下次收到J+1):通告接收窗口大小(流量控制关键)(避免服务端资源被无效占用)(防止旧报文干扰新连接)

2025-07-19 10:02:10 619

原创 黑马点评实现登录功能--基于redis(通俗易懂)

刷新token的拦截器 用于token刷新,如果还是使用之前的拦截器,我们只是拦截了部分资源请求并刷新过期时间,但是还有其他访问不需要携带用户信息的资源,那用户一直访问这些资源,按理来说token因该刷新,可是原本的代码无法做到这一点。在redis中还能这么做吗,肯定不行这个key是“code”那不完全重复了吗,session之所以可以是因为每次http请求都是独立的互不影响,但是redis是数据库。2.在保存用户信息的时候我们使用用户user对象作为value使用"user"作为key。

2025-07-17 09:47:01 412

原创 HTTP vs HTTPS

首先,由客户端向服务器发起加密通信请求,也就是 ClientHello 请求。服务器收到客户端的第三个随机数(pre-master key)之后,通过协商的加密算法,计算出本次通信的「会话秘钥」。客户端收到服务器的回应之后,首先通过浏览器或者操作系统中的 CA 公钥,确认服务器的数字证书的真实性。上面第一项的随机数是整个握手阶段的第三个随机数,会发给服务端,所以这个随机数客户端和服务端都是一样的。服务器收到客户端请求后,向客户端发出响应,也就是 SeverHello。这种设计使其默认端口为。

2025-07-16 20:35:55 980

原创 黑马点评实战片笔记---基于session登录

比如:在当前这个服务器上用户已经完成了登录,Session中存储了用户的信息,能够判断用户已登录,但是在另一个服务器的Session中没有用户信息,无法调用显示没有登录的服务器上的服务。在分布式集群环境中,会话(Session)共享是一个常见的挑战。默认情况下,Web 应用程序的会话是保存在单个服务器上的,当请求不经过该服务器时,会话信息无法被访问。Tomcat提供了Session拷贝功能,通过配置Tomcat可以实现Session的拷贝,但是这会增加服务器的额外内存开销,同时会带来数据一致性问题。

2025-07-15 16:38:25 1034

原创 互斥锁与同步锁

是访问共享资源的代码段。——任意时刻仅有一个执行单元能进入临界区。在多线程/多进程环境中,锁的底层依赖硬件提供的。

2025-07-14 22:57:04 278

原创 操作系统互斥全攻略:从屏蔽中断到TSL指令

【代码】【无标题】

2025-07-14 15:31:11 1308

原创 关于事务的传播方式

1.REQUIRED传播行为定义了。它决定了新方法是加入已有的“事务组”,还是自己单开一个“新项目组”,或者干脆不参与“项目组”(事务)。和。methodA内部调用了methodB。1.REQUIRED如果当前存在事务则加入该事务;如果当前没有事务,则新建一个事务。最常用的设置。适用于大多数业务逻辑,保证操作在同一个事务边界内。你在项目组A (methodA现在需要完成一个子任务 (methodB如果项目组A已经存在(有事务),你就直接在组A内完成子任务(加入事务)。

2025-07-12 11:13:46 1021

原创 关于List.of()

List.of()是 Java 9 引入的静态工厂方法,用于创建不可变意味着:创建后线程绝对安全内存占用更少。

2025-07-11 14:50:01 167

原创 关于String.format

是类的静态方法,用于将指定参数按照格式字符串的规则拼接成格式化字符串。format:格式字符串,包含普通字符和格式说明符(如%d%sargs:可变参数列表,用于替换格式说明符中的占位符。

2025-07-11 14:46:02 1489

原创 MySQL主键深度解析:数据库设计的核心基石

在数据库设计中,主键(Primary Key)扮演着至关重要的角色。它不仅是每条记录的唯一标识符,更是数据库性能优化的关键因素。本文将深入探讨MySQL主键的原理、类型选择、设计策略及最佳实践,帮助您构建高效可靠的数据库系统。,决定了数据在磁盘上的物理存储顺序。在InnoDB存储引擎中,主键自动成为。:自增主键的物理存储顺序与逻辑顺序一致。:自增主键保持顺序写入,减少磁盘寻址。:99%的常规表设计。

2025-07-10 16:23:37 488

原创 JDK 1.7 vs JDK 1.8

JDK版本比较Java平台的两次重大飞跃:JDK 7的稳定优化与JDK 8的革命性创新。

2025-07-10 16:15:50 706

原创 存储引擎笔记

存储引擎是对于表来说的不同的表可以有不同的存储引擎,mysql5.5后默认的就是InnoDB了show engines可以显示所有存储引擎support:是否支持commentTransactions:是否支持事务。

2025-07-09 16:54:56 201

原创 MySQL4种隔离级别

在此隔离级别下,事务可以读取其他事务尚未提交的修改(脏读)。这意味着一个事务可以看到另一个事务尚未提交的中间状态数据。在此隔离级别下,事务只能读取已经提交的其他事务所做的修改。每个查询只会看到在该查询开始之前已经提交的数据。在此隔离级别下,事务在执行期间多次读取同一数据时,会看到一致的结果,即使其他事务已经修改了这些数据。MySQL 的 InnoDB 存储引擎通过多版本并发控制(MVCC)实现这一点。这是最高的隔离级别,要求事务必须顺序执行,以避免并发问题。

2025-07-09 13:49:56 1337

原创 关于ArrayList

核心定义:关键特性: 动态扩容:初始容量10,按1.5倍因子增长快速随机访问:实现接口非线程安全:多线程环境需外部同步空间优化:自动缩容(需显式调用)

2025-07-08 16:57:10 254

原创 Java Lambda 类型推断详解:filter() 方法与 Predicate<? super T>

Lambda 表达式是函数式接口的实例化简写。是流元素的类型(本例中是。Lambda 体中使用。Lambda 表达式。

2025-07-08 16:27:54 700

原创 varchar和text区别

在存储字符串时, 可以使用char、varchar或者text类型, 那么具体使用场景呢?1、char长度固定, 即每条数据占用等长字节空间;适合用在身份证号码、手机号码等定。2、varchar可变长度,可以设置最大长度;适合用在长度可变的属性。3、text不设置长度, 当不知道属性的最大长度时,适合用text。按照查询速度: char最快, varchar次之,text最慢。1、char:char(n)中的n表示字符数,最大长度是255个字符;

2025-07-07 16:58:55 527

原创 Spring Boot 整合 Redis

【代码】Spring Boot 整合 Redis。

2025-07-07 16:56:37 365

原创 Java泛型与Lambda的完美融合:深入解析Collectors.toMap的类型推断机制泛型魔法:T, K, U的解析之旅方法签名解密javapublic static <T, K, U>

根据上下文(方法参数位置)确定目标类型。验证Lambda体是否符合返回类型要求。:流元素的类型(输入类型))推断参数类型和返回类型。:结果Map键的类型。:结果Map值的类型。:由流元素的类型决定。

2025-07-04 17:07:21 387

原创 关于LambdaQueryWrapper

【代码】关于LambdaQueryWrapper。

2025-07-04 16:36:03 748

原创 Fix this pattern in your application or switch to the legacy parser implementation with ‘spring.mvc.

大概率是Spring Boot 应用程序在解析 URL 映射模式时遇到了问题,看看自己接口有没有写错。

2025-07-03 14:20:06 78

原创 深度解析 Collectors.toMap 和 collect 方法

是 Java Stream API 的终端操作,用于将流中的元素累积到可变容器(如集合、Map)中。它提供了两种形式:2. 核心组件当使用 时,包含三个关键组件:Supplier:创建结果容器的工厂Accumulator:将元素添加到容器的函数Combiner:合并并行流结果的函数(用于并行处理)二、 深度解析1. 方法签名2. 参数详解 参数 类型 说明 示例 keyMapper 从元素提取键的函

2025-07-03 14:16:36 719

原创 深入剖析JSON解析底层:Jackson如何突破Java泛型限制前言:当泛型遇上JSON解析

/ 期望返回Map<String, User>结果却是:值类型被解析为Object而非User需要额外的类型转换嵌套泛型信息完全丢失本文将深入探讨Jackson库如何解决这一难题,揭示JSON解析的底层实现机制。

2025-07-02 14:39:09 601

原创 关于mybais-plus自动设置创建时间等

核心就是mybatis-plus能够自动检测@TableField(fill=...)注解,然后通过拦截器来设置创建时间等字段。这里并没有写@Component注解注入到 Spring 容器,因为在其他地方配置过了。因为 MyBatis Plus 通过接口类型识别处理器所以需要继承这个接口。:类似"动物"抽象类,必须通过"猫"/"狗"等具体子类实例化。除此之外还要写个拦截器,通过拦截器拦截并设置创建时间等字段。仅作为基础模板存在,包含所有实体共有的审计字段。可以看到这里的BaseDO声明为抽象类。

2025-07-02 14:37:14 704

原创 关于LambdaQueryWrapper

是 MyBatis-Plus 提供的一种类型安全的条件构造器,使用 Java 8 的 Lambda 表达式来引用实体类字段,避免了硬编码字段名。

2025-07-01 15:37:36 445

原创 Java静态导入

静态导入允许我们在代码中直接使用静态成员(方法或字段),而无需通过类名限定,一定是静态方法// 导入单个静态成员// 导入所有静态成员@Operation(summary = "创建物品信息")如上述代码使用静态导入后就无需使用 类名.方法 的格式了// 没有静态导入// 使用静态导入后// 等价于 CommonResult.success(data)对于编译器来说,会判断是否是静态导入,是的话会解析为全限定类名+方法// 源代码// 编译后等价于。

2025-07-01 10:15:23 329

原创 关于MapStruct手动重写却不生效的问题

可以看到这边我没有写@Mapping但是在MpStruct自动生成的转换类中手动重写了,但是为什么不生效呢,因为MapStruct 是一个编译时代码生成框架,每次编译时都会重新成。老老实实用mapping匹配命名不同的字段。会在重新编译后被覆盖。

2025-06-30 11:06:40 291

原创 Content-Type ‘application/x-www-form-urlencoded;charset=UTF-8‘ is not supported

点击发送后报错,原因大概率是接口中写了@RequestBody注解,表示接收json格式对象,但是这里传入的是表单数据。我这边是因为写@ParameterObject文档才变成表单形式的填写,如果是要求传入json,删。

2025-06-27 16:52:31 393

原创 MySQL 数据类型与 Java 类型映射全解析

本文详细解析 MySQL 数据类型与 Java 类型的对应关系,涵盖数值、日期、字符串、二进制等所有类型。

2025-06-27 16:32:10 652

原创 深入理解Arrays.asList()

底层实现是 Arrays 的内部类 ArrayList(非 java.util.ArrayList),未实现增删方法。:将传入的数组或可变参数转换为一个 List 集合。这个new调用的其实是Arrays里自定义的内部类。继承的默认实现会抛出。

2025-06-26 10:10:52 668

原创 深入理解TypeReference作用

这时候就需要Java中的TypeReference。

2025-06-25 17:14:28 547

转载 String.valueOf()

(5)String.valueOf(double d) : 将 double 变量 d 转换成字符串 (6)String.valueOf(float f) : 将 float 变量 f 转换成字符串 (7)String.valueOf(int i) : 将 int 变量 i 转换成字符串。(2)Byte.parseByte(String s, int radix) : 以 radix 为基底 将 s 转换为 byte ,比如说 Byte.parseByte("11", 16) 会得到 17。

2025-06-25 15:20:03 38

原创 @RequestParam和@PathVariable区别

【代码】@RequestParam和@PathVariable区别。

2025-06-25 08:47:28 297

原创 knife4j v4.0.0版本注解变化

需要注意一点的是升级为4版本后query等对象需要加上@ParameterObject,doc.html显示的才是。form参数,具体的问题可以看官方文档。

2025-06-24 10:12:42 388

空空如也

空空如也

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

TA关注的人

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