自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(43)
  • 问答 (2)
  • 收藏
  • 关注

原创 flex布局常用用法

其实flex加上flex-wrap: wrap的设置后,效果等同于grid。gap属性都有行间距,列间距。2.使用gap控制子元素中间边距。

2025-12-24 21:30:32 145

原创 栅格布局常用用法

【代码】栅格布局常用用法。

2025-12-24 21:17:40 158

原创 实现类似van-dialog自定义弹框

</div>-- 对话框内容 --><div-- 标题 --></slot></div>-- 内容 --></div>-- 底部按钮 --><button</button><button</button></slot></div>

2025-12-24 21:14:06 164

原创 HashMap的api使用详解

如果 value 是自定义对象,可以使用自定义 Comparator或使用lambda表达式// 假设 Person 有 age 属性.stream()注意事项排序后通常使用 LinkedHashMap 来保持插入顺序。HashMap 本身不保证顺序,所以排序后不能直接存回 HashMap。如果 value 为 null,需处理 NullPointerException,可使用 Comparator.nullsLast()。

2025-09-26 19:02:06 1758

原创 主线程中获取异步请求的结果

在 Java 中,要在主线程中获取异步请求的结果,可以使用多种方式。

2025-09-15 22:32:47 386

原创 内部类的用法

此种内部类想要实例化必须先实例外部类,既 Human.Dog a = new Human().new Dog(“yang”,10);另外需要注意的是:在实例化的内部类方法体中有指向外部类的指针既:Human.this,我们可以用这个指针访问外部类属性和方法,既: Human.this.print();

2025-09-15 21:53:15 443

原创 Java集合

Java 集合是用于存储、操作和管理多个对象的容器框架,它封装并实现了各种常见的数据结构(如数组、链表、哈希表、树等),提供了统一的接口和丰富的操作方法,简化了数据的处理过程。与数组相比,集合具有动态扩容、类型多样、操作便捷等特点,是 Java 编程中处理多元素数据的核心工具。

2025-09-13 23:34:22 756

原创 什么是包装类

在Java中,包装类(Wrapper Class)是为基本数据类型提供的对应的引用类型。Java中的基本数据类型(如int、char、boolean等)不是对象,为了在需要对象的场景中使用基本数据类型(如集合框架、泛型等),Java提供了包装类。包装类可以将基本数据类型的值包装为对象,同时提供了许多用于操作基本数据类型的方法。

2025-09-13 21:24:43 358

原创 函数式接口与lambda表达式

函数式接口是指仅包含一个抽象方法的接口。尽管它们可以包含默认方法、静态方法或私有方法,但抽象方法只能有一个。它的实现有lambda表达式与方法引用(包括静态与实例方法)。Lambda表达式是一种简洁的语法,用于实现函数式接口中的抽象方法。其语法结构为:(参数列表) -> 表达式或代码块。这些函数式接口在Java 8及以后版本中广泛应用于集合操作、流处理、线程处理等场景,能够使代码更加简洁和易读。

2025-09-12 11:15:06 84

原创 Stream流

stream后生成的值类型、包装类型、String类型的集合,其修改生成后的集合,原来的集合是不受影响的,原因是包装类型、String类型是不可变类型,使用=运算符的时候是指向新的对象,而不是修改原来对象的值。而引用类型(除包装类、String)集合是浅拷贝,与之前的集合是指向同一对象。构建 Stream 流及中间操作时,stream流在遍历的时候是从第一个元素开始遍历的,调用终端操作才会执行。这些中间操作在Java Stream API中非常常用,能够帮助开发者高效地处理和转换流数据。

2025-09-12 10:30:47 425

原创 并发工具类

如果有四个线程需要两两交换数据,那么可以创建两个Exchanger实例,每个实例用于一对线程之间的交换。所有线程达到指定数量才会执行,否则barrier.await();用于判断线程是否都已经执行完毕,否则latch.await();获取到信号量的线程才会执行,否则阻塞,用于控制最大并发数。

2025-09-12 09:40:06 62

原创 happen-before原则

