8.框架篇(ssm)

其实java并发的东西还没整理完,昨天只是整理了一小部分,juc下面所有的东西都是重点。今天又接到了几家公司的面试邀请,所以打算,先把广度扩出来,然后再细细深挖。

Spring 的优点?

1.spring属于低耦合,代码污染度低。

2.spring种的di机制将对象之间的依赖关系交给框架处理 ,减少组件的耦合度。

3.spring提供了aop技术,支持一些通用技术,比如安全,事务,日志,权限等集中式管理,从而提供更好的复用。

4.spring对主流应用框架提供了集成支持。

 

对SpringAop的理解?

Aop称为切面编程,用于将那也与业务逻辑无关,但却对多个对象产生影响的公共行为和逻辑,抽取称为一个可重用的的模块。减少代码的重复度,降低模块之间的耦合度。

Aop是基于动态代理实现的。实现动态代理主要有2种方式:1,JDK动态代理。2,cglib动态代理。

jdk代理只能代理接口,不能代理类。cglib是基于继承实现的,如果父类用final修饰那么就无法代理。

 

对SpringIOC的理解?

ioc是控制反转,是将对象的创建权反转了,Spring容器根据配置文件去创建实例和管理实例之间的依赖关系。

DI注入:应用程序在运行时依赖IOC容器来注入对象需要的外部资源。

 

ioc注入方法:1.通过构造器注入。2.setter注入。3.根据注解注入。

实现原理:通过dom4j方法解析xml,将解析出来的对象注册到beanfactory。

 

Spring中bean的Scope?

1.singleton(单一实例):容器创建时只存在一个单例,从容器定义到第一次被请求而初始化开始,只要容器不销毁或退出。

2.prototype(多例):每次请求都会产生一个新对象给请求方,之后就由这个对象自生自灭。

下面三种知识和web程序:

3.requesrt(特殊多例):每次请求都会产生一个新的对象,当请求结束以后该对象的生命周期结束。

4.session(特殊多例):容器会为每个会话创建一个新的对象。当session结束以后该对象的生命周期结束。

5.gloabal session(特殊多例):只有应用在基于porlet的web应用程序中才有意义,它映射到porlet的global范围的session,如果普通的servlet的web 应用中使用了这个scope,容器会把它作为普通的session的scope对待。

 

BeanFactory和ApplicationContext有什么区别?

BeanFactory和ApplicationContext都可以做为bean的容器。ApplicationConext时BeanFactory的子接口。

BeanFactory:spring最底层的接口,包括了各种bean的定义,读取bean的配置文件,管理bean的配置,实例化,控制bean的生命周期,维护bean之间的依赖关系。ApplicationContext作为子接口除了原来的功能拓展了好多功能。

1.继承MessageSource,因此支持国际化。

2.统一资源文件的访问格式。

3.提供在监听器中注册多个事件。

4.同时加载多个配置文件。

beanFactory:只有在第一次调用bean的时候才会对该bean进行加载实例化,在启动容器的时候不会加载bean。缺点:无法及时检测出错误。

Application:他是在容器启动时,一次性加载所有的bean。缺点:内存占用比较多,当配置bean多的时候,那么程序启动比较慢。

 

Spring中Bean的生命周期?

1.实例化bean。

在beanFactory容器中,当客户请求一个尚未初始化的bean的时侯,容器就会调用createbean方法进行实例化。

在applicationConetxt容器中,当容器启动结束后,通过获取BeanDefinition对象中的信息,实例化所有的bean。

2.设置对象属性

实例化的对象被封装在beanWrapper对象中,然后spring根据BeanDefinition的信息以及beanWrapper提供的的设置属性的接口完成依赖注入。

3.处理Aware接口

Spring会检测该对象是否实现了xxxAware接口,并将相关的xxxAware实例注入bean:

4.BeanPostProcessor

