面试题-初级Java工程师-20170621

1、简述struts2的执行流程?

Struts 2框架本身大致可以分为3个部分:核心控制器FilterDispatcher、业务控制器Action和用户实现的企业业务逻辑组件。

核心控制器FilterDispatcherStruts 2框架的基础,包含了框架内部的控制流程和处理机制。业务控制器Action和业务逻辑组件是需要用户来自己实现的。用户在开发Action和业务逻辑组件的同时,还需要编写相关的配置文件,供核心控制器FilterDispatcher来使用。 Struts 2的工作流程相对于Struts 1要简单,与WebWork框架基本相同,所以说Struts 2WebWork的升级版本。

基本简要流程如下:

1、客户端浏览器发出HTTP请求。

2、根据web.xml配置,该请求被FilterDispatcher接收。

3、根据struts.xml配置,找到需要调用的Action类和方法, 并通过IoC方式,将值注入给Aciton

4Action调用业务逻辑组件处理业务逻辑,这一步包含表单验证。

5Action执行完毕,根据struts.xml中的配置找到对应的返回结果result,并跳转到相应页面。

6、返回HTTP响应到客户端浏览器。

2struts2如何实现防止重复刷新?

1)修改Struts.xml配置

/pages/MainPage.jsp

   

此部分设置表单重复提交时指向的页面。

default

default

此部分设置拦截器。

2 修改jsp页面

找到对应的action的页面,在表单下新增

3、struts2中如何实现自定义拦截器

1)实现interceptor接口

2)重写init()interceptor()destroy()方法

3)struts2.xml配置文件中声明自定义拦截器和自定义拦截器栈,配置使用自定义拦截器。

   

      

         

        

          

          

          

                 

           

                 

           

  

4、hibernate如何实现分页查询

Public list findAll(int page,int pageSize){

Return this.getHibernateTemplate().execute(

new HibernateCallback>(){

@Override

Public list doInHibernate(Session session) throws HibernateException,SQLExceptino{

Query query=session.createQuery(from ?);//查询bean

query.setFirstResult((page-1)*pageSize);

query.setMaxResults(pageSize);//每页显示记录数

Return query.list();

}

}

);

}

5、hibernate中HQL于QBC的区别?

HQL接近于SQL语句,可读性较好,而且在多表连接上表现优秀,有iterate方法。

QBC提供面向对象接口,编译时就可以解析,便于排错,方便用户扩展criteria接口,不支持报表查询和子查询。

6、简述hibernate常见优化策略?

1)制定合理的缓存策略

2)选用基于version的用乐观锁代替悲观锁

3)采用合理的session管理机制

4)使用延迟加载特效

5)开发过程中开启hibernate.show_sql属性用于查看sql

7、如何在web项目中初始化Spring的Ioc容器?

就是对含有BeanDefinition信息的resource的定位、载入、解析、注册四个过程, 最终我们配置的bean以BeanDefinition的数据结构存在于Ioc容器既内存中。这里不涉及bean的注入,不产生任何bean。

8、@Autowired和@Resource区别?

@Autowired是Spring自己的,默认安类型装备配bean;

@Resource是Java自带的,默认按名称装配,也可以按类型装配。

9、什么是Spring声明式事务,用的什么原理?Spring事务管理要不要手工捕获异常,为什么?

Spring事务管理主要是为了保证数据的一致性,事务存在于service层,通过事务属性来定义:传播行为、隔离级别、超时限制、只读设置、回滚设置。

基于声明式事务管理。

不要。

Spring会自动捕获异常,来决定是否回滚,或向下抛出。

10、SpringMVC的框架结构?

Model View Control

11、SpringMVC参数绑定的过程?参数绑定的参数类型?

而在springmvc中,接收页面提交的数据是通过方法形参来接收的,通过RequestMapping对应后台方法。从客户端请求的key/value数据,经过参数绑定,将key/value数据绑定到controller方法的形参上,然后就可以在controller中使用该参数了。

在参数绑定过程中,如果遇HttpServletRequest对象、HttpServletResponse对象、HttpSession对象、Model/ModelMap对象就直接进行绑定。也就是说,我们可以在controller的方法的形参中直接定义上面这些类型的参数,springmvc会自动绑定。但是前台页面的输入名要和后台属性命一致。

12、Strust2和SpringMVC的区别?

1)Struts2是类级别的拦截, 一个类对应一个request上下文,SpringMVC是方法级别的拦截,一个方法对应一个request上下文,而方法同时又跟一个url对应,所以说从架构本身上SpringMVC就容易实现restful url,而struts2的架构实现起来要费劲,因为Struts2中Action的一个方法可以对应一个url,而其类属性却被所有方法共享,这也就无法用注解或其他方式标识其所属方法了。

2)由上边原因,SpringMVC的方法之间基本上独立的,独享request response数据,请求数据通过参数获取,处理结果通过ModelMap交回给框架,方法之间不共享变量,而Struts2搞的就比较乱,虽然方法之间也是独立的,但其所有Action变量是共享的,这不会影响程序运行,却给我们编码 读程序时带来麻烦,每次来了请求就创建一个Action,一个Action对象对应一个request上下文。

3)由于Struts2需要针对每个request进行封装,把request,session等servlet生命周期的变量封装成一个一个Map,供给每个Action使用,并保证线程安全,所以在原则上,是比较耗费内存的。

4) 拦截器实现机制上,Struts2有以自己的interceptor机制,SpringMVC用的是独立的AOP方式,这样导致Struts2的配置文件量还是比SpringMVC大。

5)SpringMVC的入口是servlet,而Struts2是filter(这里要指出,filter和servlet是不同的。以前认为filter是servlet的一种特殊),这就导致了二者的机制不同,这里就牵涉到servlet和filter的区别了。

6)SpringMVC集成了Ajax,使用非常方便,只需一个注解@ResponseBody就可以实现,然后直接返回响应文本即可,而Struts2拦截器集成了Ajax,在Action中处理时一般必须安装插件或者自己写代码集成进去,使用起来也相对不方便。

7)SpringMVC验证支持JSR303,处理起来相对更加灵活方便,而Struts2验证比较繁琐,感觉太烦乱。

8)spring MVC和Spring是无缝的。从这个项目的管理和安全上也比Struts2高(当然Struts2也可以通过不同的目录结构和相关配置做到SpringMVC一样的效果,但是需要xml配置的地方不少)。

9)设计思想上,Struts2更加符合OOP的编程思想, SpringMVC就比较谨慎,在servlet上扩展。

10)SpringMVC开发效率和性能高于Struts2。

11)SpringMVC可以认为已经100%零配置。

 

你可能感兴趣的:(Java,面试,数组)