1、TCP三次握手等面试题
2、SOCKET通信的面试题
3、TCP状态切换的面试题
4、长连接、短连接、有无状态通信、会话等面试题
5、OIO/BIO/NIO/AIO/DIO等IO模型面试题
6、多路复用器EPOLL的面试题
7、NettyIO框架的常见面试题
8、粘包、拆包、粘包、半包、编解码面试题
9、HttpClient、连接池等面试题
10、redis、nginx、tomcat常见通用面试题
有界数据:有数据,历史,可寻址的数据
网络数据: 无界数据
old IO flush() 空实现,断电会丢数据。但是vi会看见数据?vi和javaAPP会和内核交互。
移动硬盘自带电容,防止突然断电。
NIO
force调用内核,刷写数据。
程序: 应用层,会话层,表示层
内核: 传输控制层,网络层,链路层,物理层
其实网络io是程序自己对着自己系统内核的过程。
传输控制层:TCP/UDP-
TCP:面向连接的可靠的传输控制协议
三次握手:连接就是开辟资源的过程,数据包的交互过程。
都确认自己的输入输出没问题,收到并且开辟资源。
三次握手可以创建一个资源,一个socket
资源创建了状态 ESTABLISHED
资源是个啥? Socket(套接字,插板)
四元组: ip:port + ip:port
是双方的,且在双方是唯一的。
端口号: 0~65535
IPA:0 IPB:80 存在
IPA:0 IPB:90 还可以创建
抓包
三次握手 和 四次分手
P
: 不要缓冲,立刻push
S
:请求连接
S.
:
.
: 有ack就会有个店
java里每一个连接都有一个线程
有两个阻塞。
BIO: 等待数据,阻塞,每个线程对应一个socket,浪费资源,
cpu: 缓存,保护,恢复,
NIO: 可能会返回空,掉一次会立即返回,一个线程遍历各个连接。
NIO: nonblockN: java nio new
linux nonblock 非阻塞,一个线程可以处理多个连接
弊端: 一万个连接在一个线程里,while循环的方式, 循环一次代价O(10000),成本—一万次的尝试去调用内核的读取,O(1)有数据.9999调用是浪费的。浪费的是系统调用。用户态–》内核态
于是就有了多路复用器
减少了无用的系统调用次数。第一代: select,poll
select和poll的区别在于存储socket的数据结构的差异 一个是数组 一个是链表
epoll也属于多路复用器,是调优版本
异步io模型: 内核级线程。
app面对 队列读取。
每一条路对应一个线程
跑一次有意义的。
与内核交互,问内核的socket的状态,
然后针对这些状态读取数据
给内核开辟一个空间,准备一个记事本。
线程中每来一个连接(内核的socket的状态),将这个连接记录到该空间里。
kafka分区有序,而且批次提交。
redix单线程处理一堆连接的数据,每个连接里的数据是能保证有序的
但是kafka是多线程处理所有连接的消息,io模型应该是基于epoll的方式。
都是IO线程,一堆的reactor。
多线程处理 channel中的数据,可能会导致数据乱序
静音 *** 作。
当一个客户端连接 向socket channel发送一个数据后,会静音。在所有的客户端连接发来的数据 一轮处理完之后,再处理下一个。
在性能方面:
因为是多任务的情况下,每次处理的每个任务都是一样的。
03:10:00
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)