- 博客(39)
- 收藏
- 关注
原创 Java基础知识之抽象类的理论和实战的一站式探索
从这篇文章开始的话我们就是学习Java基础的一些知识,那么进行Java基础的知识的话我们除了面试的话在我们的实际的开发中其实也是特别重要的,好了我们话不多说直接开始我们进行今天的抽象类的学习其实抽象类那么看这个名字的话就是知道这个类是抽象的那就说明这个类肯定可以通过一些方法将其变得不抽象,那么这个方法就是通过我们Java的面向对象的三大特性之继承,对于继承大家都知道那么下面的话我就写一段Demo让大家重温一下知识System.out.println("吃东西");@Override。
2025-01-15 14:20:00
823
原创 xxl-job底层的实现原理————源码分析
前言通过上一篇文章的话我们就基本已经掌握了xxl-job的使用以及一些基础知识那么这篇文章的话我们就来说一下其的底层的实现也就是源码部分,其实它的源码相对于Spring框架而言的话简直可以说是少的可伶,那么废话少说直接开始整吧!!!
2025-01-09 16:39:31
1468
原创 xxl-job的介绍以及使用
xxl-job就是一个分布式任务调度的平台,它的核心的设计思想就是简单,开发迅速,易拓展等,这个的话接入公司的项目之后就是可以直接进行使用达到了开箱即用就是我刚刚说的就是在用分布式环境下的定时任务的调动如:在第二天的凌晨1点统计前一天的营业额,每一个月的10号的话用于统计前一个月的营业额等等。
2025-01-07 16:43:00
1507
原创 AQS源码以及Lock接口分析
Redis最终篇分布式锁以及数据一致性_redisson 哨兵模式分布式锁一致性-优快云博客但是如果是单机的环境下的我们就是通过使用但是这个锁的话就是会说如果说线程获得不到锁的话那么就是会一直阻塞这个时候我个人的建议还是说使用ReentrantLock锁,这篇文章的话就是会来说一说这个锁的底层的实现。
2025-01-02 16:23:19
1656
原创 Spring源码分析之SpringBoot的自动配置和ComponentScan
第一点的话就是说就是通过SpringBootApplication注解里面的EableAotoConfiguration注解里面的AutoConfigurationImportSelector类来实现的,具体来说的话就是通过classLoader去获得classPath路径下面的META/INF下面的spring.factories文件中内容,然后我们查看这个文件的话其实也就能够以发现这个文件的内容就是通过key value的形式进行数据的存储然后就是获取这个里面的以。
2024-12-31 17:35:19
2593
2
原创 Spring源码分析之AOP-CreateProxy
在上一篇文章当中我们就是说明了实现AOP的基础知识以及@EnableAspectJAutoProxy的底层的实现这里的话我就不会再进行说明了,那么这篇文章的话我们主要就是说一下创建代理对象的整个过程,因为代理对象贯穿着Bean的生命周期以及循环依赖的问题1.对hashcode,equals方法以及一些特殊类进行处理之后2.就是要判断是否要进行暴露对象(因为我们都知道出现循环依赖的话会提前进行AOP)
2024-12-26 16:35:32
1407
原创 Spring源码分析之AOP-@EnableAspectJAutoProxy
这篇文章之前我们说了Springboot的启动流程,Bean对象怎么实现从无到有的一个过程还有一些接口的拓展的实现等等那么从这一篇文章开始的话我们就会开始说一说我们的常用的AOP它的底层实现原理所以大家一起加油加油!!!AOP的话大家其实就是特别熟悉就算没有使用过的话其实也听过,其实它就是面向切面编程,我的理解就是说将不同模块的公共的逻辑全部都提取出来然后进行一个统一的处理如:日志的打印,权限的管理,其实这么做的目的就是说其实就是减少代码的冗余我在下面写了一个Demo@Aspect@Component。
2024-12-24 16:59:22
2092
原创 Spring源码分析之后置处理器 BeanPostProcessor
后置处理器的实现类是很多的并且在Bean的整个的生命周期中都起到非常重要的作用: *InstantiationAwareBeanPostProcessor:这个就是在BeanDefinition进行实例化的时候 *AnnotationAwareAspectJAutoProxyCreator: 这个就是Bean实例化之后进行属性注入 * AbstractAutoProxyCreator:这个为符合条件的Bean自动创建AOP(面向切面编程)代理 Bean的创建主要就是第一就是说B
2024-12-20 16:52:03
2103
原创 Spring源码分析之ConfigurationClassPostProcessor
在通过Spring源码分析之容器Refresh()方法_spring源码中refresh()方法-优快云博客我们知到其中有一个步骤就是说会将满足条件的类注册为BeanDefinition然后放入到Spring容器中,这个主要就是存在于invokeBeanFactoryPostProcessors这个方法中进行的这个就是说具体是怎么实现的这篇文章就会进行说明1.通过 ConfigurationClassPostProcessor 把所有的配置类取出来进行解析2.那么配置类的标准就是说被修饰的就算是配置类。
2024-12-18 16:48:27
1804
原创 Spring源码分析之BeanFactory接口的解析
在我们的前两篇文章当中我们看完之后其实我们都会发现当我们进行相关的重要的行为的时候如我们看到的GetBean或者在Register方法的时候会出现BeanFactroy进行调用那么这个时候我们就会产生一个疑惑这个到底是什么为什么这么重要,在我没有说的时候我们从字面上进行一个简单的分析就是说这个是一个Bean工厂那么工厂不就是用来进行加工的那么加工肯定是需要原料以及加工流程的这么想的话其实已经把这个功能基本上都全部进行概括了,那么下面的话我们就来进行解说。
2024-12-17 17:51:52
1317
原创 Spring源码分析之循环依赖
通过前面对Bean的生命周期的学习,我们肯定以及了解之后,那么这个时候我们们经常就是会听到一个词那么就是循环依赖,这个就是我们这篇文章进行说明的我们都是知道有三级缓存存在可是在Bean的生命周期中我们只用到两个级别的缓存这个那么为什么会出三个缓存呢,这篇文章的就会代你们解决这个迷惑。
2024-12-12 16:56:44
1950
原创 Spring源码分析之Bean的属性填充以及初始化
在Spring源码分析之Bean的实例化(createBeanInstance())-优快云博客我们已经说了怎么实例化Bean对象,但是实例化这一步骤的话其实这个仅仅只是说整个生命周期的第一步(Bean的实例化)那么后面的话我们就是会说完这个Bean的生命周期也就是说是属性填充以及初始化,这个相对于实例化而言就是简单的多了这个方法其实就是进行依赖注入然后方式的话就是有两种一个就是byType还有一个就是byName然后这个里面涉及到的自动装配的话后面会说。
2024-12-11 16:47:12
1193
原创 Spring源码分析之Bean的实例化(createBeanInstance())
通过Spring源码分析之Bean的创建过程(createBean)-优快云博客我们可以知道如果没有动态代理以及循环依赖的前提之下的话那么一个普通的单例Bean的创建后就是实例化,属性填充,初始化这三个步骤那么这篇文章的话我们就先说一下实例化也就是doCreateBean方法里面的createBeanInstance()4.1.解析构造函数中的参数 :如果是getBean传入的参数那么就直接进行使用如果没有的话那么就会抓直接从缓存中得到如果参数完全解析成功的话那么直接使用进行解析以及准备好的参数。
2024-12-10 16:59:48
1406
原创 Spring源码分析之Bean的创建过程(createBean)
通过Spring源码分析之doGetBean()-优快云博客的学些我们知道了如何获得Bean但是我们看完就知道这个Bean是从缓存中获得的如果不能从缓存中获得的话那么就会进行创建,这个创建Bean的是一个很重要的一部分如果这一篇文章的话要好好学习。加油加油!!!!1.就是验证class是否被解析以及里面的重写的方法是否有效2.在没有doCreateBean()之前会给一个机会给后置处理器如果要进行动态代理(AOP)的时候那么就会通过。
2024-12-05 17:29:53
1957
原创 Spring源码分析之doGetBean()
在前面的文章当中我们发现当一个Bean对象不是抽象的是单例的而且还不是懒加载的时候就会这个Bean就会进行创建然后我们就会发现里面出现了getBean方法那么这篇文章的话我们就来讨论一下这个方法里面到底做了什么事情当我们想要getBean的话需要通过一些步骤如下:1.就是对BeanName进行一个统一的标准化的处理尤其是对于FactoryBean需要清除前缀&2.就是尝试从三级缓存。
2024-12-04 16:36:58
1434
原创 Spring源码分析之容器Refresh()方法
通过学习了上一篇文章Spring源码分析之容器的Register()以及Scan()-优快云博客这个时候我们就学习Spring容器中的refresh()方法这个方法我们在SpringBoot的启动流程中也看到过那么我们就好好研究一下这个方法到底是有什么作用做了哪些事情@Overridetry {//获得当前的线程// 开始记录上下文刷新的启动步骤// 准备上下文以进行刷新//这个就是进行一些准备工作// 初始化 BeanFactory。
2024-12-03 17:06:20
1446
原创 Spring源码分析之容器的Register()以及Scan()
通过Spring源码的分析之启动流程-优快云博客的学习我们知道Spring容器的启动的流程但是我们创建容器的时候有多种方式第一种就是我们在上一篇文章中写的那么还有其他的方式创建应用上下文(在这篇文章中我就以AnnotationConfigApplicationContext为例子)//这个就是通过配置类创建以及启动容器 管理和配置Spring应用中的bean//配置类的信息@ComponentScan("com.example") // 确保这里是你的包路径。
2024-11-29 10:40:15
1723
原创 Spring源码的分析之启动流程
这篇文章的话就是我个人通过一些技术博客以及自己写一些Demo测试获得的一些感悟但是由于本人的技术水平有限所以肯定就是会出现一些问题所以希望看这篇文章的时候如果发现错误的时候可以提出来然后我个人的话进行修改。
2024-11-27 17:39:45
1301
原创 Redis最终篇分布式锁以及数据一致性
在前三篇我们几乎说完了Redis的所有的基础知识以及Redis怎么实现高可用性,那么在这一篇文章中的话我们主要就是说明如果我们使用Redis出现什么问题以及解决方案是什么,这个如果在未来的工作中也有可能会遇到,希望对看这篇博客的人有帮助,话不多说直接开干。
2024-11-22 16:39:58
1828
原创 Redis的高可用性
对于Redis的知识的话我在前两篇文章当中已经说明了,那么这篇文章的话我们就会在前两篇的基础之上进行一个知识的提高,让我们的思考的高度更升一层楼,加油加油。
2024-11-20 21:41:38
1229
原创 Redis持久化策略以及三大缓存问题
在我的Redis的必备知识(一)-优快云博客这篇文章当中的话其实我主要就是说了Redis的优点以及其中的五种数据类型以及进行相关操作的常用的命令,那么这个时候我就会和你们说一下Redis怎么进行持久化的以及其作为缓存进行使用的话是怎么解决的包括怎么保证数据库和缓存的数据库的一致性。
2024-11-16 15:32:45
1436
原创 Redis的基本数据类型以及作用
Redis(Remote Dictionary Server)是一个开源的、高性能的键值存储系统,常被用作数据库、缓存和消息中间件。除此以外Redis还包括LUA脚本,不同的持久化策略以及事务等等一般在我们实际的生产环境当中我们一般就是不会将Redis作为数据库而是会将它作为缓存来进行使用,那么我们都知道缓存就是放一些我们常用的信息然后能够就不需要直接访问数据库了,提高了整体的一个的性能二.Redis的优点对于缓存而言就是说一定是要高性能以及高并发。
2024-11-15 17:06:52
1286
原创 MQ的实际使用
在这一篇文章当中我会以RcoketMQ来对其的使用的场景进行一个仔细地说明,这个里面也会涉及到一些额外的知识,看完之后对面试而言的话那么就是直接拿捏,当然在看这篇文章之前要先看MQ的基础知识-优快云博客毕竟基础才是王道,下面就是开始我们的正菜。
2024-11-12 17:34:49
902
原创 MQ的基础知识
其实就是不同的程序之间的一种的通信方式,通过将消息发送到中间件里面然后中间件就会将这个消息发送给相应的服务进行一个消息的消费,这个时候就会进行一些的业务逻辑的处理,这个方式提高了整个系统的可靠性,拓展性以及灵活性.常见的类型为Aapache Kafaka,RabbitMQ,RocketMQ,但是一般的话现在都是用RocketMQ这个的话后面我会说他们之间的区别。
2024-11-08 10:38:56
1063
原创 Netty原来就是这样啊(二)
Netty其实最大的特点就是在于对于对NIO进行了进一步的封装,除此以外Netty的特点就是在于其的高性能 高可用性,下面就会一一进行说明。
2024-11-06 17:15:57
1509
原创 Netty原来就是这样啊(一)
Socket是一种基于基于TCP/IP协议的网络编程接口又叫做套接字,这个简单的理解就是进行数据传输进行连接的这个一般的话就是如客户端和服务端建立不同的连接,或者说在分布式的环境钟不同的服务之间的进行数据的同步的时候等等这是客户端和服务端之间建立Socket连接,如我们要访问一个浏览器的时候那么这时候我们的请求就会发送个服务端之后服务端就会将网页的一些数据传输那么就会呈现出来了。
2024-11-02 16:02:58
1223
原创 Java中的集合以及常见的面试题一看就会
肯定是不一样的ArrayList是基于数组实现的但是LinkedList是基于链表实现的由于不同的实现那么肯定就是代表有不同的。一开始的话新的容积为原来的容积的1.5倍但是如果还是不够最小的容积的话那么就会使得新创建的数据的容积等于最小的需要的容积。这个的意思就是说如果扩容当前插入的数据需要的最小的空间超过现在数据的长度的话那么就会进行扩容,那么进行扩容的时候。这个不难看出ArrayList的底层是通过数组来进行实现的。这个就是ArrayList的初始的数组的大小为10。
2024-10-31 10:40:26
637
原创 常见的垃圾回收器,算法,回收机制带你大白话理解
在复制完成后,再把使用过的空间一次性清理,这样就完成了使用的内存空间和空闲内存空间的对调,每次的内存回收都是对内存空间的一半进行回收,虽然降低了空间利用率,但是提高了回收的效率。当其中一块内存的有效内存空间耗尽后,开始回收,将存活的对象复制到另一块空闲的内存空间并且排列好顺序,同时gc线程会更新存活对象的内存引用地址,指向新的内存地址。就是每一个对象都有一个计数器,如果被其他对象引用或者方法引用等等那么就会进行+1的操作,反之的话那么就会进行-1操作,如果为0的话那么就会判定为可回收对象。
2024-10-29 16:40:18
1894
原创 Mysql的隔离级别以及出现的问题一篇文章即可
对于很多互联网的公司而言数据库的隔离级别都是RC的,因为这个隔离级别的响应更快但是这个时候就会有人想说再RC下不是会产生幻读的问题, 再这里我想说的却会产生幻读问题,但是对于我们实际的业务开发而言这个不一定是一个问题,这个仅仅只是说再数据库看来的话是一个问题仅此而已,这个就是告诉我们一个道理: 技术是服务于业务的,即使会产生问题那看对这个业务有没有产生影响以及这个影响我们能不能接受。
2024-10-25 10:52:15
1304
原创 Mysql的架构以及SQL语句的执行流程
1.对于数据以及索引的存储的文件的数目以及位置是不一样的: innodb是将数据以及索引存在同一个文件里面的 但是Myisam 分别将数据存在 MYD以及MYI文件里面分开进行存储。优化器:其就是确定我们的SQL是应该怎么进行一个执行的过程,如:是否会利用到索引如果是联合的索引的话那么利用其中的哪些字段以及需不需要进行一个回表的操作等等,这个就是。,这个就会导致如果没有在要刷入的1秒钟的时间范围之内的话数据库出现故障的那么就会导致数据的不一致的问题。来进行决定的)但是Myisam是不支持事务的。
2024-10-21 17:45:45
1183
原创 索引也不过如此一篇文章带你打破观念
从我提供的联合索引来说首先肯定是对a字段进行一个排序然后a字段如果相等的情况下那么就会按照字段b进行一个排序,所以简洁来说: a字段是。在叶子结点只会按照a>1的范围进行目标数据的寻找,但是因为在a>1的数据范围之内b的数据不是有序的,所以没有必要使用字段b的条件。1.就是对我们的索引进行了函数的计算如:对字符串的索引使用了lower()函数使得整个字符串的字符都是小写,这个时候。之后再进行c=xx的过滤然后才能获得最终的数据集但是这个是需要消耗很多网络资源的尤其是数据量比较大的情况下。
2024-10-20 17:10:56
927
原创 双亲委派机制以及类加载过程就是这样啊
负责加载程序员指定的特殊目录下的字节码文件的。大多数情况下,自定义类加载器只需要继承ClassLoader这个抽象类,重写findClass()和loadClass()两个方法即可。
2024-10-17 10:14:44
1234
原创 线程池和多线程就是这样啊
使用的场景就是需要我们并发处理任务的时候就需要创建额外的线程来处理过多的任务,但是用多线程来进行处理的话那么就会不断创建以及销毁线程这个是比较消耗系统资源的因为我们每次创建一个线程的时候就。相对于多线程创建来说就是可以更好的实现对线程的管理和防止重复地创建以及销毁线程,(这个是线程的工作内存空间的大小),那么销毁线程的话是要。3.实现callable接口需要重写里面的call方法。2.实现runnable接口重写里面的run方法。的那么就会增加CPU资源的竞争程度。1.继承Thread类。
2024-10-13 22:07:41
552
原创 KMP算法(无脑看就会写)
这就是涉及到两个概念:前缀:包括第一个字符的子串但是不包含最后一个字符后缀:包含最后一个字符但是不包含第一个字符的子串Next数组就是说当发生冲突的时候那么这个时候前缀子串和后缀子串的公共的相等的子串的长度,这个字符也就是从整个字符串的第一个字符开始长度为next数组里面数据的子串以Leetcode 459这个题目为案例(JAVA语言为例子)//字符串的长度//对于特殊情况的处理//进行初始化int j=0;//前缀子串的最后一个字符的位置//定义next数组next[0]=0;
2024-10-12 17:33:46
259
原创 Volatile关键字以及JMM内存模型
由于竞争CPU资源的原因导致线程2最后才进行操作,但是线程2在正常的情况下是操作失败了,但是由于线程3的操作使得线程2操作成功了,这个就是一个问题了。),那么PC获得数据的时候会优先从三个缓存中读取数据如果没有的话那么就会从主内存中读取数据。会确保所有的读取操作都已完成,并且任何后续的读取或写入操作不会被重排序到此屏障之前。从L1到L3是体积是越来越大的那么成本就是越来越低 速度相对来说也就是越来越慢(然后进行计算之后将计算的结果最后再放入到主内存中。写屏障:会确保所有之前的写操作都已完成。
2024-10-11 12:56:44
861
原创 Synchronized锁和Reentrantlock的区别和联系以及锁升级
简单来说就是说如果一个线程在被Condition的实例对象使用await()方法之后那么如果想要将其进行唤醒的话那么就需要再次通过相同的Condition的实例对象使用sign进行一次的唤醒才会执行后面的业务逻辑signall的意思将被这个条件绑定的所有的线程都进行唤醒。这个就是表示的是这个锁有没有被其他线程获得或者说相同的线程获得了几次锁(也就是可重入锁)原因: 如果一个线程获得锁资源之后但是这个时候出现异常这个时候是不会释放锁资源的这个时候其他线程就会处于阻塞的状态。本质上就是加锁的时候就是要判断。
2024-10-09 19:39:22
425
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人