框架问题 已看1

1.SpringAOP的应用场景、Aop原理、好处?html

答:AOP用来封装横切关注点,具体能够在下面的场景中使用:前端

Authentication 权限、Caching 缓存、Context passing 内容传递、Error handling 错误处理java

Lazy loading懒加载、Debugging调试、logging, tracing, profiling and monitoring 记录跟踪优化 校准、Performance optimization 性能优化、Persistence 持久化、Resource pooling 资源池、Synchronization 同步、Transactions 事务mysql

原理:AOP是面向切面编程,是经过代理的方式为程序添加统一功能,集中解决一些公共问题。git

好处:1.各个步骤之间的良好隔离性 
     2.源代码无关性 程序员

2.SpringIOC的做用与原理?对象建立的过程。github

答:当某个角色须要另一个角色协助的时候,在传统的程序设计过程当中,一般由调用者来建立被调用者的实例。但在spring中建立被调用者的工做再也不由调用者来完成,所以称为控制反转。建立被调用者的工做由spring来完成,而后注入调用者 spring

3.介绍spring框架sql

它是一个full-stack框架,提供了从表现层到业务层再到持久层的一套完整的解决方案。咱们在项目中能够只使用spring一个框架,它就能够提供表现层的mvc框架,持久层的Dao框架。它的两大核心IoCAOP更是为咱们程序解耦和代码简洁易维护提供了支持。数据库

4.Spring常见建立对象的注解?

答:@Component@Controller@ Service@ Repository

5.Spring中用到的设计模式

答:简单工厂、工厂方法、单例模式、适配器、包装器、代理、观察者、策略、模板方法

详细介绍:http://www.cnblogs.com/yuefan/p/3763898.html

6.Spring的优势?

答:1.下降了组件之间的耦合性 ,实现了软件各层之间的解耦 
2.可使用容易提供的众多服务,如事务管理,消息服务等 
3.容器提供单例模式支持 
4.容器提供了AOP技术,利用它很容易实现如权限拦截,运行期监控等功能 

6.spring对于主流的应用框架提供了集成支持,如hibernateJPAStruts 
7.spring属于低侵入式设计,代码的污染极低 
1、它的核心之一IoC,下降了咱们程序的耦合度,使咱们能够把项目设计成为一个可插拔的组件式工程。

2、它的另外一大核心AOP,使咱们在开发过程当中,精力获得释放,能够更专一的去理解客户的需求。而且在后期维护时,能够只维护不多的一部分。



10.Spring的高度开放性,并不强制应用彻底依赖于Spring,开发者能够自由选择spring 的部分或所有 

7.Spring Bean的做用域之间有什么区别?

Spring容器中的bean能够分为5个范围。全部范围的名称都是自说明的,可是为了不混淆,仍是让咱们来解释一下:

singleton:这种bean范围是默认的,这种范围确保无论接受到多少个请求,每一个容器中只有一个bean的实例,单例的模式由bean factory自身来维护。

prototype:原形范围与单例范围相反,为每个bean请求提供一个实例。

request:在请求bean范围内会每个来自客户端的网络请求建立一个实例,在请求完成之后,bean会失效并被垃圾回收器回收。

Session:与请求范围相似,确保每一个session中有一个bean的实例,在session过时后,bean会随之失效。

global-sessionglobal-sessionPortlet应用相关。当你的应用部署在Portlet容器中工做时,它包含不少portlet。若是你想要声明让全部的portlet共用全局的存储变量的话,那么这全局变量须要存储在global-session中。

全局做用域与Servlet中的session做用域效果相同。

8.Spring管理事务有几种方式?

答:有两种方式:

1、编程式事务,在代码中硬编码。(不推荐使用)

2、声明式事务,在配置文件中配置(推荐使用)

声明式事务又分为两种:

a、基于XML的声明式事务

b、基于注解的声明式事务

SpringAOP来实现的;配置了只读事务和回滚事务(传播行为为REQUIRED)当出现错误后进行回滚操做。在项目中经过aop切入事务到serivce层,这样作能使一次业务逻辑操做若是包括几个数据库操做都控制在一个事务中。

 

 

 