happen-before 是一个逻辑关系,用于描述两个操作之间的 “先后顺序”—— 如果操作 A happen-before 操作 B,那么 A 的执行结果必须对 B 可见,且 A 的执行顺序在逻辑上先于 B。也就是保证多线程的指令有序性和共享变量的可见性。特性局部变量成员变量存储位置栈内存堆内存生命周期与方法调用相同与对象实例相同内部类访问方式值捕获(复制)引用访问final 要求必须为 final 或 effectively final无要求修改可见性内部类看不到外部修改。

2025-09-06 18:57:59 815

原创 分布式限流算法与组件

清理旧数据:先删除窗口外的请求(时间戳 < 窗口起始时间),确保只统计当前窗口内的请求统计当前请求数:计算当前窗口内剩余的请求数量判断是否限流:如果当前数量 < 阈值,则添加本次请求并允许通过;否则拒绝请求通过 ZSet 的分数(时间戳)管理请求的时间范围,结合 Lua 的原子性,实现了高效、准确的滑动窗口限流。

2025-07-23 18:30:01 971

原创 乐观锁的使用场景

以下是使用 Java 和 MyBatis-Plus 实现乐观锁的代码示例。在 Spring Boot 启动类中配置 MyBatis-Plus 的乐观锁插件。在更新数据时,MyBatis-Plus 会自动检查 version 字段是否匹配。继承 MyBatis-Plus 提供的 BaseMapper 接口。如果不匹配,则更新失败,返回受影响行数为 0。提供 RESTful API 接口。

2025-04-09 22:01:29 1651

原创 Java类初始化过程

父类实例变量初始化: name = yang。子类实例变量初始化: age = 10。

2025-03-24 22:13:28 253

原创 消息重试处理达到最大时,死信队列与异常队列的异同

spring:rabbitmq:listener:simple:acknowledge-mode: auto # 自动ackretry:enabled: true # 开启消费者失败重试initial-interval: 1000ms # 初识的失败等待时长为1秒multiplier: 1 # 失败的等待时长倍数,下次等待时长 = multiplier * last-intervalmax-attempts: 3 # 最大重试次数。

2024-12-10 18:17:30 444

原创 seata 各个微服务回滚的时机

在Seata中,当你在服务方法上使用@GlobalTransactional注解时,Seata会为该全局事务创建一个事务上下文,并在远程服务调用时传递这个事务上下文。:当你通过OpenFeign发起远程调用时,Seata会拦截这个调用,并将当前的全局事务XID(事务ID)通过HTTP请求头传递给远程服务。:在远程服务端,Seata的拦截器会检查请求头中的XID,并将其绑定到当前的服务线程上下文中,使得远程服务也参与到同一个全局事务中。TC根据全局事务的状态,可能会触发全局事务的回滚。

2024-11-25 14:41:46 907

原创 openfeign微服务应用中,触发降级逻辑的情况。

在启用了断路器(Circuit Breaker)的情况下,如果ItemClient服务的错误率超过了阈值,断路器会打开,后续的调用会直接执行降级逻辑,而不会尝试远程调用。:如果ItemClient服务在处理请求时抛出了异常(未被catch的异常)(例如,数据库访问异常、业务逻辑异常等),那么调用也会失败,并且会触发降级。:如果ItemClient服务本身不可用,比如服务宕机或停止,那么调用将会失败,并且会执行ItemClientFallback中的逻辑。

2024-11-24 15:43:03 357

原创 对象的多态性

多态性的出现,是为了保障父类的基础功能的情况下,由子类做出一些增强(父类方法被覆盖)。

2024-11-15 18:52:18 258

原创 spring中的动态代理

这个例子中,我们将创建一个简单的Hello接口,一个实现了这个接口的类HelloImpl,以及一个代理类HelloProxyHandler,它将作为我们的代理处理器。在这个例子中,我们将创建一个简单的Hello类,一个实现了Hello接口的HelloImpl类,以及一个代理类HelloProxy,它将作为我们的代理处理器。JDK动态代理是基于Java反射机制实现的,只能为实现了接口的类创建代理。特点:可以代理没有实现接口的类,但无法代理final类和方法。限制:被代理的类必须实现至少一个接口。

2024-07-22 22:35:34 430

