【Java】Java程序员必备的一些流程图

news2024/11/14 2:05:34

在这里插入图片描述

一、spring的生命周期

Spring作为当前Java最流行、最强大的轻量级容器框架,了解熟悉spring的生命周期非常有必要;
在这里插入图片描述

  • 首先容器启动后,对bean进行初始化
  • 按照bean的定义,注入属性
  • 检测该对象是否实现了xxxAware接口,并将相关的xxxAware实例注入给bean,如BeanNameAware等
  • 以上步骤,bean对象已正确构造,通过实现BeanPostProcessor接口,可以再进行一些自定义方法处理。如:postProcessBeforeInitialzation。
  • BeanPostProcessor的前置处理完成后,可以实现postConstruct,afterPropertiesSet,init-method等方法,
    增加我们自定义的逻辑,
  • 通过实现BeanPostProcessor接口,进行postProcessAfterInitialzation后置处理
  • 接着Bean准备好被使用啦。
  • 容器关闭后,如果Bean实现了DisposableBean接口,则会回调该接口的destroy()方法
  • 通过给destroy-method指定函数,就可以在bean销毁前执行指定的逻

二、TCP三次握手,四次挥手

tcp的三次握手四次挥手是每个程序员都应该熟悉的。
在这里插入图片描述

三次握手:
  • 第一次握手(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),发送完毕后,客户端进入 FINWAIT1 状态
  • 第二次挥手(ACK=1,ACKnum=a+1),发送完毕后,服务器端进入 CLOSEWAIT 状态,客户端接收到这个确认包之后,进入
    FINWAIT_2 状态
  • 第三次挥手(FIN=1,seq=b),发送完毕后,服务器端进入 LAST_ACK 状态,等待来自客户端的最后一个ACK。
  • 第四次挥手(ACK=1,ACKnum=b+1),客户端接收到来自服务器端的关闭请求,发送一个确认包,并进入
    TIME_WAIT状态,等待了某个固定时间(两个最大段生命周期,2MSL,2 Maximum Segment
    Lifetime)之后,没有收到服务器端的 ACK ,认为服务器端已经正常关闭连接,于是自己也关闭连接,进入 CLOSED
    状态。服务器端接收到这个确认包之后,关闭连接,进入 CLOSED 状态。

三、线程池执行流程图

线程池:一种线程使用模式。线程过多会带来调度开销,进而影响缓存局部性和整体性能。而线程池维护着多个线程,等待着监督管理者分配可并发执行的任务,这避免了在处理短时间任务时创建与销毁线程的代价。线程池执行流程是每个开发必备的。
在这里插入图片描述

执行流程
  • 提交一个任务,线程池里存活的核心线程数小于线程数corePoolSize时,线程池会创建一个核心线程去处理提交的任务。
  • 如果线程池核心线程数已满,即线程数已经等于corePoolSize,一个新提交的任务,会被放进任务队列workQueue排队等待执行。
  • 当线程池里面存活的线程数已经等于corePoolSize了,并且任务队列workQueue也满,判断线程数是否达到maximumPoolSize,即最大线程数是否已满,如果没到达,创建一个非核心线程执行提交的任务。
  • 如果当前的线程数达到了maximumPoolSize,还有新的任务过来的话,直接采用拒绝策略处理。
JDK提供了四种拒绝策略处理类
  • AbortPolicy(抛出一个异常,默认的)
  • DiscardPolicy(直接丢弃任务)
  • DiscardOldestPolicy(丢弃队列里最老的任务,将当前这个任务继续提交给线程池)
  • CallerRunsPolicy(交给线程池调用所在的线程进行处理)

四、JVM内存结构

JVM内存结构是Java程序员必须掌握的基础。
在这里插入图片描述

程序计数器(PC 寄存器)

程序计数器是一块较小的内存空间,可以看作当前线程所执行的字节码的行号指示器。在虚拟机的模型里,字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码指令,分支、循环、异常处理、线程恢复等基础功能都需要依赖计数器完成。

