032 Java再次总结

1.大纲

  多线程怎么用的,线程池,事务,传播机制与隔离级别,反射,泛型,数据库引擎的区别,数据库merge,窗口函数,fastJson,JVM调优,GC钩子,Linux的awk,shell,HashMap在1.7与1.8的结构区别,quartz串行调度怎么控制,集群参数,kafka怎么不第二次消费,单点登录原理,AOP,IOC,内存刷新,ZK,BlockingQueue,网关,mybatis,storm怎么动态实时,RPC,ES,RDD,boot,redis,row_id,操作系统,数据结构,算法,网络。

一:多线程

1.优缺点

  优点:

  (1)多线程技术使程序的响应速度更快

  (2)当前没有进行处理的任务可以将处理器时间让给其它任务

  (3)占用大量处理时间的任务可以定期将处理器时间让给其它任务

  (4)可以随时停止任务

  (5)可以分别设置各个任务的优先级以及优化性能

  缺点:

  (1)等候使用共享资源时造成程序的运行速度变慢

  (2)对线程进行管理要求额外的cpu开销

  (3)可能出现线程死锁情况。即较长时间的等待或资源竞争以及死锁等症状。

2. start()方法和run()方法简介和区别?

  start()方法:

  1)用start方法来启动线程,真正实现了多线程运行,这时无需等待run方法体代码执行完毕而直接继续执行下面的代码。

  2)通过调用Thread类的start()方法来启动一个线程,这时此线程处于就绪(可运行)状态,并没有运行,一旦得到CPU时间片,就开始执行run()方法。

  run()方法:

  1)run()方法只是类的一个普通方法而已,如果直接调用Run方法,程序中依然只有主线程这一个线程,其程序执行路径还是只有一条。

  总结:

  1)调用start方法方可启动线程,

  2)而run方法只是thread的一个普通方法调用,还是在主线程里执行。

  3)把需要并行处理的代码放在run()方法中,start()方法启动线程将自动调用run()方法,这是由jvm的内存机制规定的。

  4)并且run()方法必须是public访问权限,返回值类型为void.。

3.Runnable接口和Callable接口的相同点和不同点?

  

4.

3.三次握手

  

  第一次

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

  第二次

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

  第三次

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

  首先非常明确的是两次握手是最基本的。第一次握手,客户端发了个连接请求消息到服务端,服务端收到信息后知道自己与客户端是可以连接成功的,但此时客户端并不知道服务端是否已经接收到了它的请求,所以服务端接收到消息后的应答,客户端得到服务端的反馈后,才确定自己与服务端是可以连接上的,这就是第二次握手。

  客户端只有确定了自己能与服务端连接上才能开始发数据。所以两次握手肯定是最基本的。

  看到这里,你或许会问,那么为什么需要第三次握手呢?我们来看一下,假设一下如果没有第三次握手,而是两次握手后我们就认为连接成功了,那么会发生什么?第三次握手是为了防止已经失效的连接请求报文段突然又传到服务端,因而产生错误。

  譬如发起请求遇到类似这样的情况:客户端发出去的第一个连接请求由于某些原因在网络节点中滞留了导致延迟,直到连接释放的某个时间点才到达服务端,这是一个早已失效的报文,但是此时服务端仍然认为这是客户端的建立连接请求第一次握手,于是服务端回应了客户端,第二次握手。

  如果只有两次握手,那么到这里,连接就建立了,但是此时客户端并没有任何数据要发送,而服务端还在傻傻的等候佳音,造成很大的资源浪费。所以需要第三次握手,只有客户端再次回应一下,就可以避免这种情况。
 
2.quartz怎么实现串行的任务调度
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
原文地址:https://www.cnblogs.com/juncaoit/p/10577867.html