DNS的几种记录
A记录:域名->IP
MX记录:为某个域名指定对应邮件服务器地址
CNAME:为域名指定一个或多个别名
NS记录:为某个域名指定DNS解析服务器
序列化
- 父类实现序列化,子类可以被序列化
- 子类实现接口,父类没有实现,父类属性不能被序列化(数据丢失),子类属性依然可以序列化,不会报错
- 对象属性必须要实现接口,否则报错
- 反序列化时,对于被修改的属性,可能会丢失数据
- 反序列化时,如果serialVersionUID被修改,反序列化会失败
同步和异步
描述的是用户线程与内核的交互方式:
- 同步是指用户线程发起 I/O 请求后需要等待或者轮询内核 I/O 操作完成后才能继续执行;
- 异步是指用户线程发起 I/O 请求后仍继续执行,当内核 I/O 操作完成后会通知用户线程,或者调用用户线程注册的回调函数。
阻塞和非阻塞
描述的是用户线程调用内核 I/O 操作的方式:
- 阻塞是指 I/O 操作需要彻底完成后才返回到用户空间;
- 非阻塞是指 I/O 操作被调用后立即返回给用户一个状态值,无需等到 I/O 操作彻底完成。
一个 I/O 操作其实分成了两个步骤:发起 I/O 请求和实际的 I/O 操作。
阻塞 I/O 和非阻塞 I/O 的区别在于第一步,发起 I/O 请求是否会被阻塞,如果阻塞直到完成那么就是传统的阻塞 I/O ,如果不阻塞,那么就是非阻塞 I/O 。
同步 I/O 和异步 I/O 的区别就在于第二个步骤是否阻塞,如果实际的 I/O 读写阻塞请求进程,那么就是同步 I/O 。
所以,按照阻塞和非阻塞
阻塞 :阻塞 I/O ,I/O多路复用
非阻塞: 非阻塞 I/O 信号驱动 I/O(SIGIO) 异步 I/O(POSIX 的 aio_系列函数)
同步: 阻塞 I/O ,I/O多路复用 ,非阻塞 I/O ,信号驱动 I/O(SIGIO)
异步:异步 I/O(POSIX 的 aio_系列函数)
为什么要存在TIME_WAIT状态:
-
可靠地实现TCP全双工连接的终止
TCP协议在关闭连接的四次挥手中,在主动关闭方发送的最后一个 ack(fin) ,有可能丢失,这时被动方会重新发fin, 如果这时主动方处于 CLOSED 状态 ,就会响应 rst 而不是 ack。所以主动方要处于 TIME_WAIT 状态,而不能是 CLOSED 。
-
允许老的报文段在网络中消失
TCP报文段可能由于路由器异常而“迷路”,在迷途期间,TCP发送端可能因确认超时而重发这个报文,迷途的报文在路由器修复后也会被送到最终目的地,这个原来的迷途报文就称为lost duplicate。在关闭一个TCP连接后,马上又重新建立起一个相同的IP地址和端口之间的TCP连接,后一个连接被称为前一个连接的化身 (incarnation),那么有可能出现这种情况,前一个连接的迷途重复报文在前一个连接终止后出现,从而被误解成从属于新的化身。为了避免这个情 况,TCP不允许处于TIME_WAIT状态的连接启动一个新的化身,因为TIME_WAIT状态持续2MSL,就可以保证当成功建立一个TCP连接的时候,来自连接先前化身的重复报文已经在网络中消逝。