原创 Mysql数据库事务与锁的理解

一个事务是一组SQL语句的集合,这些语句要么全部成功,要么全部失败。事务确保了数据库操作的原子性、一致性、隔离性和持久性(ACID特性)。行锁确实能避免 “更新冲突”(脏写),但幻读的风险在于破坏事务内 “读取范围” 与 “实际操作范围” 的一致性,导致业务逻辑不符合预期。读已提交(RC)级别下,由于没有间隙锁,幻读更容易发生,因此需要业务逻辑额外处理(如加表锁、使用版本号控制、或接受 “范围操作可能包含新数据” 的结果)。

2024-07-19 23:41:09 557

原创 数据库发生死锁常见的场景

例如,事务A先锁定资源X,再锁定资源Y;如果另一个事务需要内部事务锁定的资源,但又被另一个需要外部事务资源的事务阻塞,就可能形成死锁。如果事务执行时间过长,它可能会锁定某些资源较长时间,导致其他等待这些资源的事务被阻塞。多个事务同时尝试更新同一记录,其中一个事务可能先锁定记录,随后其他事务试图锁定同一记录,导致等待和潜在的死锁。如果表中缺乏适当的索引,事务可能需要执行全表扫描,这可能导致表级锁,增加死锁的可能性。当事务间形成一个循环等待链,每个事务都在等待另一个事务释放锁时,就会发生死锁。

2024-07-19 23:31:39 557

原创 生产者与消费者的几种解决方式

以上每种方式都有其适用场景,选择哪一种取决于具体的需求和设计考量。例如,BlockingQueue提供了更简洁的API,并且能够处理多种不同的并发场景,而使用wait()这是最基础的方式,通过synchronized关键字锁定资源,并使用对象的wait()和notify()方法来控制线程的等待与通知。Java中的java.util.concurrent包提供了BlockingQueue接口,它简化了生产者与消费者的实现。信号量(Semaphore)可以用来控制对资源的访问。

2024-07-17 11:19:44 220

原创 springboot中跨域问题的几种解决方式

为了全局启用跨域,可以创建一个配置类,实现WebMvcConfigurer接口,并覆盖其addCorsMappings方法。如果你想让一个控制器类下的所有方法都支持跨域,可以在类级别使用@CrossOrigin注解。对于特定的接口,可以在控制器方法上使用@CrossOrigin注解来开启跨域支持。还可以通过注册一个CorsFilter Bean来实现全局跨域配置。

2024-06-03 19:41:09 564

原创 springboot数据校验的相关异常

例如,当一个表单提交到Controller时,如果表单中的某个字段不符合校验规则(如@NotNull、@Size等),则会抛出此异常。例如,当使用@RequestBody注解处理JSON请求体时,如果JSON格式不正确或无法映射到目标对象,则会抛出此异常。例如,如果Controller方法期望接收一个整数参数,但实际请求中传递的是字符串,且无法转换为整数,则会抛出此异常。例如,如果JSON请求体的格式不正确,无法解析为预期的对象,则会抛出此异常。例如,当用户访问了一个不存在的URL时,会抛出此异常。

2024-05-06 18:31:57 535

原创 拦截器放行静态资源

为了避免这个异常,您可以在拦截器中添加一个条件来检查处理程序对象的类型,以确保只有当处理程序对象是 HandlerMethod 类型时才进行转换。这样就可以避免在处理静态资源请求时出现类型转换异常。通过添加对处理程序对象类型的检查,我们确保只有当处理程序对象是 HandlerMethod 类型时才尝试转换,并且在其他情况下直接放行请求,避免了类型转换异常。静态资源请求的处理程序对象是 ResourceHttpRequestHandler,而不是 HandlerMethod。

2024-05-03 23:29:30 455

原创 js吸顶与浮动广告的实现

浮动广告是,它对大容器进行相对定位,设置定时器,改变它的left ,top值,注意的是大容器的宽高为100vw 100vh,鼠标滚动时,大容器的left=window.scrollX top =window.scrollY,这样我们缩放界面或者是滚动界面都能在当前视口看见广告移动。吸顶我这里没有用fixed,用的使absolute,主要思想使当鼠标滚动距离大于top时,top = window.scrollY ,小于时,恢复原来的top值。

