- 博客(103)
- 收藏
- 关注
原创 [项目总结] 在线OJ刷题系统项目总结与分析(四): 技术应用(上)
🏵️热门专栏:🧊 Java基本语法(97平均质量分)🍕 Collection与数据结构 (93平均质量分)🧀线程与网络(96平均质量分)🍭MySql数据库(93平均质量分)🍬算法(97平均质量分)🍃 Spring(97平均质量分)🎃Redis(97平均质量分)🐰RabbitMQ(97平均质量分)
2025-04-05 21:26:46
268
原创 [项目总结] 在线OJ刷题系统项目总结与分析(一): 网关与B端功能
本项目是一个提供在线OJ刷题功能的微服务项目,该项目分为B端和C端,B端可以对题目,用户,竞赛进行管理,C端可供用户登录,刷题,参加竞赛使用.在微服务架构上,采用SpringCould相关组件来完成项目架构设计.其中包含使用Nacos进行服务发现与配置管理,使用OpenFeign进行微服务之间的服务调用.采用SpringCould Gateway进行网关限制.采用redis对用户,竞赛等相关信息进行保存,使用ElasticSearch对题目相关信息进行保存,方便C端进行题目搜索.
2025-04-05 00:23:10
405
原创 [MySQL数据库] InnoDB存储引擎(一) : MySQL架构与常见存储引擎
🏵️热门专栏:🧊 Java基本语法(97平均质量分)🍕 Collection与数据结构 (93平均质量分)🧀线程与网络(96平均质量分)🍭MySql数据库(93平均质量分)🍬算法(97平均质量分)🍃 Spring(97平均质量分)🎃Redis(97平均质量分)🐰RabbitMQ(97平均质量分)
2025-03-30 22:37:48
920
原创 [MySQL数据库] 索引详解
索引是帮助MySQL高效获取数据的数据结构,在数据之外,数据库还维护着满足特定算法的数据结构,这些数据结构以某种方式指向数据,这样就可以在这些数据结构上实现高级查找算法,这种数据结构就是索引.索引结构描述B+树索引最常见的索引类型,大部分引擎都支持B+树Hash索引底层数据结构是用Hash表实现的,只有精确匹配索引列的查询才有效,不支持范围查询空间索引空间索引是MyISAM引擎的一个特殊索引类型主要用于地理空间数据类型,使用较少全文索引是一种通过建立倒排索引,快速匹配文档的方式。
2025-03-26 22:58:47
1106
4
原创 [Spring] Spring常见面试题
想要定义一个注解,首先需要使用到元注解来对这个注解进行修饰,第一个是Target注解,表示的是这个注解可以加在什么地方,可以设置加在类上,加在方法上,加在参数前,也可以添加在任何位置.之后需要Retention注解来定义注解的生命周期,可以让注解只在存在于源码阶段,可以存在于字节码阶段和源码阶段,也可以存在于运行阶段,字节码阶段,和源码阶段.之后就可以在注解体中添加属性,使用default关键字指定默认值.SpringAOP在使用创建切点表达式的时候,在annotation。
2025-02-13 20:15:45
1074
4
原创 [RabbitMQ] RabbitMQ常见面试题
producer: 生产者,向RabbitMQ发送消息.Consumer: 消费者,从RabbitMQ接收消息.Broker: RabbitMQ服务器.Connection: 生产者客户端或者是消费者客户端与RabbitMQ服务器之间的网络连接.允许客户端与RabbitMQ之间通行.Channel: 连接里的一个虚拟通道,发送或者是接收消息都是通过通道进行的.Channel和Connection组合起来有点像线程池的模式.
2025-02-09 20:41:25
2243
22
原创 [Redis] Redis分布式锁与常见面试题
在一个分布式的系统中,也会涉及到多个结点访问同一个公共资源的情况,此时就需要通过锁来做互斥控制,避免出现类似与"线程安全"的问题.而我们之前在多线程章节学习过的synchronized这样的锁只能在当前进程中生效,在分布式这种多个进程多个主机的场景之下就无能为力了.此时我们就会使用到分布式锁.
2025-02-08 18:10:11
1556
22
原创 [Spring] Gateway详解
在前面,我们通过Eureka,Nacos解决了服务注册,服务发现的问题,使用Spring Cloud LoadBalance解决了负载均衡的问题,使用OpenFeign解决了远程调用的问题.但是当前所有微服务的接口都是直接对外暴露的,可以直接通过外部访问.为了保证对外服务的安全性,服务端实现的微服务接口通常都带有一定的权限校验机制.由于使用了微服务,原本⼀个应用的的多个模块拆分成了多个应用,我们不得不实现多次校验逻辑.当这套逻辑需要修改时,我们需要修改多个应用,加重了开发人员的负担.
2025-01-24 18:20:40
2416
21
原创 [Spring] OpenFeign的使用
OpenFeign是一个声明式的Web Service客户端.它让微服务之间的调用变得更加简单,类似与Controller调用Service,只需要创建一个接口,然后再添加注解就可以使用OpenFeign.
2025-01-22 23:50:51
1319
22
原创 [Spring] Nacos详解
Nacos是阿里巴巴开源的一款易于使用的动态服务发现、配置管理和服务管理平台,致力于帮助用户更轻松地构建、管理和维护微服务架构.功能类似于Eureka,但是又比Eureka强大.官方网站:仓库:prefix默认为的值,也可以通过配置项来配置.即为当前环境对应的profile.当为空时,对应的连接符也不复存在.DataID的拼接格式变成.该配置一般是实现多环境的配置管理.为配置内容的数据格式,可以通过配置项来配置,目前只支持properties类型和yaml类型.默认是properties类型。
2025-01-20 15:13:49
1894
19
原创 [Collection与数据结构] PriorityQueue与堆
前面介绍过队列,队列是一种先进先出(FIFO)的数据结构,但有些情况下,操作的数据可能带有优先级,,该中场景下,使用队列显然不合适,比如:在手机上玩游戏的时候,如果有来电,那么系统应该优先处理打进来的电话.在这种情况下,。这种数据结构就是优先级队列(PriorityQueue)。在这种情况下,数据结构应该提供两个最基本的操作,一个是返回最高优先级对象,一个是添加新的对象。这种数据结构就是优先级队列(PriorityQueue)。
2025-01-17 22:49:53
1318
6
原创 [Spring] Eureka & SpringCloud LoadBalance
在最初的架构体系中,集群的概念还不那么流行,且机器数量也比较少,此时直接使用DNS+Nginx就可以满足几乎所有服务的发现.相关的注册信息直接配置在Nginx.但是随着微服务的流行与流量的激增,机器规模逐渐变大,并且机器会有频繁的上下线行为,这种时候需要运维手动地去维护这个配置信息是⼀个很麻烦的操作.所以开发者们开始希望有这么一个东西,它能维护一个服务列表,哪个机器上线了,哪个机器宕机了,这些信息都会自动更新到服务列表上,客户端拿到这个列表,直接进行服务调用即可.这个就是注册中心。
2025-01-16 20:10:42
1476
8
原创 [Spring] SpringCloud概述与环境工程搭建
简单来说,SpringCould是分布式微服务架构的一站式解决方案,是微服务架构落地的多种技术的集合.Distributed/versioned configuration 分布式版本配置Service registration and discovery 服务注册和发现Routing 路由Service-to-service calls 服务调用Load balancing 负载均衡Circuit Breakers 断路器Distributed messaging 分布式消息。
2025-01-14 17:09:10
1621
18
原创 [RabbitMQ] RabbitMQ运维问题
一台RabbitMQ服务器接收消息的数量是有限的,假如一个RabbitMQ的服务器每秒可以接受消息的数量是1000条,但是假如我们每秒钟需要接收10万条消息的时候,这时候我们就必须通过搭建多个RabbitMQ结点来解决问题.RabbitMQ集群允许消费者和生产者在RabbitMQ单个节点崩溃的时候继续运行,当失去一个RabbitMQ结点的时候,客户端可以能过重新连接到集群中的其他任何节点并继续生产或者消费.接下来我们来介绍如何有效搭建一个RabbitMQ集群.需要注意的是我们在搭建一个具有多态服务器的集
2025-01-12 22:12:16
2517
22
原创 [Java基本语法] 反射机制+枚举类+lambda表达式(Java基本语法完结)
Java中的反射机制指的是在运行状态中,对于任意的一个类,我们都可以知道这个类所对应的属性和方法,对于任意的一个对象,都可以调用它的任意的方法和属性.既然可以拿到这些信息,那么我们就可以修改这些信息.这种动态获取信息以及动态调用对象方法的功能,我们称为Java语言的反射机制.Lambda表达式的优点很明显,在代码层次上来说,使代码变得非常的简洁。缺点也很明显,代码不易读。
2024-12-09 21:35:52
1193
39
原创 [Collection与数据结构] 位图与布隆过滤器
基础位运算:二进制右移.:二进制取反.: 有0就是0,全1才是1.: 有1就是1,全0才是0.: 相同为0,相异位1.其实也可以看做是一种无进位相加给定一个数n,确定他的二进制表示的第x位是0还是1可以把这个数字n进行左移x位,之后上一个二进制1,如果结果是1,说明该位是1,如果结果是0,说明该位是0.将一个数n的二进制表示的第x位修改为1.可以把二进制1左移x位,之后n|=左移x位之后的这个数字.将一个数n的二进制表示的第x位修改成0.
2024-12-08 18:17:54
1591
27
原创 [RabbitMQ] RabbitMQ常见应用问题
幂等性是数学和计算机科学中某些运算的性质,它们可以多次被应用,而不会改变初始的结果应用程序的幂等性在应用程序中,幂等性就是指对一个系统的资源进行重复调用,不论多少次请求,这些请求对系统的影响都是相同的效果.比如数据库的select操作,不同时间两次查询的结果不可能不同,但是这个操作是符合幂等性的,需要注意的是,幂等性是对资源的影响,而不是返回结果.查询数据库对数据资源基本不会产生影响.再比如数据库的update操作就不是幂等性的,它会对数据库中的资源造成修改,操作前后的数据资源是不一样的.
2024-12-05 21:18:21
2915
32
原创 [Collection与数据结构] 二叉搜索树与AVL树
我们前面讲的二叉搜索树虽然可以缩短查找效率,但是如果数据接近有序,二叉搜索树将会退化为单分支的树,查找元素相当于在顺序表中查找元素,效率及其低下.所以我们可以引入以下的算法来解决,当二叉搜索树种插入新节点的时候,如果可以保证每个节点的左右子树高度之差的绝对值不超过1,即可降低树的高度,从而减少平均搜索的长度.空树是AVL树是AVL树,首先需要是一个二叉搜索树.他的左右子树都是AVL树左右高度之差(简称平衡因子)的绝对值不超过1(也就是每个节点的平衡因子只能为-1,0,1).
2024-12-01 22:47:32
1604
39
原创 [RabbitMQ] 延迟队列+事务+消息分发
🏵️热门专栏:🧊 Java基本语法(97平均质量分)🍕 Collection与数据结构 (92平均质量分)🧀线程与网络(96平均质量分)🍭MySql数据库(93平均质量分)🍬算法(97平均质量分)🍃 Spring(97平均质量分)🎃Redis(97平均质量分)🐰RabbitMQ(97平均质量分)
2024-11-30 21:34:45
2092
19
原创 [RabbitMQ] 重试机制+TTL+死信队列
🏵️热门专栏:🧊 Java基本语法(97平均质量分)🍕 Collection与数据结构 (92平均质量分)🧀线程与网络(96平均质量分)🍭MySql数据库(93平均质量分)🍬算法(97平均质量分)🍃 Spring(97平均质量分)🎃Redis(97平均质量分)🐰RabbitMQ(97平均质量分)
2024-11-23 20:50:36
4173
34
原创 [RabbitMQ] 保证消息可靠性的三大机制------消费者确认,持久化,发送方确认
🏵️热门专栏:🧊 Java基本语法(97平均质量分)🍕 Collection与数据结构 (92平均质量分)🧀线程与网络(96平均质量分)🍭MySql数据库(93平均质量分)🍬算法(97平均质量分)🍃 Spring(97平均质量分)🎃Redis(97平均质量分)🐰RabbitMQ(97平均质量分)
2024-11-22 22:34:06
3173
26
原创 [Redis] Redis服务集群
集群这个词,可以从广义上来理解,也可以从狭义上来理解,其中广义的集群,只要是多个机器,构成了分布式系统。我们前面学过的哨兵模式,也可以算作是一种广义上的集群。狭义上的集群,是redis提供的一种集群模式,在这个集群模式之下,这个集群模式之下,主要解决存储空间不足的问题,即拓展存储空间。我们前面的哨兵模式提高了系统的可用性,哨兵模式中,本质上还是redis主从节点存储数据,其中要是请求一个主节点/从节点,就得存储整个数据的“全集”。但是集群中主要要解决的问题就是要引入多台机器,每台机器存储一部分数据。
2024-11-15 23:43:11
2833
34
原创 [Redis] Redis缓存机制
🏵️热门专栏:🧊 Java基本语法(97平均质量分)🍕 Collection与数据结构 (92平均质量分)🧀线程与网络(96平均质量分)🍭MySql数据库(93平均质量分)🍬算法(97平均质量分)🍃 Spring(97平均质量分)🎃Redis(97平均质量分)🐰RabbitMQ(97平均质量分)
2024-11-11 20:37:25
2443
24
原创 [Redis] Redis哨兵机制
何为Docker,我们一定都听说过一个词,叫做虚拟机.所谓虚拟机就是通过软件,在一个电脑上模拟出另外的一些硬件.但是虚拟机有一个非常大的问题,比较吃配置,这个事情对我们仅有的一台服务器来说,压力山大.Docker可以认为是一个"轻量级"的虚拟机,起到了虚拟机这样的环境隔离的效果,但是有没有吃很多的硬件配置资源.在Docker中,有两个非常重要的概念需要我们做出区分,一个就是"镜像",另一个就是"容器".“镜像"可以看做一个模版或者是一个蓝图。
2024-11-08 23:06:04
1980
14
原创 [Redis] Redis主从复制模式
主从主从,顾名思义就是有的服务式"主"结点.有的是"从"结点.比如我们有三台物理服务器(称为三个节点),此时就可以把其中一个节点,作为"主节点",而另外两个作为"从节点".这时候,从结点就必须听主节点的,从结点的数据要跟随主节点变化,从结点的数据需要和主节点保持一致.也就是主节点原有的数据,在与从结点建立连接之后,就需要把主节点上面的数据复制到从结点上,后续主结点这边对于数据有任何修改,都会把这样的修改也同步给从结点上.说的再简单一点,从结点就是主节点的一个副本.
2024-11-05 22:41:12
1993
18
原创 [Redis] Redis事务
🏵️热门专栏:🧊 Java基本语法(97平均质量分)🍕 Collection与数据结构 (92平均质量分)🧀线程与网络(96平均质量分)🍭MySql数据库(93平均质量分)🍬算法(97平均质量分)🍃 Spring(97平均质量分)🎃Redis(97平均质量分)🐰RabbitMQ(97平均质量分)
2024-11-02 22:43:04
1853
24
原创 [Redis] Redis数据持久化
我们之前在学习MySQL数据库的时候,我们学习过MySQL事务的四个比较核心的特性:分别是原子性(把对多个表的操作打包为一个操作),一致性(事务前后的数据都是合法数据,比如同一个操作中同时减少和增加一个值,要不同时成功,要不同时失败,不能出现中间状态),持久性(把数据存储在硬盘上),隔离性(脏读,不可重复读,幻读,串行化).
2024-10-26 00:02:08
2365
25
原创 [RabbitMQ] Spring Boot整合RabbitMQ
🏵️热门专栏:🧊 Java基本语法(97平均质量分)🍕 Collection与数据结构 (92平均质量分)🧀线程与网络(96平均质量分)🍭MySql数据库(93平均质量分)🍬算法(97平均质量分)🍃 Spring(97平均质量分)🎃Redis(97平均质量分)🐰RabbitMQ(97平均质量分)
2024-10-03 14:07:15
3261
41
原创 [RabbitMQ] 7种工作模式详细介绍
P: producer生产者,也就是要发送消息的程序.C: consumer消费者,消息的接收者.Queue: 消息队列,其中可以缓存信息,生产者可以向其中投递信息,消费者从其中获取信息.特点: 一个生产者,一个消费者,一个消息只能被消费一次,也称为点对点模式作为消息中间件,都会面临丢失的问题.生产者问题.因为应用程序故障,网络都用等原因,生产者没有成功向Broker发送消息.消息中间件自身问题,生产者成功发送给了Broker,但是Broker没有吧消息保存好,导致了信息丢失.
2024-09-29 23:54:06
2922
34
原创 [RabbitMQ] RabbitMQ介绍,安装与快速上手
首先,我们要知道一下什么是RabbitMQ.其中,MQ是MessageQueue的缩写,也就是消息队列的缩写,顾名思义,消息队列就是一个队列,有关队列的知识我们在之前数据结构的部分学习过,他的特点就是先入先出,只不过现在队列中放入的是消息而已,消息可以非常简单,比如只包含字符串,也可以很复杂,比如内嵌对象.MQ通常用于分布式系统之间的通信.同步通信直接调用对方的服务,数据从一端发出之后就立即传递到另一端.异步通信。
2024-09-25 22:50:30
1510
28
原创 [Redis] 渐进式遍历+使用jedis操作Redis+使用Spring操作Redis
我们在之前学习过一个指令,叫做keys *,这个指令就是把Redis中所有的key采用遍历的方式全部都获取到.但是这个操作比较危险,可能在Redis中存储的key比较多,可能会阻塞Redis,影响其他指令的执行这时候我们就需要使用Redis中的渐进式遍历指令,scan指令.通过渐进式遍历,既可以获取到所有的key,同时又不会卡死服务器.这个命令,不是把所有的key一次性都拿到,而是每次执行命令,只获取其中的一小部分,如果key比较多的话,就需要多次执行scan命令,进行多次渐进式遍历.
2024-09-22 21:47:03
1654
34
原创 [Redis] Redis中的set和zset类型
我们在之前java的集合类中就曾经接触过set.在Java的集合框架中,set的实现方式可以是HashSet,也可以是TreeSet.在Redis的集合中,就是把一些有关联的数据放在一起,其中保存的是多个字符串类型的元素.和Java中的set一样,set中的元素也是无序的,而且不允许重复.这里的限制条件完全和list相对,list中的元素可以重复,而且是有序的.Redis中的set还支持求交集,并集,差集。
2024-09-17 19:49:42
1208
35
原创 [Redis] Redis中的Hash类型和List类型
提到list我们会想到java中的List集合,这样的List就相当于数组或者是顺序表.但是Redis中的List并非是一个简单的数组,更接近于双端队列(deque).因为Redis中的list支持头插,头删,尾插,尾删,还可以获取指定范围之内的元素和指定下表的元素(和python一样,支持负数下标).它可以充当栈和队列的角色.在实际开发中的应用场景非常广泛.阻塞指的就是: 当前线程的代码不会继续执行,会在满足一定条件之后唤醒.
2024-09-13 20:10:47
1450
33
原创 [Redis] Redis中的String类型
🏵️热门专栏:🧊 Java基本语法(97平均质量分)🍕 Collection与数据结构 (92平均质量分)🧀线程与网络(96平均质量分)🍭MySql数据库(93平均质量分)🍬算法(97平均质量分)🍃 Spring(97平均质量分)🎃Redis(96平均质量分)
2024-09-09 23:32:28
1252
5
原创 [Redis] Redis基本命令与数据类型+单线程模型
🏵️热门专栏:🧊 Java基本语法(97平均质量分)🍕 Collection与数据结构 (92平均质量分)🧀线程与网络(96平均质量分)🍭MySql数据库(93平均质量分)🍬算法(97平均质量分)🍃 Spring(97平均质量分)🎃Redis(96平均质量分)
2024-09-08 21:50:31
1604
24
原创 [Redis] 分布式系统与Redis介绍
Redis是一个可以在缓存中存储数据的中间件,一般可以用作数据库和数据缓存,它可以在分布式系统中大展手脚。
2024-09-07 00:01:50
1692
34
原创 [Java基本语法] String类
🏵️热门专栏:🧊 Java基本语法(97平均质量分)🍕 Collection与数据结构 (92平均质量分)🧀线程与网络(96平均质量分)🍭MySql数据库(93平均质量分)🍬算法(97平均质量分)🍃 Spring(97平均质量分)
2024-08-27 22:09:56
989
4
原创 [Spring] Spring原理(SpringBoot完结)
SpringBoot自动装配原理大致如下:当Spring项目启动的时候,就会自动把这些配置文件中的配置类通过@Import注解全部加载到SpringIoC容器中.
2024-08-22 14:54:21
1762
45
原创 [Spring] Spring事务与事务的传播
🏵️热门专栏:🧊 Java基本语法(97平均质量分)🍕 Collection与数据结构 (92平均质量分)🧀线程与网络(96平均质量分)🍭MySql数据库(93平均质量分)🍬算法(97平均质量分)🍃 Spring(97平均质量分)
2024-08-13 18:02:45
2086
46
windows10画图板
2024-03-22
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人