9.spring中自动装配的方式有哪些?

答:1No:即不启用自动装配。

2byName:经过属性的名字的方式查找JavaBean依赖的对象并为其注入。好比说类Computer有个属性printer,指定其autowire属性为byName后,Spring IoC容器会在配置文件中查找id/name属性为printerbean,而后使用Seter方法为其注入。

3byType:经过属性的类型查找JavaBean依赖的对象并为其注入。好比类Computer有个属性printer,类型为Printer,那么,指定其autowire属性为byType后,Spring IoC容器会查找Class属性为Printerbean,使用Seter方法为其注入。

4constructorbyType同样,也是经过类型查找依赖对象。byType的区别在于它不是使用Seter方法注入,而是使用构造子注入。

5autodetect:在byTypeconstructor之间自动的选择注入方式。

6default:由上级标签<beans>default-autowire属性肯定。

10.spring中的核心类有那些,各有什么做用?

答:BeanFactory:产生一个新的实例,能够实现单例模式

BeanWrapper提供统一的getset方法

ApplicationContext:提供框架的实现,包括BeanFactory的全部功能

11.Bean的调用方式有哪些?

答:有三种方式能够获得Bean并进行调用:
1使用BeanWrapper
HelloWorld hw=new HelloWorld();
BeanWrapper bw=new BeanWrapperImpl(hw);
bw.setPropertyvalue(msg,HelloWorld);
system.out.println(bw.getPropertyCalue(msg));
2使用BeanFactory
InputStream is=new FileInputStream(config.xml);
XmlBeanFactory factory=new XmlBeanFactory(is);
HelloWorld hw=(HelloWorld) factory.getBean(HelloWorld);
system.out.println(hw.getMsg());
3使用ApplicationConttext
ApplicationContext actx=new FleSystemXmlApplicationContext(config.xml);
HelloWorld hw=(HelloWorld) actx.getBean(HelloWorld);
System.out.println(hw.getMsg());

 

12.什么是IOC,什么又是DI,他们有什么区别?

简单答法:IoC 控制反转,指将对象的建立权,反转到Spring容器 , DI 依赖注入,指Spring建立对象的过程当中,将对象依赖属性经过配置进行注入 

 

 

答:依赖注入DI是一个程序设计模式和架构模型, 一些时候也称做控制反转,尽管在技术上来说,依赖注入是一个IOC的特殊实现,依赖注入是指一个对象应用另一个对象来提供一个特殊的能力,例如:把一个 数据库链接已参数的形式传到一个对象的结构方法里面而不是在那个对象内部自行建立一个链接。控制反转和依赖注入的基本思想就是把类的依赖从类内部转化到外 部以减小依赖

应用控制反转,对象在被建立的时候,由一个调控系统内全部对象的外界实体,将其所依赖的对象的引用,传递给它。也能够说,依赖被注入到对象中。所 以,控制反转是,关于一个对象如何获取他所依赖的对象的引用,这个责任的反转。

13.spring有两种代理方式:

: 若目标对象实现了若干接口,spring使用JDKjava.lang.reflect.Proxy类代理。

      优势:由于有接口,因此使系统更加松耦合

      缺点:为每个目标类建立接口

若目标对象没有实现任何接口,spring使用CGLIB库生成目标对象的子类。

      优势:由于代理类与目标类是继承关系,因此不须要有接口的存在。

      缺点:由于没有使用接口,因此系统的耦合性没有使用JDK的动态代理好。

14.springMVC的流程?

答:1.用户发送请求至前端控制器DispatcherServlet

2.DispatcherServlet收到请求调用HandlerMapping处理器映射器。

3.处理器映射器根据请求url找到具体的处理器,生成处理器对象及处理器拦截器(若是有则生成)一并返回给DispatcherServlet

4.DispatcherServlet经过HandlerAdapter处理器适配器调用处理器

5.执行处理器(Controller,也叫后端控制器)

6.Controller执行完成返回ModelAndView

