自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(135)
  • 资源 (2)
  • 收藏
  • 关注

原创 如何跟踪mysql 优化器

摘要: CAP原则指出,分布式系统中一致性(C)、可用性(A)、分区容错性(P)不可兼得,只能满足其中两项。核心矛盾在于网络分区(P)的必然性:若保证强一致性(CP),需牺牲可用性(如金融系统暂停服务等待数据同步);若保证高可用性(AP),则需接受最终一致性(如社交平台短暂数据延迟)。P是分布式系统的刚性约束,导致C与A在分区场景下无法共存。实际选择取决于业务优先级——强一致选CP,高可用选AP,而“CA”仅适用于无网络问题的非分布式场景。

2025-12-02 08:21:40 682

原创 CAP原则

摘要: CAP原则指出,分布式系统中一致性(C)、可用性(A)、分区容错性(P)不可兼得,只能满足其中两项。核心矛盾在于网络分区(P)的必然性:若保证强一致性(CP),需牺牲可用性(如金融系统暂停服务等待数据同步);若保证高可用性(AP),则需接受最终一致性(如社交平台短暂数据延迟)。P是分布式系统的刚性约束,导致C与A在分区场景下无法共存。实际选择取决于业务优先级——强一致选CP,高可用选AP,而“CA”仅适用于无网络问题的非分布式场景。

2025-12-01 22:29:32 887

原创 为什么说token 是无状态的,session 是有状态的

—这里的“状态”指的是。

2025-11-30 23:14:54 833

原创 10. Spring前置准备(十)——Spring框架忽略依赖检查逻辑

摘要:本文分析了Spring中prepareBeanFactory方法的ignoreDependencyInterface调用,该方法用于忽略特定接口类型的依赖注入。通过源码解读,文章展示了该方法在AbstractAutowireCapableBeanFactory中的实现,并详细解释了isExcludedFromDependencyCheck方法的依赖检查逻辑,包括对CGLIB代理类属性的处理。最后通过示例展示了PropertyDescriptor在Java Bean属性操作中的实际应用,完整呈现了Spr

2025-11-19 12:00:19 925

原创 Spring前置准备(二)——配置文件路径的转换

摘要:文章解析了Spring框架中setConfigLocations方法的功能实现。该方法接收配置文件的路径数组,校验非空后,通过resolvePath将相对路径(如"classpath:/config/hello.xml")转换为系统绝对路径并保存。当参数为null时,清空配置路径。核心作用是将XML配置文件路径标准化为绝对路径存储。

2025-11-14 11:04:00 115

原创 Spring前置准备(九)——Spring中的Bean类加载器

本文分析Spring框架中refresh()方法的prepareBeanFactory阶段,主要配置BeanFactory的基本参数和处理器。核心操作包括:设置类加载器和EL表达式解析器;添加资源编辑器注册器;配置上下文回调的BeanPostProcessor;忽略特定接口类型的依赖注入;注册可解析的依赖项(如BeanFactory、ResourceLoader等);添加应用监听器检测器;若存在LoadTimeWeaver则准备织入处理。该阶段为后续Bean的创建和初始化奠定基础环境。

2025-11-14 10:55:10 553

原创 Spring前置准备(八)——ConfigurableApplicationContext和DefaultListableBeanFactory的区别

本文对比了ConfigurableApplicationContext和DefaultListableBeanFactory的区别。DefaultListableBeanFactory是Spring的基础实现,负责Bean定义、创建、依赖注入等核心功能。而ConfigurableApplicationContext作为其扩展,提供了更高级的功能:资源加载、批量处理、生命周期管理、国际化、环境变量支持等。两者的关系类似于房子与装修——前者提供基础设施,后者增强使用体验。ConfigurableApplicat

2025-10-09 15:00:43 440

原创 Spring前置准备(七)——DefaultListableBeanFactory

本文深入解析了Spring框架中的DefaultListableBeanFactory及其核心接口AliasRegistry。AliasRegistry提供了别名管理功能,包括注册、移除、检查别名及获取所有别名的方法,增强了配置的灵活性和可维护性。通过DefaultSingletonBeanRegistry实现类,Spring在单例Bean管理中支持别名功能,利用ConcurrentHashMap存储别名与Bean名称的映射关系。该机制在大型项目中简化配置迁移、兼容旧系统及满足多模块需求方面发挥重要作用,是

2025-10-08 17:29:01 1177

原创 Java中的奇葩写法——在方法中定义一个类

Java局部内部类与普通类的区别 局部内部类定义在方法或构造方法内,作用域仅限于所在方法,不能使用访问修饰符,且只能访问方法中final或事实final的变量。普通类可定义在类顶层或作为成员内部类,具有完整的访问权限,能任意访问外部类成员。局部内部类无static成员,生命周期与方法执行周期一致,而普通类长期存在。局部内部类适用于临时辅助逻辑,普通类则用于可复用的类型定义。

