自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 java算法训练------贪心算法------搜索二维矩阵

编写一个高效的算法来判断 m x n 矩阵中,是否存在一个目标值。该矩阵具有如下特性:每行中的整数从左到右按升序排列。每行的第一个整数大于前一行的最后一个整数。示例 1:输入:matrix = [[1,3,5,7],[10,11,16,20],[23,30,34,60]], target = 3输出:true示例 2:输入:matrix = [[1,3,5,7],[10,11,16,20],[23,30,34,60]], target = 13输出:false提示:m == mat

2021-03-30 23:28:44 253

原创 java算法训练------贪心算法------跳跃游戏

给定一个非负整数数组 nums ,你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个下标。示例 1:输入:nums = [2,3,1,1,4]输出:true解释:可以先跳 1 步,从下标 0 到达下标 1, 然后再从下标 1 跳 3 步到达最后一个下标。示例 2:输入:nums = [3,2,1,0,4]输出:false解释:无论怎样,总会到达下标为 3 的位置。但该下标的最大跳跃长度是 0 , 所以永远不可能到达最后一个下标。

2021-03-30 22:49:37 294

原创 HashMap源码分析------核心面试题解析(一)

目标为什么重写Equals还要重写HashCode方法HashMap如何避免内存泄漏问题HashMap1.7底层是如何实现的HashMapKey为null存放在什么位置HashMap如何解决Hash冲突问题HashMap底层采用单链表还是双链表时间复杂度O(1)、O(N)、O(Logn)区别HashMap根据key查询的时间复杂度HashMap底层是有序存放的吗?我们先来说说吧,为什么HashMap会这么重要?博主浅薄的知识感觉,他的重要性主要是在jdk8之后底层代码进行了大更新之后

2021-03-30 22:20:35 80

原创 HashMap源码分析------HashSet集合实现无重复数据

我们都知道,set集合是无序的,而且不存在重复数据。那要怎么去保证不放入重复的数据呢?我么平常判断数据是否数据有重复一般都是使用equals()方法,可是我们可以去看看他底层是怎么判断的。我们在这里可以看到,他只是包装了一下"==",并没有其他的作为,所以他只是进行了地址的比较,那为什么进行地址的比较不能判断对象不是重复的呢?我们在使用set集合的时候,重复数据代表着同一个对象中属性的数据相同,而"=="只是进行地址的比较。我们可以用代码来说明。package com.hashmap;impor

2021-03-30 22:12:20 109

原创 HashMap源码分析------手写HashMap

我们提到过,在JDK7的时候,HashMap底层使用的是数组加链表。那么我们来模仿它的底层来写。在我们之前提到过,他实现了接口Map,HashMap底层是使用Node来存储键值对的。JDK7状态下的HashMap我们先使用list集合来存储数据。创建ArrayListHashMap.java利用private final ArrayList<Node<K,V>> arrayList = new ArrayList<>();来存储多组键值对package com

2021-03-30 21:24:20 102

原创 SpringBoot源码分析------简易的配置文件读取

