自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 LeetCode 19. 删除链表的倒数第 N 个结点

删除倒数第n个节点;

2022-08-07 23:11:32 221 1

原创 LeetCode 21. 合并两个有序链表

合并两个排好序的链表;

2022-08-07 23:02:41 202

原创 LeetCode 24. 两两交换链表中的节点

这题也是交换的问题;由于可以取到交换的目标节点;引入一个虚拟头结点;可以更好的得到目标节点的前一个节点;

2022-08-07 22:53:02 240

原创 LeetCode 445. 两数相加 II

数字用链表表示,个位在链表尾;对这两个数做加法,返回新的链表。

2022-08-07 19:18:20 158

原创 LeetCode 362. Design Hit Counter(计数器)

使用一个map,保存敲击的时刻和次数。返回敲击次数的时候,遍历整个map;如果超时了,就删除。只保留5分钟之内的。gethit(timestamp) 传入一个时刻,表示在该时刻的5分钟内的敲击次数。hit(timestamp)传入一个时刻,表示在该时刻内敲击了;...

2022-08-07 10:04:49 169

原创 LeetCode 25. K 个一组翻转链表

给一个链表,一个k值,要求每k个节点为一组,进行翻转,不足k的不用管;

2022-08-06 23:49:34 85

原创 LeetCode 138. 复制带随机指针的链表

使用map保存拷贝;那么就可以得当前节点next,random的拷贝节点;给一个链表,对该链表进行深拷贝。

2022-08-06 19:04:10 81

原创 LeetCode 82. 删除排序链表中的重复元素 II

原题网址:https://leetcode.cn/problems/remove-duplicates-from-sorted-list-ii/链表删除元素,如果有重复的,该数字将整体删除。当前节点,从后面找第一个值不同的节点;如果是紧跟着的,说明数字没有重复;否则就删除整个数字同样的题型:https://blog.csdn.net/qq_34501351/article/details/126187912?spm=1001.2014.3001.5501一个是删除重复的,一个是整体删除。保留一个的,所以可

2022-08-06 17:09:50 76

原创 LeetCode 109. 有序链表转换二叉搜索树

有序,高度平衡,所以就从链表的中间分,形成树,用到了归并思想。有序链表转为高度平衡的二叉搜索树。

2022-08-06 16:08:44 89

原创 LeetCode 369. Plus One Linked List(链表加1)

给一个链表,表示一个数如123;用链表表示是1->2->3.现在对这个数加一之后返回链表结构;

2022-08-06 13:25:02 91

原创 LeetCode 92. 反转链表 II

原题网址:https://leetcode.cn/problems/reverse-linked-list-ii/给一个链表,翻转一个区间内的节点。找到左区间的前一个节点,然后开始删除节点,直到出了区间;最后拼接翻转的链表和剩下的链表;

2022-08-06 12:10:48 92

原创 LeetCode 86. 分隔链表

给一个链表,和一个定值;要求小于这个定值的排在最前面剩下的在排在一起;一个保存小于定值的节点,一个保存剩下的链表;

2022-08-06 11:08:26 60

原创 LeetCode 83. 删除排序链表中的重复元素

原题网址:https://leetcode.cn/problems/remove-duplicates-from-sorted-list/排好序的链表,删除重入元素。

2022-08-06 00:36:12 170

原创 LeetCode 61. 旋转链表

给一个链表头节点,给一个值k,让链表顺时针的转k次;其实就是找最后个一点点。俩表长度-k%链表长度。

2022-08-06 00:15:39 60

原创 LeetCode 146. LRU 缓存

固定容量的缓存,如果满了后,再次添加新的,会删除最近最少使用的那个节点。要求是get,put都是O(1),

2022-08-05 23:44:22 63

原创 LeetCode 237. 删除链表中的节点

237. 删除链表中的节点

2022-08-05 19:44:04 144

原创 【SpringMVC】springmvc中的数据校验

使用代理的方式,在参数都解析好了之后,我先校验下参数,之后再执行处理器方法。校验解析出来的参数,如果这个参数后面跟的是BindingResult,那么特定的参数解析器会将绑定结果解出来;所以可以用不同的校验组件,我们属性的就是Hibernate Validator ,如果想换校验组件;这里注意:springmvc中只是引用了校验框架,真正的校验功能,springmvc没有实现。真正干事的是校验框架,所以本篇是分析,springmvc是如何使用校验框架的。切点很好理解,就是对类的过滤,根据提供的条件。...

2022-08-05 16:42:01 792 1

原创 【Spring-5.3】AbstractAutowireCapableBeanFactory#initializeBean实现Bean的初始化

实例化对象之后,对对象进行属性注入,之后就是初始化操作了。进入方法org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory#initializeBean(java.lang.String, java.lang.Object, org.springframework.beans.factory.support.RootBeanDefinition) protected Object initializeBea

2022-08-04 21:02:31 282

原创 【Spring-5.2】AbstractAutowireCapableBeanFactory#populateBean实现Bean的属性赋值