7.HandlerAdaptercontroller执行结果ModelAndView返回给DispatcherServlet

8.DispatcherServletModelAndView传给ViewReslover视图解析器

9.ViewReslover解析后返回具体View

10.DispatcherServletView进行渲染视图(即将模型数据填充至视图中)。

11.DispatcherServlet响应用户

15.Springmvc的优势

答:1.它是基于组件技术的.所有的应用对象,不管控制器和视图,仍是业务对象之类的都是 java组件.而且和Spring提供的其余基础结构紧密集成.

2.不依赖于Servlet API(目标虽是如此,可是在实现的时候确实是依赖于Servlet)

3. 能够任意使用各类视图技术,而不只仅局限于JSP

支持各类请求资源的映射策略

5 .它应是易于扩展的

16.Struts2的流程?

答:1.客户端初始化一个指向Servlet容器(例如Tomcat)的请求 
2.这个请求通过一系列的过滤器(Filter)(这些过滤器中有一个叫作ActionContextCleanUp的可选过滤器,这个过滤器对于Struts2和其余框架的集成颇有帮助,例如:SiteMesh Plugin) 
3.接着StrutsPrepareAndExecuteFilter被调用,StrutsPrepareAndExecuteFilter询问ActionMapper来解析和判断该次请求是否须要由struts2框架来处理.
4.若是ActionMapper判断须要struts2来处理请求,StrutsPrepareAndExecuteFilter会把请求的处理交给ActionProxy 
5 .ActionProxy经过Configuration Manager加载框架的配置文件,找到须要调用的Action以及拦截器配置信息
6 .ActionProxy建立一个ActionInvocation的实例。 
7 .ActionInvocation实例使用命名模式来调用,在调用Action的过程先后,涉及到相关拦截器(Intercepter)的调用。 
8.一旦Action执行完毕,ActionInvocation负责根据struts.xml中的配置找到对应的返回结果配置。根据配置找到对应的Result处理类来处理结果集.大多数状况输出会交由模版语言(JSP,FreeMarker)完成输出内容拼装

17.struts2中有哪些经常使用结果类型?

答:1) dispatcher Action 转发给 JSP

2)  chain Action转发到另外一个Action (同一次请求)

3redirect Action重定向到 JSP

4redirectAction Action重定向到另外一个Action

stream:下载用的(文件上传和下载时再议)

plainText:以纯文本的形式展示内容

18.struts2Action有几种编写方式?

答:第一种 建立类,这个类不继承任何类,不实现任何的接口

第二种 建立类,实现接口 Action接口

第三种 建立类,继承类 ActionSupport,ActionSupport类是Action接口的实现类

19.使用struts2如何实现多文件上传?

答:1第一步 上传表单页面,知足三个要求,提交到action里面,要求:多个文件上传项name属性值必需要同样

2建立action,在action实现多文件的上传,action中使用数组形式获得多个文件的息

private File[] uploadImages;//获得上传的文件

private String[] uploadImagesContentType;//获得文件的类型

private String[] uploadImagesFileName;//获得文件的名称

3遍历数组,获得每个文件的信息,一个一个上传到服务器中

if(uploadImages!=null&&uploadImages.length>0){

           for(int i=0;i<uploadImages.length;i++){

                File destFile = new File(realpath,uploadImageFileNames[i]);

                FileUtils.copyFile(uploadImages[i], destFile);

           }

        }

 

20.springMVCStruts2的区别?

: 1.springmvc的入口是一个servlet即前端控制器,而struts2入口是一个filter过虑器。

2.springmvc是基于方法开发(一个url对应一个方法),请求参数传递到方法的形参,能够设计为单例或多例(建议单例)struts2是基于类开发,传递参数是经过类的属性,只能设计为多例。

3.Struts采用值栈存储请求和响应的数据,经过OGNL存取数据, springmvc经过参数

解析器是将request请求内容解析,并给方法形参赋值,将数据和视图封装成ModelAndView对象,最后又将ModelAndView中的模型数据经过reques域传输到页面。Jsp视图解析器默认使用jstl

