自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(41)
  • 收藏
  • 关注

原创 【深入理解RabbitMQ】七大工作模式

简单模式工作队列订阅与发布模式路由模式主题模式RPC模式发布确认模式特点:指的是提供者可靠投递到交换机的过程,不会因为网络或者其他问题导致消息丢失。在这个模式下,可以在提供者注册一个回调函数。当消息发送后,不管如何都会触发这个回调函数,可以通过这个回调函数来判断是否到达交换机。应用场景:适用于需要确保消息可靠投递到交换机的场景。发布确认机制是RabbitMQ的七大工作模式之一.生产者将信道设定为confirm(确认)模式信道进入confirm。

2024-11-24 19:31:13 1132

原创 【手写一个spring】spring源码的简单实现--BeanPostProcessor(实现AOP)以及JDK动态代理/CGLIB动态代理

spring容器会在目标类实现了接口的时候,默认选择JDK动态代理;在目标类没有实现接口的时候,默认选择CGLIB动态代理;CGLIB是基于字节码生成来创建代理类的JDK动态代理是基于反射来创建代理类的,JDK生成代理类的开销相较于CGLIB相对较小;CGLIB代理的实际方法的调用上性能更高,因为他是通过字节码操作减少了反射调用的开销;CGLIB动态代理需要额外引入CGLIB库依赖,而JDK动态代理是JDK标准库中的一部分,无需引入额外的依赖.finalCGLIB动态代理无法代理final类或。

2024-11-23 14:25:28 763

原创 【spring的底层原理】Bean的生命周期

BeanBean元信息配置:定义Bean的配置信息,包括类名、作用域、依赖等。Bean元信息解析:将配置信息解析成Spring内部的结构。Bean注册:将注册到Spring容器中。合并:类似于面向对象中的继承,一个可以继承另一个的属性。注册Bean对象的信息,生成对象调用构造方法,实例化Bean对象属性注入(@Autowird,构造方法注入,setter方法注入)调用Aware回调方法调用注解或者实现的接口方法初始化调用中的方法,实现AOP。

2024-11-22 21:40:07 756

原创 【手写一个spring】spring源码的简单实现--初始化机制,回调机制

这个操作符返回一个布尔值:如果对象是指定类型的实例,或者是指定类型子类的实例,则返回 true;初始化时自动调用相应的回调方法,并将相关的上下文或资源对象传递给。接口:如果实现,直接强制类型转换后,对该方法进行调用.这种机制为开发者提供了一种灵活的方式来管理和控制。框架中,回调机制是一种强大的特性,它允许。生命周期管理的一个重要组成部分。接口,如果实现了,调用该方法即可。对象的创建和依赖注入后,判断该。,如资源分配、状态设置等。对象的创建过程中执行的呢?接口,并且重写了其中的。机制的接口进行调用呢?

2024-11-22 19:51:00 761

原创 【手写一个spring】spring源码的简单实现--bean对象的创建

我们在第一步中,调用了该类的无参的构造方法之后,,那么直接在容器启动的过程中进行实例化,并且。的,那么我们该如何实现依赖注入这一行为呢?的代码实现:后续我们还会进行补充.等,在后续的章节中我们会仔细讲解.对象的创建过程远不止与此,还包括。管理的对象可以接收到另一个被。假设,此时我们要实例化的对象。维护的池中,方便后续的查找。框架中的一个核心概念,它。对象后,是直接实例化一个。,存在需要依赖注入的属性。容器管理的对象,它们由。所以,我们先生成一个对。的概念,也就是将一个被。,我们可以来描述一个。

2024-11-22 17:00:53 632

原创 【手写一个spring】spring源码的简单实现--容器启动

今天开启一个新的章节,手写一个简易版的spring,帮助大家对spring能有一个更深层次的理解.我将分为以下几个章节进行学习:容器启动。

2024-11-21 14:57:55 585

原创 【JavaSE】java对象的比较

因此其内部的元素必须要能够比大小,方法虽然可以进行比较,但是只能进行。这里我们看到,调用了关键方法。的比较.那么为什么可以进行。在类的外部构造一个比较器。的引用类型不能直接进行。

2024-11-02 20:57:36 369

原创 【Redis】内存淘汰策略

