java 面试知识点突击-(41-50)

Posted 栗子~~

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java 面试知识点突击-(41-50)相关的知识,希望对你有一定的参考价值。

前言

  如果您觉得有用的话,记得给博主点个赞,评论,收藏一键三连啊,写作不易啊^ _ ^。
  而且听说点赞的人每天的运气都不会太差,实在白嫖的话,那欢迎常来啊!!!


java 面试知识点突击-(41-50)

41 如何实现一个IOC容器的思路?

  1. 配置文件、配置包扫描路径;
  2. 递归包扫描,获取.class文件信息;
  3. 反射、确定需要交给IOC管理的类;
  4. 对需要注入的类进行依赖注入;

42 spring 是 什么?

轻量级的 控制反转(IOC)和面向切面(AOP) 的框架,用来装javaBean,中间层框架(起连接作用)。

  1. 大小和开销方面都是轻量级的;
  2. 通过IOC实现松耦合,不需要对象之间进行长依赖,降低代码之间的耦合性;
  3. AOP提供了面向切面编程的丰富支持;
  4. 包含并管理应用对象 bean的生命周期;
  5. 将简单的组件配置,组成复杂的应用;

43 对 spring AOP的理解?

AOP:面向切面编程,目的是为了解耦
即将程序中的交叉业务逻辑(日志、事务、安全等)封装成切面注入到对象(业务逻辑)中去。
概念:
1、切面
使用@Aspect 声明一个切面
2、建言
使用@before,@After,@Around等注解建立建言
建言执行顺序:

当同一个方法被多个注解了@Aspect的类拦截时,可以通过@Order指定Aspect类的执行顺序,此时的执行顺序为:

3、切点
拦截规则为切点(PointCut)
4、连接点
符合条件的每一个连接处


44 对spring IOC 的理解?

依赖注入 :一种设计思想(IOC就是典型的工厂模式。)

指的是控制反转,IOC容器负责实例化、定位、配置应用程序中的对象及建立这些对象间的依赖。交由Spring容器统一进行管理,从而实现松耦合。
即由Ioc容器来控制对 象的创建。

对IOC的理解主要有三个方面:容器概念、控制反转、依赖注入

44::01 容器概念

第一步(存):用来存放java中各种对象(javaBean),实际上就是一个BeanDefinitionMap<beanName,BeanDefinition>(生成各种class的bean定义)[beanDefinition对象(描述bean实例化的各个属性)]

第二步(用):在通过DI(依赖注入),把属性往对象里面注入,即给对象赋值。

44::02 控制反转

全部对象的控制权全部由IOC控制,对象与对象之间没有直接联系,可以比喻成粘合剂。

44::03 依赖注入

实现控制反转的手段,依赖注入是实现IOC的方法
即获得依赖对象的过程由自身管理变为由IOC容器主动注入。


45 spring IOC 为什么是控制反转的?

因为由容器帮我们查找及注入依赖对象,对象只是被动的接受依赖对象


46 BeanFactory和ApplicatinContext有什么区别?

  1. ApplicatinContext是BeanFactory的子接口;
  2. ApplicatinContext所提供的功能比BeanFactory要多,如:提供在监听器中注册bean事件、统一的资源文件访问方式、同时加载多个配置文件、载入多个上下文等等…;
  3. BeanFactory采用延迟加载的方式,只有使用的时候该bean才会实例化,
    而ApplicatinContext是在容器启动的时候,一次性创建所有的bean;
  4. ApplicatinContext不足的地方是占用内存空间,启动比较慢;
  5. BeanFactory通常是用编程的方式来实现,而ApplicatinContext还能以声明式的方式来实现;
  6. BeanFactory手动注册,ApplicatinContext是自动注册;

47 描述一下 spring bean的生命周期?

准备:
1)、解析类得到BeanDefinition(bean定义)
2)、如果有多个构造方法,那么推断构造方法;
3)、确定构造方法,实例化,得到bean对象
4)、对对象中加了@Autowired注解的属性进行依赖注入(属性填充);
5)、回调aware方法,比如BeanNameAware、BeanFactoryAware;
6)、调用BeanPostProcessor的初始化的前方法【后置处理器的前处理】.;
7)、调用初始化方法;
8)、调用BeanPostProcessor(英:bean+post+p+rou+cai +ser)的初始化的后方法,在这里进行AOP(动态代理的创建);
9)、如果当前创建的bean是单例,则会把bean放入单例池中。;
使用:
10)、使用bean;
11)、spring 容器关闭时,调用DisposableBean 中的的destory()方法销毁;


48 解释一下spring支持的几种bean的作用域?

7种,默认的是单例模式(singleto),
即每个容器中只有一个bean的实例,单例模式由BeanFactory自身维护,生命周期与IOC一致。

prototype模式:每次注入,都会创建一个新的对象,即在容器中就有多个实例;

request模式: 每个http请求中创建一个单例对象,即在单个请求中复用这个单例对象;

session模式: 确保每个session中有一个bean的单例实例对象,session过期后,bean随之消失;

application模式: bean被定义为ServletContext(Servlet容器,不是spring容器)的生命周期中复用一个单例对象,就可以跨IOC容器;

websocket模式:bean被定义为websocket的生命周期中复用一个单例对象;

还有一个global-session模式:全局session作用域,不过现在不怎么用了。


49 spring 框架中的单例Bean是线程安全的吗?

不安全。
默认状态,spring的bean 是单例模式,框架并没有对bean进行线程安全的处理。

当 bean有状态时,即有数据存储功能;
是线程不安全的,使用prototype模式,即每次注入,都会创建一个对象,即new Bean 就可以解决这个问题,或者其他操作。
例子:

Dao层操作数据库Connection,Connection是带有状态的,比如数据库事务,
Spring 的事务管理器使用ThreadLocal为不同的线程维护了一个独立的Connection副本

当bean无状态时,即无数据存储功能,是线程安全的;


50 Spring 框架中都用到哪些设计模式?

简单工厂;由一个工厂类根据传入的参数,动态决定应该由哪一个产品
Spring 中的 BeanFactory

工厂方法:
实现了FactoryBean接口的bean是一类叫做factory的bean

单例模式:
spring中的bean

装饰器模式:动态地给一个对象添加一些额外的职责。
spring 中凡是类名包含Wrapper和Decorator

动态代理:
Spring AOP

观察者模式:
spring中监听器

策略模式:
spring框架中访问Resource接口


创作不易、点关注、不迷路

点击主页、更精彩 !!!

以上是关于java 面试知识点突击-(41-50)的主要内容,如果未能解决你的问题,请参考以下文章

java 面试知识点突击-(61-70)

java 面试知识点突击-(71-80)

java 面试知识点突击-(51-60)

java 面试知识点突击-(81-90)

java 面试知识点突击-(91-100)

Java面试手册V2.0+突击V3.0知识点整理(二十) 附封面图片