面试宝典

Java程序员必备的一些流程图【spring运行流程、dubbo运行图等】干活满满

前言:整理了一些Java基础流程图/架构图,做一下笔记,大家一起学习。1.spring的生命周期Spring作为当前Java最流行、最强大的轻量级容器框架,了解熟悉spring的生命周期非常有必要;首先容器启动后,对bean进行初始化按照bean的定义,注入属性检测该对象是否实现了xxxAware接口,并将相关的xxxAware实例注入给bean,如BeanNameAware等以上步骤,bean对

Spring Bean生命周期为:容器启动初始化bean、按定义注入属性、注入xxxAware、BeanPostProcessor前置处理、执行postConstruct/afterPropertiesSet/init-method、后置处理、容器关闭时回调destroy。线程池按核心线程、任务队列、最大线程、拒绝策略的顺序处理任务,JDK提供AbortPolicy、DiscardPolicy、DiscardOldestPolicy、CallerRunsPolicy四种拒绝策略。

  • Bean初始化可通过BeanPostProcessor的前置后置方法扩展自定义逻辑
  • TCP四次挥手客户端最后进入TIME_WAIT,等待2MSL再进入CLOSED
  • 线程池先满核心线程,再入队,再开非核心线程,最后走拒绝策略
  • CallerRunsPolicy把任务交回调用者线程,AbortPolicy默认直接抛异常
  • 堆大小由-Xms和-Xmx控制,新生代大小通过-Xmn参数指定

前言:

整理了一些Java基础流程图/架构图,做一下笔记,大家一起学习。

1.spring的生命周期

Spring作为当前Java最流行、最强大的轻量级容器框架,了解熟悉spring的生命周期非常有必要;
7cbcdd17dda293faba98223e3e2ec656.png

  • 首先容器启动后,对bean进行初始化

  • 按照bean的定义,注入属性

  • 检测该对象是否实现了xxxAware接口,并将相关的xxxAware实例注入给bean,如BeanNameAware等

  • 以上步骤,bean对象已正确构造,通过实现BeanPostProcessor接口,可以再进行一些自定义方法处理。
    如:postProcessBeforeInitialzation。

  • BeanPostProcessor的前置处理完成后,可以实现postConstruct,afterPropertiesSet,init-method等方法,
    增加我们自定义的逻辑,

  • 通过实现BeanPostProcessor接口,进行postProcessAfterInitialzation后置处理

  • 接着Bean准备好被使用啦。

  • 容器关闭后,如果Bean实现了DisposableBean接口,则会回调该接口的destroy()方法

  • 通过给destroy-method指定函数,就可以在bean销毁前执行指定的逻

2.TCP三次握手,四次挥手

tcp的三次握手四次挥手是每个程序员都应该熟悉的。
0ddc11ce94eacb5a452333be80440519.png

三次握手:

  • 第一次握手(SYN=1, seq=x),发送完毕后,客户端进入 SYN_SEND 状态

  • 第二次握手(SYN=1, ACK=1, seq=y, ACKnum=x+1), 发送完毕后,服务器端进入 SYN_RCVD 状态。

  • 第三次握手(ACK=1,ACKnum=y+1),发送完毕后,客户端进入 ESTABLISHED 状态,当服务器端接收到这个包时,也进入 ESTABLISHED 状态,TCP 握手,即可以开始数据传输。

四次挥手:

  • 第一次挥手(FIN=1,seq=a),发送完毕后,客户端进入 FIN_WAIT_1 状态

  • 第二次挥手(ACK=1,ACKnum=a+1),发送完毕后,服务器端进入 CLOSE_WAIT 状态,客户端接收到这个确认包之后,进入 FIN_WAIT_2 状态

  • 第三次挥手(FIN=1,seq=b),发送完毕后,服务器端进入 LAST_ACK 状态,等待来自客户端的最后一个ACK。

  • 第四次挥手(ACK=1,ACKnum=b+1),客户端接收到来自服务器端的关闭请求,发送一个确认包,并进入 TIME_WAIT状态,等待了某个固定时间(两个最大段生命周期,2MSL,2 Maximum Segment Lifetime)之后,没有收到服务器端的 ACK ,认为服务器端已经正常关闭连接,于是自己也关闭连接,进入 CLOSED 状态。服务器端接收到这个确认包之后,关闭连接,进入 CLOSED 状态。

3.线程池执行流程图

线程池:一种线程使用模式。线程过多会带来调度开销,进而影响缓存局部

原创不易,完成人机校验,阅读全文

常见问题

线程池提交任务后按什么顺序处理?

先判断核心线程是否已满,未满则创建核心线程执行;满了进任务队列workQueue排队;队列也满则创建非核心线程;线程数达到maximumPoolSize后对新任务执行拒绝策略。

TCP第三次握手后双方进入什么状态?

第三次握手客户端发送ACK=1的确认包后进入ESTABLISHED状态,服务器端接收到该包后也进入ESTABLISHED状态,TCP握手完成,双方开始数据传输。

相关推荐