本章是属性注入的详细分析先获取类的需要注入的属性信息applyMergedBeanDefinitionPostProcessors方法。 if (mbd.isSingleton()) { instanceWrapper = this.factoryBeanInstanceCache.remove(beanName); } if (instanceWrapper == null) { instanceWrapper = createBeanInstance(beanName, mb

2022-08-04 20:48:08 219

原创 【Spring-5.1】AbstractAutowireCapableBeanFactory#createBeanInstance实例化对象

AbstractBeanFactory.getBean(String name):getBean(String name) public Object getBean(String name) throws BeansException { return doGetBean(name, null, null, false); }doGetBean()方法有两个功能,如果之前创建了对象,就直接取;要是没有创建会先创建。doGetBean大体也是分为三大块,if-else,还有个其他的,先看if逻

2022-08-04 11:32:03 198 2

原创 【Spring-5】AbstractBeanFactory#doGetBean创建实例完整流程

前一篇文章分析了获取bean的过程。下面分析bean的实例化过程。org.springframework.beans.factory.support.AbstractBeanFactory#doGetBean;进入方法中的else块; // 如果正在创建,则直接抛出异常,(应该是多线程下创建同一个对象) if (isPrototypeCurrentlyInCreation(beanName)) { throw new BeanCurrentlyInCreationException(b

2022-08-04 10:46:03 232

原创 【Spring-4】refresh方法之finishBeanFactoryInitialization

该方法主要处理实例化bean的操作,懒加载的bean在调用的时候实例化,不是懒加载的则在此时进行实例化。 @Override public void preInstantiateSingletons() throws BeansException { if (logger.isTraceEnabled()) { logger.trace("Pre-instantiating singletons in " + this); } // 找到所有的注册的bd List<Stri

2022-08-04 10:44:23 134 1

原创 【Spring-3.4】解析配置类,标注import注解

processImports(configClass, sourceClass, getImports(sourceClass), filter, true);先看下org.springframework.context.annotation.ConfigurationClassParser#getImports方法。 private Set<SourceClass> getImports(SourceClass sourceClass) throws IOException { ..

2022-08-03 23:14:08 208

原创 【Spring-3.3】解析配置类,标注@Bean注解

// Process individual @Bean methods Set<MethodMetadata> beanMethods = retrieveBeanMethodMetadata(sourceClass); for (MethodMetadata methodMetadata : beanMethods) { configClass.addBeanMethod(new BeanMethod(methodMetadata, configClass)); }o..

2022-08-03 23:13:46 204

原创 【Spring-3.2】解析配置类,标注ComponentScan注解

Set<AnnotationAttributes> componentScans = AnnotationConfigUtils.attributesForRepeatable( sourceClass.getMetadata(), ComponentScans.class, ComponentScan.class); if (!componentScans.isEmpty() && !this.conditionEvaluator.shouldSkip(..

2022-08-03 23:13:24 240 1

原创 【Spring-3.1】解析配置类,标注Component注解。

如果有内部类,并且是有几个注解标注,Component,ComponentScan,Import,ImportResource或者内部f类方法中有@bean标注,先解析内部类中的。内部新建一个ConfigurationClass对象。

2022-08-03 23:13:09 193

原创 【Spring-3】ConfigurationClassPostProcessor解析配置类

我们自己写的类,通过标注注解,被注入到了spring容器中,具体是如何实现的呢,下面详细分析下。。。入口org.springframework.context.annotation.ConfigurationClassPostProcessor,它是一个BeanDefinitionRegistryPostProcessor,自然是在refresh()最开始的时候被实例化的,注入到bean工厂是在spring内部自己注入注册的,这里的注册是bd的注册。既然它是BeanDefinitionRegistryP

2022-08-03 23:12:26 239 4

原创 【Spring-2】refresh方法中的invokeBeanFactoryPostProcessors方法

invokeBeanFactoryPostProcessors方法中是通过PostProcessorRegistrationDelegate类调用bean工厂的后置处理器,传参两个,beanFactory,后置处理器集合。 PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(beanFactory, getBeanFactoryPostProcessors());进入invokeBeanFactoryPostProces

2022-08-03 23:12:13 127

原创 【Spring-1】源码分析

关于spring,我的理解主要有两部分。1,自定义的处理器是如何注入到IOC容器中的的?2,容器是如何实例化对象的?从这两点触发,开始分析spring的源码。由于现在大部分都是用注解开发或者是APIConfig,所以源码也是分析的注解这块的逻辑。配置文件的逻辑其实大致一样。就是从解析配置类中的注解,变成了解析文件中的标签。使用的是这个构造器,传入的是配置类。这里需要提一句的是AnnotatedBeanDefinitionReader初始化的时候,注册了一些spring自己需要的类。从构造器出发注册

2022-08-03 23:11:54 99

原创 【SpringMVC】拦截器的原理

本文依旧是对SpringMVC拦截器详解的补充说明注意顺序就可以了prehandle处理器方法倒序的拦截器的posthandle倒序的afterCompletion

2022-08-03 16:26:35 97

原创 【SpringMVC】Controller中映射方法的参数解析过程

找到相应的处理器后,调用处理器方法,有了方法,又有这个方法属于哪个类,可以确定是使用反射调用。但是缺少了方法参数。所以需要解析出方法参数。如果是javabean类型的,使用的是ModelAttributeMethodProcessor处理器,先实例化一个该类型的对象,之后通过。如果是普通类型,也就是除了自定义的类型的,全是归他管,使用的是RequestParamMethodArgumentResolver,通过。取到值,之后通过binder进行类型转换。使用binder进行属性赋值。...

2022-08-03 12:02:48 457

原创 【SpringMVC】处理器的封装和请求寻找到对应处理器的过程

ok到此,处理器的处理已经完成,小结下;找到后,遍历这个类的所有方法,从中解析出@requestMapping注解中的信息。最后注册处理器的对应关系。一个放requestmapping和处理器的对应关系,一个放直接url和requestMapping的对应关系。时,解析该标签的时候,springmvc就已经将组件实例化到容器中了。当请求来的时候,比较信息找到对应的处理器。在处理请求前,springmvc已经将封装了所有的处理器。自己编写的Controller是如何变成springmvc中的处理器的呢?...

2022-08-02 16:57:26 248

原创 【SpringMVC】DispatcherServlet结构分析

springmvc源码分析

2022-08-01 20:21:08 159

原创 【Mybatis】Mybatis三大组件之ResultSetHandler

ResultSetHandler用于处理sql的查询结果与对象的封装。 public <E> List<E> query(Statement statement, ResultHandler resultHandler) throws SQLException { PreparedStatement ps = (PreparedStatement) statement; ps.execute(); // 使用结果处理器处理ps中的查询结果 retu

2022-02-19 14:31:58 1145

原创 【Mybatis】Mybatis三大组件之StatementHandler

Executor是涉及到缓存及创建Statement的策略,StatementHandler是创建statement和给statement赋值。Configuration根据参数创建不同的StatementHandler public RoutingStatementHandler(Executor executor, MappedStatement ms, Object parameter, RowBounds rowBounds, ResultHandler resultHandler, Boun

2022-02-11 21:57:38 577

原创 【Mybatis】mybatis的小细节

mybatis是线程安全的吗?一个sqlsesion对应一个connection.这样就容易发生事务的错乱。比如一个要提交,一个还回滚。结果把人家要回滚的提交了。修改操作进行中,又来了查询操作。查出来的数据是脏数据。没有控制操作,等修改完再查询的约束。与spring结合后,每个mapper方法的调用都会创建一个新的sqlsession.这样就不冲突了。sqlsessiontemplate类做了一层代理。使用spring事务后,表示由spring负责提交和回滚。就绑定sqlsession.这样可以保

2022-02-11 16:39:18 236

原创 【Spring-tx】关于spring事务的思考

标注@transactional注解的方法,spring都会创建事务对象。关键在于spring的传播行为是否要建立新的连接。我们常说的事务的传播行为,新建指的是新建一个connection。非事务方式运行则是不创建connect;重用,则用上一个。新建,则会解绑connect的绑定,新建一个新的绑定。关于事务同步器也是一样的。非事务的,会将自己的属性数据放入。重用,则不会放自己的,保持原来的。新建,则会放入自己的。但是加上这个注解,是一定交给spring管理事务的。只管提交有connect

2022-02-11 16:17:12 187

原创 【Mybatis】三大组件之Executor,以及一级二级缓存分析

mybatis的sql执行过程中,涉及到三大组件:Executor,StatementHandler,ResultSetHandler。本章主要分析Executor。基类org.apache.ibatis.executor.BaseExecutor修改方法 @Override public int update(MappedStatement ms, Object parameter) throws SQLException { ErrorContext.instance().reso

2022-02-10 23:11:50 558

原创 【Mybatis】mapper文件的解析

mybatis的配置文件解析每一个部分,之后将数据添加槽cofiguration类中,本章只介绍解析mapper文件的部分。mapper文件中的insert,delete,update,select标签会被解析,封装为MappedStatement对象 private String resource; // mybatis总的配置类。 private Configuration configuration; // namespace+标签的id private String id;

2022-02-10 15:08:44 2517

原创 【Spring-IOC】SpringIOC容器-bean的解析封装为BeanDefinition

我们在用context获取bean的时候,其实底层都是操作的DefaultListableBeanFactory这个类。这个类中主要分为两块:注册bean:解析class,封装为beanDefinition对象;从beanDefinition中实例化对象。先看下是如何保存数据的。beanDefinition对象DefaultListableBeanFactory中的属性: // key:bean的名称 // value:BeanDefinition对象 private final Map

2022-02-06 15:20:45 468

空空如也

空空如也

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

TA关注的人

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