2025-10-08 10:28:42 362

原创 6. Spring前置准备(六)——Spring 的核心接口HierarchicalBeanFactory

本文主要分析了Spring框架中HierarchicalBeanFactory接口的设计与实现。HierarchicalBeanFactory通过内部字段而非继承实现父子工厂关联,提供了更大的灵活性。其核心作用在于实现Bean工厂的分层管理,通过getParentBeanFactory()方法获取父级工厂引用。这种设计允许不同类型的工厂自由组合,避免了继承带来的类型限制,同时便于控制工厂粒度和业务隔离。文章还通过代码示例展示了工厂层级关联的具体实现方式,解释了为何采用组合而非继承的设计思路。

2025-09-26 11:14:41 310

原创 5. Spring前置准备(五)——ConfigurableApplicationContext解析

本文梳理了Spring框架中ConfigurableApplicationContext的核心接口层级及其功能。从基础接口BeanFactory开始,逐步介绍ListableBeanFactory(批量处理Bean)、HierarchicalBeanFactory(父子容器)、ResourceLoader(资源加载)等关键接口,并重点讲解了MessageSource实现国际化的具体方法,包括多语言配置、动态语言解析和消息获取。通过接口层级的分析,帮助开发者理解Spring容器的设计思想与核心功能。

2025-09-26 11:12:16 914

原创 Spring前置准备(四)——获取工厂对象

本文主要解析Spring框架中refreshBeanFactory()方法的实现逻辑。该方法首先检查是否存在已有的BeanFactory并进行清理,然后创建新的DefaultListableBeanFactory实例。重点分析了getInternalParentBeanFactory()方法中通过instanceof判断父工厂类型的必要性,区分了ConfigurableApplicationContext及其子类与DefaultListableBeanFactory两种工厂类型。文章还探讨了Spring工厂

2025-09-24 17:58:46 1012

原创 Spring前置准备(三)——校验必须的属性,命令行,环境变量等信息

摘要: Spring框架的refresh()方法是核心启动流程,主要步骤包括:1)准备刷新环境(prepareRefresh)初始化状态、校验必要配置;2)获取Bean工厂(obtainFreshBeanFactory);3)配置工厂基础参数;4)执行后处理器;5)初始化消息源、事件广播器等组件;6)实例化单例Bean。其中prepareRefresh()方法会设置活跃状态、初始化属性源,并通过validateRequiredProperties()校验必需配置项是否存在,缺失时会抛出MissingRequ

2025-09-24 10:15:44 402

原创 Spring前置准备(二)——配置文件路径的转换

本文解析了Spring框架中setConfigLocations方法的实现逻辑。该方法接收配置文件的路径数组,首先进行非空校验,然后将每个路径通过resolvePath方法转换为系统绝对路径并去除空格后存储。示例中传入的classpath:/config/hello.xml路径会被转换为系统绝对路径。该方法的核心作用是将Spring配置的XML文件相对路径转换为绝对路径并保存,为后续配置加载提供支持。

2025-09-24 10:07:03 313

原创 Spring前置准备(一)——配置文件解析对象与环境变量的初始化

本文解析了Spring Boot使用XML配置启动时的初始化过程。首先通过ClassPathXmlApplicationContext构造方法创建上下文,依次执行父类AbstractApplicationContext的初始化:1)创建PathMatchingResourcePatternResolver资源解析器用于加载配置文件;2)合并父上下文的环境变量到当前环境,包括PropertySources集合(存储配置属性)和Profile设置。其中PropertySources

2025-09-24 10:00:14 480

原创 mp4文件的相关概念

MP4文件采用"box"结构存储数据,分为元数据(moov)和媒体数据(mdat)两部分。moov包含视频时长、分辨率、编码格式等元信息,以及播放顺序索引;mdat则以二进制流形式存储音视频编码数据。播放时先读取moov获取解码参数和时间戳,再按需加载mdat中的媒体内容。这种结构设计类似于Java中File对象与文件内容的关系——先加载元信息,实际使用时才读取具体数据。MP4支持多轨道存储,可包含多个视频/音频轨道,实现多视角或多语言功能。

2025-09-12 10:39:52 747

原创 mp4文件的相关概念

