美文网首页
java面试题(81-90)

java面试题(81-90)

作者: 程序猿小小白 | 来源:发表于2019-10-11 15:56 被阅读0次

81.SpringMvc里面拦截器是怎么写的

        有两种写法,一种是实现HandlerInterceptor接口,另外一种是继承适配器类,,接着在接口方法当中,实现处理逻辑;然后在SpringMvc的配置文件中配置拦截器即可

82.@RequestMapping注解用在类上面有什么作用?

        是一个用来处理请求地址映射的注解,可用于类或方法上。用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径。

83.如果在拦截请求中,我想拦截get方式提交的方法,怎么配置?

        可以在@RequestMapping注解里面加上method=RequestMethod.GET。

84.当一个方法向AJAX返回特殊对象,譬如Object,List等,需要做什么处理?

        要加上@ResponseBody注解。

85.左旋和右旋怎么实现,过程是怎样的

        左旋把右子树里的一个节点移动到了左子树,右旋把左子树里的一个节点移动到了右子树。

86.TreeMap是用的哪种类型的二叉树的

        红黑树是一颗二叉树,它具体二叉树所有的特性。同时红黑树更是一颗自平衡的排序二叉树。

        红黑树的规则:

        1、每个节点都只能是红色或者黑色

        2、根节点是黑色

        3、每个叶节点(NIL节点,空节点)是黑色的。

        4、如果一个结点是红的,则它两个子节点都是黑的。也就是说在一条路径上不能出现相邻的两个红色结点。

        5、从任一节点到其每个叶子的所有路径都包含相同数目的黑色节点。

87.Tcp三次握手和四次挥手

        三次握手:

        (1)TCP服务器进程先创建传输控制块TCB,时刻准备接受客户进程的连接请求,此时服务器就进入了LISTEN(监听)状态;

        (2)TCP客户进程也是先创建传输控制块TCB,然后向服务器发出连接请求报文,这是报文首部中的同部位SYN=1,同时选择一个初始序列号 seq=x ,此时,TCP客户端进程进入了 SYN-SENT(同步已发送状态)状态。TCP规定,SYN报文段(SYN=1的报文段)不能携带数据,但需要消耗掉一个序号。

        (3)TCP服务器收到请求报文后,如果同意连接,则发出确认报文。确认报文中应该 ACK=1,SYN=1,确认号是ack=x+1,同时也要为自己初始化一个序列号 seq=y,此时,TCP服务器进程进入了SYN-RCVD(同步收到)状态。这个报文也不能携带数据,但是同样要消耗一个序号。

        (4)TCP客户进程收到确认后,还要向服务器给出确认。确认报文的ACK=1,ack=y+1,自己的序列号seq=x+1,此时,TCP连接建立,客户端进入ESTABLISHED(已建立连接)状态。TCP规定,ACK报文段可以携带数据,但是如果不携带数据则不消耗序号。最后一次确认主要防止已经失效的连接请求报文突然又传送到了服务器,从而产生错误。

        (5)当服务器收到客户端的确认后也进入ESTABLISHED状态,此后双方就可以开始通信了。

        四次挥手:

        1.客户端进程发出连接释放报文,并且停止发送数据。释放数据报文首部,FIN=1,其序列号为seq=u(等于前面已经传送过来的数据的最后一个字节的序号加1),此时,客户端进入FIN-WAIT-1(终止等待1)状态。 TCP规定,FIN报文段即使不携带数据,也要消耗一个序号。

        2.服务器收到连接释放报文,发出确认报文,ACK=1,ack=u+1,并且带上自己的序列号seq=v,此时,服务端就进入了CLOSE-WAIT(关闭等待)状态。TCP服务器通知高层的应用进程,客户端向服务器的方向就释放了,这时候处于半关闭状态,即客户端已经没有数据要发送了,但是服务器若发送数据,客户端依然要接受。这个状态还要持续一段时间,也就是整个CLOSE-WAIT状态持续的时间。

        3.客户端收到服务器的确认请求后,此时,客户端就进入FIN-WAIT-2(终止等待2)状态,等待服务器发送连接释放报文(在这之前还需要接受服务器发送的最后的数据)。

        4.服务器将最后的数据发送完毕后,就向客户端发送连接释放报文,FIN=1,ack=u+1,由于在半关闭状态,服务器很可能又发送了一些数据,假定此时的序列号为seq=w,此时,服务器就进入了LAST-ACK(最后确认)状态,等待客户端的确认。

        5.客户端收到服务器的连接释放报文后,必须发出确认,ACK=1,ack=w+1,而自己的序列号是seq=u+1,此时,客户端就进入了TIME-WAIT(时间等待)状态。注意此时TCP连接还没有释放,必须经过2∗ ∗*MSL(最长报文段寿命)的时间后,当客户端撤销相应的TCB后,才进入CLOSED状态。这样做主要是为了第一,保证客户端发送的最后一个ACK报文能够到达服务器,第二,防止类似与“三次握手”中提到了的“已经失效的连接请求报文段”出现在本连接中

        6.服务器只要收到了客户端发出的确认,立即进入CLOSED状态。同样,撤销TCB后,就结束了这次的TCP连接。可以看到,服务器结束TCP连接的时间要比客户端早一些。

