腾讯JAVA后端秋招面试总结

腾讯秋招的面经,岗位是 java 后端开发。

说一下BIO、NIO和AIO

答:
  • BIO是阻塞IO。在上一个线程的任务执行完之前,该线程必须阻塞等待上一个线程执行完毕。

  • NIO是非阻塞IO。一旦是响应事件发生了,该线程就会将对应的响应事件交给对应的事件处理器进行处理。

  • AIO是异步IO。主线程接收到请求后,可以分发给其他线程进行异步处理,主线程继续接收其他请求。

补充:

BIO(Blocking IO)、NIO(Non-Blocking IO)和AIO(Asynchronous IO)是Java中常用的IO模式。它们之间的主要区别在于IO的处理方式和效率。

BIO是同步阻塞IO,在进行IO操作时,必须等待IO操作完成后才能进行下一步操作,这时线程会被阻塞。BIO适用于连接数比较小且固定的架构,由于线程阻塞等待IO操作,所以并发处理能力不强。

NIO是同步非阻塞IO,可以支持多个连接同时进行读写操作,因此可以用较少的线程来处理大量的连接。NIO通过Selector来监听多个Channel的状态,当Channel中有数据可读或可写时,Selector会通知程序进行读写操作。NIO适用于连接数多且连接时间较短的场景。

AIO是异步非阻塞IO,与NIO不同的是,AIO不需要用户线程等待IO操作完成,而是由操作系统来完成IO操作,操作系统完成IO操作后会通知用户线程处理。AIO适用于连接数较多且连接时间较长的场景,如高性能网络服务器等。

你说一下NIO是如何实现同步非阻塞的?主线程是只有一个嘛?

<

你可能感兴趣的:(面试汇总,java,面试,后端,设计模式)