S2SH面试题 你知道哪些呢

Struts2:

为什么每次请求都要创建一个Action对象?

truts2每次请求的时候都会创建一个action的实例,这样会保证线程的安全。struts1只是在第一次请求的时候创建一个action的实例,以后每次相同的请求
都直接从内存中去读取,它是单例模式,安全性不行。 

ModelDriven拦截器的配置中refreshModelBeforeResult解决了什么问题?

在数据输出之前将数据接收的Bean里面的数据清空。解决了数据混淆的可能性。

为什么在web.xml中配置的StrutsPrepareAndExecuteFilter要过滤所有的请求?

为了   1.可以将数据进行过滤
       2.可以进行数据的转码将数据进行统一的编码

请你给我谈谈ValueStack?

Struts2是如何实现MVC设计模式的?

在Struts2里面是将每次页面的请求进行处理,然后将请求需要输出的数据转发的需要做数据显示的页面,Struts2只是起一个数据接受和转接的功能,就是
Controler控制器,而传来数据的页面叫View显示层,Struts2将数据提交给进行处理的类叫Model模型层,专门进行数据处理和数据库的链接。

Spring:

你为什么要用Spring?

使用Spring 1.主要将各个框架进行有效的联系起来,缩短实际编程的时间,起一个润滑剂的作用。
           2.可以将各个框架进行有效的管理和控制,让数据传输中安全。

请你聊一聊IOC/DI?

依赖注入和控制反转Spring的两大基础作用
主要是将所有组件在Spring提供的外部容器中加载,提高安全性,减低耦合性,使各个框架或者类之间的依赖性降低。

什么是声明式的事务管理?为什么要使用声明式的事务管理?Spring如何实现声明式的事务管理?

声明事物管理主要是将在进行对数据库中数据进行添加或者修改的时候需要执行事物管理。主要是避免在执行数据修改和添加的时候数据添加或者修改不完全,导致数据丢失。
Spring是使用AOP面向切面的思想进行事物管理的。

把spring和hibernate集成,定义事务管理特性的时候,为何要将除了添加、删除、更新操作之外的方法,即主要执行查询任务的方法定义为read-only?
因为添加和删除和更新都涉及到数据库的修改,而查询并为涉及数据修改,所以只需要定义只读,这样可以提高效率,进行更加方便的事物管理。而事物管理主要是为添
加和删除和更新设计的

Hibernate:

请你谈谈你对OR映射的理解?

将数据库里面的每一张表都映射成一个实体。

很多人说Hibernate不适合大项目,性能有问题,你是如何理解的?

因为Hibernate属于大型框架,里面对许多方法的封装比较多,让SQL控制权降低。这样的话,适用性就会降低,在不必要的操作上会浪费时间。但是只要将Hibernate里的配
置进行优化,也能提高其性能。

Hibernate为什么一定要定义一个数据库标识?

可以让映射文件变得简洁,消除无用的噪音(比如TBL_前缀等)。Hibernate使用的默认策略是几乎什么都不做,所以使用标识的作用就是使数据操作更加简洁和方便

为什么Hibernate建议你的实体类实现hashCode和equals方法?

因为Hibernate使用了一级和二级缓存,很多查询为了提高效率Hibernate都会先从缓存中进行查找,然后再从数据库进行查找。而HashCode是唯一的,所以这样避免数据操作出
现数据混淆的可能,而equals的作用是对比Hibernate缓存中数据是否一致。

谈谈你对Hibernate实体类中的数据库标识与数据库主键之间关系的认识?

数据库标识是为了方便和简洁映射文件,而主键是为了使数据不会重复。

谈谈你对Hibernate关联映射与数据库外键之间关系的认识?

Hibernate在进行映射的时候会将数据库的关系也进行映射将数据库中的外键也使用标签的形式进行管理,这样在人为操作的时候就不需要手动的管理数据库关系了。

调用session.save()方法,hibernate一定会发出insert语句吗?谈谈你的理解