如果想对bean进行一些自定义的处理,就可以实现这个接口,那将会调用postProcessBeforeInitialization(Object obj, String s)方法。

5.initalizingBean和init-method方法

如果bean在spring的配置文件上配置了init-method,则会调用其配置的初始化方法。

6.如果实现了beanpostprocessor接口,那么在方法bean初始化结束的时候调用postProcessAfterInitialization(Object obj, String s)方法。

这样一个bean就初始化成功了,可以自己使用。

7.DisposaBean

当bean不在需要的时候,会进入清理阶段,如果实现了DisposableBean这个接口,那么会调用其实现的destory()接口。

8.destory-method方法

如果bean的spring配置了destory-method属性,会自动调用其配置的销毁方法。

 

 

Spring的单例bean是线程安全的吗?

Spring框架没有对多线程的封装处理,关于bean的线程安全和并发问题需要开发者自己解决。实际上并没有大部分bean并没有可选状态,在某种程度上是线程安全的。

 

@Autowired和@Resource之间的区别?

@Autowired是按照类型配置注入的,默认情况下他要求依赖对象必须存在。、

@Resource默认是按照名称来装配注入的,只有找不到与名称匹配的bean才会按照类型。

 

Spring中事务传播行为?

事务传播主要是事务中嵌套着事务。

主要用的有使用当前事务和开启新的事务。

 

SpringMVC的执行流程?

https://blog.csdn.net/huaixiaohai_1/article/details/97662301

 

SpringMVC的优点?

1.支持各种视图技术,不仅仅是jsp

2.与Spring架构集成

3.清晰的角色配置:前端控制器(DispatcherServlet),请求到处理器映射(handlerMapper),处理器适配器(HandlerAdapter),视图解析器(ViewResolver)

4.支持各种请求资源的映射

 

SpringMVC怎么实现重定向和转发?

1.转发:在返回值前边加上“forward”,比如“forward:user.do”

2.重定向:在返回值前面加上"redirect",比如“redirect:user.do”

 

重定向与转发的区别?

重定向是2次请求,在重定型的过程中,传输的信息会丢失。

转发是一次请求。

 

如何解决中文乱码问题?

post乱码:通过在web.xml配置编码拦截器。

get乱码:修改tomcat配置文件编码

 

Springmvc前端控制器是不是单例的?怎么保证并发安全?

是单例的,使用同步会影响性能,控制器里边不能写字段。

 

Mybatis中#{}与${}的不同?

#{}是预编译处理,${}是字符串替换

在处理#{}的时候,会将sql中的#{}替换成?,调用PreparedStatement的set方法来赋值。

在处理${}的时候,会将${}替换为字符串

使用#{}能有效地防止sql注入

 

Mapper接口中的方法能重载吗?为什么?

不能,因为Mapper接口中没有实现类,当调用接口方法时,接口全限名+方法名拼接字符串作为key值,可定为唯一一个MapperStatement。在Mybatis中,每一个<select>、<insert>、<update>、<delete>标签,都会被解析为一个MapperStatement对象。

 

如何获取自动生成的主键值?

insert方法返回一个int类型的值,这个是插入的行数。也可以使用genera什么那个属性,这样会自动注入到你insert的实体类中。

 

Mybatis延迟加载原理?

延迟加载:提交了sql语句以后不会立马去查询,等到真正用的时候才会去查。

使用cglib创建目标对象的代理对象,当调用目标方法时,进入拦截器方法,比如调用a.getB().getName(),拦截器invoke()方法发现a.getB()是null,就会单独的发送实现保存好的查询关联B对象的sql,把B查询出来以后调用getName().

 

Mybatis中的一二级缓存?

一级缓存:基于PerpetualCatch的本地hashmap本地缓存,其存储作用域为Session,当session flush或close以后,该session中所有的缓存失效,默认一级缓存开启。

二级缓存:与一级缓存机制相同,不同的是存储对象为mapper,可以自定义存储位置,默认不开启。

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值