08 2018 档案
摘要:TCP的长连接理论上只要连接建立后,就会一直保持着。但有时有一些防火墙之类的软件会自动检查主机的网络连接状况,比如说如果发现某个连接在几分钟之内都没有数据通讯,则会关闭这个连接。有时客户端与服务器需要实时的检测连接状态,就是需要知道对方是否还在线,如果对方不在线了,需要做相应的处理,这是就需要通过发
阅读全文
摘要:1 说明 java断言assert是jdk1.4引入的。 jvm断言默认是关闭的。 断言可以局部开启的,如:父类禁止断言,而子类开启断言,所以一般说“断言不具有继承性”。 断言只适用复杂的调式过程。 断言一般用于程序执行结构的判断,千万不要让断言处理业务流程。 2 判断eclipse是否开启了断言
阅读全文
摘要:1. 线程池可以节省创建多个线程带来的开销问题。 2. 线程池的参数如下: Java代码 public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, Block
阅读全文
摘要:最近看netty源码碰到ChannelOption.SO_BACKLOG参数,通过跟踪代码发现其实是用于设置底层tcp socket的backlog参数,由于不了解这个参数,有必要彻底的理解一下。 底层 backlog参数主要用于底层方法int listen(int sockfd, int back
阅读全文
摘要:在谢希仁著《计算机网络》书中同时举了一个例子,如下: “已失效的连接请求报文段”的产生在这样一种情况下:client发出的第一个连接请求报文段并没有丢失,而是在某个网络结点长时间的滞留了,以致延误到连接释放以后的某个时间才到达server。本来这是一个早已失效的报文段。但server收到此失效的连接
阅读全文
摘要:文章目录 1. 概述 一个 Buffer ,本质上是内存中的一块,我们可以将数据写入这块内存,之后从这块内存获取数据。通过将这块内存封装成 NIO Buffer 对象,并提供了一组常用的方法,方便我们对该块内存的读写。 Buffer 在 java.nio 包中实现,被定义成抽象类,从而实现一组常用的
阅读全文
摘要:对于有Java开发经验的朋友都知道,Java中不需要手动的申请和释放内存,JVM会自动进行垃圾回收;而使用的内存是由JVM控制的。 那么,什么时机会进行垃圾回收,如何避免过度频繁的垃圾回收?如果JVM给的内存不够用,怎么办? 此时,堆外内存登场!利用堆外内存,不仅可以随意操控内存,还能提高网络交互的
阅读全文
摘要:在默认情况下,Buffer.mark()并没有什么用处,既不会影响Buffer的遍历,也不会影响Buffer的位置统计函数,如remaining()函数,能影响这些操作的行为只有position()。 位置统计示例代码如下: 位置遍历的代码如下: 从上面的两端代码可以看出,无论是遍历还是位置统计都不
阅读全文
摘要:故事发生在10月份的一次面试经历中,本来我不想说出来丢人显眼,但是为了警醒自己和告诫后人,我决定写成博文发出来。因为在面试过程中,我讲在2009年写过QQ农场助手,在这期间深入学习了HTTP协议,而且在2010-05-18写了博文:HTTP协议及其POST与GET操作差异 & C#中如何使用POST
阅读全文
摘要:简述 本文主要介绍一下jdk1.6版本中的NIO Selector空轮询BUG,描述一下BUG的现象及原因,以及Netty中如何巧妙的规避了这个bug。 为什么要写这篇文章,说来惭愧,很久以前面试官问我,知道jdk空轮询问题吗,为什么会有这个问题,如何解决这个问题?我没答上来。。 Selector空
阅读全文
摘要:对于FileInputStream/FileOutputStream/RandomAccessFile,使用handle来表示底层的文件句柄 对于ServerSocket/Socket,使用fd来表示底层的文件句柄 FileDescriptor的fd和handle的无效值是-1
阅读全文