21.如何防止表单重复提交?表单重复提交的缘由?

答:令牌机制。

缘由:1.服务器处理服务后,转发页面,客户端点击刷新(重定向)

      2.客户端网络过慢,按钮连续点击。

 

 

 

22.hibernate原理?

答: hibernate,经过对jdbc 进行封装,对java 类和 关系数据库进行mapping,实现了对关系数据库的面向对象方式的操做,改变了传统的jdbc + sql 操做数据的方式,从而使开发人员能够话更多精力进行对象方面的开发

1.读取并解析配置文件

2.读取并解析映射信息,建立SessionFactory

3.打开Sesssion

4.建立事务Transation

5.持久化操做

6.提交事务

7.关闭Session

8.关闭SesstionFactory

23.hibernate的优势?

答:1.JDBC访问数据库的代码作了封装,大大简化了数据访问层繁琐的重复性代码。

2.Hibernate 是一个基于JDBC 的主流持久化框架,是一个优秀的ORM 实现。他很大程度

的简化DAO 层的编码工做

3.hibernate 的性能很是好,由于它是个轻量级框架。映射的灵活性很出色。它支持各

种关系数据库,从一对一到多对多的各类复杂关系。

24.什么是 Hibernate 延迟加载?  

答:延迟加载机制是为了不一些无谓的性能开销而提出来的,所谓延迟加载就是当在真正须要

数据的时候,才真正执行数据加载操做。在Hibernate中提供了对实体对象的延迟加载以及

对集合的延迟加载,另外在Hibernate3中还提供了对属性的延迟加载。

25.Hibernate 中类之间的关联关系有几种?

答:many-to-oneone-to-manymany-to-manyone-to-one

26.说下 Hibernate的缓存机制

答:Ahibernate一级缓存

1hibernate支持两个级别的缓存,默认只支持一级缓存;

2)每一个Session内部自带一个一级缓存;

3)某个Session被关闭时,其对应的一级缓存自动清除;

Bhibernate二级缓存

(1) 二级缓存独立于session,默认不开启;

27.Hibernate 的查询方式  

答:本地SQL查询、CriteriaHql

28.如何优化 Hibernate?  

答:1.使用双向一对多关联,不使用单向一对多
2.灵活使用单向一对多关联
3.不用一对一,用多对一取代
4.配置对象缓存,不使用集合缓存
5.一对多集合使用Bag,多对多集合使用Set
6. 继承类使用显式多态
7. 表字段要少,表关联不要怕多,有二级缓存撑腰

29.Hibernate中一级缓存与二级缓存

答:Hibernate缓存包括两大类:Hibernate一级缓存和Hibernate二级缓存

Hibernate一级缓存又称为“Session的缓存”,它是内置的,不能被卸载(不能被卸载的意思就是这种缓存不具备可选性,必须有的功能,不能够取消session缓存)。因为Session对象的生命周期一般对应一个数据库事务或者一个应用事务,所以它的缓存是事务范围的缓存。第一级缓存是必需的,不容许并且事实上也没法卸除。在第一级缓存中,持久化类的每一个实例都具备惟一的OID

Hibernate二级缓存又称为“SessionFactory的缓存”,因为SessionFactory对象的生命周期和应用程序的整个过程对应,所以Hibernate二级缓存是进程范围或者集群范围的缓存,有可能出现并发问题,所以须要采用适当的并发访问策略,该策略为被缓存的数据提供了事务隔离级别。第二级缓存是可选的,是一个可配置的插件,在默认状况下,SessionFactory不会启用这个插件。须要程序员手动开启。  session之间能够共享数据  应用级别的的缓存

30.Hibernate中关于对象的三种状态?

答:瞬时态(没有主键,new出来的)、持久态(session开启,有主键)、隔离态(session关闭,有主键)。

31.Hibernate二级缓存中存放数据的原则?适合放到二级缓存中的数据?

答:1 不多被修改的数据   

2 不是很重要的数据,容许出现偶尔并发的数据   

3 不会被并发访问的数据   

4 常量数据   

不适合存放到第二级缓存的数据?   

