【直播笔记】22年最新【面试题】TCPIP和NIO

【直播笔记】22年最新【面试题】TCPIP和NIO,第1张

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调用内核,刷写数据。

OSI

程序: 应用层,会话层,表示层
内核: 传输控制层,网络层,链路层,物理层

其实网络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就会有个店

BIO

java里每一个连接都有一个线程
有两个阻塞。






BIO: 等待数据,阻塞,每个线程对应一个socket,浪费资源,
cpu: 缓存,保护,恢复,

NIO: 可能会返回空,掉一次会立即返回,一个线程遍历各个连接。

NIO: nonblock

N: java nio new
linux nonblock 非阻塞,一个线程可以处理多个连接

弊端: 一万个连接在一个线程里,while循环的方式, 循环一次代价O(10000),成本—一万次的尝试去调用内核的读取,O(1)有数据.9999调用是浪费的。浪费的是系统调用。用户态–》内核态
于是就有了多路复用器

多路复用器

减少了无用的系统调用次数。第一代: select,poll
select和poll的区别在于存储socket的数据结构的差异 一个是数组 一个是链表
epoll也属于多路复用器,是调优版本

IO模型:异步,同步

异步io模型: 内核级线程。

app面对 队列读取。

man查看系统调用 总结 1.BIO模型

每一条路对应一个线程

2.NIO模型

3.多路复用器 select poll

跑一次有意义的。
与内核交互,问内核的socket的状态
然后针对这些状态读取数据

4. 多路复用器 epoll

给内核开辟一个空间,准备一个记事本。
线程中每来一个连接(内核的socket的状态),将这个连接记录到该空间里。

kafka使用多线程如何保证分区有序

kafka分区有序,而且批次提交。
redix单线程处理一堆连接的数据,每个连接里的数据是能保证有序的

但是kafka是多线程处理所有连接的消息,io模型应该是基于epoll的方式。

都是IO线程,一堆的reactor。

多线程处理 channel中的数据,可能会导致数据乱序


静音 *** 作
当一个客户端连接 向socket channel发送一个数据后,会静音。在所有的客户端连接发来的数据 一轮处理完之后,再处理下一个。

在性能方面:
因为是多任务的情况下,每次处理的每个任务都是一样的。

03:10:00

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/886868.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-14
下一篇 2022-05-14

发表评论

登录后才能评论

评论列表(0条)

保存