自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

后端

后端相关的技术博客

  • 博客(33)
  • 收藏
  • 关注

原创 RabbitMQ实现延迟队列

死信交换机、延迟队列插件① 声明死信交换机并编写监听方法② 声明延迟队列和对应的交换机,在声明队列时配置ttl属性③ 发送消息时,设置超时时间(实际上延迟队列的ttl和消息的超时时间至少有一个设置了就行)① 声明一个交换机,设置 delayed属性为true② 发送消息时,添加 x-delay头,值为超时时间。

2024-07-07 15:07:08 698

原创 RabbitMQ保证消息可靠性

确保 RabbitMQ 消息的可靠性一共分为四步:1.开启生产者确认机制,确保生产者的消息能到达队列2.开启持久化功能,确保消息未消费前在队列中不会丢失3.开启消费者确认机制为 auto,由 Spring 确认消息处理成功后完成 ack4.开启消费者失败重试机制,并设置 MessageRecoverer,多次重试失败后将消息投递到异常交换机,交由人工处理。

2024-07-06 21:46:49 665

原创 RabbitMQ工作模式

对应 fanout(广播) 类型的 Exchange,会把所有发送到该 Exchange 的消息路由到所有与它绑定的 Queue 中,不需要做任何判断操作,所以 fanout 类型是所有的交换机类型里面速度最快的。”分隔开的每一段独立的字符串称为一个单词),如 “com.rabbitmq.client”、“java.util.concurrent”、“com.hidden.client”包含一个生产者、一个队列和多个消费者,多个消费者绑定到同一个队列上,且一条消息只能被一个消费者消费。

2024-07-06 12:10:43 707

原创 Stable Diffusion生成诗词背景图

常见的反向提示词有 NSFW, worst quality, low quality, normal quality, lowres,normal quality, monochrome,grayscale, skin spots, acnes,skin blemishes, age spot, ugly, duplicate,分别对应NSFW,最差质量,低质量,正常质量,低分辨率,正常质量、单色、灰度、皮肤斑点、痤疮、皮肤瑕疵、老年斑、丑陋、重复。就是利用你输入的文本来生成出对应的图像,而。

2024-04-06 17:45:44 1180

原创 从零开始部署本地大模型(Langchain-chatchat)

项目默认配置的LLM模型是THUDM/chatglm3-6b,Embedding模型是BAAI/bge-large-zh。但由于本计算机显卡配置不足以支撑这两个模型,因此采用的LLM模型是Qwen/Qwen-1_8B-Chat,Embedding模型是moka-ai/m3e-base。注意:如果此时无法打开Web UI界面,就去命令行里输入邮箱,随便输一个就可以,然后就能进入了。然后,也可以修改LLM_DEVICE设备,默认是auto,这里我改成了cuda,即GPU运行。后缀的文件,需要去掉这些后缀。

2024-03-21 17:05:08 1512 1

原创 自制笔记 | JavaWeb——SpringBoot原理(持续更新...)

场景:在实际开发中,经常会定义一些公共组件,提供给各个项目团队使用。而在SpringBoot的项目中,一般会将这些公共组件封装为SpringBoot的starter需求:自定义aliyun-oss-spring-boot-starter,完成阿里云OSS操作工具类AliyunOSSUtils的自动配置目标:引入起步依赖之后,要想使用阿里云OSS,注入AliyunOSSUtils直接使用即可步骤:① 创建aliyun-oss-spring-boot-starter模块。

2024-03-10 20:36:01 894

原创 自制笔记 | JavaWeb——AOP(持续更新...)