1常常被修改的数据   

2绝对不容许出现并发访问的数据,如财务数据,绝对不容许出现并发   

3与其余应用共享的数据

32.Hibernate查找对象如何应用缓存?

答:当Hibernate根据ID访问数据对象的时候,首先从Session一级缓存中查;查不到,若是配置了二级缓存,那么从二级缓存中查;若是都查不到,再查询数据库,把结果按照ID放入到缓存删除、更新、增长数据的时候,同时更新缓存。

33.Hibernate拒接链接、服务器崩溃的缘由?

答:1. db没有打开

2. 网络链接可能出了问题

3. 链接配置错了

4. 驱动的driverurl是否都写对了

5. LIB下加入相应驱动,数据链接代码是否有误

6. 数据库配置可能有问题

7. 当前链接太多了,服务器都有访问人数限制的

8. 服务器的相应端口没有开,即它不提供相应的服务

 

 

 

34.过滤器和拦截器的区别

答:过滤器:在目标资源以前进行的操做

过滤全部的内容,好比actionservletjsphtml

拦截器:在目标资源以前进行的操做

不能拦截全部的内容,拦截action,不能拦截jsp,不能拦截html

拦截器和过滤器之间有不少相同之处,可是二者之间存在根本的差异。其主要区别为如下几点:
1)拦截器是基于JAVA反射机制的,而过滤器是基于函数回调的。
2)拦截器依赖于Servlet容器,而过滤器依赖于Servlet容器
3)拦截器只能对Action请求起做用,而过滤器能够对几乎全部的请求起做用。
4)拦截器能够访问Action上下文、值栈里的对象,而过滤器不能
5)在Action的生命周期中,拦截器能够屡次被调用,而过滤器只能在容器初始化时被调用一次。

35.Mybaties优劣势

答:1. 入门简单,即学即用,提供了数据库查询的自动对象绑定功能,并且延续了很好的SQL使用经验,对于没有那么高的对象模型要求的项目来讲,至关完美。

2. 能够进行更为细致的SQL优化,能够减小查询字段。

3. 缺点就是框架仍是比较简陋,功能尚有缺失,虽然简化了数据绑定代码,可是整个底层数据库查询实际仍是要本身写的,工做量也比较大,并且不太容易适应快速数据库修改。

4. 二级缓存机制不佳

36.Mybatis中一级缓存与二级缓存区别?

答:一级缓存是SqlSession级别的缓存。在操做数据库时须要构造 sqlSession对象,在对象中有一个(内存区域)数据结构(HashMap)用于存储缓存数据。不一样的sqlSession之间的缓存数据区域(HashMap)是互相不影响的。

  一级缓存的做用域是同一个SqlSession,在同一个sqlSession中两次执行相同的sql语句,第一次执行完毕会将数据库中查询的数据写到缓存(内存),第二次会从缓存中获取数据将再也不从数据库查询,从而提升查询效率。当一个sqlSession结束后该sqlSession中的一级缓存也就不存在了。Mybatis默认开启一级缓存。

  二级缓存是mapper级别的缓存,多个SqlSession去操做同一个Mappersql语句,多个SqlSession去操做数据库获得数据会存在二级缓存区域,多个SqlSession能够共用二级缓存,二级缓存是跨SqlSession的。

  二级缓存是多个SqlSession共享的,其做用域是mapper的同一个namespace,不一样的sqlSession两次执行相同namespace下的sql语句且向sql中传递参数也相同即最终执行相同的sql语句,第一次执行完毕会将数据库中查询的数据写到缓存(内存),第二次会从缓存中获取数据将再也不从数据库查询,从而提升查询效率。Mybatis默认没有开启二级缓存须要在setting全局参数中配置开启二级缓存。

37.Ssh整合流程及注意事项

答:原理:http://blog.csdn.net/u014010769/article/details/44993533

注意事项:http://blog.csdn.net/github_32658299/article/details/53469124

38.Ssm整合流程及注意事项?

: 流程:http://blog.csdn.net/zhshulin/article/details/37956105/