Java虚拟机栈
  • 与程序计数器一样,Java虚拟机栈也是线程私有的,它的生命周期与线程相同
  • 每个方法被执行的时候都会创建一个"栈帧",用于存储局部变量表(包括参数)、操作数栈、动态链接、方法出口等信息。每个方法被调用到执行完的过程,就对应着一个栈帧在虚拟机栈中从入栈到出栈的过程。
  • 局部变量表存放各种基本数据类型boolean、byte、char、short等
本地方法栈

与虚拟机栈基本类似,区别在于虚拟机栈为虚拟机执行的java方法服务,而本地方法栈则是为Native方法服务。

Java堆
  • GC堆是java虚拟机所管理的内存中最大的一块内存区域,也是被各个线程共享的内存区域,在JVM启动时创建。
  • 其大小通过-Xms(最小值)和-Xmx(最大值)参数设置,-Xms为JVM启动时申请的最小内存,-Xmx为JVM可申请的最大内存。
  • 由于现在收集器都是采用分代收集算法,堆被划分为新生代和老年代。新生代由S0和S1构成,可通过-Xmn参数来指定新生代的大小。
  • 所有对象实例以及数组都在堆上分配。
  • Class文件中除了有类的版本、字段、方法、接口等描述信息外,还有一项信息是常量池,用于存放编译器生成的各种符号引用,这部分内容将在类加载后放到方法区的运行时常量池中。
方法区
  • 也称”永久代” ,它用于存储虚拟机加载的类信息、常量、静态变量、是各个线程共享的内存区域。可以通过-XX:PermSize 和
    -XX:MaxPermSize 参数限制方法区的大小。
  • 运行时常量池:是方法区的一部分,其中的主要内容来自于JVM对Class的加载。
  • Class文件中除了有类的版本、字段、方法、接口等描述信息外,还有一项信息是常量池,用于存放编译器生成的各种符号引用,这部分内容将在类加载后放到方法区的运行时常量池中。

五、Java内存模型

图片

  • Java的多线程之间是通过共享内存进行通信的,在通信过程中会存在一系列如可见性、原子性、顺序性等问题,而JMM就是围绕着多线程通信以及与其相关的一系列特性而建立的模型。JMM定义了一些语法集,这些语法集映射到Java语言中就是volatile、synchronized等关键字。
  • Java内存模型规定了所有的变量都存储在主内存中,每条线程还有自己的工作内存,线程的工作内存中保存了该线程中是用到的变量的主内存副本拷贝,线程对变量的所有操作都必须在工作内存中进行,而不能直接读写主内存。不同的线程之间也无法直接访问对方工作内存中的变量,线程间变量的传递均需要自己的工作内存和主存之间进行数据同步进行。

六、springMVC执行流程图

图片

  • User向服务器发送request,前端控制Servelt DispatcherServlet捕获;
  • DispatcherServlet对请求URL进行解析,调用HandlerMapping获得该Handler配置的所有相关的对象,最后以HandlerExecutionChain对象的形式返回
  • DispatcherServlet 根据获得的Handler,选择一个合适的HandlerAdapter
  • 提取Request中的模型数据,填充Handler入参,开始执行Handler(Controller)
  • Handler执行完成后,返回一个ModelAndView对象到DispatcherServlet
  • 根据返回的ModelAndView,选择一个适合的ViewResolver
  • ViewResolver 结合Model和View,来渲染视图
  • 将渲染结果返回给客户端。

七、JDBC执行流程

在这里插入图片描述

JDBC执行流程:
  • 连接数据源
  • 为数据库传递查询和更新指令
  • 处理数据库响应并返回的结果

八、spring cloud组件架构