Redis内存淘汰策略是指当Redis的内存使用达到其配置的最大内存限制maxmemory)时,Redis根据预设的策略自动删除一部分键(key)及其对应的值(value,以释放内存空间,从而避免内存溢出(OOM)错误的发生。Redis提供了多种内存淘汰策略,以满足不同应用场景的需求。

2024-10-27 16:11:19 1677

原创 【算法】拓扑排序

DAG。

2024-10-26 22:19:04 374

原创 【Redis】实现一个分布式锁(上)

Tomcat是一个开源的、轻量级的Web服务器和Servlet容器.Tomcat本身是一个Java应用程序,它运行在JVM中,并管理着其内部所有Web应用程序的生命周期TomcatServlet容器Tomcat作为一个Servlet容器,能够执行。Servlet是一种用于扩展Web服务器功能的Java类,它能够对来自Web客户端(如浏览器)的请求进行响应。JSP容器Tomcat还支持JSP技术,允许在HTML页面中嵌入Java代码,以动态生成Web页面。当JSP页面首次被访问时,Tomcat。

2024-10-25 17:10:33 1084

原创 【Redis】数据结构(下)

是一个节点为ZipList的双端链表节点采用了ZipList,解决了传统链表的内存占用问题控制ZipList的大小,解决连续内存空间申请效率的问题中间节点可以压缩,进一步节省内存跳表是一个双向链表,每个节点都会包含一个score(用于排序)和ele(真实数据)值节点按照score值排序,score值一样则按照ele字典进行排序每个节点都可以包含多层指针,层数是1~32之间的随机数不同层指针到下一个节点的跨度不同,层级越高,跨度越大增删查改的效率和红黑树基本一致,实现却很简单。

2024-10-20 21:00:12 947

原创 【Redis】数据结构(中)----ZipList(压缩列表)

压缩列表可以看做是一种连续内存空间的"双向链表"列表的节点之间不是通过指针链接,而是记录上一节点和本节点的长度来寻址内存占用较低如果列表数据过多,导致链表过长,可能影响查询性能增或者删除较大数据时,都可能会发生连锁更新的问题。

2024-10-20 20:42:37 961

原创 【JavaSE】Java的基础概念

在Java中,JVM虚拟机可以理解的代码叫做字节码(扩展名为.class的文件),字节码并不面向任何特定的处理器,只面向虚拟机Java通过字节码的方式,在一定程度上解决了传统解释性语言执行效率低的问题解释型语言vs编译型语言编译型语言:源代码在执行前需要通过编译器转换成机器语言或中间代码。预处理阶段,源代码在运行前被完整地编译成目标代码(通常是机器码)。执行时,直接以机器码形式运行,不需要在运行时再次翻译。源代码在运行时由解释器逐行或逐块转换成机器语言并立即执行。

2024-10-19 17:23:38 575

原创 【技术】一文详解Cookie,Session,Token(上)

比如:我们在做在线购物网站项目或者其他需要登录信息验证的项目时,当我们登录页面进行登录之后,如果我们希望后续所有的页面都维持登录的状态,我们一般会使用cookiesessiontoken来实现, 如果我们都不使用,那么维持用户的登录信息是十分麻烦的,以下举例说明。

2024-10-18 13:02:53 1116

原创 【多线程】线程池(上)

对于线程池的管理和使用,我们使用在下的线程池工具类来进行线程池的创建和管理//成员属性://核心线程数//最大线程数//非核心线程的最大存活时间//工作队列//线程工厂//拒绝策略//...//线程池的构造方法://...:任务队列未达到队列最大容量时,最大可以同时运行的线程数量:任务队列中存放的任务达到队列容量的时候,当前可以同时运行的线程数量变为最大线程数workQueue。

2024-10-15 18:58:18 610

原创 【JVM】内存模型

在前面的学习中,我们知道了字节码文件()会通过类加载器加载到虚拟机中,接下来虚拟机就会执行其中的字节码指令.我们把虚拟机被分配的内存叫做运行时数据区域而内存模型就是指运行时数据区域中被划分的不同区域.版本:字符串常量池存放在方法区中,方法区存放在堆中;版本:方法区脱离堆,单独占用一部分内存字符串常量池依旧存储在堆中版本:方法区发生移动,从虚拟机内存中,移动到本地内存中虚拟机()的内存模型是程序运行时内存管理的基础。它定义了程序如何在内存中分配、使用和回收资源。保存在中实现的方法采用栈的数据

2024-10-13 22:32:10 4139

原创 【多线程】AQS(上)

AQS是将暂时无法请求共享资源的线程封装成一个CLH队列(虚拟的双向队列)的一个节点来实现锁的分配根据volatile修饰的state共享变量,线程通过CAS去改变状态.如果被请求的共享资源空闲,则将当前请求资源的线程设置为有效工作线程,并将共享资源设置为锁定状态,如果被请求的共享资源被占用,那么就需要一套线程阻塞等待以及被唤醒时锁分配的机制,这个机制AQS是用CLH队列锁实现,即将暂时获取不到锁的线程加入到队列中,等待被唤醒下篇我们会通过源码进行详细的分析。

2024-10-12 15:57:50 815

原创 【多线程】CAS原理

ABA。

2024-10-11 21:18:33 704 3

原创 【Redis原理】数据结构(上)

Dict。

2024-10-10 22:45:19 1343

原创 【JVM】一文详解类加载器

Java中的类加载机制是指在Java程序运行时,将类文件(通常是.class文件)加载到内存中的一系列步骤和过程。这一机制确保了类能够在需要的时候被正确、安全地加载到Java虚拟机(JVM)中,并进行初始化和使用。Java的类加载机制遵循着“按需加载”原则,即只有在需要用到某个类的时候,才会加载该类。是Java的核心组件,所有的Class都是由进行加载的,负责通过各种方式将Class信息的二进制数据流读入JVM内部,转换为一个与目标类对应的对象实例。jvm虚拟机对class文件采用的是按需加载。

2024-10-10 21:31:18 1438

原创 【多线程】一文详解ThreadLocal

叫做线程变量,意思是中填充的变量属于当前线程,该变量对其他线程而言是隔离的,也就是说该变量是当前线程独有的变量。为变量在每个线程中都创建了一个副本,那么每个线程可以访问自己内部的副本变量。主要解决了每个线程绑定自己的值,通过使用和方法,获取默认值或者将其值更改为当前线程的副本从而避免了线程安全问题,避免了多线程之间的共享和竞争问题。运行结果:这里我们翻看源码得出结论:接下来我们根据源码来逐个理解.观察在方法中是如何应用的:观察在方法中是如何应用的:优点线程隔离:每个线程都有自己的

2024-10-09 16:11:17 1047

原创 【JVM】强引用,软引用,弱引用,虚引用分别是什么

我们。

2024-10-09 10:01:34 352

原创 【JVM】JMM

JMMJava内存模型,即),本身并不是一个真实存在的模型,只是一种抽象的概念,仅仅描述的是一组约定或者规范,通过这组规范定义了程序中(尤其是多线程)各个变量的读写访问形式,并决定了一个线程对共享变量何时写入以及何时对其他线程可见,关键技术点都是围绕多线程的原子性可见性和有序性展开的.JMM实现了线程和主内存之间的抽象关系JMM也屏蔽了各个硬件平台和操作系统的内存访问差异,以实现Java程序在各种平台下都能达到一致性访问的效果由于JVM运行程序的实体是线程,而每个线程创建时JVM。

