自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 网关过滤器使用及其原理分析

本文主要介绍了网关过滤器的使用及其原理

2024-05-23 22:21:44 877 1

原创 Spring原理分析--获取Environment资源对象

PropertySourceLoader接口的实现类有PropertiesPropertySourceLoader和YamlPropertySourceLoader,其中PropertiesPropertySourceLoader可以加载properties和xml格式的配置文件,YamlPropertySourceLoader可以加载yml及yaml格式的配置文件。

2024-05-07 19:34:47 1236

原创 Spring原理分析--获取Resource资源对象

ClassLoader的getResources方法中会递归查找父类加载器加载的资源,返回CompoundEnumeration对象是一个嵌套的迭代器,内部还封装了Enumeration迭代器,因此父类查找到的资源会放入内部的迭代器中,层层嵌套。通过getResources获取到资源文件后,就可以使用Resource对象中的方法进行文件操作,例如获取输入流、判断资源是否存在、获取资源的文件名等。2)findAllClassPathResources处理Classpath:*下的不带通配符路径。

2024-04-19 19:26:38 345

原创 Spring原理分析--@Primary注解

SpringBoot启动时,在refresh方法中会调用invokeBeanFactoryPostProcessors扩展BeanDefinition,其中会调用到ConfigurationClassPostProcessor的processConfigBeanDefinitions,processConfigBeanDefinitions中会根据不同的情况扫描要注册的bean,源码loadBeanDefinitionsForConfigurationClass如下。

2024-04-18 19:35:59 844

原创 Spring原理分析--国际化