88.TCP与UDP区别总结

        1、TCP面向连接;UDP是无连接的,即发送数据之前不需要建立连接

        2、TCP提供可靠的服务。也就是说,通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达;UDP尽最大努力交付,即不保证可靠交付

        3、TCP面向字节流,实际上是TCP把数据看成一连串无结构的字节流;UDP是面向报文的,UDP没有拥塞控制,因此网络出现拥塞不会使源主机的发送速率降低(对实时应用很有用,如IP电话,实时视频会议等)

        4、每一条TCP连接只能是点到点的;UDP支持一对一,一对多,多对一和多对多的交互通信

        5、TCP首部开销20字节;UDP的首部开销小,只有8个字节 6、TCP的逻辑通信信道是全双工的可靠信道,UDP则是不可靠信道

89.线程状态的转化以及进程与线程的区别?

        状态转换:

        1.新建状态(New): 当用new操作符创建一个线程时, 例如new Thread(r),线程还没有开始运行,此时线程处在新建状态。 当一个线程处于新生状态时,程序还没有开始运行线程中的代码

        2.就绪状态(Runnable) 一个新创建的线程并不自动开始运行,要执行线程,必须调用线程的start()方法。当线程对象调用start()方法即启动了线程,start()方法创建线程运行的系统资源,并调度线程运行run()方法。当start()方法返回后,线程就处于就绪状态。 处于就绪状态的线程并不一定立即运行run()方法,线程还必须同其他线程竞争CPU时间,只有获得CPU时间才可以运行线程。因为在单CPU的计算机系统中,不可能同时运行多个线程,一个时刻仅有一个线程处于运行状态。因此此时可能有多个线程处于就绪状态。对多个处于就绪状态的线程是由Java运行时系统的线程调度程序(thread scheduler)来调度的。

        3.运行状态(Running) 当线程获得CPU时间后,它才进入运行状态,真正开始执行run()方法.

        4. 阻塞状态(Blocked) 线程运行过程中,可能由于各种原因进入阻塞状态:

        1>线程通过调用sleep方法进入睡眠状态;

        2>线程调用一个在I/O上被阻塞的操作,即该操作在输入输出操作完成之前不会返回到它的调用者;

        3>线程试图得到一个锁,而该锁正被其他线程持有;

        4>线程在等待某个触发条件; 所谓阻塞状态是正在运行的线程没有运行结束,暂时让出CPU,这时其他处于就绪状态的线程就可以获得CPU时间,进入运行状态。

        5. 死亡状态(Dead) 有两个原因会导致线程死亡:

        1) run方法正常退出而自然死亡,

        2) 一个未捕获的异常终止了run方法而使线程猝死。 为了确定线程在当前是否存活着(就是要么是可运行的,要么是被阻塞了),需要使用isAlive方法。如果是可运行或被阻塞,这个方法返回true; 如果线程仍旧是new状态且不是可运行的, 或者线程死亡了,则返回false.

90.Tcp的五层网络结构及其各自的功能

        ⑴物理层:物理层的任务就是透明地传送比特流,确定连接电缆插头的定义及连接法。例如:中继器,集线器,双绞线

        ⑵数据链路层: 数据链路层的任务是在两个相邻结点间的线路上无差错地传送以帧(frame)为单位的数据。每一帧包括数据和必要的控制信息。例如:网桥,网卡

        ⑶网络层:网络层的任务就是要选择合适的路由,使发送站的运输层所传下来的分组能够正确无误地按照地址找到目的站,并交付给目的站的运输层。例如:路由器,三层交换机

        ⑷运输层:运输层的任务是向上一层的进行通信的两个进程之间提供一个可靠的端到端服务,使它们看不见运输层以下的数据通信的细节。例如:四层交换机

        ⑸应用层:应用层直接为用户的应用进程提供服务。

相关文章

网友评论

      本文标题:java面试题(81-90)

      本文链接:https://www.haomeiwen.com/subject/ccatmctx.html