不会,具体执行步骤如下:
     1. 首先在Session内部缓存中进行查找,如果发现则直接返回。
     2. 执行实体类对应的Interceptor.isUnsaved方法(如果有的话),判断对象是否为未保存状态。
      3. 根据unsaved-value判断对象是否处于未保存状态。
      4. 如果对象未保存(Transient状态),则调用save方法保存对象。
      5. 如果对象未已保存(Detached状态),则调用update方法将对象与Session重新关联。 。

调用session.update()方法,hibernate一定会发出update语句吗?谈谈你的理解

理解同上

请你聊一下以下名词、概念或用法:lazy、lazy=”extra”、inverse、fetch、fetch=”join”、fetch=”subselect”、batch-size

lazy懒,lazy=“extra”extra属性是不大容易重视的,其实它和true差不多,但有个小的智能的地方是,即调用集合的size/contains等方法的时候,hibernate并不会去加载整个
集合的数据,而是发出一条聪明的SQL语句,以便获得需要的值,只有在真正需要用到这些集合元素对象数据的时候,才去发出查询语句加载所有对象的数据
inverse控制翻转,主要是为了让谁去维护关系,一般是在主表中配置,将维护关系的只能交给主键。
fetch取来,fetch="join"主要是在查询的时候Hibernate会自动查询有关联的表。fetch="join",hibernate会通过select语句使用外连接来加载其关联实体或集合,此时lazy会
失效fetch="subselect",另外发送一条select语句抓取在前面查询到的所有实体对象的关联集合
batch-size配置这个属性是让Hibernate在执行批量的数据库操作

配置了lazy=”true”一定会实现懒加载吗?

不一定,因为如果再配置中你也使用fetch属性的话此时lazy就会失效

请你谈谈Hibernate中的“N+1”问题

主要是如果再一般的查询时,如果需要查询很多次,就需要像数据库发送很多条SQL语句,而且,会返回很多个结果,而Hibernate中使用N+1策略时执行Criteria时,会将自动
进行SQL构造,并且映射到实体Bean中,就只会返回一个结果,这样不仅提高了性能,而且在处理返回值的时候也变得比较轻松。

请你谈谈Hibernate有哪些最佳实践?

数据库建模,ORM是Hibernate中比较经典。



  • 5
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
对于eclipse、s2sh和extjs源码的下载,我们可以采取以下步骤: 1. 首先,我们需要使用搜索引擎,如Google或百度,在相关的官方网站或开源社区中搜索Eclipse、S2SH和ExtJS的源码下载链接。 2. 对于Eclipse的源码,我们可以访问Eclipse官方网站(https://www.eclipse.org/downloads/)下载Eclipse IDE的安装包,然后在安装包中找到源码文件。 3. 关于S2SHStruts2+Spring+Hibernate)的源码,我们可以在Struts2、SpringHibernate的官方网站上找到相应的源码下载链接。我们可以访问它们的官方网站,如Struts2(https://struts.apache.org/download.cgi)、Spring(https://spring.io/projects/spring-framework)和Hibernate(https://hibernate.org/orm/downloads/)。 4. 对于ExtJS的源码,我们可以访问Sencha公司(原ExtJS开发公司)的官方网站(https://www.sencha.com/products/extjs/#overview)下载相应的版本。在官方网站上,我们可以找到下载源码的链接或通过付费订阅来获取它们。 需要注意的是,这些框架的源码通常是以压缩包的形式提供的,我们需要下载后解压缩才能查看源码。此外,对于如此流行的框架,也可以在许多开源社区中找到相应的源码下载链接,如GitHub、CodePlex、Bitbucket等。在这些社区搜索相应的框架名称,通常可以找到相应的源码仓库。 总的来说,下载Eclipse、S2SH和ExtJS的源码需要访问官方网站或开源社区,并根据相关的下载链接或搜索结果来获取源码文件。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值