例如,ftyp(文件类型)box 用于定义文件的类型和兼容性信息,moov(电影数据)box 用于存储媒体元数据,mdat(媒体数据)box 用于存放实际的音视频数据等。媒体轨道分为,音频轨道和视频轨道,一个视频可以有多个轨道,一个视频轨道对应一个视频,一个音频轨道对应一个音频,MP4 是一种多媒体容器格式,它可以包含多个轨道,其中就可能有多个视频轨道、音频轨道灯,例如,一些 MP4 文件可能会包含多个不同角度的视频轨道,以实现多视角播放功能;└─ mdia(媒体信息容器,平级)trak(轨道容器)

2025-09-12 10:15:48 350

原创 java 实现rtsp 直播流下载

【代码】java 实现rtsp 直播流下载。

2025-09-11 20:41:34 208

原创 Java mp4parser 实现视频mp4 切割

该代码实现了一个MP4视频文件分割工具,主要功能是将超过4.3GB的大视频文件按时长自动分割成多个小文件。核心逻辑包括:1)检测文件大小,超过4.3GB时计算需要分割的次数;2)读取视频文件并获取总时长;3)按计算出的片段时长进行分割;4)使用mp4parser库处理视频轨道数据并生成片段文件。实现中使用了自定义的CroppedTrack类来处理轨道裁剪,完整实现了Track接口的所有方法。程序会输出每个片段的状态信息,最终生成按序编号的多个MP4文件片段。

2025-09-11 20:18:15 283

原创 getMergedLocalBeanDefinition 方法的作用

例如我们要配置两个不同的数据库,分别是使用了不同的密码和账号,但是某些属性上是相同的通常我们会有如下配置:

2025-03-02 02:21:36 992

原创 扩展-通过idea 中的Frames 来查看当前栈帧

假如有如下一个类,我们在idea 中可以通过后续的操作查看出栈入栈的情况。** 执行到了A方法,A方法入栈,之后的方法执行依次类推**

2024-07-28 17:23:56 542

原创 8. 运行时数据区-堆

一般Java程序中堆内存是空间最大的一块内存区域。创建出来的对象都存在于堆上。栈上的局部变量表中,可以存放堆上对象的引用。静态变量也可以存放堆对象的引用,通过静态变量就可以实现对象在线程之间共享。堆内存的调优堆空间有三个需要关注的值,used total max。used指的是当前已使用的堆内存,total是java虚拟机已经分配的可用堆内存,max是java虚拟机可以分配的最大堆内存。·如果不设置任何的虚拟机参数,max默认是系统内存的1/4,total默认是系统内存的1/64。在实际

2024-07-28 17:17:34 475

原创 7. 运行时数据区-栈

当一个方法被调用时,JVM会保存当前线程的程序计数器的值作为返回地址,这个值指示了在调用当前方法之前,线程正在执行的指令的下一条位置。,0代表注释掉的方法A,1代表变量i,2代表变量j,由此我们可以看出以变量"i"为例,i在第二行开始执行,也就是下方为1的位置,在第六行结束也就是下方为5的位置,所以这里的起始pc为2,长度为5。**序号:**对应局部变量表中变量的起始位置,也就是“槽”的位置,假如有一个变量为 ** i **则在局部变量表中的序号为0,则变量 i 在局部变量表中槽的位置为0。

2024-07-28 17:04:35 1036

原创 6. 运行时数据区-程序计数器和栈帧

程序计数器也叫做PC寄存器,PC寄存器是用来存储指向下一条指令的内存地址,也即将将要执行的指令代码,由执行引擎读取下一条指令,在执行完毕当前指令之后,JVM的执行引擎会通过程序计数器获取下一条指令的地址来执行后续指令。当前类的字节码指令引用了其他类的属性或者方法时,需要将符号引用(编号)转换成对应的运行时常量池中的内存地址。动态链接就保存了编号到运行时常量池的内存地址的映射关系。Java虚拟机在运行Java程序过程中管理的内存区域,称之为。运行时数据区分为两大类,线程共享和线程不共享,

2024-07-28 16:53:39 515

原创 5. 双亲委派机制

ClassLoader中的loadClass方法分析// name字段:class名称// resolve: 是否执行链接阶段的代码,如果为true则执行链接阶段的相关代码// 加锁防止多线程情况下重复加载// 首先检查当前类是否已经被加载Class

2024-07-28 16:39:29 843

原创 4. 类加载器

将当前jar包放入jre/lib下之后启动类加载器会加载对应的jar包,不推荐这种方式,尽可能不要去更改JDK安装目录中的内容,因为Java虚拟机在加载的时候会对jar包的名称进行校验,名称必须符合一些规范,当不满足某些名称的规范的时候可能出现各种问题。然后输入,-Xbootclasspath/a:jar包目录/jar包名称,-Xbootclasspath后面的那个a 字符代表添加的意思。去掉了扩展类加载器,新增平台类加载器根据jdk9中的模块化的概念进行加载,剩余部分等待后续补充。

