
Java笔记
文章平均质量分 86
gnocuohz
读万卷书行万里路
展开
-
Tomcat NioEndpoint.Poller和Netty NioEventLoop OP_READ实现对比
一、Tomcat NioEndpoint.PollerNioEndpoint.Poller#run while(true) 处理监听到的感兴趣事件(SelectionKey#interestOps(int))NioEndpoint.Poller#processKey 迭代处理发生的事件2.1 unreg(sk, attachment, sk.readyOps()); 取消注册 sock...原创 2020-03-26 23:08:51 · 368 阅读 · 0 评论 -
响应式编程学习
Reactor一、概念响应式宣言We want systems that are Responsive, Resilient, Elastic and Message Driven.四个关键字:Responsive:即时响应性,系统尽可能及时响应。Resilient:回弹性,系统在出现故障时保持响应。通过复制,包含,隔离和委派来实现弹性。故障包含在每个组件中,使组件彼此隔离,从而确保...原创 2019-12-29 14:46:02 · 473 阅读 · 0 评论 -
RocketMQ延迟消息
一、Producer 延迟消息发送Message#setDelayTimeLevelpublic void setDelayTimeLevel(int level) { this.putProperty(MessageConst.PROPERTY_DELAY_TIME_LEVEL, String.valueOf(level));}二、Broker 保存消息CommitLog#p...原创 2019-11-17 20:28:25 · 957 阅读 · 0 评论 -
Socket 和 SocketChannel 的 FileDescriptor
SocketImpl 和 SocketChannelImpl 都持有了 FileDescriptor,抽空看了一下底层有没有差别,发现其实是没有区别的。以 Windows 为例最终都调用了 winsock2.h 的 WINSOCK_API_LINKAGE SOCKET WSAAPI accept(SOCKET s,struct sockaddr *addr,int *addrlen); 函数。...原创 2019-08-21 19:13:45 · 1316 阅读 · 0 评论 -
桥方法和注解
关于桥方法的定义见 https://docs.oracle.com/javase/specs/jls/se7/html/jls-15.html#jls-15.12.4.5在阅读一些框架时经常会看到调用org.springframework.core.BridgeMethodResolver#findBridgedMethod获取源方法。以前没有关注到这个点,最近自己在postProcessAft...原创 2019-06-19 20:34:08 · 767 阅读 · 0 评论 -
Spring AbstractApplicationContext#refresh初始化过程
ContextLoaderListener.contextInitialized()ContextLoader.initWebApplicationContext()configureAndRefreshWebApplicationContext()AbstractApplicationContext.refresh()obtainFreshBeanFactory()AbstractRe...原创 2019-05-16 21:45:09 · 480 阅读 · 0 评论 -
从CompletableFuture学习Dubbo 2.7.x 全链路异步
CompletableFuture<String> objectCompletableFuture = CompletableFuture.supplyAsync(() -> { try { Thread.sleep(2000L); } catch (InterruptedException e)...原创 2019-04-25 21:25:03 · 1481 阅读 · 2 评论 -
SocketOutputStream和SocketChannel write方法的区别和底层实现
Java直接内存原理提到了SocketChannel#write的实现原理。通过IOUtil#write将java堆内存拷贝到了直接内存,然后再把地址传给了I/O函数。那么 BIO 是怎么实现往socket里面写数据的呢?BIOSocket#getOutputStream()获得SocketOutputStream三个write方法最后都会调用native方法SocketOutputSt...原创 2019-04-04 20:37:35 · 3021 阅读 · 0 评论 -
RocketMQ消息存储学习
Linux I/O首先简单学习一下Linux I/O虚拟文件系统(VFS)Linux内核在底层文件系统接口上建立的一个抽象层,该抽象层能够支持各种不同文件系统。RocketMQ存储架构图图片来自Apache RocketMQ 中国开发者钉钉群陈厚道老师的PPT[1]《Linux内核设计与实现》...原创 2019-03-19 23:33:50 · 614 阅读 · 0 评论 -
Java直接内存原理
直接内存https://www.ibm.com/developerworks/library/j-nativememory-linux/index.html原创 2019-02-23 15:39:27 · 9602 阅读 · 2 评论 -
HttpServletRequest.getParameter()源码分析
HttpServletRequest.getParameter(); debug看到HttpServletRequest这个类的实例其实是RequestFacade。 到tomcat源码中可以看到该类。 RequestFacade外观模式实现,包装了Request。 RequestFacade.getParameter(String name),该方法调用了Request的方法。 ...原创 2018-08-28 20:51:49 · 5784 阅读 · 3 评论 -
进程与线程的故事
早期计算机和现代的普通计算器是类似的,只有输入和输出的功能。输入一个指令,计算机计算后得出结果。显然每次输入一个指令得出结果是低效的,所以批处理系统诞生了。批操作系统可以把一系列的指令集保存在存储介质中,在执行任务是读取指令集然后运行得到结果。显然批处理系统一次只能运行一个任务,在读取存储介质中的数据时,CPU是空闲的。所以进程诞生了,用一个进程来执行一个任务。这样就可以在批操作系统上实现多...原创 2018-08-27 23:42:00 · 449 阅读 · 0 评论 -
Spring实例化时各种初始化方法执行顺序
带序号的步骤来自Spring实战(第4版),红字为补充部分。1.Spring对bean进行实例化;Constructor构造方法2.Spring将值和bean的引用注入到bean对应的属性中;3.如果bean实现了BeanNameAware接口,Spring将bean的ID传递给setBean-Name()方法;4.如果bean实现了BeanFactoryAware接口,Sprin...原创 2018-08-15 19:26:46 · 5392 阅读 · 0 评论 -
Java 多线程NIO
IO模型1. 阻塞IO如果数据没有准备就绪,就一直等待,直到数据准备就绪;整个进程会被阻塞。2. 非阻塞IO需不断询问内核是否已经准备好数据,非阻塞虽然不用等待但是一直占用CPU。3. 多路复用IO NIO多路复用IO,会有一个线程不断地去轮询多个socket的状态,当socket有读写事件的时候才会调用IO读写操作。用一个线程管理多个socket,是通过selector.select(...原创 2018-07-04 21:12:12 · 8212 阅读 · 0 评论