- 博客(14)
- 收藏
- 关注
原创 KMP算法代码详解
学习了kmp算法,思想其实很好理解,但是代码的实现一直看得很迷糊。看了很多博客,特别是对匹配信息的next数组有很多不同,比如数组有首位有-1的也有0的等。我自己也疏离了一遍,记录一下,方便之后以后回忆。首先KMP算法主要是用来解决字符串(也叫主串)中的模式串定位问题,比如,有一个主串"abaabaabbabaaabaabbabaab",要找出主串中是否存在子串"abaabbabaab",并返回匹配到的具体位置。如果是普通的暴力匹配,应该是将主串和模式串从左到右一个个匹配,如果这个过程中有某个字符不.
2020-09-03 02:00:57
3523
原创 zookeeper源码学习(二)——选举
首先,来回顾一下之前说FastLeaderElection 执行start方法,其实就是启动两个线程WorkerSender、WorkerReceiver这两分别用于向其他所有节点发送自己的投票信息、接收并处理其他节点发送给自己的投票信息的线程。我们来具体看看这两个线程的run方法具体做了什么吧。WorkerSender首先看WorkerSender#runpublic void run() { while (!stop) { t
2020-08-31 22:51:11
275
原创 zookeeper源码学习(一)——启动流程
开始启动——定时清理任务话不多说,找到我们的启动类org.apache.zookeeper.server.quorum.QuorumPeerMain,查看他的main方法public static void main(String[] args) { QuorumPeerMain main = new QuorumPeerMain(); try { main.initializeAndRun(args); }
2020-08-31 22:50:18
283
原创 zuul源码学习
平常使用zuul网关,主要就是用来做路由请求,和通过过滤器做相应的增强限制处理。其实,zuul就是一组过滤器,有pre,routing,post,error不同类型的过滤器。执行的时机也不一样。而路由功能也是通过过滤器来实现的。我们来看下源码,大概了解下他是如何做的吧。首先,老规矩还是找到spring.factories,找到自动配置的类ZuulProxyAutoConfiguration和父类ZuulServerAutoConfigurationpublic class ZuulProxyAutoCo
2020-08-07 02:25:38
226
原创 Feign源码学习
跟进@EnableFeignClients注解@Retention(RetentionPolicy.RUNTIME)@Target(ElementType.TYPE)@Documented@Import(FeignClientsRegistrar.class)public @interface EnableFeignClients {...}可以看到这里导入了FeignClientsRegistrar类,我们来看看这个类class FeignClientsRegistrar impl
2020-07-29 22:12:59
282
原创 ribbon源码学习
在spring cloud微服务体系中,可以用ribbon来做客户端的负载均衡。而这,只要在RestTemplate实例上添加了⼀个@LoadBalanced注解就能实现了,接下来让我们分析下这背后的过程吧。首先,老规矩,通过spring.factories文件,找到RibbonAutoConfiguration类,发现RibbonAutoConfiguration类装配后,会去装配LoadBalancerAutoConfiguration类,我们先看LoadBalancerAutoConfigurati
2020-07-22 00:29:29
154
原创 Eureka源码学习(二)——Eureka-Server
在spring.factories文件中看到,服务启动会去加载EurekaServerAutoConfiguration配置类的。大概看一下配置类的@Configuration(proxyBeanMethods = false)@Import(EurekaServerInitializerConfiguration.class)@ConditionalOnBean(EurekaServerMarkerConfiguration.Marker.class)@EnableConfigurationPro
2020-07-16 23:14:33
301
原创 Eureka源码学习(一)——Eureka-Client
关于Eureka的学习,先了解client,client会做些什么呢?通过源码简单的了解一下,client是如何向发起注册、续约、抓取注册列表刷新本地缓存、变动通知、下线这些操作的。我们建个工程,maven导入spring-cloud-starter-netflix-eureka-client包2.2.3,找到其中spring.factories,EurekaClientAutoConfiguration自动配置类会生效,并且会注入一个EurekaClient @Bean(destroyMethod
2020-07-15 02:19:05
483
原创 springmvc源码学习
1.1 web.xml配置WebApplicationContext加载spring web项目中,在web.xml文件里往往需要配置ContextLoaderListener,用来加载容器。public class ContextLoaderListener extends ContextLoader implements ServletContextListener { public ContextLoaderListener() { } public ContextLoaderListene
2020-07-11 06:37:11
170
原创 spring源码学习(四)——aop
1.3 AOP说完了ioc的初始化过程,再来了解下aop吧。aop就是面向切面编程,可以无侵入的将代码切入到执行位置,实现增强。下面,我们来看看spring是怎么实现aop的吧。还是拿配置文件方式来举例,开启aop功能往往需要配置aop:aspectj-autoproxy/。这个标签会找到AopNamespaceHandler来处理。public class AopNamespaceHandler extends NamespaceHandlerSupport { /** * Register
2020-06-23 23:11:41
238
原创 spring源码学习(三)——初始化bean
1.2.3 初始化bean执行完beanFactoryPostProcessors之后,会找到所有BeanPostProcessor(Bean的后置处理器),注册到beanFactory中。然后注册各种组件后,来到finishBeanFactoryInitialization(beanFactory)方法,初始化剩下所有非懒加载的单例bean。protected void finishBeanFactoryInitialization(ConfigurableListableBeanFactory be
2020-06-21 20:02:38
366
原创 spring源码学习(二)——ConfigurationClassPostProcessor(BeanFactory后置处理器的执行)
1.2.2 ConfigurationClassPostProcessor(BeanFactory后置处理器的执行)在获取到BeanFactory后,就会执行invokeBeanFactoryPostProcessors(beanFactory)方法,执行BeanFactoryPostProcessor相应的方法。BeanFactoryPostProcessor中有一个非常重要的实现就是ConfigurationClassPostProcessor。它的主要功能是参与BeanFactory的建造,在这个类
2020-06-21 02:51:10
411
原创 spring源码学习(一)——ioc初始化
spring两个重要的概念ioc和aop,整个框架是非常复杂的。下面主要了解一下,他们大致的一个流程。1.1 BeanFactory和ApplicationContextBeanFactory是spring 的顶层容器,他定义了所有ioc容器必须遵从的原则,拥有实例化对象和获取对象的功能。而ApplicationContext是他的子类,增加了很多额外的功能。不同的实现也增加了不一样的功能,Spring IoC 容器继承体系⾮常聪明,需要使⽤哪个层次⽤哪个层次即可,不必使⽤功能⼤⽽全。1.2 初始化i
2020-06-21 02:09:48
225
原创 mybatis源码学习(自用)
mybatis源码学习(自用) 一直以来没有记录笔记的习惯,每次学习完一些技术,过段时间就忘记了。所以非常想养成学习过后记录笔记总结的习惯。这篇就当作我笔记的开始吧。以后看情况会对一些技术框架做一个总结。 MyBatis 是一款优秀的基于ORM的半自动轻量级持久层框架,在使用上应该是非常熟练了,下面一起来简单的看看mybatis的大致流程实现。 使
2020-06-03 01:11:47
341
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人