而SpringAOP是Spring框架的高级技术,旨在管理bean对象的过程中,主要通过底层的动态代理机制,对特定的方法进行编程。日志信息包含:操作人、操作时间、执行方法的全类名、执行方法名、方法运行时参数、返回值、方法执行时长。:根据业务需要,可以使用且(&&)、或(||)、非(!抽象了连接点,用它可以获得方法执行时的相关信息,如目标类名、方法名、方法参数等。:单个独立的任意符号,可以通配任意返回值、包名、类名、方法名、任意类型的。:多个连续的任意符号,可以通配任意层级的包,或任意类型、任意个数的参数。

2024-03-10 20:25:08 942

原创 自制笔记 | JavaWeb——Spring事务管理(持续更新...)

问题:因为事务默认是REQUIRED,因此insert的这个方法会加入现有事务中,而因为现有事务抛出了异常,所以会回滚,导致insert也被回滚。作用:将当前方法交给spring进行事务管理,方法执行前,开启事务;改成REQUIRES_NEW后,insert会创建新的事务,新的事务提交后,不会被原来的事务影响。:事务传播行为:指的就是当一个事务方法被另一个事务方法调用时,这个事务方法应该如何进行事务控制。即使程序运行抛出了异常,部门依然删除了,但是部门下的员工却没有删除,造成了数据的不一致。

2024-03-10 20:19:09 343

原创 自制笔记 | JavaWeb——MyBatis(持续更新...)

**本质:**① sun公司官方定义的一套操作所有关系型数据库的规范,即接口② 各个数据库厂商去实现这套接口,提供数据库**驱动jar包**③ 我们可以使用这套接口(JDBC)编程,真正执行的代码是驱动jar包中的实现类① 数据库连接池是个容器,负责分配、管理数据库连接(Connection)② 它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个③ 释放空闲时间超过最大空闲时间的连接,来避免因为没有释放连接而引起的数据库连接遗漏**优势:**① 资源重用

2024-03-10 20:00:06 1015

原创 自制笔记 | JavaWeb——MySQL(持续更新...)

① SQL语句可以单行或多行书写,以分号结尾② SQL语句可以使用空格 / 缩进来增强语句的可读性③ MySQL数据库的SQL语句不区分大小写④ 注释:使用foreign key定义外键关联另外一张表缺点:① 影响增、删、改的效率(需要检查外键关系)② 仅用于单节点数据库,不适用于分布式、集群场景③ 容易引发数据库的死锁问题,消耗性能**逻辑外键(推荐):**在业务层逻辑中,解决外键关联。通过逻辑外键,就可以很方便的解决多表关联中的问题**2.一对一**一对一关系,多用于单表拆分,

2024-03-10 19:46:22 890

原创 自制笔记 | JavaWeb——分层解耦(持续更新...)

之前的代码中,Controller层在调用service层时,是new了一个对象EmpServiceA,而如果要切换Service的实现,将EmpServiceA切换为EmpServiceB,此时Controller层需要将EmpServiceA改成EmpServiceB,即Service层的代码发生改动,Controller层的代码也要发生改动,即这两个层之间的代码是耦合的。① 声明bean的时候,可以通过value属性指定bean的名字,如果没有指定,默认为类名首字母小写。

2024-03-10 19:38:23 888

原创 自制笔记 | JavaWeb——Postman请求方式(持续更新...)

在原始的web程序中,获取请求参数,需要通过HttpServletRequest对象手动获取。:请求参数名与形参对象属性名相同,按照对象层次结构关系即可接收嵌套POJO属性参数。:请求参数名与形参数组名称相同且请求参数为多个,定义数组类型形参即可接收参数。参数名与形参变量名相同,定义形参即可接收参数,会自动发生类型转换。请求参数名与形参对象属性名相同,定义POJO接收即可。:请求参数名与形参集合名称相同且请求参数为多个,**相同,定义POJO类型形参即可接收参数,需要使用。来标识该路径参数,需要使用。

2024-03-10 19:30:05 443

原创 自制笔记 | JavaWeb——Http协议(持续更新...)

Hyperextransferrotocol,超文本传输协议,规定了浏览器和服务器之间数据传输的规则特点:① 基于TCP协议:面向连接、安全② 基于请求-响应模型的:一次请求对应一次相应③ HTTP协议是的协议:对于事务处理没有记忆能力。每次请求-响应都是的缺点:多次请求间不能共享数据优点:速度快。

2024-03-10 19:17:01 898

原创 自制笔记 | JavaWeb——Maven详解(持续更新...)

Apache Maven是一个项目管理和构建工具,它基于项目对象模型(POM)的概念,通过一小段描述信息来管理项目的构建仓库:用于存储资源,管理各种jar包① 本地仓库:自己计算机上的一个目录② 中央仓库:由Maven团队维护的全球唯一的。③ 远程仓库(私服):一般由公司团队搭建的私有仓库传递路线:① 不考虑远程仓库② 考虑远程仓库。

2024-03-09 17:57:00 921

原创 自制笔记 | JavaWeb——Vue(持续更新...)

Vue是一套,免除原生JS中的DOM操作,简化书写基于(Model-View-ViewModel)思想,实现数据的,将编程的关注点放在数据上:是一个半成品软件,是一套可重用的、通用的、软件基础代码模型。基于框架进行开发,更加快捷、更加高效① 新建HTML页面,引入Vue.js文件

2024-03-09 17:41:42 781

原创 自制笔记 | JavaWeb——JavaScript(持续更新...)

JavaScript是一门跨平台、面向对象的脚本语言。是用来控制网页行为的,它能使网页可交互。

2024-03-09 12:37:48 818

原创 自制笔记 | Java基础——注解(持续更新...)

关于注解的解析,一般是在框架的底层已经写好了。所有的类成分Class,Method,Field,Constructor,都实现了AnnotatedElement接口,他们都拥有解析注解的能力。④ 比如注解作用在成员变量上,则要获得该成员变量对应的Field对象,再来拿上面的注解。② 比如注解作用成员方法,则要获得该成员方法对应的Method对象,再来拿上面的注解。注解的操作中经常需要进行解析,注解的解析就是判断是否存在注解,存在注解就解析出内容。元注解就是注解注解的注解,也就是写在注解上面的注解。

2024-03-09 12:15:39 360

原创 自制笔记 | Java基础——单元测试(持续更新...)

扩展点:在单元测试中,断言:参数一:当两个结果一样的时候,出现的提示消息;JUnit是使用Java语言实现的单元测试框架,它是开源的,Java开发者都应当学习并使用JUnit编写单元测试。的,而是自己独立写一个测试类(不要写main方法),在这个类中编写一些方法,在方法里面调用要被测试的方法即可。① 只有一个main方法,如果一个方法的测试失败了,其他方法测试会受到影响。,因此,单元测试就是针对Java方法的测试,进而检查方法的正确性。② 单元测试中的某个方法测试失败了,不会影响其他测试方法的测试。

2024-03-09 12:12:58 308

原创 自制笔记 | Java基础——xml(持续更新...)

配置文件是用来保存程序在运行时需要的一些参数常见的配置文件:txt、properties、xmltxt:优点:没有优点缺点:不利于阅读优点:键值对形式易于阅读、解析简单缺点:无法配置一组一组的数据(例如有多个用户时,一个键就会对应多个值)XML:优点:易于阅读、可以配置成组出现的数据缺点:解析比较复杂配置文件的选择:数据量较少,一个键只对应一个值,使用properties;数据量较多,使用xmlXML的全称为EXtensible Markup Language,是一种可扩展的。

2024-03-09 12:08:27 846

原创 自制笔记 | Java基础——log日志(持续更新...)

Logback是基于slf4j的日志规范实现的框架,性能比之前使用的log4j要好。① 可以将系统执行的信息选择性地记录到指定的位置(控制台、文件中、数据库中)程序中的日志可以用来记录程序运行过程中的信息,并可以进行永久存储。需求:导入Logback日志技术到项目中,用于记录系统的日志信息。作用:用于控制系统中哪些日志级别是可以输出的,只输出级别。ALL和OFF分别是打开全部日志信息,及关闭全部日志信息。作用:用于控制系统中哪些日志级别是可以输出的,只输出级别。:一些接口,提供给日志的实现框架设计的标准。

2024-03-09 12:03:04 321

原创 自制笔记 | Java基础——反射(持续更新...)

动态创建对象,即创建配置文件内容里的对象,并调用内容里的方法,而即使配置文件发生改变,程序也不用改变。① 获取一个类里面所有的信息,获取到了之后,再执行其他的业务逻辑。反射允许对成员变量,成员方法和构造方法的信息进行编程访问。参数二:调用方法的传递的参数(如果没有就不写):返回所有公共成员方法对象的数组,:返回所有公共成员变量对象的数组。:返回所有成员方法对象的数组,:返回所有构造方法对象的数组。:返回所有成员变量对象的数组。:返回单个公共成员变量对象。:返回单个公共成员方法对象。:返回单个成员变量对象。

2024-03-09 11:59:50 336

原创 自制笔记 | Java基础——网络编程(持续更新...)

网络编程就是在网络通信协议下,不同计算机上运行的程序,进行的数据传输Java中可以使用包下的技术轻松开发出常见的网络应用程序C/S:Client/Server(客户端 / 服务器):在用户本地需要下载并安装客户端程序,在远程有一个服务器端程序B/S:Browser/Server(浏览器 / 服务器):只需要一个浏览器,用户通过不同的网址,客户访问不同的服务器在BS架构中,所有的图片、音频资源等都需要服务器传输到本地电脑上,而在CS架构中,这些资源包含在安装包内,已经在本地电脑上。

2024-03-09 11:50:15 799

原创 自制笔记 | Java基础——多线程&JUC(持续更新...)

① 核心线程数量(不能小于0)② 线程池中最大线程的数量(最大数量 >= 核心线程数量)③ 空闲线程最大存活时间(值)(不能小于0),表示除了核心线程以外的线程空闲多长时间会被销毁④ 空闲时间(单位)(用TimeUnit指定)⑤ 阻塞队列(不能为null)⑥ 创建线程的方式(不能为null)⑦ 要执行的任务过多时的解决方案(不能为null)

2024-03-09 11:38:09 824

原创 自制笔记 | Java基础——File、IO流(字节流、字符流、缓冲流、转换流等)(持续更新...)

如果先用序列化流将一个对象保存到文件中,然后再修改这个对象的类的结构,再用反序列化流读取文件中的对象,此时会报错。,对象中会包含版本号,文件中也会包含版本号信息。如果修改了类的结构,那么类的版本号会发生变化,进而导致用反序列化流读取对象时,版本号匹配失败,最后代码报错。:有一些特有的方法,可以把集合中的数据,按照键值对的形式写到配置文件当中,也可以把配置文件中的数据,读取到集合中来。:有一些特有的方法,可以把集合中的数据,按照键值对的形式写到配置文件当中,也可以把配置文件中的数据,读取到集合中来。

2024-03-09 11:02:43 793

原创 自制笔记 | Java基础——异常(异常处理、自定义异常等)(持续更新...)

异常就是代表程序出现的问题Error:代表的系统级别错误(属于严重问题),系统一旦出现问题,sun公司会把这些错误封装成Error对象。Error是给sun公司自己用的,不是给我们程序员用的,因此我们开发人员不用管它异常体系最上层的父类为ExceptionException:叫做异常,代表程序可能出现的问题。我们通常会用Exception以及他的子类来封装程序出现的问题运行时异常:RuntimeException及其子类,编译阶段不会出现异常提醒。运行时出现的异常(如:数组索引越界异常)。

2024-03-09 10:42:52 867

原创 自制笔记 | Java基础——集合(下)(HashMap、TreeMap、Stream等)(持续更新...)

**HashMap的特点:**① HashMap是Map里面的一个实现类② 没有额外需要学习的特有方法,直接使用Map里面的方法就可以了③ 特点都是**由键决定的:无序、不重复、无索引**④ HashMap跟HashSet底层原理是一模一样的,都是**哈希表**结构**HashMap的底层原理:**哈希表中存放的对象是Entry对象,里面包含键和值,而哈希值是由键来计算,**跟值无关**。在使用put方法添加对象时,若当前位置为null,则直接添加该对象;若当前位置不为null,则比较该位

2024-03-09 10:34:30 890

原创 自制笔记 | Java基础——集合(上)(ArrayList、LinkedList、HashSet、TreeSet等)(持续更新...)

集合与数组的区别:① 长度:数组的长度是固定的集合的长度是可变的(自动伸缩)② 存储类型:数组可以存基本数据类型,也可以存引用数据类型集合可以存引用数据类型,但若要存基本数据类型,需要将其转换为对应的包装类创建集合的对象:泛型:限定集合中存储数据的类型//E为引用数据类型或者包装类打印对象时,不是打印地址值,而是集合中存储的数据内容,在展示的时候会拿[]把所有的数据进行包裹基本数据类型对应的包装类byteByteshortShortcharCharacterint。

2024-03-09 10:24:16 814

原创 自制笔记 | Java基础——Arrays、Lambda(持续更新...)

Lambda是一个匿名函数,可以把Lambda表达式理解为是一段可以传递的代码,它可以写出更简洁、更灵活的代码,作为一种更紧凑的代码风格,使java语言表达能力得到了提升。遍历无序的序列得到里面的每一个元素,假设当前遍历得到的元素是A元素,把A往有序序列里面插入,在插入的时候,利用。,所以在调用方法的时候,需要传递这个接口的实现类对象,作为排序的规则。③ 如果Lambda表达式的方法体只有一行,大括号,分号,return可以省略不写,但是需要同时省略。② 如果要查找的元素是存在的,返回的是真实的索引;

2024-03-08 23:34:27 824 1

原创 自制笔记 | Java基础——常用API(正则表达式、Math、Object、BigDecimal、时间类等)(持续更新...)

正则表达式可以校验**字符串**是否满足一定的**规则**,并用来校验**数据格式**的合法性**正则表达式的作用:**① 校验字符串是否满足规则② 在一段文本中查找满足要求的内容Date类是一个JDK写好的Javabean类,用来描述时间,精确到毫秒利用空参构造创建的对象,默认表示**系统当前时间**利用有参构造创建的对象,表示**指定的时间**(毫秒值)**SimpleDateFormat作用:****格式化:**把时间变成我们喜欢的格式

2024-03-08 23:27:22 1163 1

原创 自制笔记 | Java基础——面向对象进阶(持续更新...)

static表示静态,是Java中的一个修饰符,可以修饰**成员方法,成员变量**1.被static修饰的成员变量,叫做静态变量特点:① 被该类**所有对象共享**② **不属于对象,属于类**③ 随着类的加载而加载,**优先于对象**存在调用方式:① 类名调用(推荐)② 对象名调用static内存图:由图中可以看出两个对象拥有共同的静态变量2.被static修饰的成员方法,叫做静态方法特点:① 多用在测试类和工具类中② Javabean类中很少会用调用方式

2024-03-08 23:10:19 846

原创 自制笔记 | Java基础——字符串(String、StringBuilder、StringJoiner)(持续更新...)

StringJoiner跟StringBuilder一样,也可以看成是一个容器,创建之后里面的内容是可变的。无论是哪种方法,在字符串拼接且有变量参与的情况下,都会在内存中创建很多对象,从而浪费空间。③ StringJoiner:JDK8出现的一个可变的操作字符串的容器,可以高效、方便地。所有要拼接的内容都会往StringBuilder中放,不会创建很多无用的空间,节约内存。注意:字符串的内容是不会发生改变的,它的对象在创建后。:一个可变的操作字符串的容器,可以高效地。① 默认创建一个长度为16的字节数组。

2024-03-08 22:54:04 880 1

原创 自制笔记 | Java基础——面向对象(持续更新...)

② 构造方法的重载:带参构造方法和无参构造方法,两者方法名相同,但是参数不同,这叫做构造方法的重载。③ 推荐的使用方式:无论是否使用,都手动书写无参构造方法和带全部参数的构造方法。① "setXxx(参数)"方法,用于给成员变量赋值,方法用public修饰。② "getXxx()"方法,用于获取成员变量的值,方法用public修饰。原则:对象代表什么,就得封装对应的数据,并提供数据对应的行为。① 构造方法的定义:如果没有定义构造方法,系统将给出一个。:数据值是存储在其他空间中,自己空间中存储的是地址值。

2024-03-08 22:38:39 835 2

原创 自制笔记 | Java基础——基础概念(持续更新...)

Java的三大分类:JavaSE——Java语言的标准版,用于桌面应用开发,是其他两个版本的基础JavaME——Java语言的小型版,用于嵌入式电子设备或者小型移动设备JavaEE——Java语言的企业版,用于Web方向的网站开发Java的主要特性:面向对象、安全性、多线程(同时做多件事情)、简单易用、开源、跨平台(程序可以在任意操作系统上运行)Java跨平台的原理:① Java语言的跨平台是通过虚拟机实现的② Java语言不是直接运行在操作系统里面的,而是运行在虚拟机中的③ 针对于不同的操作系统,

2024-03-08 22:17:31 949 1

空空如也

空空如也

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

TA关注的人

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