2024-07-28 16:35:04 1009

原创 3. 类的生命周期

初始化阶段会执行字节码文件中clinit部分的字节码指令,这里的clinit 中cl 代表类(class),而init 代表初始化,所以这里代表的就是类的初始化,所以初始化阶段执行的就是字节码文件中的clinit部分的指令。这个有个问题,下面的代码时成员变量,如果非成员变量的情况下准备阶段是否也能在编译器就确定某些变量的值(应该是可以的,回头用Java命令确定一下)这段代码在准备阶段的值是0因为int 类型没有赋值之前的值默认都为0,而在初始化阶段才会把当前的真正将1的值赋值给value字段。

2024-07-27 23:56:41 1071

原创 2. Class 文件的组成

class文件魔数就是指class文件开头的ca fe ba be 联合起来是咖啡馆的意思,魔数(Magic Number)用于辨别当前文件是否是JavaClass 文件,例如:将class 文件的后缀".classJPEG 图像文件:FF D8 FFPNG 图像文件:89 50 4E 47 0D 0A 1A 0AGIF 图像文件:47 49 46 38 39 61 或 47 49 46 38 37 61BMP 图像文件:42 4D。

2024-07-27 23:09:49 942

原创 jvm 发展历程

*本地接口(JIT):**本地调用已经被编译的方法,例如:常见的C++ 方法,执行引擎负责调用本地接口。**运行时数据区:**用于存放加载到内存中的字节码的区域。**执行引擎:**即时编译,解释器,垃圾回收器等。将字节码文件加载到jvm 当中。

2024-07-27 22:59:17 253

原创 Redis缓存双删(使用Redis如何保证数据库和缓存之间的同步)

该策略的问题是,如果Redis 修改成功了,数据库没有修改成功,导致数据不一致。:该策略的问题是如果数据库更新成功了Redis 修改失败了,也会导致不同步的问题。

2024-05-13 16:42:50 605

原创 通过泛型处理excel空行问题

【代码】通过泛型处理excel空行问题。

2023-07-26 10:03:26 301

原创 spring 手动开启事务

【代码】spring 手动开启事务。

2023-03-08 10:45:17 1847

翻译 解决mysql 报错only_full_group_by

参考:mysql - What are the benefits of only_full_group_by mode? - Stack Overflowhttps://stackoverflow.com/questions/45484068/what-are-the-benefits-of-only-full-group-by-mode在网上找了一大堆答案,都说直接禁用掉only_full_group_by没有从根本上理解为什么mysql 要默认开启only_full_group_by,所以这里先来分析一

2022-12-05 20:43:43 529

原创 代码优化技巧

这是个人在写代码时的一个优化心得,可以让代码更清晰,更具可维护性。

2022-11-23 18:35:55 747

原创 spring 6.0 构建报错 找不到符号 InstrumentationSavingAgent

将spring-context.为什么改成api 而不是。

2022-11-04 09:25:22 362

原创 open jdk 下载方式

Archived OpenJDK GA Releases

2022-11-03 19:44:43 2333

原创 查看spring boot每个版本更新的内容

Home · spring-projects/spring-boot Wiki · GitHubSpring Boot. Contribute to spring-projects/spring-boot development by creating an account on GitHub.https://github.com/spring-projects/spring-boot/wiki

2022-11-01 16:56:50 689

原创 leet code 刷题----两数相加

【代码】leet code 刷题----两数相加。

2022-10-11 09:37:28 265

原创 未更改定时任务默认线程池大小导致的定时任务阻塞问题

最近线上出现了一个奇怪的问题,由于业务需要,我们通过定时任务进行定时excel 导入操作,但是常常会出现一些定时任务在某些时间段不执行的问题,由于业务需要,这里的定时任务都设置五分钟执行一次,但是事实并非如此,定时任务并没有五分钟执行一次,甚至间隔几个小时,都不执行一次,刚开始我以为是因为定时任务没有执行完成,不会进行下一次执行。spring boot 的@Scheduled定时任务,同一时间段的定时任务只会执行一个,其余的会被阻塞等待_轻尘×的博客-优快云博客。

2022-08-22 15:40:04 489

原创 通过反射获取注解和字段,并判断字段是否是对象

代码】通过反射获取注解和字段,并判断字段是否是对象。

2022-07-20 12:04:43 924

如何在linux系统下装oracle

十分详细的linux虚拟机下装载oracle 11g,亲测可用如果好用给个好评...

2019-02-25

java反编译.rar

其中包含了多个java反编译文件,个人尝试过Luyten准确度较高,但是如果是中文,显示的将是Unicode编码,在网上对其进行转译

2019-08-12

空空如也

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

TA关注的人

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