2024-10-08 20:46:13 1008

原创 【多线程】一文详解synchronized

Java中的所有锁都是可重入锁Java并没有内置不可重入锁,常见的和都属于可重入锁可重入锁指的是可重复可递归调用的锁,在外层使用锁之后,在内层仍然可以使用,并且不发生死锁,这样的锁就叫做可重入锁。与可重入锁相反,不可重入锁不可递归调用,递归调用就发生死锁。隐式锁(即关键字使用的锁)默认是可重入锁显式锁(即Lock)也有这样的可重入锁。Monitors。

2024-10-08 15:17:10 1174

原创 【技术】Jaskson的序列化与反序列化

某些反序列化库可能对集合的处理有特定的要求,可能需要使用特定的方法或构造函数,而不是通用的。如果目标类型是一个通用的集合类型(如。支持基本的数据类型,如字符串、数字、布尔值、数组和对象。,易于人类阅读和编写,同时也易于机器解析和生成。),则可能导致反序列化失败或产生不正确的结果。时,使用具体的集合类型。包围,包含一组值,值可以是任意有效的。的结构清晰,易于理解,便于调试。的主要类,它可以帮助我们快速的进行。),而没有提供具体的实现类(如。组与预期的集合类型不一致),也会。内的对象,被转换为嵌套的。

2024-10-08 13:25:52 1368

原创 【Redis】持久化(下)-- AOF

Redis提供了两种持久化RDB和AOFRDB视为内存快照,产生的内容更为紧凑占用空间小恢复速度更快.但是产生RDB的开销较大不适合进行实时持久化,一般用于冷备和主从复制AOF视为对修改命令保存,在恢复时需要重放命令.并且有重写机制来定期压缩AOF文件RDB和AOF都是用fork来创建子进程,利用Linux子进程拥有父进程内存快照的特点来进行持久化,尽可能不影响主进程继续处理后续命令。

