Java IO
基于UDP协议实现可靠的数据传输?
由于reliable要求在接收端能够恢复数据包的顺序,故发送端每个数据包都需要有sequence number。现在讨论一下反馈机制:
- Block/bit map ACK: 发送端发送一批数据包,例如32个,编号0~~31。接收端发回的ACK中用32 bits的bit map表示收到了那些数据包,发送端再一次性重发所有没有被收到的数据包。该方法能够更加充分地利用带宽,在发送端一次性传输更多的数据。但缺点是在发送端接收端都需要更多的buffer,暂存正在传输的所有数据。
- ACK last packet: 发送端可以在发送最后一个数据包要求接收端反馈ACK,并重发丢失的数据包。这样做的好处是可以减少由ACK造成的data overhead,但需要buffer暂存数据。
网络字节序(network byte order)和主机字节序(host byte order)
- 所谓大字节序(big endian),便是指其“最高有效位(most significant byte)”落在低地址上的存储方式。例如像地址a写入0x0A0B0C0D之后,在内存中的数据便是:
- 而对于小字节序(little endian)来说就正好相反了,它把“最低有效位(least significant byte)”放在低地址上。例如:
- 在网络传输中,采用big-endian序,对于0x0A0B0C0D ,传输顺序就是0A 0B 0C 0D
Nagle's algorithm
再次谈谈TCP的Nagle算法与TCP_CORK选项例子一
简历里写了写过一些多线程的程序,或者是看过一些并发领域的书,这种情况下通常我会问多线程中的一些更具体的知识点:线程池实现的细节、降低高并发程序锁竞争的方法等;
例子二
简历里写了写过一些网络通信程序,这种情况下通常我会问Blocking-IO,NonBlocking-IO、AIO的不同;连接池、短连接、长连接、连接复用的不同;C10K的难度等;
例子三
网站不能正常访问,如何定位root cause?
1 Java NIO, Socket, and Networking Interview Questions Answers
2 Core Java Interview Questions: NIO Channels API
3 Which are the frequently asked interview questions for Java Engineers?