SSH中一些典型的问题

struts2

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

是出于对线程安全的考虑,每个request都不会相互影响

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

先把旧的model对象从ValueStack中移除,然后再把新的model对象压入ValueStack!

官方解释:

set to true if you want the model to be refreshed on the value stack after action execution and before result execution. The setting is useful if you want to change the model instance during the action execution phase, like when loading it from the data layer. This will result in getModel() being called at least twice.

一般不需要配,顺便骂句谁出的这么坑爹的问题。

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

其实这里可以选择性的过滤,但是一般大家都是/*,所有的请求都必须经过StrutsPrepareAndExecuteFilter这个请求转发器。

它会去找struts.xml文件,一般放在src下面的第一层目录,然后找到相应的资源去转发。

1-4:请你给我谈谈ValueStack?     

所谓值栈就是在一个栈里面堆了一大坨的数值,在action中可以这样获得ValueStack vs1 = ActionContext.getContext().getValueStack();

其实值栈就类似于一个map的容器,里面存放的是键值对,但是有个区别,这个值栈的键都是String类型的。我们一般可以这样来拿出值栈里面的内容

名字属性获取 : 也可以用el表达式${aa}或者ognl表达式

其中ognl表达式主要就是去访问值栈,它的查找路线为用于按request > session > application顺序访问其属性(attribute),#user.username相当于按顺序在以上三个范围(scope)内读取user.username属性,直到找到为止

1-5:Struts2是如何实现MVC设计模式的?  

自己去理解,按自己的request走一遍就知道了。不懂MVC还用STRUTS?

 

Spring

2-1:你为什么要用Spring? 
XXX,为什么要用?好用才用的啊。spring有很多作用比如他的安全机制,事务管理,日志管理等等。。最主要的是把耦合度降到最低。
2-2:请你聊一聊IOC/DI? 
把工厂和对象生成这两者独立分隔开来,提高灵活性和可维护性。具体的太多了。
2-3:什么是声明式的事务管理?为什么要使用声明式的事务管理?Spring如何实现声明式的事务管理? 
Spring 的声明式事务管理在底层是建立在 AOP 的基础之上的。其本质是对方法前后进行拦截,然后在目标方法开始之前创建或者加入一个事务,在执行完目标方法之后根据执行情况提交或者回滚事务。 
使用声明式的事务管理可重用性高。这里就列举一种最常用的配置吧。

Xml代码  收藏代码
  1. <</span>bean id="dataSource"  
  2.         class="org.springframework.jdbc.datasource.DriverManagerDataSource">  
  3.         <</span>property name="driverClassName" value="${jdbc.driverClassName}" />  
  4.         <</span>property name="url" value="${jdbc.url}" />  
  5.         <</span>property name="username" value="${jdbc.username}" />  
  6.         <</span>property name="password" value="${jdbc.password}" />  
  7.     </</span>bean>  
  8.     <</span>bean id="transactionManager"  
  9.         class="org.springframework.orm.hibernate3.HibernateTransactionManager">  
  10.         <</span>property name="sessionFactory">  
  11.             <</span>ref local="sessionFactory" />  
  12.         </</span>property>  
  13.     </</span>bean>  
  14.       
  15.       
  16.     <</span>bean id="nativeJdbcExtractor" lazy-init="true"  
  17.         class="org.springframework.jdbc.support.nativejdbc.SimpleNativeJdbcExtractor" />  
  18.     <</span>bean id="lobHandler" lazy-init="true"  
  19.         class="org.springframework.jdbc.support.lob.OracleLobHandler">  
  20.         <</span>property name="nativeJdbcExtractor">  
  21.             <</span>ref bean="nativeJdbcExtractor" />  
  22.         </</span>property>  
  23.     </</span>bean>  
  24.       
  25.       
  26.     <</span>bean id="sessionFactory"  
  27.         class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">  
  28.         <</span>property name="dataSource" ref="dataSource" />  
  29.         <</span>property name="lobHandler" ref="lobHandler" />  
  30.         <</span>property name="mappingDirectoryLocations">  
  31.             <</span>list>  
  32.                 <</span>value>classpath*:XXX</</span>value>  
  33.             </</span>list>  
  34.         </</span>property>  
  35.         <</span>property name="hibernateProperties">  
  36.             <</span>props>  
  37.                  
  38.                 <</span>prop key="hibernate.dialect">${hibernate.dialect}</</span>prop>  
  39.                 <</span>prop key="hibernate.show_sql">${hibernate.show_sql}</</span>prop>  
  40.                 <</span>prop key="hibernate.cache.provider_class">${hibernate.cache.provider_class}</</span>prop>  
  41.                 <</span>prop key="hibernate.default_schema">${hibernate.default_schema}</</span>prop>  
  42.             </</span>props>  
  43.         </</span>property>  
  44.     </</span>bean>  
  45.     <</span>bean id="txProxyTemplate" abstract="true"  
  46.         class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">  
  47.         <</span>property name="transactionManager">  
  48.             <</span>ref local="transactionManager"></</span>ref>  
  49.         </</span>property>  
  50.         <</span>property name="transactionAttributes">  
  51.             <</span>props>  
  52.                 <</span>prop key="save*">PROPAGATION_REQUIRED,-exception</</span>prop>  
  53.                 <</span>prop key="update*">PROPAGATION_REQUIRED,-exception</</span>prop>  
  54.                 <</span>prop key="delete*">PROPAGATION_REQUIRED,-exception</</span>prop>  
  55.                 <</span>prop key="*">PROPAGATION_REQUIRED,readOnly</</span>prop>  
  56.             </</span>props>  
  57.         </</span>property>  
  58.     </</span>bean>  

 2-4:把spring和hibernate集成,定义事务管理特性的时候,为何要将除了添加、删除、更新操作之外的方法,即主要执行 查询任务的方法定义为read-only? 
应用这项属性时,底层的数据库可以对读取进行最优化,但要配合PROPAGATION_REQUIRED,PROPAGATION_REQUIRES_NEW或PROPAGATION_NESTED使用,即只能在事物中使用。简单的说就是增快查询速度。

Hibernate

3-1:请你谈谈你对OR映射的理解? 
对象关系映射,把关系数据库的数据结构与你的对象关联起来,以操作对象操纵关系数据库。
3-2:很多人说Hibernate不适合大项目,性能有问题,你是如何理解的? 
好不好是看你怎么用,不一定用了hibernate就不使用sql了,一些复杂的 比如说统计需要的数据一般都是直接用sql去执行的。使用hibernate最重要的一点是
看你如何去使用懒加载,在适当的时候使用懒加载会提高你的性能。
3-3:Hibernate为什么一定要定义一个数据库标识 ? 
因为要对应数据库表的主键,唯一性原则。
3-4:为什么Hibernate建议你的实体类实现hashCode和equals方法? 
多对多双向关系,如果hashCode和equals正常写之,将出现load不上的问题。
经常使用set集合来保存相关对象,而set集合是不允许重复的。而hibernate正是去"=="比较两个对象是否是同一个,所以它会去比较hashCode和用equals来比较。
3-5:谈谈你对Hibernate实体类中的数据库标识与数据库主键之间关系的认识? 
是对象与关系数据库中的表识别的唯一标识。
3-6:谈谈你对Hibernate关联映射与数据库外键之间关系的认识? 
关系映射中一个外键就相当于一个对象的实例,这样就形成了1-1 ,1-N,N-1,N-N这种关系。
3-7:调用session.save()方法,hibernate一定会发出insert语句吗?谈谈你的理解 
save, 把一个瞬态的实例持久化标识符,及时的产生,它要返回标识符,在save之前hibernate会去根据主键查一次,看能否保存。
3-8:调用session.update()方法,hibernate一定会发出update语句吗?谈谈你的理解 
update是把一个脱管状态的对象或自由态对象(一定要和一个记录对应)更新到数据库。在update之前hibernate会去根据主键查一次,看能否可以更新。
3-9:请你聊一下以下名词、概念或用法:lazy、lazy=”extra”、inverse、fetch、fetch=”join”、fetch=”subselect”、batch-size 
lazy概念:只有真正使用该对象内普通属性时,才会创建,对于hibernate而言,正真使用的时候才会发出sql,load支持lazy(懒加载),get不支持懒加载。
extra:一种比较聪明的懒加载策略,即调用集合的size/contains等方法的时候,hibernate
lazy=”extra”时并不会去加载整个集合的数据,而是发出一条聪明的SQL语句,以便获得需要的值,只有在真正需要用到这些集合元素对象数据的时候,才去发出查询语句加载所有对象的数据。
inverse – 标记由哪一方来维护关联关系(双向关联中会用到,inverse默认值为false。如果inverse设置为true,表示将由对方维护两者之间的关联关系。
fetch是抓取策略:
fetch = "select"是在查询的时候先查询出一端的实体,然后在根据一端的查询出多端的实体,会产生1+n条sql语句;
fetch = "join"是在查询的时候使用外连接进行查询,不会差生1+n的现象
fetch=”subselect”发送一条select语句抓取在前面查询到的所有实体对象的关联集合

batch-size 

是来设置批量更新的HQL/SQL数量 如果达到此数量会提交给数据库 但是生成的HQL/SQL语句一个也不会少
3-10:配置了lazy=”true”一定会实现懒加载吗? 
get()是不能实现懒加载的。必须使用load()。fetch要使用select 
3-11:请你谈谈Hibernate中的“N+1”问题 
一对多是查询一次会带出N次查询。就是一些主外键关系的对象。当进行一个表的查询时,当这个表与另外的表是多对一,或者是一对多关联时,就会出现N+1问题,当查询一条语句时,比如主键name=1,而与这个 name相关联的另一张表对应name的有N个记录,这时就出另外发出N条语句去查询,而我又不要那些记录,这时就是N+1问题。

转载于:https://www.cnblogs.com/zch-lxh1314/p/7055239.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/371903.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

为什么计算机连接不上打印机,为什么电脑连接打印机后却没反应

2013-12-12我的笔记本怎么连接不了打印机 显示是这样的好&#xff1a;以下方法供您参考&#xff1a;看一下您的系统服务中这两个(最上面 和最下面的是不是没启用)总之是您的局域网连接没有连接上&#xff0c;要不在网上邻居里您会看到其他的机器的&#xff0c;这是搜到的解决的…

JavaFX 2.0布局窗格– BorderPane

BorderPane非常适合开发更复杂的布局。 通常&#xff0c; BorderPane提供五个不同的区域&#xff1a;顶部&#xff0c;右侧&#xff0c;底部&#xff0c;左侧和中央。 您可以通过调用setTop/setBottom/set…方法将Node设置到每个区域。 这种方法使开发“类似于网站”的应用程序…

页面排版简单样式

页面排版简单样式demo <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns"http://www.w3.org/1999/xhtml" xml:lang"zh-cn"> &l…

心电图是模拟计算机吗,心电图仪

心电图仪是由威廉爱因托芬(W. Einthoven,1860-1927)发明的。 什么是心电图仪(机)M311986 心电图仪能将心脏活动时心肌激动产生的生物电信号(心电信号)自动记录下来&#xff0c;为临床诊断和科研常用的医疗电子仪器。国内一般按照记录器输出道数划分为&#xff1a;单道、三道、六…

计算机的内存和cpu,内存与CPU二者之间的关系_Intel服务器CPU_服务器产业-中关村在线...

“在一起&#xff0c;在一起”&#xff0c;相信这也是很多人希望的结果&#xff0c;无论是从技术角度&#xff0c;还是从空间角度&#xff0c;似乎二者都有着很多理由被放在一起完成任务。但是&#xff0c;二者为何一直没有“在一起”呢&#xff1f;也许这句歌词可以回答原因&a…

phonegap工程中修改app的名字

针对phonegap比较高的版本&#xff0c;我的是6.4.0。 在phonegap工程中&#xff0c;当添加了iOS和android平台或多个平台后&#xff0c;工程进行了开发&#xff0c;然后觉得app的名字想修改一下&#xff08;比如在手机上显示的app名字&#xff0c;或者通过ipa导入安装或者apk包…

菜鸟之路-浅谈设计模式之单例设计模式

单例设计模式 定义&#xff1a;确保一个类仅仅有一个实例&#xff0c;并且自行实例化并向整个系统提供这个实例。单例模式是一种经常使用的软件设计模式。在它的核心结构中仅仅包括一个被称为单例的特殊类。通过单例模式能够保证系统中一个类仅仅有一个实例并且该实例易于外界訪…

MVC如何使用开源分页插件shenniu.pager.js

最近比较忙&#xff0c;前期忙公司手机端接口项目&#xff0c;各种开发调试发布现在几乎上线无问题了&#xff1b;虽然公司项目忙不过在期间抽空做了两件个人觉得有意义的事情&#xff0c;一者使用aspnetcore开发了个人线上项目&#xff08;要说线上其实只能ip访问&#xff0c;…

四. 基于环视Camera的BEV感知算法-PETR

目录 前言0. 简述1. 算法动机&开创性思路2. 主体结构3. 损失函数4. 性能对比5. PETRv2总结下载链接参考 前言 自动驾驶之心推出的《国内首个BVE感知全栈系列学习教程》&#xff0c;链接。记录下个人学习笔记&#xff0c;仅供自己参考 本次课程我们来学习下课程第四章——基…

Java泛型面试问题

Java面试中的通用面试问题在相当长的时间内在Java 5周围越来越普遍&#xff0c;许多应用程序都转移到Java 5上&#xff0c;并且几乎所有新的Java开发都发生在Tiger&#xff08;Java 5的代号&#xff09;上。 泛型和Java 5功能&#xff08;例如Enum&#xff09;的重要性&#xf…

隐层元素闪一下_太阳一直依靠什么元素在燃烧,地球上的重元素又是怎么来的?...

本文基于回答网友一个这样的问题&#xff1a;太阳目前氢核聚变是氦碳氧稳定燃烧地球上的铁镍重元素哪里来的&#xff1f;可以说&#xff0c;这是一个毫无逻辑乱七八糟的问题&#xff0c;但既然邀请回答&#xff0c;就从中挑出几个稍显合理的问题说明一下。太阳核心每时每刻都在…

基于Token的WEB后台认证机制

基于Token的WEB后台认证机制 几种常用的认证机制 HTTP Basic Auth HTTP Basic Auth简单点说明就是每次请求API时都提供用户的username和password&#xff0c;简言之&#xff0c;Basic Auth是配合RESTful API 使用的最简单的认证方式&#xff0c;只需提供用户名密码即可&#xf…

saltstack

第一&#xff1a;安装前准备&#xff1a; 声明我用的是ubuntu 16.04的系统 1.修改主机名&#xff0c;并保证两台机器可以互相ping同主机名 ip1 master_hostname ip2 slave_hostname 第二&#xff1a;安装 服务器安装 yum install salt-master -y客户端安装 yum install salt…

ios 百度地图指定区域_获取百度地图可视区域范围的数据

有个业务场景&#xff0c;需要根据获取到的地图区域显示&#xff0c;根据相应的经纬度反查 左侧区域的会议室。思路&#xff1a;1.得到百度地图可视区域--可视区域的中心点2.可视区域的四个角的其中两个(东北角西南角)http://lbsyun.baidu.com/cms/jsapi/reference/jsapi_refer…

使用WS-Trust / STS采样器扩展JMeter

JMeter没有对WS-Security或WS-Trust的任何内置支持&#xff0c;这使我为JMeter开发了此STS Sampler –可以在负载测试STS时使任何人的生活变得更好。 首先&#xff0c;您需要拥有Apache JMeter发行版。 我正在使用v2.7。 然后&#xff0c;您可以从此处下载sts.sampler.zip –解…

vue怎么改logo_vue全家桶项目构建教程

前言vue是现阶段很流行的前端框架&#xff0c;很多人通过vue官方文档的学习&#xff0c;对vue的使用都有了一定的了解&#xff0c;但再在项目工程化处理的时候&#xff0c;却发现不知道改怎么更好的管理自己的项目&#xff0c;如何去引入一些框架以及vue全家桶其他框架的使用&a…

stm32 内部sram大小_在SRAM、FLASH中调试代码的配置方法(附详细步骤)

聊天界面发送嵌入式大杂烩获取1TB大杂烩资料包STM32的FLASH擦写次数有限(大概为1万次)&#xff0c;所以为了延长FLASH的使用时间&#xff0c;我们平时调试时可以选择在SRAM中进行硬件调试。除此之外&#xff0c;SRAM 存储器的写入速度比在内部 FLASH 中要快得多&#xff0c;所以…

自定义控件_VIewPager显示多个Item

一直以来想搞明白这个不完全的VIewPager是怎么做到的&#xff0c;有幸看到这片篇文章 有二种实现方法 1.设置的属性 1.clipChildren属性 2.setPageMargin 3.更新Item外界面 2.重写getPageWidth public class MultiplePagerAdapter extends PagerAdapter { private List<I…

华为怎么改输入法皮肤_微信和QQ个性键盘皮肤

hello大家好&#xff0c;今天是2019年1月1号&#xff0c;祝大家新年快乐今天是新年的第一天&#xff0c;所以说给大家介绍一个好玩的&#xff0c;微信和QQ都能设置的个性的键盘皮肤&#xff0c;看下图&#xff0c;这样的个性的键盘主题怎么设置呢&#xff1f;其实很简单&#x…

用金万维怎么设置路由器_家用路由器怎么设置 家庭路由器设置方法【图文】...

这里以TP-link的无线路由器为例&#xff0c;教一下怎么调试路由器上网。准备工具:网线两条&#xff0c;电脑或者手机&#xff0c;用手机的话就不需要用网线了1、用网线连接光纤猫与路由器&#xff0c;光猫的LAN1口与路由器的WAN相连。路由器的LAN任意一个口用网线连接电脑。2、…