2024-10-08 12:58:09 1307

原创 【Redis】持久化(上)---RDB

所以此时我们要明确一个常见的误区:Redis不仅仅会将数据保存在内存中,还会将数据保存在。服务端的情况下,还是可以再一次查询到对应的数据的.但是,如果我们此时模拟。这是因为,我们的数据虽然没有被持久化到对应的磁盘文件。两种持久化机制,持久化功能能有效的避免因。持久化机制,这个触发机制在实战中才是。服务端中还能查询到对应的数据呢?的问题,当下次重启的时候利用。持久化是指把当前进程数据生成。中,所以如果我们在没有断开。文件中不存在数据,但是在。手动触发的意思就是由。文件中,但是依旧保存在。

2024-10-06 20:00:35 1175

原创 【Redis】主从复制(下)--主从复制原理和流程

存在数据则直接发送给从节点,这样就可以保持主从节点复制的一致性.补发的这部分数据一般远远小于全量数据,所以减少了开销.,默认大小是1MB,当主节点连接从节点的时候被创建,这时主节点响应写命令时,不但会把命令发送给从节点,还会写入。的方式,源源不断的输给从节点.从节点就会根据这些请求来同时修改自身的数据,从而保证和主节点数据的一致性.:主节点的复制id,主节点重新启动,或者从节点晋级成主节点,都会生成一个。在网络传输的时间,从节点清空旧数据的时间,从节点加载。的时间,主节点就会认为从节点故障并中断复制连接。

2024-09-27 19:07:14 1077

原创 【Redis】主从复制(上)

