NioEndpoint 是 Tomcat 中负责使用 NIO 方式进行网络通信功能的模块,它负责监听处理请求连接,并将解析出的字节流传递给 Processor 进行后续的处理
下面梳理一下主要的处理流程,如下图
NioEndpoint 是 Tomcat 中负责使用 NIO 方式进行网络通信功能的模块,它负责监听处理请求连接,并将解析出的字节流传递给 Processor 进行后续的处理
下面梳理一下主要的处理流程,如下图
我们都知道java实现跨平台靠的是虚拟机技术,将源文件编译成与操作系统无关的,只有虚拟机能识别并执行的字节码文件,由各个操作系统上的jvm来负责执行,屏蔽了底层具体的操作系统。这里我们就来认识一下这个只有jvm才认识的字节码文件的真实样子。
为了节省空间,类文件中没有任何分隔符,各个数据项都是一个挨着一个紧凑排列的,所以其中无论是顺序还是数量等都是严格规定的,哪个字节代表什么含义,长度是多少,先后顺序如何,都不允许改变。下面我们先看一下类文件的整体结构:
Spring 不仅为我们提供了IOC
, AOP
功能外,还在这个基础上提供了许多的功能,我们用的最多的可能就是 Spring MVC
了吧,但是让我们来看下spring-context
包,其中包含了缓存、调度、校验功能等等
这里主要想介绍一下Spring提供的观察者模式实现(事件发布监听)及异步方法执行,这些功能也都是基于AOP实现的
看过了前面的Spring Beans相关的 IOC 功能, 接下来我们来看看 AOP 是如何实现的
我们都知道 AOP 是通过动态代理来实现的, 但是代理这一步是如何实现的呢? 其实就是之前提到过的, 在Spring Bean的创建过程中, 实现BeanPostProcessor
的接口可以对创建好的Bean进行修改替换等操作
1 | protected Object initializeBean(String beanName, Object bean, RootBeanDefinition mbd) { |
一种被设计来处理无穷数据集的数据处理系统引擎
对实时产生的数据进行实时统计分析
流计算相比批处理需要切分为窗口才能进行分组聚合处理
同时需要解决如下两个问题
正确性/完整性 exactly-once
处理无序、延迟数据的能力
扩展点加载机制主要是为了实现接口和实现的解耦,接口的具体实现并不在代码中指定,而是通过通过外部配置实现,Dubbo的扩展点加载是对JDK的SPI扩展点加强而来,大家如果不了解JDK的SPI也没有关系,这里我们主要来看一下Dubbo的实现
在Dubbo的实现中,主要有三个注解,@SPI
、@Adaptive
和@Activate
,下面我们来结合例子分别看一下它们的使用
Executors框架提供的创建线程池的方法
1 | // 固定线程数量的线程池 |
它们内部实现都是使用了ThreadPoolExecutor
,平时使用时我们最好是直接使用ThreadPoolExecutor
,根据实际情况提供如下7个参数对线程池进行定义使用
配置参数
1 | int corePoolSize, // 核心线程数 |
在介绍状态模式之前,我们先看个简单的例子
比如我们正常的网上购物的订单,对于订单它有许多个不同的状态,在不同状态下会有不同的行为能力,如状态有待支付、已支付待发货、待收货、订单完成等等,在整个订单流转过程中,由不同的事件行为导致它状态的变更,可以看下它简单的状态图
这些状态虽然不同,但是都是属于订单的状态,对应的行为也是订单的行为,在编码的过程中,一种写法是将这些行为(方法)都写到订单这个类或者类似OrderService这种类中,如
1 | public class OrderService { |
这样每次进行操作时,我们要先进行一下当前状态的判断,如用户支付时,我们要判断一下当前订单的状态,如果是待支付,则进行支付操作后,将状态改为已支付;如果当前状态是已支付时,就要提示用户当前订单已支付,不能再次支付等等,如果订单状态比较复杂时就会导致这个类中充斥大量的if
、switch
等判断逻辑,维护不便
而状态模式则提供了另一种解决方案,它将与特定状态相关的行为局部化,也使得状态转换现实化,下面我我们来具体看一下
Drools是一款基于Java语言的开源规则引擎,通过drools特定的语法,将复杂多变的业务规则统一管理。
maven
创建项目添加相关依赖,pom.xml
如下
1 | <?xml version="1.0" encoding="UTF-8"?> |