自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Pazz

持之以恒

  • 博客(120)
  • 收藏
  • 关注

原创 netty 源码解析一:ServerBootstrap 服务端

ServerBootstrap 服务启动类 继承自 AbstractBootstrapgroup(EventLoopGroup) 赋值 EventLoopGroup (创建 NioEventLoopGroup) 线程组(池)channel(Class) 赋值 ChannelFactory (通过class的构造器,创建 Re...

2020-01-20 11:46:48 379

原创 spring 源码分析 平台事务管理

AOP 事务

2019-12-15 17:04:01 292

原创 spring 源码分析 应用上下文层级关系

应用层级分析:级别类型类名注释作用A1接口ApplicationContext应用上下文(环境获取、 bean容器、 消息资源、 事件发布器、 资源加载器)B1接口WebApplicationContextweb应用上下文( ServletContext 获取、 属性名称的定义{作用域, 服务上下文, 上下文参数和属性})C1接口Co...

2019-11-26 23:36:24 326

原创 spring 源码分析 五种方式加载应用上下文

spring 加载应用上下文方式:一、 从Web应用下的一个或多个XML配置文件中加载应用上下文此上下文在 DispatchServlet 创建上下文时使用, 通过xml 启动时创建web上下文.ApplicationContext ac1 = new XmlWebApplicationContext();FrameworkServlet.java /** * xml启动的 w...

2019-11-24 23:16:35 232

原创 spring 源码分析 应用上下文刷新 (AbstractApplicationContext#refresh方法)

这章我们分析 spring 核心方法, refresh() 应用刷新。 这个方法在 spring 中有着很重要的功能处理下面我们来分析:AbstractApplicationContext # refresh() 方法分析 public void refresh() throws BeansException, IllegalStateException { synchronized (t...

2019-11-20 23:35:04 214

原创 spring 源码分析 事件广播 (SimpleApplicationEventMulticaster 观察者模式)

解析Springboot源码。博主采用版本是Springboot2.2.1,Spring5.2.0,新特性本系列后面也会着重分析。整个系列是围绕springboot启动流程进行源码分析,在整个流程中,会遇到一些核心类或者核心流程,会着重讲解,所以篇幅可能会增多,做好准备。源码分析SimpleApplicationEventMulticaster类结构分析:实现了 Application...

2019-11-19 22:43:55 4463

原创 spring 源码分析 生命周期

bean 初始化流程:1、初始化bean2、填充属性3、处理BeanNameAware接口 bean名称方法4、处理BeanClassLoaderAware接口 类加载器方法5、处理BeanFactoryAware接口 bean工厂方法6、处理BeanPostProcessor接口 后置处理器中的 前处理方法(before) ...

2019-10-30 17:02:09 154

原创 spring 源码分析 管理请求映射-下 (RequestMappingHandlerMapping)

RequestMappingHandlerMapping 类是 HandlerMapping接口 的实现, 是spring 定义的默认处理流程spring mvc 请求流程:---- 其中需要通过HttpRequestServlet 请求对象获取HandlerExecutionChain 对象---- HandlerExecutionChain 对象包含 HandlerMethod 与...

2019-08-14 17:29:21 221

原创 spring 源码分析 管理请求映射-上 (RequestMappingHandlerMapping)

RequestMappingHandlerMapping 类结构继承结构: RequestMappingHandlerMapping impl实现 MatchableHandlerMapping接口、EmbeddedValueResolverAware接口 --|RequestMappingInfoHandlerMapping --|AbstractHandlerMeth...

2019-08-14 11:04:12 239

原创 spring 源码分析 请求流程 (DispatcherServlet)

DispatchServlet # doGet() ==>> 直接调用processRequest()方法FrameworkServlet # processRequest() ==>> 处理一些Servlet的上下文(安全问题),在通过调用doService() 模板方法处理逻辑DispatchServlet # doService() ==>> 给请求设...

2019-07-07 14:16:41 166

原创 spring 源码分析 代理工厂 (ProxyFactory)

AnnotationAwareAspectJAutoProxyCreator 类关系图通过发现,我们可以知道该类实现BeanPostProcessor接口, 是一个后置处理器.

2019-06-20 23:03:44 799

原创 spring 源码分析 aop自动创建代理 (AnnotationAwareAspectJAutoProxyCreator )

@EnableAspectJAutoProxy //第一种方式注解<aop:aspectj-autoproxy> //第二种方式xml配置spring ioc 通过这二种方式激活:这样他会去注册Bean定义解析类 AspectJAutoProxyBeanDefinitionParser这个解析类会注册一个 AnnotationAwar...

2019-02-28 23:33:18 250

原创 spring 源码分析 接口方法 (ApplicationContext 应用上下文)

ApplicationContext简单说下应用上下文接口的方法,String getId(); //获取idString getApplicationName(); //获取String getDisplayName(); //获取应用显示名称long getStartupDate(); //获取启动时间ApplicationContext getParent(); //...

2019-02-27 18:04:45 1064

原创 spring 源码分析 应用上下文 (AbstractRefreshableConfigApplicationContext )

类名实现接口说明DefaultResourceLoaderResourceLoader资源加载器, 根据路径获取Resource对象AbstractApplicationContextConfigurableApplicationContext发布事件, 获取上下文环境, 存放应用监听器等, 操作核心类AbstractRefreshableApplicat...

2019-02-26 21:57:28 490

原创 spring 源码分析 接口方法 (BeanFactory bean容器)

SimpleAliasRegistry 别名注册缓存类//别名储存(key 别名, value beanId)private final Map<String, String> aliasMap = new ConcurrentHashMap<>(16);// 注册 别名为key,

2019-02-25 00:34:13 151

原创 spring 源码分析 依赖循环 (AbstractBeanFactory)

spring中获取bean循环依赖时ApplicationContext ac = new ClassPathXmlApplicationContext(“spring-test.xml”);ac.getBean(“testA”);class A{ B b;}class B{ A a;}AbstractBeanFactory 类// 实际操作方法都是doprotect...

2019-02-22 23:43:29 230

原创 spring boot 源码分析 启动流程 (SpringApplication#run)

从Springboot开始分析。博主采用版本是Springboot2.2.1,Spring5.2.0,新特性本系列后面也会着重分析。整个系列会围绕springboot启动流程进行源码分析,在整个流程中,会遇到一些核心类或者核心流程,会着重讲解,所以篇幅可能会增多,做好准备。源码分析首先是项目启动类: public static void main(String[] args) throws...

2019-11-17 21:04:42 161

转载 从分布式一致性谈到CAP理论、BASE理论

问题的提出在计算机科学领域,分布式一致性是一个相当重要且被广泛探索与论证问题,首先来看三种业务场景。1、火车站售票假如说我们的终端用户是一位经常坐火车的旅行家,通常他是去车站的售票处购买车票,然后拿着车票去检票口,再坐上火车,开始一段美好的旅行----一切似乎都是那么和谐。想象一下,如果他选择的目的地是杭州,而某一趟开往杭州的火车只剩下最后一张车票,可能在同一时刻,不同售票窗口的另一位乘客也...

2019-09-01 13:27:22 154

原创 Java HashMap 源码浅入

get() 分析先分析 hash(Object key)方法:1、(key的哈希值)异或(哈希值 按位右移16)得到哈希值获取到哈希值,在调用 getNode(int hash, Object key)方法:2、 // 根据key得到hash值 static final int hash(Object key) { int h; return (...

2019-07-11 22:04:35 123

翻译 http 状态码

502 Bad Gateway:tomcat没有启动起来504 Gateway Time-out: nginx报出来的错误,一般是nginx做为反向代理服务器的时候,所连接的应用服务器譬如tomcat无相应导致的302(临时移动) 服务器目前正从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求,302响应时,临时URL通过Location 字段返回给客户端。304(未修改)...

2019-06-04 11:27:47 375

原创 RocketMQ 最佳实践

最佳实践1 生产者1.1 发送消息注意事项1 Tags的使用一个应用尽可能用一个Topic,而消息子类型则可以用tags来标识。tags可以由应用自由设置,只有生产者在发送消息设置了tags,消费方在订阅消息时才可以利用tags通过broker做消息过滤:message.setTags(“TagA”)。2 Keys的使用每个消息在业务层面的唯一标识码要设置到keys字段,方便将...

2019-05-13 23:42:06 341 1

原创 RocketMQ 产品特点

特性(features)1 订阅与发布消息的发布是指某个生产者向某个topic发送消息;消息的订阅是指某个消费者关注了某个topic中带有某些tag的消息,进而从该topic消费数据。2 消息顺序消息有序指的是一类消息消费时,能按照发送的顺序来消费。例如:一个订单产生了三条消息分别是订单创建、订单付款、订单完成。消费时要按照这个顺序消费才能有意义,但是同时订单之间是可以并行消费的。Roc...

2019-05-13 23:40:00 326

原创 RocketMQ 观念

基本概念1 消息模型(Message Model)RocketMQ主要由 Producer、Broker、Consumer 三部分组成,其中Producer 负责生产消息,Consumer 负责消费消息,Broker 负责存储消息。Broker 在实际部署过程中对应一台服务器,每个 Broker 可以存储多个Topic的消息,每个Topic的消息也可以分片存储于不同的 Broker。Mess...

2019-05-13 23:39:02 104

原创 RocketMQ 设计模式

设计(design)1 消息存储消息存储是RocketMQ中最为复杂和最为重要的一部分,本节将分别从RocketMQ的消息存储整体架构、PageCache与Mmap内存映射以及RocketMQ中两种不同的刷盘方式三方面来分别展开叙述。1.1 消息存储整体架构消息存储架构图中主要有下面三个跟消息存储相关的文件构成。(1) CommitLog:消息主体以及元数据的存储主体,存储Produ...

2019-05-13 23:37:10 1573

原创 RocketMQ 架构设计

架构设计1 技术架构RocketMQ架构上主要分为四部分,如上图所示:Producer:消息发布的角色,支持分布式集群方式部署。Producer通过MQ的负载均衡模块选择相应的Broker集群队列进行消息投递,投递的过程支持快速失败并且低延迟。Consumer:消息消费的角色,支持分布式集群方式部署。支持以push推,pull拉两种模式对消息进行消费。同时也支持集群方式和广播方...

2019-05-13 23:32:41 520

原创 rocketmq使用教程

rocketmq 官网:http://rocketmq.apache.org/docs/quick-start/

2019-04-26 16:56:20 244

原创 mysql 常用函数用法示例

1、字符串函数select concat(‘pa’, ‘-’, ‘zz’); – 把参数连成一个长字符串并返回结果: pa-zzselect length(‘text’); – 返回字符串str的长度4select locate(‘c’, ‘abcdef’); – 返回字符串substr在字符串str第一次出现的位置结果: 3select locate(‘c’, ‘abcdefc...

2019-04-22 00:31:57 226 1

转载 LRU和LFU缓存算法

最近最少使用(LRU)首先丢弃最近最少使用的项目。该算法需要跟踪何时使用的内容,如果想要确保算法总是丢弃最近最少使用的项目,则这是昂贵的。该技术的一般实现需要保持高速缓存行的“年龄位”并基于年龄位跟踪“最近最少使用”高速缓存行。在这样的实现中,每次使用高速缓存行时,所有其他高速缓存行的年龄都会改变。LRU高速缓存消除过程Golang实现:github.com/golang/groupcac...

2019-04-18 09:28:31 352

原创 MyBatis 核心逻辑处理篇

mybatis 核心逻辑处理篇:SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(configuration);底层就是: new DefaultSqlSessionFactory(config); private SqlSession openSessionFromDataSource...

2019-04-16 00:18:50 606

原创 MyBatis 源码之解析篇

mybatis 初始化流程步骤:1、通过 ClassLoader 类加载器读取某个路径的 xml 文件来获取 InputStream 流对象.2、通过 SqlSessionFactoryBuilder 对象来解析流, 返回工厂3、通过 SqlSessionFactory 工厂获取 SqlSession对象4、通过 SqlSession 可以操作. (查询、删除、修改、添加)Inpu...

2019-04-14 12:25:41 171 1

转载 Spring配置中的"classpath:"与"classpath*:"的区别(转)

概念解释及使用场景:classpath是指WEB-INF文件夹下的classes目录。通常我们一般使用这种写法实在web.xml中,比如spring加载bean的上下文时,如下:<!--系统自动加载文件--><!--这里使用的是classpath*:的形式--><context-param> <param-name>contextC...

2019-02-18 09:40:03 136

原创 Java 设计模式的六大原则

设计模式的六大原则1、开闭原则(Open Close Principle)开闭原则的意思是:对扩展开放,对修改关闭。在程序需要进行拓展的时候,不能去修改原有的代码,实现一个热插拔的效果。简言之,是为了使程序的扩展性好,易于维护和升级。想要达到这样的效果,我们需要使用接口和抽象类,后面的具体设计中我们会提到这点。2、里氏代换原则(Liskov Substitution Principle...

2018-12-18 14:22:40 181 2

原创 Java NIO(三)阻塞与非阻塞

   阻塞与非阻塞阻塞   传统的 IO 流都是阻塞式的。也就是说,当一个线程调用 read() 或 write()时,该线程被阻塞,直到有一些数据被读取或写入,该线程在此期间不能执行其他任务。因此,在完成网络通信进行 IO 操作时,由于线程会阻塞,所以服务器端必须为每个客户端都提供一个独立的线程进行处理,当服务器端需要处理大量客户端时,性能急剧下降。非阻塞  Java NIO 是非阻塞模...

2018-12-16 12:56:37 214

原创 Java NIO(二)通道Channel

一、通道(Channel):用于源节点与目标节点的连接。在 Java NIO 中负责缓冲区中数据的传输。Channel 本身不存储数据,因此需要配合缓冲区进行传输。 二、通道的主要实现类     java.nio.channels.Channel 接口:         |--FileChannel:用于读取、写入、映射和操作文件的通道。         |--SocketChan...

2018-12-16 12:45:22 1217

原创 Java NIO(一)缓冲区Buffer

Java NIO全称Java non-blocking IO,是指jdk1.4 及以上版本里提供的新api(New IO) ,为所有的原始类型(Boolean类型除外)提供缓存支持的数据容器,使用它可以提供非阻塞式的高伸缩性网络。下表总结了Java IO和NIO之间的主要区别:IO NIO 面向流 面向缓冲 阻塞IO 非阻塞IO 无 选择器   ...

2018-12-16 12:31:02 198

原创 applicationContext.findAnnotationOnBean();

ApplicationContext ==>> ListableBeanFactory ==>> BeanFactoryListableBeanFactory 接口有个findAnnotationOnBean(String beanName, Class<A> annotationType)方法/** * 在指定的bean上找到{@code ann...

2018-12-04 09:32:57 1499

原创 applicationContext.getBeansWithAnnotation();

ApplicationContext 应用上下文getBeansWithAnnotation()根据注解类型获取的对应的 bean名称 和 bean对象/** * 找到所有具有提供的{@link Annotation}类型的{@code Class}的bean,返回具有相应bean实例的bean名称映射。 */Map<String, Object> getBean...

2018-12-03 17:17:00 18496

原创 Class 之 isAssignableFrom()方法

class类的 isAssignableFrom() 是个不常用的方法,感觉这个方法的名字取得不是很好,所以有必要在此解析一下,以免在看源码时产生歧义,这个方法的签名如下:public native boolean isAssignableFrom(Class<?> cls);由方法签名可见是一个本地方法,即C代码编写的。以下是JDK中的注释:Determines i...

2018-12-03 17:01:11 510

原创 SpringBoot @ConditionalOnProperty 注解

发现了Spring boot中有个注解@ConditionalOnProperty,这个注解能够控制某个configuration是否生效。具体操作是通过其两个属性name以及havingValue来实现的,其中name用来从application.properties中读取某个属性值,如果该值为空,则返回false;如果值不为空,则将该值与havingValue指定的值进行比较,如果一样则返回t...

2018-11-20 15:14:02 864

原创 Maven dependencyManagement含义

1.在Maven中dependencyManagement的作用其实相当于一个对所依赖jar包进行版本管理的管理器。2.pom.xml文件中,jar的版本判断的两种途径1:如果dependencies里的dependency自己没有声明version元素,那么maven就会倒dependencyManagement里面去找有没有对该artifactId和groupId进行过版本声明,如...

2018-11-03 09:39:41 191

空空如也

空空如也

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

TA关注的人

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