Redis 的主从复制(Master-Slave Replication)是一种数据复制机制,允许一个 Redis 服务器(主节点)将数据复制到。算法,主节点产生的命令数据无论大小都会及时的发送给从节点,这样主从之间的延迟就会变小,减少了。主从节点一般来说不会部署在同一个服务器上,那么在复制的过程中就会存在。一主多从结构是的应用端可以利用多个从节点实现。同理,我们可以观察从节点(以6380端口的。对于数据比较重要的节点,主节点会通过设置。,同时也记录了相关的主节点的信息,说明。

2024-09-26 21:56:04 1067

原创 【JavaSE】多态

虽然在这一场景下,这种错误不会发生,但是在工作场景中,复杂的业务逻辑可能会很难定位到错误.所以Java为了提高向下转型的安全性,引入了。我们刚才了解到,向上转型后,如果想要访问到子类所特有的方法,是无法实现的,这时,我们可以引出。.重写的好处在于子类可以根据需要,定义特定的自己的行为,也就是说。但是,如果我们**“强制类型转换”**成原来的子类引用呢?我们想分别实现画菱形,画圆圈,画花朵,如果使用。所以,对于向下转换的理解,我们可以认为是一种。,但是我们向下转型的时候,却设置引用类型为。

2024-04-22 21:01:17 393 2

原创 【C++初阶】内存管理

🚀我们在前期的c语言的学习过程中,也了解过内存管理的基本规则,今天本篇博客将以一道面试填空题为例,和大家一起回顾一下内存管理的几个基本知识点,为后续深入学习内存管理打下基础。

2023-11-13 19:41:04 331 1

原创 【数据结构(初阶)】快速排序还能这么玩儿?快速排序优化版————三路划分

八大排序中,最重要、最难理解的便是🚀快速排序,老铁可以移步博主文章👉快速排序大盘点来回顾快速排序的基本知识点。但是,🚀在一组数据中有大量重复值时,快速排序的效率却不高。专门为了解决这一情况,我们得到🚀快速排序的一个优化版-----三路划分。今天我们讲解了快速排序的一个优化版------三路划分。三路划分利用了三个指针,思想类似于将Hoare版本和前后指针法两者相结合。主要解决有大量重复数据的场景。🎁今天的内容就分享到这里,欢迎各位老铁们订阅专栏🎓《数据结构初阶》,后续会持续更新!👋👋👋👋👋🎁。

2023-11-12 21:25:55 88 2

原创 【数据结构(初阶)】还不知道排序的稳定性是什么?一篇文章带你理解!

我们在学习排序的时候,接触到了稳定性这样一个名词,很多同学并不理解排序稳定性是什么意思,也不知该如何判断一个排序的稳定性。本篇博客将从稳定性的概念稳定性的意义八大排序稳定性的判断三个方面向大家全面讲解有关数据结构稳定性的问题。今天我们讲了排序算法中一种衡量的标准:稳定性。并且将八大排序的稳定性一一进行了分析,老铁们可以根据文中所举例子进行模拟加以理解。🎁今天的内容就分享到这里,欢迎各位老铁们订阅专栏🎓《数据结构初阶》,后续会持续更新!👋👋👋👋👋🎁。

2023-11-12 20:26:46 670 8

原创 【数据结构(初阶)】听说你还没有学会快速排序?快来!万字详解手把手带你撸快速排序!!!

🚀快速排序是Hoare于1962年提出的一种二叉树结构的交换排序方法,运用到了分治思想。🚀其基本的过程可以总结为任取待排元素序列中的某元素作为基准值,按照该排序码将待排序集合分割成两个子序列左子序列中所有元素均小于基准值右子序列中所有元素均大于基准值然后就是左右子列重复该过程,直到所有元素都排列在相应位置上为止。🚀本章内容将会介绍快速排序的四个版本,即Hoare版本挖坑法前后指针法非递归方法三数取中小区间优化。

2023-11-08 13:39:03 345 15

原创 【c++初阶】日期类的实现(上)

通过c++实现日期类函数,了解构造函数和析构函数的概念与特性。

2023-11-07 08:30:39 140 20

原创 【备战蓝桥杯】基础算法————位运算的常见技巧

位运算是算法题里比较特殊的一种类型,他们利用二进制运算的特性进行一些奇妙的优化和计算。常用的位运算符号包括:按位异或、按位与、按位或、按位取反、算数左移<<、算数右移>>,以下是一些常见的位运算的运算特性,其中0s和1s分别表示只由0或者1构成的二进制数字。在蓝桥杯的备赛过程中,我们选择从基础的算法----位运算开始学习算法的道路,原因位运算理解起来较为容易,并且计算起来很有意思,更加适合大家进行算法的入门学习。这里我们将不再一一向大家展示这些等式的推理,大家可以尝试用二进制计算一下,比较简单。

2023-11-02 19:33:28 195 17

原创 【备战蓝桥杯】整型的存储

今天我们学习基本算法之一位运算的前阶知识——整型的存储。为什么从这一部分开始呢?原因是位运算相比于其他算法基本知识理解较简单,容易入门,一些题目大家做起来也会感觉到很有意思,适合算法初学者入门。本篇博客从二进制的基础知识将起,先带大家领悟整型数据的存储逻辑,修炼内功,为后续位运算打下基础。新手小白也可以看懂,大家放心!

2023-10-30 11:13:38 121 15

原创 【c++初阶】拷贝构造函数太难学?带你梳理底层逻辑!!

大家学习拷贝构造函数的时候常常无法理解其深层的含义以及和构造函数之间的关系。今天这篇博文将从拷贝构造函数的概念特征与构造函数之间的关系这三个方面来进行讲解~~各位坐稳扶好,要发车啦~~~而拷贝构造函数和构造函数之间有着相似的地方,便是**内置类型是按照字节方式直接拷贝的,自定义类型是调用其拷贝构造函数完成拷贝的。**通俗来讲,只有自定义类型才需要程序员自己写拷贝构造函数,而内置类型是不需要的。比如像日期类这样的类,是没有必要的。注意:类中如果没有涉及资源申请时,拷贝构造函数是否写都可以;

2023-10-25 15:43:50 217 9

原创 【c++初阶】c++和c语言到底有何不同,万字爆肝整理c++入门篇,小白快来!

今天我们正式开始c++的零基础学习,相信很多学习计算机的同学们都会或多或少对c语言和c++之间的区别有一定的兴趣,但苦于知识琐碎,无法及集中整理,本篇博客将从零基础讲起,将c++和c语言语法的不同一一列举。c++是在c的基础上,融入进去了面向对象编程思想,并增加了许多有用的库,以及编程范式等等。本博客的主要目标:补充c语言语法的不足,以及c++是如何对c语言设计不合理的地方进行优化的,比如:IO方面,函数方面,指针方面,宏方面等等。下面,请大家坐稳扶好,正文开始啦~~定义命名空间,需要使用的。

2023-10-21 17:02:29 370 9

原创 【c语言从入门到精通】c语言原来一点都不难!位操作符你学会了嘛?(小白快进)

在学习c语言时,我们一定会遇到关于位操作符的相关知识,很多新手小白不太理解位操作符的运算法则和运用逻辑,今天这篇博客将会将所有知识点进行归纳总结,其中还包括几道练习题帮助大家更好地理解位操作符的运用~~下面,请各位老司机坐稳扶好,我们要开车啦~~~~

2023-08-02 18:16:46 90 1

空空如也

空空如也

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

TA关注的人

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