2023-12-22 13:39:34 871

原创 java浅克隆与深克隆

Java浅克隆与深克隆

2023-05-16 21:04:06 142

原创 Arrays.sort()深入理解

深入理解Arrays.sort()

2022-11-15 19:13:20 227

原创 多线程的学习与使用

多线程的使用

2022-06-03 17:00:40 112

原创 IO流的学习与使用

什么是IO流I:是从外部设备到应用程序之间的数据传递,常见的外部设备包括文件、管道、网络连接O:是从应用程序到外部设备的数据传递分类按流向分为,输入流,输出流按处理数据单位:字节流、字符流字节流的应用public class TestStream { public static void main(String[] args) throws IOException { File file = new File("E:\\MultiMediaOpt\\Test\\Te

2022-05-29 18:23:23 146

原创 迭代器的学习与使用

什么是迭代器Iterator提供了同一遍历操作集合元素的统一接口,Collection接口实现了Iterable接口,每个集合都通过实现Iterable接口中的iterator()方法返回Iterator接口的实例,然后对集合的元素进行迭代操作,请看如下代码:package Test.Test09;import java.util.*;public class TestIterator { public static void main(String args[]){ Lis

2022-05-22 16:29:13 197

原创 泛型的学习

泛型应用到类上package Test.Test01;import java.util.Scanner;public class Test01 { public static void main(String args[]){ Person<String> person = new Person<>("yang","money"); System.out.println(person); Dog www = new Do

2022-05-07 16:19:01 105

原创 抽象类与抽象方法

抽象类是用abstract关键字修饰的类,抽象方法是用abstract关键字修饰的方法我们需要注意的是抽象类不能够实例化(既不能够new对象),抽象类的存在是为了继承,是为了形成多态机制,请看如下代码:package Test.Test06;public class Test06 { public static void main(String args[]){ Animal human = new Person(); Animal chicken = new Chick

2022-05-01 18:29:33 116

原创 读ArrayList有感

ArrayListArrayList是什么?简单来说是一个处理变长数组的列表,这个类的成员变量是一个Object类,和一个表示数组元素个数的size,如下图它有三个构造方法,这里只介绍一个常见的,源代码如下: public ArrayList(int initialCapacity) {//初始容量(长度) if (initialCapacity > 0) { this.elementData = new Object[initialCapacit

2022-04-20 21:12:16 410

原创 方法重载的用法

方法重载方法重载的好处是什么,我们为什么要用方法重载当我们要实现两个数的加法,通常是使用如下代码:public class Test{ public static int sum(int a,int b){ return a+b; } public static double sum1(double a,double b){ return a+b; }public static double sum2(double a,double b,double c){ return

2022-04-17 23:31:23 769

原创 Java多态用法

何为多态:多态既一个方法有两种形态,请看如下代码静态绑定:在编译时,指向子类的父类对象绑定父类的方法; class Animal{ String name; int age; Animal(){} void eat(){ System.out.println("动物吃食物"); } void print(){ } }public class Dog extends Animal{ String hair; Dog(Strin

2022-04-10 22:40:49 269

原创 fianl用法

关键字final的学习final修饰成员变量,局部变量,表示修饰的值不变,请看下列代码final修饰成员变量class Cat{final String name="huang";final int age = 14;Cat(String name,int age){ this.name = name;this.age = age;}}public class Test{public static void main(String args[]){ Cat cat = new C

2022-04-02 16:25:40 141

原创 一个关于自己的类及学生台控制系统

一个关于自己的一个类public class MyselfObject { String name; int age; private double height; private double myMoney;//声明各属性 private double weight; private String [][] timeTable ; MyselfObject(String name,int age,double myMoney,

2022-03-28 00:01:59 369

原创 super用法

关键字super在继承中的用法1 super()调用父类的构造方法public class Super extends Father{ public static void main(String args[]){ Super s = new Super(); Super ss = new Super(2); } public Super(){ super(10); System.out.println("调用子类构

2022-03-19 23:55:38 1106

空空如也

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

TA关注的人

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