- 博客(49)
- 收藏
- 关注
原创 【springboot解决跨域问题】
即在我们所有响应头配置允许跨域访问,CORS也已经成为主流的跨域解决方案。如果出现了如下的输出,代表确实有跨域。这种方式和上面的方式类似,也是通过。做反向代理服务器时,也可以在。
2024-08-22 10:12:10
738
原创 【redis的热点key】
如果一个 key 的访问次数比较多且明显多于其他 key 的话,那这个 key 就可以看作是hotkey(热 Key)。例如在 Redis 实例的每秒处理请求达到 5000 次,而其中某个 key 的每秒访问量就高达 2000 次,那这个 key 就可以看作是 hotkey。hotkey 出现的原因主要是某个热点数据访问量暴增,如重大的热搜事件、参与秒杀的商品。
2024-08-14 23:51:22
1017
原创 【redis的大key问题】
在Redis中,大Key是指占用了较多内存空间的键值对。大Key的定义实际是相对的,通常以Key的大小和Key中成员的数量来综合判定,例如:注意:上述例子中的具体数值仅供参考,在实际业务中,您需要根据Redis的实际业务场景进行综合判断。本文介绍了大Key在Redis中的定义以及可能引发的问题。介绍了快速找出大Key的方法以及对于大Key的优化方案。通过合理的优化方案,可以提升Redis的性能和用户体验。希望本文对您有所帮助。如果有任何错误或建议,请随时指正和提出。
2024-08-13 09:29:47
1560
原创 【RabbitMQ实现延时队列】
很多场景下我们都需要延迟队列。本文以 RabbitMQ 为例来和大家聊一聊延迟队列的用法。两种用法我们分别来看。
2024-08-12 17:03:44
1093
原创 【Springboot的配置文件】
这个配置文件的作用就是,允许我们通过这个配置文件去修改 Spring Boot 自动配置的默认值。和。yml 等同于 yaml,写法看个人喜欢,我喜欢写成配置与代码解耦yaml 代码解读server : port : 4790 # 自定义的配置 demo : author : god23bin description : 点个免费的赞,我能开心好久!上面自定义了两个配置项,分别是和,接着,如何在代码中使用这些配置好的值呢?使用@Value使用。
2024-08-08 08:49:40
1073
原创 【Rabbitmq的消息模型】
如上模型,如果是循环的分发方式,Consumer-1一次性被分到的消息为1,3,5号消息,Consumer-2一次性被分到的消息为2,4,6号消息。如果开启消息自动确认,那么一旦MQ把消息发送给消费者,那么该消息就会立即标记为删除。例如,有编号1-10的消息在MQ中,同时存在两个消费者,则消费者A分到的消息为1,3,5,7,9,消费者B分到的消息为2,4,6,8,10。的分发消息的方式,消费能力强的消费者就会被分到更多的消息,消费能力弱的消费者就会被分到更少的消息,该方式需要作额外设置。
2024-08-06 12:55:45
1548
1
原创 【MySQL的查询语句执行流程】
只有更加全面地了解SQL语句执行的每个过程,才能更好的进行SQL的设计和优化。当希望MySQL能够以更高的性能运行查询时,最好的办法就是弄清楚MySQL是如何优化和执行查询的。一旦理解了这一点,很多查询优化工作实际上就是遵循一些原则能够按照预想的合理的方式运行。客户端发送一条查询给服务器。服务器先检查查询缓存,如果命中了缓存,则立刻返回存储在缓存中的结果。否则进入下一阶段。服务器端进行SQL解析、预处理,再由优化器生成对应的执行计划。
2024-08-05 00:50:49
1121
原创 【ArrayList和LinkedList的区别】
ArrayList是Java中的一个动态数组,它实现了List接口。它可以根据需要自动扩展容量,并且支持随机访问元素。LinkedList是Java中的一个双向链表,它也实现了List接口。它通过节点之间的链接来存储元素,每个节点都包含对前一个和后一个节点的引用。ArrayList和LinkedList是Java中两种不同的集合实现方式。ArrayList适用于频繁读取数据、很少插入或删除元素的场景,而LinkedList适用于频繁插入或删除元素的场景。
2024-08-02 09:09:50
894
原创 【MyBatis 和 MyBatisPlus 的比较】
MyBatisPlus 是 MyBatis 的升级版,可以直接将 MyBatis 框架替换成 MyBatisPlus 框架代码无需改动即可运行。(当然,想要使用 MyBatisPlus 的新功能就必须改动代码)支持 Lambda 形式调用。三个注解,用来映射数据库表及表字段 与 实体类的关系。主键策略(4 种)分页插件全局拦截插件(智能拦截 delete、update 操作)性能分析插件等等。
2024-07-27 09:11:33
465
原创 【java集合框架的介绍】
Java集合框架(Java Collections Framework)是一个强大的、高度灵活的数据结构库,它为Java应用程序提供了组织、存储和操作对象集合的标准方法。
2024-07-20 08:44:23
1374
原创 【接口和抽象类的区别】
接口使用关键字 interface 来定义。抽象类使用关键字 abstract 来定义。定义的关键字不同。子类继承或实现关键字不同。类型扩展不同:抽象类是单继承,而接口是多继承。方法访问控制符:抽象类无限制,只是抽象类中的抽象方法不能被 private 修饰;而接口有限制,接口默认的是 public 控制符。属性方法控制符:抽象类无限制,而接口有限制,接口默认的是 public 控制符。方法实现不同:抽象类中的普通方法必须有实现,抽象方法必须没有实现;
2024-07-18 09:56:37
1196
原创 【Bean的作用域】
在默认情况下,Spring应用上下文中所有的bean都是以单例(singleton)的形式创建的,即不管给定的一个bean被注入到其他bean多少次,每次所注入的都是同一个实例。从运行结果也可以看出,默认情况下即Singleton类型的Bean,不管调用多少次,只会创建一个实例。为了更好的理解,我们通过具体的代码示例来理解下Singleton与ProtoType的区别。单例是默认的作用域,如果要使用其它的作用域创建bean,需要使用。上面的代码也可以写成。上面的代码也可以写成。
2024-07-14 22:22:49
710
原创 【redis单线程为什么那么快】
为什么单线程Redis能那么快?一方面,Redis 的大部分操作在内存上完成,再加上它采用了高效的数据结构,例如哈希表和跳表,这是它实现高性能的一个重要原因。另一方面,就是 Redis 采用了多路复用机制,使其在网络 IO 操作中能并发处理大量的客户端请求,实现高吞吐率。接下来,我们就重点学习下多路复用机制。 Redis 是单线程,主要是指 Redis 的网络 IO 和键值对读写是由一个线程来完成的,这也是 Redis 对外提供键值存储服务的主要流程。
2024-07-12 09:00:53
470
原创 【GC 死亡对象判断】
在对象中添加一个引用计数器,每当有一个地方引用它,计数器就+1,当一个引用失效,计数器就-1,当计数器>0时就表示对象为存活使用状态,不得回收。大多数不会用这个办法来判断对象存活,因为当对象实例相互引用时,当栈中的引用已经失效,对象也还是不能回收。在堆里面存放了几乎所有的对象实例,在GC之前第一件事就是要确定这些对象哪些还“存活”着,哪些已经“死去”。引用**关系的对象形成一条“引用链”,通过这条引用链的可达的对象是存活的,不可达的对象则是不再使用。可达性分析算法是大多数系统使用的对象存活判断算法。
2024-07-09 16:07:35
589
原创 【JVM 的内存模型】
下图为JVM内存结构模型:两种执行方式:运行时数据区:java虚拟机在执行java程序的过程中会把他所管理的内存划分为若干个不同的数据区域。作用:程序计数器就是行号指示器,是一块较小的内存空间,指向当前线程正在执行的字节码指令的地址。字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码指令。 分支、循环、跳转、异常处理、线程恢复等基础功能都需要依赖这个计数器来完成。线程是否共享:线程私有。为了线程切换后能恢复到正确的执行位置,每条线程都需要有一个独立的程序计数器,各条线程 之间计数器互不
2024-07-06 22:40:09
1130
原创 【RabbitMQ的 普通集群 和 镜像集群 】
通过本文我们深入了解了RabbitMQ的集群模式及其优缺点。无论是普通集群还是镜像集群,都有其适用的场景和局限性。普通集群利用Erlang语言的集群能力,但消息可靠性和高可用性方面存在一定挑战;而镜像集群通过主动消息同步提高了消息的可靠性和高可用性,但可能会占用大量网络带宽。因此,在选择集群方案时,需要综合考虑业务需求、系统性能和资源限制等因素。唯有根据实际情况来灵活选择最适合的方案,以确保系统的稳定性和可靠性。
2024-07-06 22:37:13
1098
原创 【什么是可中断锁】
本文介绍了中断锁的实现,通过显示锁 Lock 的 lockInterruptibly 方法来完成,它和 lock 方法作用类似,但 lockInterruptibly 可以优先接收到中断的通知,而 lock 方法只能“死等”锁资源的释放,同时这两个方法的区别也是常见的面试题,希望本文对你有用。。
2024-07-03 23:16:28
907
原创 【linux 部署 springboot项目】
多加一个nohup,意思是不挂断运行命令,当账户退出或终端关闭时,程序仍然运行,当用nohup命令执行文件时,缺省情况下该文件的所有输出被重定向到该文件所在目录的nohup.out的文件中。&表示后台运行,ssh窗口不被锁定,但是关闭窗口时,程序还是会退出 执行上面指令ctrl+c就只会退出jar运行界面,程序不会关闭。用finalShell软件,将打包好的jar包传到linux指定文件夹中,在jar包所在的文件夹中执行指令。然后点击图中的clean为了清除之前的jar包,再点击install进行打包。
2024-06-30 12:58:58
986
原创 【悲观锁和乐观锁的区别】
CAS可能会造成ABA的问题,ABA问题指的是,线程拿到了最初的预期原值A,然而在将要进行CAS的时候,被其他线程抢占了执行权,把此值从A变成了B,然后其他线程又把此值从B变成A,然而此时的 A 值已经并非原来的 A 值了,但最初的线程并不知道这个情况,在它进行 CAS 的时候,就会误认为它从来没有被修改过,只对比了预期原值为 A 就进行了修改,这就造成了 ABA 的问题。悲观锁认为对于同一个数据的并发操作一定是会发生修改的,采取加锁的形式,悲观地认为,不加锁的并发操作一定会出问题。
2024-06-29 23:13:18
513
原创 【MySQL的 MVCC机制 】
Multi-Version Concurrency Control(MVCC),翻译过来就是多版本并发控制,MVCC是为提高MySQL数据库并发性能的一个重要设计。同一行数据发生读写请求时,会通过锁来保证数据的一致性。MVCC可以在读写冲突时,让其读数据时通过快照读,而不是当前读,快照读不必加锁。在前边文章我们也介绍了MySQL中的锁机制,不熟悉的可以翻阅前边的文章。
2024-06-28 09:26:39
864
原创 【Docker】
总结来说,Dockerfile是用于构建单个容器镜像的,而Docker Compose是用于在单个主机上定义和运行由多个容器组成的应用的工具。:这是Docker默认的网络设置。Docker使用容器化技术来实现这一点,容器是轻量级的、可移植的、自包含的软件执行环境,它们可以在几乎任何操作系统上无缝运行,前提是该系统安装了Docker。例如,你可以有一个通用的Linux基础镜像,一个在此基础上添加了Node.js的镜像,再在这个镜像上添加特定应用的层,每一步都创建了新的镜像,并且这些镜像之间共享未改变的层。
2024-06-24 01:40:29
1114
原创 【Spring Boot】
Spring Boot 是 Spring 开源组织下的子项目,是 Spring 组件一站式解决方案,主要是简化了使用 Spring 的难度,简省了繁重的配置,提供了各种启动器,开发者能快速上手。我们在虚拟机上面部署应用程序需要几个步骤:1、安装 Java2、安装 Web 或者是应用程序的服务器(Tomat/Wbesphere/Weblogic 等等)3、部署应用程序 jar 或者 war 包如果把这些步骤简化了,应该怎么做呢?让我们来思考如何使服务器成为应用程序的一部分?
2024-06-23 15:54:19
784
原创 【SSM】
Spring 基础什么是 Spring 框架?Spring 是一款开源的轻量级 Java 开发框架,旨在提高开发人员的开发效率以及系统的可维护性。
2024-06-23 14:27:05
859
原创 【Java 集合】
集合概述Java 集合概览Java 集合,也叫作容器,主要是由两大接口派生而来:一个是Collection接口,主要用于存放单一元素;另一个是Map接口,主要用于存放键值对。对于CollectionListSetQueue。Java 集合框架如下图所示:Java 集合框架概览注:图中只列举了主要的继承派生关系,并没有列举所有关系。比方省略了等抽象类以及其他的一些辅助类,如想深入了解,可自行查看源码。说说 List, Set, Queue, Map 四者的区别?List。
2024-06-23 13:50:31
1128
原创 【RabbitMQ】
提示这篇文章中的消息队列主要指的是分布式消息队列。“RabbitMQ?”“Kafka?”“RocketMQ?”...在日常学习与开发过程中,我们常常听到消息队列这个关键词。我也在我的多篇文章中提到了这个概念。可能你是熟练使用消息队列的老手,又或者你是不懂消息队列的新手,不论你了不了解消息队列,本文都将带你搞懂消息队列的一些基本理论。如果你是老手,你可能从本文学到你之前不曾注意的一些关于消息队列的重要概念,如果你是新手,相信本文将是你打开消息队列大门的一板砖。什么是消息队列?
2024-06-23 13:34:19
886
原创 【Redis】
我们直接看 Redis 官方是怎么介绍自己的。Redis 官方的介绍原版是英文的,我翻译成了中文后截图的,所以有些文字读起来会比较拗口,没关系,我会把里面比较重要的特性抽出来讲一下。Redis 是一种基于内存的数据库,对数据的读写操作都是在内存中完成,因此读写速度非常快,常用于缓存,消息队列、分布式锁等场景。
2024-06-23 12:33:27
1189
原创 【MySQL】
MySQL 的 NULL 值是怎么存放的?MySQL 的 Compact 行格式中会用「NULL值列表」来标记值为 NULL 的列,NULL 值并不会存储在行格式中的真实数据部分。NULL值列表会占用 1 字节空间,当表中所有字段都定义成 NOT NULL,行格式中就不会有 NULL值列表,这样可节省 1 字节的空间。MySQL 怎么知道 varchar(n) 实际占用数据的大小?MySQL 的 Compact 行格式中会用「变长字段长度列表」存储变长字段实际占用的数据大小。
2024-06-22 15:10:36
1127
原创 【JUC并发编程】
线程什么是线程和进程?何为进程?进程是程序的一次执行过程,是系统运行程序的基本单位,因此进程是动态的。系统运行一个程序即是一个进程从创建,运行到消亡的过程。在 Java 中,当我们启动 main 函数时其实就是启动了一个 JVM 的进程,而 main 函数所在的线程就是这个进程中的一个线程,也称主线程。如下图所示,在 Windows 中通过查看任务管理器的方式,我们就可以清楚看到 Windows 当前运行的进程(.exe文件的运行)。进程示例图片-Windows何为线程?
2024-06-22 12:46:39
1036
原创 【Java基础】
面向对象基础面向对象和面向过程的区别面向过程把解决问题的过程拆成一个个方法,通过一个个方法的执行解决问题。面向对象会先抽象出对象,然后用对象执行方法的方式解决问题。另外,面向对象开发的程序一般更易维护、易复用、易扩展。相关 issue :面向过程:面向过程性能比面向对象高??。下面是一个求圆的面积和周长的示例,简单分别展示了面向对象和面向过程两种不同的解决方案。面向对象// 定义圆的半径// 构造函数// 计算圆的面积// 计算圆的周长// 创建一个半径为3的圆。
2024-06-22 01:02:05
751
原创 【MySQL 的三大日志的作用】
在管理MySQL数据库时,了解和区分数据库使用的三大日志类型至关重要。这些日志对于确保数据的完整性、提供恢复机制以及维持数据库的稳定性发挥着关键作用。最主要还是小豆前段时间去参加面试被问到了这些内容,下面将详细讨论Redo Log、Binlog和Undo Log的异同。
2024-06-21 23:16:33
1117
原创 【docker安装rabbitmq】
从2.1服务启动成功的图中我们可以看到,rabbitmq的一些配置地址home dir # rabbitmq的家目录config file # rabbitmq.conf 配置文件路径database dir: 数据存放地址。这块是跟着home dir 的路径走的还有没有展示出来的enabled_plugins: 该配置和config file在同一目录以上配置我们都可以用我们的本地的文件将其替换,rabbitmq.conf的语法请参照rabbit配置详解#修改 rabbitmq的家目录。
2024-06-19 21:12:54
404
原创 【rabbitmq的消息堆积问题】
RabbitMQ一直以来都有一个缺点,就是对于消息堆积问题的处理不好。当RabbitMQ中有大量消息堆积时,整体性能会严重下降。而目前新推出的Quorum队列以及Stream队列,目的就在于解决这个核心问题。但是这两种队列的稳定性和周边生态都还不够完善,因此,在使用RabbitMQ时,还是要非常注意消息堆积的问题。尽量让消息的消费速度和生产速度保持一致。而如果确实出现了消息堆积比较严重的场景,就需要从数据流转的各个环节综合考虑,设计适合的解决方案。
2024-06-18 00:03:23
771
原创 【docker入门】
在软件开发过程中,环境配置是一个至关重要的步骤,它不仅影响开发效率,也直接关联到软件的最终质量。正确的环境配置可以极大地减少开发中的潜在问题,提升软件发布的流畅度和稳定性。以下是几个关键方面,以及如何优化环境配置的策略:在多数项目中,通常至少会设置以下几种环境:本地开发环境:开发人员的个人计算机或者开发服务器。测试环境:用来运行自动化测试,模拟生产环境的设置以检测问题。预发布(Staging)环境:一个模拟真实生产环境的设置,用于最终的测试和质量保证。
2024-06-17 23:59:26
609
原创 【mysql为什么采用b+树作为索引】
而对于高度为3的B+树,就可以存放 1170 x 1170 x 16 = 21902400 条数据(两千多万条数据),也就是对于两千多万条的数据,我们只需要高度为3的B+树就可以完成,通过主键查询只需要3次IO操作就能查到对应数据。:由于B+树的数据都存储在叶子结点中,分支结点均为索引,方便扫库,只需要扫一遍叶子结点即可,但是B树因为其分支结点同样存储着数据,我们要找到具体的数据,需要进行一次中序遍历按序来扫,所以B+树更加适合在区间查询的情况,所以通常B+树用于数据库索引。叶子节点存的是数据行。
2024-06-17 00:34:30
1029
原创 【MySQL统计函数count详解】
count() 是一个聚合函数,返回指定匹配条件的行数。开发中常用来统计表中数据,全部数据,不为null数据,或者去重数据。
2024-06-17 00:09:10
10234
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人