注意事项:http://blog.csdn.net/github_32658299/article/details/53957585

 

 

 

39.ssm的优缺点及使用场景。

答:1.Mybatishibernate不一样,它不彻底是一个ORM框架,由于MyBatis须要程序员本身编写Sql语句,不过mybatis能够经过XML或注解方式灵活配置要运行的sql语句,并将java对象和sql语句映射生成最终执行的sql,最后将sql执行的结果再映射生成java对象。

2.Mybatis学习门槛低,简单易学,程序员直接编写原生态sql,可严格控制sql执行性能,灵活度高,很是适合对关系数据模型要求不高的软件开发,例如互联网软件、企业运营类软件等,由于这类软件需求变化频繁,一但需求变化要求成果输出迅速。可是灵活的前提是mybatis没法作到数据库无关性,若是须要实现支持多种数据库的软件则须要自定义多套sql映射文件,工做量大。

3.Hibernate对象/关系映射能力强,数据库无关性好,对于关系模型要求高的软件(例如需求固定的定制化软件)若是用hibernate开发能够节省不少代码,提升效率。可是Hibernate的学习门槛高,要精通门槛更高,并且怎么设计O/R映射,在性能和对象模型之间如何权衡,以及怎样用好Hibernate须要具备很强的经验和能力才行。

总之,按照用户的需求在有限的资源环境下只要能作出维护性、扩展性良好的软件架构都是好架构,因此框架只有适合才是最好。

40.Hibernatemybatis的区别?

答:Hibernate:hibernate是一个标准的ORM框架,不须要写sql语句,维护关系比较复杂,sql语句自动生成对sql语句优化,修改比较困难。

Hibernate的优缺点:

优势面向对象开,不须要本身写sql语句。若是进行数据库迁移不须要修改sql语句,只须要修改一下方言

缺点hibernate维护数据表关系比较复杂。彻底hibernate来管理数据表的关系,对于咱们来讲彻底是透明的不易维护。

Hibernate自动生成sql语句,生成sql语句比较复杂,比较难挑错。

Hibernate因为是面向对象开发,不能开发比较复杂的业务。

用场景:

适合需求变化较少的项目,好比ERPCRM等等

Mybatis框架jdbc框架进行封装,屏蔽了jdbc的缺点,开发简单。

Mybatis只须要程序员关注sql自己,不须要过多的关注业务。对sql的优化,修改比较容易

适应场景:适合需求变化无穷项目,好比:互联网项目

41.spring怎样实现单例?

答:http://blog.csdn.net/cs408/article/details/48982085

42.Spring事务传播机制和数据库隔离级别

答:http://www.cnblogs.com/sxl525blogs/p/3674834.html

43.mybatis如何处理批量插入

答:http://chenzhou123520.iteye.com/blog/1583407/

44.mybatis插入一条数据如何返回主键

答:须要在mybatismapper.xml中指定keyProperty属性,示例以下:

 

 

 

 

 

45.hibernate的五个核心类

答:1Configuration接口:配置Hibernate,根据其启动Hibernate,建立SessionFactory对象;

2SessionFactory接口:初始化Hibernate,充当数据存储源的代理,建立session对象,SessionFactory是线程安全的,意味着它的同一个实例能够被应用的多个线程共享,是重量级二级缓存;

3session接口:负责保存、更新、删除、加载和查询对象,是一个非线程安全的,避免多个线程共享一个session,是轻量级,一级缓存。

4Transaction接口:管理事务。能够对事务进行提交和回滚;

5QueryCriteria接口:执行数据库的查询。

46.springhibernate管理事务有啥区别

答:1、从编码上说,hibernate的事务管理是硬编码,是写在程序之中的。这就形成了,若是须要调整,就要修改源码,从新编译。

2、从事务控制的位置来讲:hibernate是持久层框架,事务是控制在持久层的,这样就形成了越权操做。事务应放在业务层,而非持久层

3、从代码维护上来讲:hibernate控制事务,须要在每一个须要事务支持的地方编写代码,后期维护不便。

相关文章
相关标签/搜索