- 博客(28)
- 问答 (2)
- 收藏
- 关注
原创 RabbitMQ中消息的确认结合死信队列
如果设置为false,则消息不会被重新排队,其后的命运取决于队列的配置,比如是否配置了死信交换机。这意味着一旦消息被传递给消费者,无论消费者是否真正完成了对消息的处理,RabbitMQ都会认为消息已经被处理并从队列中移除。如果队列没有配置DLX,那么消息将被丢弃,除非RabbitMQ被配置为持久化消息和队列,此时消息将被持久化存储直到找到合适的消费者或被手动清除。如果basicNack()的requeue参数被设置为true,那么被否定确认的消息将被重新放回原队列中,等待再次被消费。
2024-07-20 21:59:52
380
原创 数据库事务的理解
快照读是在多版本并发控制(MVCC,Multi-Version Concurrency Control)环境下进行的一种读取操作,它允许事务读取过去的数据版本,而不是数据的当前版本。然而,即使事务很短,如果它包含写操作(如INSERT、UPDATE或DELETE),那么在事务执行期间仍然会产生行级锁或表级锁,具体取决于操作的性质和数据库的隔离级别设置。总之,事务内部的语句是按照定义的顺序串行执行的,而事务之间的执行可以是并发的,具体取决于数据库的并发控制机制。:一个事务的执行不能被其他并发事务干扰。
2024-07-19 23:41:09
208
原创 数据库发生死锁常见的场景
例如,事务A先锁定资源X,再锁定资源Y;如果另一个事务需要内部事务锁定的资源,但又被另一个需要外部事务资源的事务阻塞,就可能形成死锁。如果事务执行时间过长,它可能会锁定某些资源较长时间,导致其他等待这些资源的事务被阻塞。多个事务同时尝试更新同一记录,其中一个事务可能先锁定记录,随后其他事务试图锁定同一记录,导致等待和潜在的死锁。如果表中缺乏适当的索引,事务可能需要执行全表扫描,这可能导致表级锁,增加死锁的可能性。当事务间形成一个循环等待链,每个事务都在等待另一个事务释放锁时,就会发生死锁。
2024-07-19 23:31:39
225
原创 生产者与消费者的几种解决方式
以上每种方式都有其适用场景,选择哪一种取决于具体的需求和设计考量。例如,BlockingQueue提供了更简洁的API,并且能够处理多种不同的并发场景,而使用wait()这是最基础的方式,通过synchronized关键字锁定资源,并使用对象的wait()和notify()方法来控制线程的等待与通知。Java中的java.util.concurrent包提供了BlockingQueue接口,它简化了生产者与消费者的实现。信号量(Semaphore)可以用来控制对资源的访问。
2024-07-17 11:19:44
118
原创 Java中线程安全的容器
此外,HashTable不允许使用null作为键或值,这与HashMap不同,后者允许一个null键和任意数量的null值。这些线程安全的容器提供了不同的特性和性能权衡,选择合适的容器依赖于具体的使用场景和需求。在现代Java编程中,由于HashTable和Vector的性能较差,更倾向于使用ConcurrentHashMap和其他并发集合,它们在设计上更好地适应了高并发环境。Vector的实现也是基于数组,提供了线程安全的动态数组。:线程安全的队列实现,基于链表结构,适用于高并发场景。
2024-07-16 10:56:04
97
原创 springboot中跨域问题的几种解决方式
为了全局启用跨域,可以创建一个配置类,实现WebMvcConfigurer接口,并覆盖其addCorsMappings方法。如果你想让一个控制器类下的所有方法都支持跨域,可以在类级别使用@CrossOrigin注解。对于特定的接口,可以在控制器方法上使用@CrossOrigin注解来开启跨域支持。还可以通过注册一个CorsFilter Bean来实现全局跨域配置。
2024-06-03 19:41:09
342
原创 springboot数据校验的相关异常
例如,当一个表单提交到Controller时,如果表单中的某个字段不符合校验规则(如@NotNull、@Size等),则会抛出此异常。例如,当使用@RequestBody注解处理JSON请求体时,如果JSON格式不正确或无法映射到目标对象,则会抛出此异常。例如,如果Controller方法期望接收一个整数参数,但实际请求中传递的是字符串,且无法转换为整数,则会抛出此异常。例如,如果JSON请求体的格式不正确,无法解析为预期的对象,则会抛出此异常。例如,当用户访问了一个不存在的URL时,会抛出此异常。
2024-05-06 18:31:57
334
原创 拦截器放行静态资源
为了避免这个异常,您可以在拦截器中添加一个条件来检查处理程序对象的类型,以确保只有当处理程序对象是 HandlerMethod 类型时才进行转换。这样就可以避免在处理静态资源请求时出现类型转换异常。通过添加对处理程序对象类型的检查,我们确保只有当处理程序对象是 HandlerMethod 类型时才尝试转换,并且在其他情况下直接放行请求,避免了类型转换异常。静态资源请求的处理程序对象是 ResourceHttpRequestHandler,而不是 HandlerMethod。
2024-05-03 23:29:30
213
原创 js吸顶与浮动广告的实现
浮动广告是,它对大容器进行相对定位,设置定时器,改变它的left ,top值,注意的是大容器的宽高为100vw 100vh,鼠标滚动时,大容器的left=window.scrollX top =window.scrollY,这样我们缩放界面或者是滚动界面都能在当前视口看见广告移动。吸顶我这里没有用fixed,用的使absolute,主要思想使当鼠标滚动距离大于top时,top = window.scrollY ,小于时,恢复原来的top值。
2023-12-22 13:39:34
749
原创 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
68
原创 迭代器的学习与使用
什么是迭代器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
114
原创 自动装箱与拆箱
什么是自动装箱与拆箱自动装箱时把基础数据类型转为对应的封装类,拆箱是将封装类自动转为对应的基本数据 请看如下代码:package Test.Test05;import java.lang.*;public class Test05 { public static void main(String args []){ Integer a = 10; int b = a+100; System.out.pr
2022-05-14 16:21:18
101
原创 泛型的学习
泛型应用到类上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
55
原创 抽象类与抽象方法
抽象类是用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
71
原创 内部类的用法
被static修饰的内部类package Test.Test03;public class Test03 { public static void main(String args[]){ Human.Dog dog = new Human.Dog("大黄",10); System.out.println(dog); dog.print(); Human.Dog dog2 = new Human.Dog("大黑",11);
2022-04-24 16:03:32
178
原创 读ArrayList有感
ArrayListArrayList是什么?简单来说是一个处理变长数组的列表,这个类的成员变量是一个Object类,和一个表示数组元素个数的size,如下图它有三个构造方法,这里只介绍一个常见的,源代码如下: public ArrayList(int initialCapacity) {//初始容量(长度) if (initialCapacity > 0) { this.elementData = new Object[initialCapacit
2022-04-20 21:12:16
344
原创 方法重载的用法
方法重载方法重载的好处是什么,我们为什么要用方法重载当我们要实现两个数的加法,通常是使用如下代码: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
668
原创 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
183
原创 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
96
原创 一个关于自己的类及学生台控制系统
一个关于自己的一个类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
318
原创 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
861
原创 冒泡排序法
冒泡排序法import java.util.Scanner;import java.util.Arrays;public class MaoPao{public static void main(String args[]){ int a[] = new int[10]; System.out.println("请输入10个数:"); input(a); System.out.println("排序后:"); paixv(a); System.out.println(Arrays.toS
2022-03-17 16:13:42
80
原创 Java第二篇Blog
选择排序法import java.util.Arrays;//导入包import java.util.Scanner;public class XuanZhe{public static void main(String args[]){ Scanner in = new Scanner(System.in); A yang = new A(); int a [] = new int[10]; input(a);//调用方法输入数据 yang.paixv(a);//调用方法排序
2022-03-13 22:21:20
84
原创 Java第一篇Blog
直接排序法import java.util.Scanner;import java.util.Arrays;public class ZhiJie{ public static void main(String[] args) { Scanner in = new Scanner(System.in);//创建Scanner对象 int n = in.nextInt();//得到一个整型数据 int [] a = new int[n];/
2022-03-06 12:14:35
269
空空如也
编译通过,但是程序运行到b.paixv(a)就停止了。
2022-03-10
编译通过,运行出错。输入有问题
2022-03-09
TA创建的收藏夹 TA关注的收藏夹
TA关注的人