付威 付威的网络博客

设计模式--03.观察者模式

观察者模式 观察者模式是一个消息的派发的模式,是把被观察者的状态能够及时的通知给观察者。 比如一个超市的打折了,需要把消息通知给每一个超市的顾客,这样就可以把超市作为一个被观察者,而顾客是观察者。 实现逻辑 观察者模式实现的类图如下: 实现步骤: 定义一个Observer接口,约束观察者(顾客)需要实现的方法: public interf...

设计模式--02.命令模式

命令模式 命令模式是把对象的操作方法分成一个命令,分别去执行。在分布式环境中,熔断和降级组件使用的设计模式就是命令模式。 为了了解什么是设计模式,可以类比下设计一个万能遥控器的设置,遥控器只负责一个方法的调用,真正的方法实现都在对应的电器上面。 使用的时候,只需要对对应的命令和实体进行注册下就可以了。具体的设计类图如下: 具体实现代码分下面几个步骤: 定义实体方...

Java如何实现零拷贝

什么是零拷贝 在操作系统中,从内核的形态区分,可以分为内核态(Kernel Space)和用户态(User Space)。 在传统的IO中,如果把数据通过网络发送到指定端的时候,数据需要经历下面的几个过程: 当调用系统函数的时候,CPU执行一系列准备工作,然后把请求发送给DMA处理(DMA可以理解为专门处理IO的组件),DMA将硬盘数据通过总线传输到内存中。 ...

Java中实现顺序IO

顺序IO和随机IO 对于磁盘的读写分为两种模式,顺序IO和随机IO。 随机IO存在一个寻址的过程,所以效率比较低。而顺序IO,相当于有一个物理索引,在读取的时候不需要寻找地址,效率很高。 网上盗了一个图(侵权删) Java中的随机读写 在Java中读写文件的方式有很多种,先总结以下3种方法: FileWriter和FileReader ...

Netty02--Netty实现心跳

心跳机制 心跳机制是常用的一个健康监测的机制,说白了就是每隔一段时间向服务器发送一个心跳的报文,服务收到报文后,就认为当前的客户端在活动的状态,否则会进入异常的机制,比如说主从切换。 既然存在一个通信,就一定会有服务端和客户端。服务端开启监听,客户端发起心跳报文,然后服务就再次响应。 系统的设计 消息的类型 在服务端和客户端进行通信的时候,需要区分消息的类型...

select,poll,epoll的区别

在多路复用的IO的模型中,存在三种机制,分别是select,poll和epoll.为了便于理解,可以使用简单的伪代码来表示一个原始的IO的读写: while(true) { for(Stream i: streamArr) { if(i.isNotReady()){ continue; } doSom...

网络IO模型

IO本质上是对数据缓冲区的读写,主要分为文件IO和网络IO,基本模型有很多,可以从两个方面去认识 同步和异步,阻塞和非阻塞。根据上面分类可以分为下面五类: 阻塞I/O(blocking I/O) 非阻塞I/O (nonblocking I/O) I/O复用(select 、poll和epoll) (I/O multiplexing) 信号驱动I/O (signal dri...

Spring学习笔记-06. 如何与Spring集成

全局组件初始化 对于组件的全局的初始化,可以使用前面所说的ImportBeanDefinitionRegistrar这个方法来指定初始化方法,以开源的队列QMQ的源码为例: @EnableQmq实现方式 @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.TYPE) @Documented @Import(QmqConsume...

Netty01--- Netty实现简单通信

这个Demo的功能是客户端向服务端发送一个Hello Netty的消息,然后服务端又把消息返回给客户端 Server端 这些都是一些公共的代码,代码比较简单,服务端负责监听端口,Handler负责处理业务逻辑 public class ServerProcessor { public void process(){ EventLoopGroup bossG...

Spring学习笔记-05. Spring事务的使用

配置HikariDataSource测试环境 @Configuration public class RzConfig { @Bean public DataSource dataSource() { //此处也可以写到配置文件中 final HikariConfig cpConfig = new HikariConfig(); cpConfig.setDr...

ServiceLoader的使用

获得接口的实现类有点困难 在Java中,由于反射的局限性,无法直接获取一个接口的所有实现子类,所以为了能够实现一个接口动态的注入实现的子类对象,需要借助ServiceLoader 简单的Demo使用 public interface IService { void doSomeThing(); } public class DefalutService implements IS...

Spring学习笔记-04.Spring AOP的使用

AOP的使用 所谓AOP的思想是现在程序设计中常用的一种设计思想,主要是为了能够更好的监控程序的运行的情况。 在Spring中AOP的思想展现的淋漓尽致。 实现一个简单的AOP。 @Component public class OrderBiz { public void doSomething(int x, int y) { System.out.println(x +...

Spring学习笔记-03.Bean的生命周期

Bean的生命周期 在Spring容器中,实例对象都会有三个过程,创建,初始化和消亡。 实现Bean生命周期的方式 @Bean注解指定方法 @Bean(initMethod = "init",destroyMethod = "destroy") public Dog getDog(){ return new Dog(); } InitializingBean和Di...

Spring学习笔记-02.Spring 实体的注入

IOC的使用 @Configuration是入口 在Spring中,在一个类的上面增加@Configuration注解,这个就表示当前为配置类,可以代替xml形式的配置形式。在类中可以定义各种bean的定义,这些定义会被AnnotationConfigApplicationContext容器扫描。 @Configuration public class RzConfig { } ...

Spring学习笔记-01.注入的方法的大纲


一个有效的收拾程序运行残局的方法--ShutdownHook

发现addShutdownHook 在阅读QMQ的源码的时候,在Server端启动的时候,注册了一个shutdown的代码,具体的代码如下: Runtime.getRuntime().addShutdownHook(new Thread(wrapper::destroy)); addShutdownHook作用 addShutdownHook方法可以添加一个指定的线程来在Java程...

作者:付威

真正的热爱是不图回报

推广信息

付威星球 知识星球
付威公众号 公众号

信息

推荐博客

如需添加到列表,请邮件到laofu_online@163.com