阿里巴巴实习Java面经分享,一面(面试题)

KLQ 2020-04-07 16:11:55 java常见问答 7842

下面给大家分享一个阿里巴巴实习Java面经,注意是一面哦,一起来看看阿里巴巴实习Java面经一面都会问些什么问题吧!

1、先是和你聊下天,问你为什么要做Java

2、项目 socket

3、三次握手流程

第一次握手:建立连接时,客户端发送syn包(seq=j)到服务器,并进入SYN_SENT状态,等待服务器确认;SYN:同步序列编号(Synchronize Sequence Numbers)。

第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(seq=k),即SYN+ACK包,此时服务器进入SYN_RECV状态。

第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED(TCP连接成功)状态,完成三次握手。

4、四次挥手流程

所谓的四次挥手即TCP连接的释放(解除)。连接的释放必须是一方主动释放,另一方被动释放。

首先客户端想要释放连接,向服务器端发送一段TCP报文。

服务器端接收到从客户端发出的TCP报文之后,确认了客户端想要释放连接,随后服务器端结束ESTABLISHED阶段,进入CLOSE-WAIT阶段(半关闭状态)并返回一段TCP报文。

服务器端自从发出ACK确认报文之后,经过CLOSED-WAIT阶段,做好了释放服务器端到客户端方向上的连接准备,再次向客户端发出一段TCP报文。

客户端收到从服务器端发出的TCP报文,确认了服务器端已做好释放连接的准备,结束FIN-WAIT-2阶段,进入TIME-WAIT阶段,并向服务器端发送一段报文。

5、time_wait状态执行什么操作?

6、为什么2msl?(TCP第四次挥手为什么要等待2MSL)

主要是两个原因

(1)为了保证客户端发送的最后一个ACK报文段能够到达服务器。

(2)可以防止已失效的报文段。客户端在发送最后一个ACK之后,再经过经过2MSL,就可以使本链接持续时间内所产生的所有报文段都从网络中消失。从保证在关闭连接后不会有还在网络中滞留的报文段去骚扰服务器。

7、讲一下select IO

8、select、poll、epoll区别是什么?

select,poll,epoll都是IO多路复用的机制。I/O多路复用就通过一种机制,可以监视多个描述符,一旦某个描述符就绪(一般是读就绪或者写就绪),能够通知程序进行相应的读写操作。但select,poll,epoll本质上都是同步I/O,因为他们都需要在读写事件就绪后自己负责进行读写,也就是说这个读写过程是阻塞的,而异步I/O则无需自己负责进行读写,异步I/O的实现会负责把数据从内核拷贝到用户空间.....。

9、什么是阻塞IO、非阻塞IO?

阻塞IO:最传统的一种IO模型,即在读写数据过程中会发生阻塞现象。

非阻塞IO:当用户线程发起一个read操作后,并不需要等待,而是马上就得到了一个结果。如果结果是一个error时,它就知道数据还没有准备好,于是它可以再次发送read操作。一旦内核中的数据准备好了,并且又再次收到了用户线程的请求,那么它马上就将数据拷贝到了用户线程,然后返回。

10、异步IO是什么?

异步IO的概念和同步IO相对。当一个异步过程调用发出后,调用者不能立刻得到结果。实际处理这个调用的部件在完成后,通过状态、通知和回调来通知调用者。

11、String、Stringbuilder、Stringbuffer区别是什么?

运行速度:StringBuilder >StringBuffer >String

线程安全:StringBuilder是线程不安全的,而StringBuffer是线程安全的

String:适用于少量的字符串操作的情况、StringBuilder:适用于单线程下在字符缓冲区进行大量操作的情况、StringBuffer:适用多线程下在字符缓冲区进行大量操作的情况。

12、如何保证Stringbuffer线程安全?

直接通过synchronized 关键字来实现同步操作

public synchronized StringBuffer append(String str) {
        toStringCache = null;
        super.append(str);
        return this;
    }

13、sychronzied还知道java怎么控制并发?

14、sychronized和reentrantlock区别是什么?

15、讲讲红黑树

16、讲讲AOP

更多java面试题面经,可以继续关注本站了解。