Spring Cloud是一个基于Spring Boot实现的云原生应用开发工具,它为基于JVM的云原生应用开发中涉及的配置管理、服务发现、熔断器、智能路由、微代理、控制总线、分布式会话和集群状态管理等操作提供了一种简单的开发方式。
在这里插入图片描述

  • Eureka 负责服务的注册与发现。
  • Hystrix 负责监控服务之间的调用情况,起到熔断,降级作用。
  • Spring Cloud Config 提供了统一的配置中心服务。
  • 所有对外的请求和服务,我们都通过Zuul来进行转发,起到 API 网关的作用
  • 最后我们使用 Sleuth+Zipkin 将所有的请求数据记录下来,方便我们进行后续分析。
  • Spring Cloud Ribbon是基于Netflix
    Ribbon实现的一套客户端负载均衡的工具。它是一个基于HTTP和TCP的客户端负载均衡器。
  • Feign是一个声明式的Web Service客户端,它的目的就是让Web Service调用更加简单。

九、dubbo 调用

Dubbo是一个分布式服务框架,致力于提供高性能和透明化的远程服务调用方案,这容易和负载均衡弄混,负载均衡是对外提供一个公共地址,请求过来时通过轮询、随机等,路由到不同server。图片

  • Provider: 暴露服务的服务提供方。
  • Consumer: 调用远程服务的服务消费方。
  • Registry: 服务注册与发现的注册中心。
  • Monitor: 统计服务的调用次调和调用时间的监控中心。
  • Container: 服务运行容器。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1536425.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

浙江IGM机器人K5控制柜维修需要注意哪些问题?

IGM机器人K5控制柜常见故障及维修方法 1、电源故障: 表现为IGM机器人K5控制柜不能开机或突然断电。 检查:检查电源线是否连接良好,有无破损;检查电源模块的输出电压是否正常; 维修方法:如电源模块损坏&…

蓝桥杯-模拟-旋转图片

