java面试题记录

java集合

分为两类:

一、Collection:

1、List:

(1)ArrayList:底层使用数组;元素排列有序可重复;线程不安全;查询快,插入删除慢;初始化容量为10,当容量不够时,默认扩展 old+(old>>1)

(2)Vector:底层使用数组;元素排列有序可重复;线程安全(效率低);查询快,插入删除慢;当容量不够时,默认扩展一倍的容量

(3)LinkedList:底层使用双向循环链表;可重复;查询慢、插入删除快;线程不安全

2、Set:

(1)HashSet:内部使用HashMap,元素无序不可重复,存取速度快,put(元素,new Object())

(2)TreeSet:内部使用TreeMap的SortedSet(二叉树实现),排列无序不可重复,

(3)LinkedHashSet:采用Hash表存储,并用双向链表记录插入的顺序,内部使用LinkedHashMap。双向链表+HashMap=LinkedHashMap落地存储在HashMap,

3、Queue:使用链表实现,线程安全

二、Map

1、HashMap:允许key、value为null;线程不安全

2、HashTable:key、value都不能null,线程安全

3、TreeMap:二叉树(红黑树)

ArrayList和LinkedList初始化容量和扩容,物理和逻辑上

ArrayList初始化容量为10,再添加第十一个元素的时候,会对数组进行扩容,扩容的容量为10+10>>1=15。

LinkedList初始化容量为0,在每次新增元素时,根据调用不同的方法往链表尾部或者链表头部无限制的增加节点。

spring bean的生命周期?

1、扫描包生成BeanDefinition:筛选并解析配置类(@Component、@ComponentScan、@Import、@ImportResource),如果是@ComponentScan注解类执行扫描逻辑,将解析到的类封装为BeanDefinition注册到BeanFactory中。

2、合并BeanDefinition:合并父子依赖的BeanDefinition,原有的不变,重新生成RootBeanDefinition,他就是合并父子BeanDefinition,子覆盖父。

3、加载BeanDefinition:

4、实例化前:执行BeanPostProcessor#before()方法

5、推断构造方法:

6、实例化:doCreateBean():如果有supplier则用它创建对象,如果没有则通过构造方法反射创建对象。        `        

7、BeanDefinition后置处理器:对BeanDefinition进行加工----spring对外提供的拓展点

8、实例化后:执行BeanPostProcessor#after()方法---拓展点

9、属性填充:找到属性注入点(是否由@Value、@Autowired、@Inject注解),找到所有这些注解修饰的方法,对这些属性和方法进行注入

10、执行Aware回调:判断bean是否实现了Aware接口,调用相关的set()方法

11、初始化前:执行BeanPostProcessor#beforeInitialization();执行@PostConstruct注解的方法

12、初始化:如果bean实现了InitializationBean则执行afterPropertiesSet();使用xml配置initMethod直接反射;直接使用BeanDefinition设置initMethod直接反射

13、初始化后:判断是否开启了aop,生成对应切面bean的代理对象。

14、bean销毁:如果bean为单例则注册一个

spring事务

在spring boot项目开启@EnableTransactionManagement注解表示,开启事务,会向spring容器中导入事务相关的Advisor bean,其中pointcut为方法或者bean加了@Transaction注解,advice执行开启事务创建连接设置隔离级别,提交或者回滚事务逻辑以及异常处理。spring启动时在执行初始化后的逻辑中,会从beanFactory中找到所有Advisor,如果属于PointCutAdvisor类型,继续判断目标类或者目标方法存在@Transaction注解,是则对bean进行aop创建代理对象,代理逻辑为advice中。

spring事务如何在一个事务基础上创建新事物

1、事务管理器创建事务并设置事务隔离级别,异常捕获机制,超时时间等参数

2、在将要执行sql时创建连接

3、自动提交设置false

        将连接设置到ThreadLocal<dataSource,Connection>中

4、执行方法(可能多个sql)

        调用其他方法需要创建新的事务,将当前线程资源挂起缓存到挂起资源对象中,再去创建新的事务执行完sql后提交或者回滚后,恢复现场将挂起资源对象中属性重新设置到当前线程中去。

5、回滚或者提交

6、关闭连接

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值