首页 > 其他分享 >复习资料

复习资料

时间:2023-02-22 17:46:05浏览次数:35  
标签:缓存 对象 复习资料 获取 bean 实例 线程

bean的生命周期:
1.将bean定义beandefinition到中,IOC会根据这个beandefinition来实例化这个类


2.实例化bean(会涉及到bean的循环依赖和AOP)
从三级缓存中获取bean的实例(解决bean的循环依赖问题)
先从一级缓存singletonObject中获取,该缓存存放的是已经实例化好的bean,
如果一级缓存为空,并且对象是正在创建的,那么这时候会去找二级缓存,earlysingletonObject,
如果二级缓存为空,并且对象是允许早起引用的,那么回去三级缓存singletonFactory中获取。获取到了将三级缓存提升到二级缓存中,并且移除三级缓存中的数据。

容器在实例化的时候会用动态代理来实例化bean,如果被代理的类实现了接口,则采用JDK的动态代理,其他的则是采用cglib

3.根据反射填充bean的属性

4.如果bean实现了beannameaware接口 ,则会调用bean的setbeanname方法传入bean的ID。
5.如果bean实现了beanfactory方法,则会调用setbeanfactory将beanfactory传入对象本身。

6.如果bean实现了beanprocessor接口,则会调用postprocessorbeforeinitialization方法
7.如果bean实现了initializingBean接口,则会调用bean的init-method初始化方法
8.如果bean实现了beanprocessor接口,则会调用postprocessorafterinitialization方法

类加载机制
加载:将字节码文件通过类加载器加载到内存中
验证:验证字节流数据是否符合虚拟机的规范
准备:为类的变量分配内存并赋予初值(基本引用类型,则初值为0,引用数据类型,则初值为null)
解析:将常量池内的符号引用替换为直接引用,这个过程,虚拟机换将类名,方法名字段名等这些符号引用替换为具体的内存地址。
初始化:对static修饰的变量进行初始化,使用到了双亲委派模式。避免类的重复初始化
使用:
卸载:

JVM内存模型:
堆:存放对象
虚拟机栈:存放局部变量,对象的引用
本地方法栈:执行native方法
方法区:存放类的信息,常量,静态变量
程序计数器:记录虚拟机字节码指令

堆的回收区域:
新生代
老年代
元空间

垃圾回收算法:
复制算法:将空间划分为相等的两份,每次只使用其中的一份,当其中一份用完的时候,会把存活的对象移动到另一边,然后把剩下的部分清理掉(用于新生代)
标记清除:将需要回收的对象进行标记,标记完成后将所有的对象进行回收,缺点:会产生大量的内存碎片
标记整理:将需要回收的对象进行标记,然后将存活的对象移动到另一端,再清理剩下的部分

垃圾收集器:
新生代:serial
老年代:serial old

线程池参数:
核心线程数
最大线程数
闲置线程允许存活的时间
线程存活的时间单位
阻塞队列:arraylockingQueue,linkedlockingqueue,synchronouslockingqueue
线程工厂
拒绝策略:1.丢弃线程并抛出错误,2.丢弃线程,不抛出错误,3.丢弃队列中最前面的线程,并尝试执行当前任务,4.由调用线程处理该任务

 

方法区: 类的信息,常量,静态变量

堆: 对象

虚拟机栈:局部变量,动态链接,方法出口

本地方法栈: 本地Native方法

程序计数器: 字节码指令地址

堆: 新生代 老年的  元空间

新生代: Eden : FromSurvior : ToSurvior  = 8 : 1 : 1

新生代: MinorGC (使用复制算法)

老年代: MajorGC (使用标记-整理算法)

 

spring boot 自动配置的原理:

在启动类中使用了@SpringBootApplication注解

@EnableAutoConfiguration注解是自动配置的核心,注解内部使用了@Import(AutoConfigurationImportSelector.Class)注解来加载配置类,并不是所有的bean都会被加载,在配置类或者bean中使用了@Condition注解来加载满足的bean.

@EnableAutoConfiguration给容器导入META-INFO/spring.factories里定义的自动配置类.

 

bean的循环依赖:

使用了三级缓存:

singletonObject(一级缓存): 单例对象的缓冲池,已经实例化并且属性赋值,成熟对象

earlySingleTonObject(二级缓存): 单例对象的缓冲池,已经实例化尚未属性赋值,半成品对象.

SingleTonFactory(三级缓存): 单例工厂的缓存

spring先从一级缓存singletonObject中获取,如果获取不到,并且对象正在创建中,再从二级缓存earlySingtonObject中获取,若是获取不到并且允许singletonFactory()经过getObject()中获取,则从三级缓存中获取,如果获取到了,就将三级缓存提升到二级缓存中.

RabbitMQ消息丢失及对应解决方案:

生产者丢失消息:开启confirm机制,等消费者接收到消息了再给生产者ack

MQ丢失消息: 开启RabbitMQ持久化, deliveryMode = 2 ,开启消息持久化

消费者丢失消息: 关闭RabbitMQ自动ack, 等处理完消息在手动ack.

 

Kafka:

消费端丢失消息:

关闭自动offset,等业务处理完再手动提交offset,但是有可能会出现重复消费,在业务中保证消息幂等就行

Kafka丢失消息:

设置partiton必须要有两个副本

设置ack = all,要求每条数据,必须写入所有replica之后,才能任务是写成功了.

生产者丢失消息:

设置ack = all,要求每条数据,必须写入所有replica之后,才能任务是写成功了.

 

线程池配置:

CPU密集型: CPU数目+一个线程

IO 密集型: 2倍CPU

 

CAP理论:

consistency 可用性

avalibility 可用性

partition 分区容错性

 

标签:缓存,对象,复习资料,获取,bean,实例,线程
From: https://www.cnblogs.com/rice89026824/p/17145289.html

相关文章

  • 超星复习资料下载
    不排版了,直接发因为期末考试需要,想下载资料,老师吧权限关了传统方法是找xhr文件,然后跟响应里面找到下载地址,我找到了xhr,但是没有下载地址,我人傻了可能资料下载的地方可课......
  • [复习资料]最小树形图
    [复习资料]最小树形图最近在整理自己的模板集,然后就发现了最小树形图这个基本不考的考点,我记得当时学最小树形图的时候都是迷迷糊糊的,跟着题解敲了一遍代码,根本无法理解这......
  • NLP算法工程师面试题及复习资料
    机器学习AI算法工程  公众号:datayx本文主要记录本人对NLP相关知识的积累,之前笔记做的很多,考虑到秋招已至,在复习的过程中,慢慢将这些知识屡清楚,然后将相关的知识笔记整......