题目 思路 Python中range() 函数的使用介绍_python指定范围内的整数-CSDN博客 range(start, stop, step):生成一个序列包含start到stop-1的整数,其中步长为step 代码 n, m map(int, input().split()) a [list(map(int, input().split())) for _ in…

2024年Jira全面解析:从 Jira 的概念到优缺点、最新政策

Jira是澳大利亚的Atlassian公司开发的一款项目管理软件,名字来源于日文中“哥斯拉”的称呼“Gojira”。Jira不仅可以追踪缺陷和问题,还能管理项目。很多企业还将JIRA用于一些特殊的场景,比如作为仓库自动化工具、管理文档流程、优化费用等等。…

34 | 到底可不可以使用join?

在实际生产中,关于 join 语句使用的问题,一般会集中在以下两类: 1. 我们 DBA 不让使用 join,使用 join 有什么问题呢? 2. 如果有两个大小不同的表做 join,应该用哪个表做驱动表呢? 今天这篇文…

实型数据详解

1 实型常量的表示方法 实数(real number)又称浮点数(floating-point number)。实数有两种表示形式: (1)十进制小数形式。它由数字和小数点组成(注意必须有小数点)。.123、123.、123.0、0.0都是十进制小数形式。 (2)指数形式。如123e3或123E3都代表123x103。但注意字母e(或E)…

LeetCode 热题 100 | 堆(一)

目录 1 什么是堆排序 1.1 什么是堆 1.2 如何构建堆 1.3 举例说明 2 215. 数组中的第 K 个最大元素 2.1 子树大根化 2.2 遍历所有子树 2.3 弹出栈顶元素 2.4 完整代码 菜鸟做题,语言是 C 1 什么是堆排序 1.1 什么是堆 堆的定义和分类&#xff…

打造新质生产力,亚信科技2024年如何行稳致远?

引言:不冒进、不激进,稳扎稳打, 一个行业一个行业地深度拓展。 【全球云观察 | 科技热点关注】 基于以往“一巩固、三发展”的多年业务战略,亚信科技正在落实向非通信行业、标准产品、软硬一体产品和国际市场的“四…

SpringBoot实战(二十七)集成WebFlux

目录 一、WebFlux1.1 定义1.2 WebFlux 与 Spring MVC 区别 二、代码实现2.1 Maven 配置2.2 暴露 RESTful API 接口的方式方式一:基于注解的控制器方式二:函数式路由器(Functional Endpoints) 2.3 测试Service2.4 测试ServiceImpl2…

c语言(动态内存管理函数)

1. 为什么要有动态内存分配 我们已经掌握的内存开辟⽅式有: int arr[10] {0}; char a; 但是上述的开辟空间的⽅式有两个特点: 但是上述的开辟空间的⽅式有两个特点: • 空间开辟⼤⼩是固定的。 • 数组在申明的时候,必须指…

vmare17 安装不可启动的iso镜像系统

由于要测试一个软件,要安装一个Windows11_InsiderPreview_Client_x64_zh-cn_26058.iso 于是在虚拟机里捣鼓一下。但是这个iso好像不能直接启动 这样就无法直接安装了,怎么办呢,可以先用个pe系统引导进去,再在PE系统里安装这个iso…

可观测性平台如何助推保险行业数智化转型与升级

近日,主题为“人工智能大模型应用与保险业信创建设”的华东地区保险业IT微沙龙在江西圆满落幕。活动汇聚了众多保险行业的信息技术领军人物,他们为行业的科技创新与转型发展提供了重要的思路与方向。博睿数据作为中国IT运维监控和可观测性领域领导者受邀…

AES,DES

AES加密过程 初始轮(Initial Round): 将明文分组与初始轮密钥(Round Key)进行XOR运算。轮运算(Rounds):AES算法中的加密运算是由多轮执行的,每一轮都包含四个基本步骤&…

LLaVA: Large Language and Vision Assistant 图片解析

LLaVA: Large Language and Vision Assistant 图片解析 目录 介绍 效果 ​编辑项目 测试代码 Form1.cs Helper.cs 下载 介绍 LLaVA,一种新的大型多模态模型,称为“大型语言和视觉助手”,旨在开发一种通用视觉助手,可以遵…

智慧矿山新趋势:大数据解决方案一览

1. 背景 随着信息技术的快速发展和矿山管理需求的日益迫切,智慧矿山作为一种创新的矿山管理方式应运而生。智慧矿山借助先进的信息技术,实现对矿山生产、管理、安全等各方面的智能化、高效化、协同化,是矿山行业转型升级的必然趋势。 欢迎关…

电子版合同的法律地位-复制品还是替代品?

电子合同与电子版合同并不完全等同,它们之间存在一些关键的区别。以下是对两者的专业解读: 电子合同 定义:电子合同是指完全以电子形式存在的合同,双方或多方通过电子设备进行协商、签署和履行。它不依赖于纸质文件,…

Java基于微信小程序的二手交易系统的实现(V2.0)

博主介绍:✌Java徐师兄、7年大厂程序员经历。全网粉丝15w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、Python 技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅&#…

#Linux(文件系统概念)

(一)发行版:Ubuntu16.04.7 (二)记录: (1)查看文件系统情况df,man df查看df命令的功能 (2)查看文件系统的类型 df-T (3)df …

前端开发经验分享:写页面时总是有预期之外的滚动条怎么办?

问题描述: 在制作一个页面时常常会出现一些预期之外的滚动条,一般有以下原因:1.内容过多:当容器内的内容(如文本、图片等)的总高度或总宽度超过容器的可视区域时,滚动条就会出现。2.样式设置&a…

Android Handler使用介绍

Android 中的 Handler 是用来和线程通信的重要工具。它主要用于在后台线程中执行任务,并将结果传递回主线程以更新用户界面。 一、基本概念 线程间通信: Android 应用通常具有主线程(也称为 UI 线程)和后台线程。Handler 允许您从…

有些商标名称慎加通用词,可能会以误认驳回!

近期看到一网友在30类方便食品申请"某某茶叶",这个商标名称部分商品通过一部分,另一部分商品以误认驳回,普推知产老杨分析时发现在以前很少出现这种情况,但是近年来商标名称加通用词误认驳回的比较多。 现阶段这种带通…