最终调用的ResourceBundle是JDK中提供的类,用于处理国际化资源,ResourceBundle通过加载不同的messages_xx属性文件来实现国际化,每个属性文件对应一种语言版本,如果没有找到对应的属性文件,默认会使用本地语言对应的属性文件,这就解释了为什么context.getMessage("hi", null, Locale.其次,refresh方法中还会调用initMessageSource方法,创建MessageSource对象。messages.properties:内容为空。

2024-04-16 20:10:04 410

原创 SpringMVC原理分析(十二)--异常处理流程

本文主要介绍了SpringMVC中异常处理的使用及原理

2024-04-11 19:18:54 438

原创 SpringMVC原理分析(十一)--请求执行流程

本文主要介绍了SpringMVC的执行流程

2024-04-09 19:41:08 1015

原创 SpringMVC源码分析(十)--消息转换器

由于MediaType中可能存在通配符,因此需要判断能否匹配,例如text/*能匹配text/plain、text/html等,application/*+xml匹配application/soap+xml等。MappingJackson2HttpMessageConverter支持application/json及application/*+json,是最为常用的消息转换器。2)从HttpInputMessage中读取数据。1)将响应数据从对象转换为JSON格式。2)将请求数据从对象转换为JSON格式。

2024-04-08 19:33:05 483

原创 SpringMVC源码分析(九)--返回值解析器

本文主要介绍了返回值解析器的使用及其原理

2024-04-01 20:48:10 2082

原创 SpringMVC源码分析(八)--参数解析器

本文介绍了SpringMVC中参数解析器的使用及其原理

2024-03-29 19:51:37 1019 1

原创 SpringMVC源码分析(七)--数据绑定工厂

本文主要介绍了SpringMVC中数据绑定工厂的使用及原理

2024-03-27 19:58:31 750 2

原创 SpringMVC源码分析(六)--参数名称解析器

本文主要介绍了SpringMVC中的参数名称解析器的作用及其原理

2024-03-25 20:35:17 487

原创 SpringMVC源码分析(五)--RouterFunctionMapping

本文主要介绍了RouterFunctionMapping的作用及原理

2024-03-23 21:18:52 915 1

原创 SpringMVC源码分析(四)--BeanNameUrlHandlerMapping

本文主要介绍了BeanNameUrlHandlerMapping的作用及原理

2024-03-23 11:33:46 884 1

原创 SpringMVC源码分析(三)--RequestMappingHandlerMapping

本文主要介绍了RequestMappingHandlerMapping的作用及其原理

2024-03-22 19:57:03 1713 1

原创 SpringMVC源码分析(二)--DispatcherServlet初始化

本文介绍了DispatcherServlet的初始化过程

2024-03-20 19:53:27 392 1

原创 SpringMVC源码分析(一)--基本组件

本文介绍了SpringMVC的基本组件及其原理

2024-03-20 19:47:20 952 1

原创 图像缩放功能

介绍了2种通过Java三方库进行图像缩放的方式

2024-03-18 19:27:33 287 1

原创 获取图片分辨率

介绍了Java获取图像分辨率的几种方式

2024-03-16 19:49:01 438 1

原创 SPI机制浅谈

由于ServiceLoader位于rt.jar中,因此该类是被BootStrapClassLoader加载的,而ServiceLoader需要加载我们自定义的类,而BootStrapClassLoader是加载不了类路径下定义的类的,所以默认情况下,源码中通过。SPI机制的实现方式是,在配置文件中定义好某个接口的实现类,然后根据接口名找到配置文件中的实现类名,从而加载这个实现类。获取了线程上线文类加载器,一般为AppClassLoader,使用线程上线文类加载器就能够加载我们的实现类了。

2024-03-15 20:19:48 385 2

原创 Java学习--Object类

Object类1.registerNativesregisterNatives方法在静态代码块中使用,作用是将本类中除getClass方法以外的其他native修饰的本地方法注册到JVM中,Object类中的本地方法有:clone(),hashCode(),notify(),notifyAll(),wait()。// 注册本类中所有的本地方法private static native void registerNatives(); static { registerNatives(

2020-12-06 20:15:37 114

原创 数据结构学习--希尔排序

希尔排序 算法描述:希尔排序是插入排序的一种改进,主要是为了解决当较小的数据大都出现在数组后面时导致的移动次数明显增多的问题,思想是使用一个不断缩小的增量gap将数组元素分组,在每个分组内部先进行插入排序,当gap减少到1时整个数组元素分在一组,最后进行一次插入排序,整个排序过程结束。 算法时间复杂度:最好情况:当数据已经排好序的情况下:O(N^1.3);最坏情况:O(N^2);平均情况:O(NlogN) 算法空间复杂度:O(1) 算法...

2020-11-20 00:00:21 8346 5

原创 数据结构学习--插入排序

插入排序 算法描述:插入排序的思想是假设待排序元素前面的元素已经是排好序的状态,然后从右至左找到该元素插入的位置,在寻找插入点的过程中将该元素前面的元素逐个平移到后一个位置,避免了交换。 算法时间复杂度:最好情况:当数据以及排好序的情况下:O(N);最坏情况:O(N^2);平均情况:O(N^2) 算法空间复杂度:O(1) 算法稳定性:算法不存在前面元素与后面元素的交换,采用逐个平移的方式,因此该算法是稳定的。 算法实现...

2020-11-15 21:06:39 181

原创 数据结构学习--选择排序

选择排序 算法描述:选择排序的思想是初始化最小索引为0,每趟遍历选出最小的元素与最小索引的值进行交换,然后是最小索引加1,第二趟遍历出剩下元素中最小的元素,继续与当前索引的元素交换,依次类推,直到所有元素排列完成。相比于冒泡排序,选择排序的优点在于每次遍历只需要交换1次。 算法时间复杂度:最好情况:O(N^2);最坏情况:O(N^2);平均情况:O(N^2) 算法空间复杂度:O(1) 算法稳定性:由于选择排序会直接将前面的元素与后面较小...

2020-11-15 18:00:01 109

原创 数据结构学习--冒泡排序

冒泡排序 算法描述:冒泡排序的思想是在每趟交换的过程,比较相邻的两个元素,将值大的放在右边,即将当前比较过程中的最大值移动到右边,然后将比较过程的最大索引减1,继续第二趟排序,将剩余元素中的最大值移动到右边,依次类推,直到发现有一趟比较过程中没有发生交换,则说明数组已经排好序了。 算法时间复杂度:最好情况:当数组已经是排好序的情况下,时间复杂度O(N);最坏情况:O(N^2);平均情况:O(N^2) 算法稳定性:由于冒泡排序可以保证数组左边的值必须大于右...

2020-11-15 16:24:13 122

原创 数据结构学习--稀疏数组

稀疏数组 当二维数组中的有效数据较小时,为了减少保存该数组所占用的内存空间,通常将原始数组转换为稀疏数组进行存储,一般流程为:二维数组->稀疏数组->序列化到硬盘->反序列化到内存->读取稀疏数组->读取二维数组。 ​ 二维数组转稀疏数组的过程: ​ 1.遍历原始二维数组,得到有效数据的个数sum; ​ 2.根据sum创建稀疏数组sparseArr,该稀疏数组有sum+1行,3列,其中第一行记录原始数组的大小和有效值个数,从第二行开始每列记录该数...

2020-11-14 20:55:20 118

原创 JDK源码阅读环境搭建详细步骤

JDK源码阅读环境搭建详细步骤1.在Oracle官网下载JDK安装包,推荐JDK8或JDK11,这两个版本是LTS(长期支持)的版本,下载完成后安装,安装完成后再jdk目录中有一个src.zip的源码包。官网地址:https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html。2.在IDEA中新建一个工程jdk_source,在该级目录下新建一个目录jdksrc,将源码包src.zip移动到该目录下,并解压,解压完成后

2020-11-09 20:25:33 427

空空如也

空空如也

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

TA关注的人

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