我们在前面的文章应该看到了**load()、getPropertySources()、addLast()**方法。我们就来写一个简易的配置文件读取程序。我们先看看,之前看到的这个最后的load()方法。private void load(PropertySourceLoader loader, String location, Profile profile, DocumentFilter filter, DocumentConsumer consumer) { Resource[] reso

2021-03-25 09:22:09 467 2

原创 SpringBoot源码分析------关键代码分析

我们在之前已经了解SpringBoot源码分析------mvc容器的创建和tomcat的启动过了,SpringBoot的启动是通过内部new出对象,在进行run()方法的。现在我们来了解一下run()方法中的每一个步骤。SpringApplication.run()public ConfigurableApplicationContext run(String... args) { StopWatch stopWatch = new StopWatch(); stopWatch.start();

2021-03-24 23:15:56 577 1

原创 SpringBoot源码分析------mvc容器的创建和tomcat的启动

1.SpringApplication我们先创建一个基本的SpringBoot项目,然后找到SpringApplication.run()方法,并且查看里面的调用。我们会发现此时是再次调用了run(),点击run()方法里面是new了一个SpringApplication,我们把new SpringApplication(SpringbootApplication.class).run(args);拿来替换main()方法中的SpringApplication.run(SpringbootAppl

2021-03-22 10:53:19 211

原创 SpringBoot源码分析------基础知识

SpringBoot1.x与2.x区别Spring Boot依赖于Spring,而Spring Cloud又依赖于Spring Boot,因此Spring Boot2.0的发布正式整合了Spring5.0的很多特性,同样后面Spring Cloud最新版本的发布也需要整合最新的Spring Boot2.0内容。SpringBoot2新特性基于 Java 8,支持 Java 9也就是说Spring Boot2.0的最低版本要求为JDK8响应式编程使用 Spring WebFlux/WebF

2021-03-20 21:26:19 184

原创 记录一次url映射的深刻教训

博主在纯手写SpringMVC逻辑的时候,也就是这篇文章:纯手写SpringMVC逻辑代码,遇到一个找了很久的问题,在配置手写的DispatcherServlet过程中,写addMapping的拦截请求的时候使用的是dynamic.addMapping("/*"),最后返回视图的时候一直报404,debug之后发现,视图也被拦截了。之后才发现“/”和“/*”是不同的。< url-pattern>/</url-pattern>会匹配到/login这样的路径型url,不会匹配到模式

2021-03-18 17:51:14 104

原创 SpringMVC源码分析------HandlerAdapter适配器

适配器模式将一个类的接口转换成客户希望的另一个接口,Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以在一起工作。HandlerAdapter分析我们了解到了适配器模式的定义,那现在来看看HandlerAdapter吧。在我们DispatcherServlet中doDispatch()方法中HandlerAdapter被使用过,那为什么要使用这个适配器呢?在我们前面纯手写SpringMVC逻辑处理过程的时候,我们并没有使用适配器,可还是达到了目的。我们了解了适配器模式之后,就可以发现,

2021-03-18 16:32:56 199

原创 纯手写SpringMVC逻辑代码

项目目录pom.xml<dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.1.0</version></dependency><dependency> <groupId>org.apache.commons</g

2021-03-17 15:58:45 188 2

原创 SpringMVC源码分析------关键源码分析

前提要点本篇文章使用的项目为SpringMVC源码分析------基础知识(二)的代码1.重要的DispatcherServletDispatcherServlet是SpringMVC的核心类,俗称前端控制器。客户端所有请求都会转发到它执行,最终能够执行我们的url请求(根据url找到请求方法,利用反射执行)2.关键源码分析我们了解了DispatcherServlet是前端控制器,那么我们前端的请求一定会通过他的处理。我们来看看DispatcherServlet这个类。查看类图(ctrl+al

2021-03-12 10:54:41 144

原创 SpringMVC源码分析------基础知识(二)

1.@RestController和@Controller区别点开@RestController可以发现里面包含了@Controller、@ResponseBody两个注解,也就是说@RestController有着这两个注解的功能,一个是返回JSON数据,一个是bean注入的的注解。拦截器与过滤器相同点:都是基于AOP技术,对方法实现增强,都可以拦截请求的方法不同点:1)过滤器属于servlet自己研发的,拦截器技术属于SpringMVC自己研发的2)过滤器属于拦截WEB请求的,而拦截器不

2021-03-11 16:53:17 133

原创 SpringMVC源码分析------基础知识(一)

1.SpringMVCSpringMVC是基于Servlet实现封装的。Servlet是sun公司提供的一门用于开发动态web资源的技术,通常我们也把实现了servlet接口的java程序,称之为Servlet。2.创建webapp项目File—>new project一定要添加此Maven Property否则打开项目的时候可能会一直引入,引入的时间过长。在我们的main目录下并没有发现java包,我们需要自己进行创建。但是创建之后需要进行配置(如果不进行配置则该包不是资源目录,无法擦创

2021-03-09 19:55:38 107

原创 IDEA初次使用基本设置(持续更新)

1.maven配置一般我们使用IDEA默认的maven配置它使用的是国外服务器,所以下载jar包会很慢,所以需要我们设置成国内的maven配置,一般我们都是使用阿里云的服务器。需要在原本maven配置的settting.xml修改 <-- <mirror> <id>mirrorId</id> <mirrorOf>repositoryId</mirrorOf> <name>Hu

2021-03-09 14:29:38 529

原创 Spring5源码分析------循环依赖(一)

1.循环依赖发生在bean的注册过程中,bean A依赖于另一个bean B时,bean B依赖于bean A代码解释:这样就是循环依赖。不理解spring bean的创建请点击查看那么是怎么产生循环的呢?我们在学习了bean的创建的时候知道,bean对象的实例化完成之后才是进行初始化,在初始化的过程中进行了属性的注入(依赖注入)。在AService中的属性中有着BService对象,所以在注入属性的时候,BService就作为了早期暴露bean(早期暴露指bean不在其他bean中,正常情况是

2021-03-05 20:57:51 113 1

空空如也

空空如也

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

TA关注的人

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