摘要:
0. 安装Wireshark,但是默认情况下,Wireshark无法捕获127.0.0.1的报文 解决方案:安装npcap,替换默认的winpacp,重新启动Wireshark,就可以看到一个名字中含有Loopback的接口,针对它来抓包就行了 1. 用telnet向未被监听的9090端口发送连接请 阅读全文
摘要:
本文会尝试介绍Java中BIO与NIO的范例与原理 使用的模型非常简单:服务器--客户端模型,服务器会将客户端发送的字符串原样发回来。也就是所谓的echo server。 BIO 也就是所谓的Socket通信,直接上代码了 逻辑不算复杂,先创建一个ServerSocket对象,然后调用accept方 阅读全文
摘要:
缓冲IO 在介绍缓冲IO之前需要先了解一下常用的机械硬盘的原理与特点 一个机械硬盘中装有多个盘片 每个盘片上有多个同心圆(磁道) 每个同心圆又由多个弧(扇区)组成,每个弧上都记录了等量的数据(比方说512byte) 如果发起一个随机读写请求,磁头需要先找到对应的磁道,然后等待对应的扇区旋转到磁头正下 阅读全文
摘要:
如上文所说,select/poll/epoll本质上都是同步阻塞的,但是由于实现了IO多路复用,在处理聊天室这种需要处理大量长连接但是每个连接上数据事件较少的场景时,相比最原始的为每个连接新开一个线程的服务模式要高效许多。 但是我们也经常听到一个说法:select效率低下,在工程实践中从不使用sel 阅读全文
摘要:
关于IO,同步/异步/阻塞/非阻塞,这几个关键词是经常听到的,譬如: “Java oio是阻塞的,nio是非阻塞的” “NodeJS的IO是异步的” 但是这些东西听多了就容易迷糊,比方说同步是否就是阻塞,异步是否就是非阻塞呢? 先给出结论: 1. 异步/同步与阻塞/非阻塞之间没有必然的联系 2. 同 阅读全文
摘要:
参考文献 Doug Lea的 <Scalable IO in Java> Java NIO trick and trap IO - 同步,异步,阻塞,非阻塞 (亡羊补牢篇) 网络编程释疑之:同步,异步,阻塞,非阻塞 阅读全文
摘要:
1. 双亲委派模型 JVM内置了三个ClassLoader Bootstrap ClassLoader:负责加载%JAVA_HOME%/lib目录中的class(比方说rt.jar里的class),这个ClassLoader是JVM底层实现的,我们无法直接操作 Extension ClassLoad 阅读全文
摘要:
Guice是Google开发的一个开源轻量级的依赖注入框架,运行速度快,使用简单。 项目地址:https://github.com/google/guice/ 最新的版本是4.1,本文基于此版本。 0. 什么是依赖注入? 依赖注入(Dependency Injection)是一种思想。 在一般的编程 阅读全文
摘要:
基于版本:Guava 22.0 Wiki:EventBus 0. EventBus简介 提供了发布-订阅模型,可以方便的在EventBus上注册订阅者,发布者可以简单的将事件传递给EventBus,EventBus会自动将事件传递给相关联的订阅者。 支持同步/异步模式。 只能用于线程间通信。 1. 阅读全文
摘要:
基于版本:Guava 22.0 Wiki:New collection types 0. 简介 Guava提供了很多好用的集合工具,比如Multiset和BiMap,本文介绍了这些新集合类型的使用方式与实现原理。 1. Multiset a. 简介 一般的Set会对相同元素去重,而Multiset则 阅读全文