【牛客网面经整理】20200829多益面经整理

本文深入解析了BIO和NIO网络模型、Mysql事务处理、TCP三次握手、多线程应用、堆栈区别、session与cookie机制、消息队列原理等核心技术,帮助读者全面理解计算机科学的关键概念。
1.自我介绍
2.项目介绍一下,项目中遇到的一些问题,如何去解决的.

答:

3.聊一聊BIO和NIO.

答:网络模型的基本模型是CS模型,即两个线程之间的通信。服务器端提供IP和监听端口,客户端通过连接操作向服务器端监听的地址发起连接请求,通过三次握手连接,如果连接成功建立,双方就可以通过套接字进行通信。传统的同步阻塞模型开发中,ServerSocket负责绑定IP地址,启动监听端口;Socket负责发起连接操作。连接成功后,双方通过输入和输出流进行同步阻塞式通信。
BIO:采用BIO通信模型的服务器,通常由一个独立的Acceptor线程负责监听客户端的连接,它接收到客户端连接请求之后为每个客户端创建一个新的线程进行链路处理,处理完成后,通过输出流返回应答给客户端,线程销毁。即典型的请求应答通宵模型。主线程负责监听当有新的连接的时候创建一个新的子线程处理任务。
缺点:缺乏弹性伸缩能力,当客户量并发访问增加后,线程数量快速膨胀,系统的性能将急剧下降,随着访问量继续增大,系统最终死掉。

NIO:IO多路复用的好处就在于单个进程可以同时处理多个网络连接的IO。它的基本原理就是不再由应用程序自己监视连接,取而代之的是由内核替应用程序监视文件描述符。以select为例,当用户进程调用了select,那么整个进程会被阻塞,而同时,kernel会监视所有select负责的socket,当任何一个socket中的数据准备好了,select就会返回。这个时候用户进程再调用read操作,将数据从内核拷贝到用户进程。
Reactor模式(反应堆设计模式),就是利用IO复用模型实现的,并且java当中的NIO模型就是这种模型;反应堆设计模式是一种处理并发服务请求,并将请求提交到一个或者多个服务处理程序的事件设计模式。当客户端请求抵达后,服务处理程序使用多路分配策略,由一个非阻塞的线程来接收所有的请求,然后派发这些请求至相关的工作线程进行处理。
NIO的组件:
1、Selector(选择器/多路复用器)。是NIO的核心组件中的一个,用于检查一个或多个NIO Channel(通道)的状态是否处于可读、可写。Selector提供选择已经就绪的任务的能力:Selector会不断检测注册在其上的Channel,如果某个Channel上面发生读或者写事件,这个Channel就处于就绪状态,会被Selector轮询出来,然后做出相应的操作。NIO监听的事件都定义在SelectionKey下:OP_CONNECT(只有SocketChannel会注册该操作,当客户端调用SocketChannel.connect()时,该操作就会就绪);
OP_READ(该操作对客户端和服务端的SocketChannel都有效,当OS的读写缓冲区中有数据可读时,该操作就会就绪);
OP_WRITE(该操作对客户端和服务端的SocketChannel都有效,当OS的写缓冲区中有空闲时间时(大部分时间都有),该操作就绪。一般情况下,不应该注册OP_WRITE事件,因为当注册后,写操作一直是就绪的,这样会导致Selector处理线程会占用整个CPU的资源。所以最佳实践是当确实有数据写入时再注册写事件,并且在写完后马上取消注册);
OP_ACCEPT(收到客户端的连接请求);
2、缓冲区:缓冲区是包在一个对象内的基本数据元素数组。Buffer类相比一个简单数组的优点,是将关于数据的数据内容和信息包含在一个单一的对象中。常用属性(capacity

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值