SSH面试题总结:
题目1:Hibernate工作原理及为什么要用?
原理:
hibernate,通过对jdbc进行封装,对 java类和 关系数据库进行mapping,实现了对关系数据库的面向对象方式的操作,改变了传统的jdbc + sql操作数据的方式,从而使开发人员可以花更多精力进行对象方面的开发
1.读取并解析配置文件
2.读取并解析映射信息,创建SessionFactory
3.打开Sesssion
4.创建事务Transation
5.持久化操作
6.提交事务
7.关闭Session
8.关闭SesstionFactory
为什么要用:
1. 对JDBC访问数据库的代码做了封装,大大简化了数据访问层繁琐的重复性代码。
2. Hibernate是一个基于JDBC的主流持久化框架,是一个优秀的ORM实现。他很大程度的简化DAO层的编码工作
3. hibernate的性能非常好,因为它是个轻量级框架。映射的灵活性很出色。它支持各种关系数据库,从一对一到多对多的各种复杂关系。
题目2: 什么是Hibernate延迟加载?
延迟加载机制是为了避免一些无谓的性能开销而提出来的,所谓延迟加载就是当在真正需要数据的时候,才真正执行数据加载操作。在Hibernate中提供了对实体对象的延迟加载以及对集合的延迟加载,另外在Hibernate3中还提供了对属性的延迟加载。
题目3:Hibernate中类之间的关联关系有几种?(如:一对多、多对多的关系)
many-to-one、one-to-many、many-to-many、 one-to-one
题目4: 说下Hibernate的缓存机制
一、hibernate一级缓存
(1)hibernate支持两个级别的缓存,默认只支持一级缓存;
(2)每个Session内部自带一个一级缓存;
(3)某个Session被关闭时,其对应的一级缓存自动清除;
二、hibernate二级缓存
(1) 二级缓存独立于session,默认不开启;
题目5: Hibernate的查询方式
本地SQL查询、Criteria、Hql
题目6: 如何优化Hibernate?
1.使用双向一对多关联,不使用单向一对多
2.不用一对一,用多对一取代
3.配置对象缓存,不使用集合缓存
题目7: Struts工作机制?为什么要使用Struts?
工作机制:
Struts的工作流程:
在web应用启动时就会加载初始化ActionServlet,ActionServlet从
struts-config.xml文件中读取配置信息,把它们存放到各种配置对象
当ActionServlet接收到一个客户请求时,将执行如下流程.
-(1)检索和用户请求匹配的ActionMapping实例,如果不存在就返回请求路径无效信息;
-(2)如果ActionForm实例不存在,就创建一个ActionForm对象,把客户提交的表单数据保存到ActionForm对象中;
-(3)根据配置信息决定是否需要表单验证.如果需要验证,就调用ActionForm的validate()方法;
-(4)如果ActionForm的validate()方法返回null或返回一个不包含ActionMessage的ActuibErrors对象, 就表示表单验证成功;
-(5)ActionServlet根据ActionMapping所包含的映射信息决定将请求转发给哪个Action,如果相应的 Action实例不存在,就先创建这个实例,然后调用Action的execute()方法;
-(6)Action的execute()方法返回一个ActionForward对象,ActionServlet在把客户请求转发给 ActionForward对象指向的JSP组件;
-(7)ActionForward对象指向JSP组件生成动态网页,返回给客户;
为什么要用:
JSP、Servlet、JavaBean技术的出现给我们构建强大的企业应用系统提供了可能。但用这些技术构建的系统非常的繁乱。
基于Struts开发的应用:
不用再考虑公共问题
专心在业务实现上
结构统一,易于学习、维护
新手也可写出好程序
题目10:为什么要用spring?
Spring是一个轻量级的IOC和AOP框架。
IOC(控制反转)意味着将你设计好的类交给系统去控制,而不是在你的类内部控制。这称为控制反转
AOP(面向切面),它将那些影响多个类的行为封装到可重用的模块中,面向对象是把问题从同类事物中抽象出来,面向切面是把问题从不同类问题中抽象出来。
hibernate中get()与load()区别
请注意如果没有匹配的数据库记录,load()方法可能抛出无法恢复的异常(unrecoverable exception)。 如果类的映射使用了代理(proxy),load()方法会返回一个未初始化的代理,直到你调用该代理的某方法时才会去访问数据库。 若你希望在某对象中创建一个指向另一个对象的关联,又不想在从数据库中装载该对象时同时装载相关联的那个对象,那么这种操作方式就用得上的了。
如果为相应类映射关系设置了batch-size, 那么使用这种操作方式允许多个对象被一批装载(因为返回的是代理,无需从数据库中抓取所有对象的数据)。 如果你不确定是否有匹配的行存在,应该使用get()方法,它会立刻访问数据库,如果没有对应的行,会返回null。
17. [Hibernate题目]判断题:使用save/persist一个对象时,便立即向数据库发送执行insert sql语句?
<!--[if !supportLists]-->1)
<!--[endif]-->persist把一个瞬态的实例持久化,但是并"不保证"标识符被立刻填入到持久化实例中,标识符的填入可能被推迟到flush的时间。
<!--[if !supportLists]-->2)
<!--[endif]-->persist"保证"当它在一个transaction外部被调用的时候并不触发一个Sql Insert,这个功能是很有用的。
<!--[if !supportLists]-->3)
<!--[endif]-->save会立即执行Sql insert,不管是不是在transaction内部还是外部.
18.[Hibernate题目]:指出一下代码哪里错误使用了Hibernate。
背景简介:Board是一个实体类,id是它的主键,name和description是他的两个属性。BoardDao是Board实体的数据访问对象,BoardBo是业务对象,用户提交变更Board对象的请求,由Struts的BoardAction接收,调用BoardBo处理。HibernateUtil.currentSession()用于返回当前请求的Session对象。
-
//数据访问层代码:BoardDao.java
- public Board loadBoard(Long id) {
- Session session = HibernateUtil.currentSession();
- return session.load(Board.class, id);
- }
- public void updateBoard(Board board) {
- Session session = HibernateUtil.currentSession();
- session.update(board);
- }
-
-
//业务对象层代码:BoardBo.java
- private BoardDao boardDao;
- public void updateBoard(Long id, String name, String description) {
- Board board = boardDao.loadBoard(id);
- board.setName(name);
- board.setDescription(description);
- boardDao.updateBoard(board);
- }
-
-
//Web控制器代码:BoardAction.java
- private BoardBo BoardBo;
- public ActionForward execute(
- ActionMapping mapping,
- ActionForm form,
- HttpServletRequest request,
- HttpServletResponse response) throws Exception {
- String id = request.getParameter("id");
- String name = request.getParameter("name");
- String description = request.getParameter("description");
- boardBo.updateBoard(id, name, description);
- return mapping.findForward("update-success");
- }
6. public void updateBoard(Board board) {
7. Session session =
HibernateUtil.currentSession();
Transaction
t=session.beginTransaction();
8. session.update(board);
t.commit();
9. }
简单叙述一下Spring中BeanFactory与ApplicationContext的差别
使用BeanFactory从xml配置文件加载bean:
import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.core.io.FileSystemResource;
public class XmlConfigWithBeanFactory {
public static void main(String[] args) {
XmlBeanFactory factory = new XmlBeanFactory(new FileSystemResource(
"build/beans.xml"));
}
}
使用ApplicationConText从xml配置文件加载bean:
public class XmlConfigWithApplication{
public static void main(String[] args){
ApplicationContext application = new ClassPathXmlApplicationContext(beans.xml"));
application.getBean("BeanName");
}
}
简而言之,BeanFactory提供了配置框架和基本的功能, 而
ApplicationContext为它增加了更强的功能,这些功能中的一些或许更加接近J2EE并且围绕企业级应用。一般来说,ApplicationContext是 BeanFactory的完全超集,
任何BeanFactory功能和行为的描述也同样被认为适用于ApplicationContext
相对于BeanFactory而言,ApplicationContext
提供了以下扩展功能.
(a) 国际化支持 (b) 资源访问
(c) 事件传播 (d) 多实例加载
2. 写一段程序,使用springAPI读取classpath下的一个xml文件,并解析
(1)Resource
resource=new ClassPathResource("appcontext.xml");
BeanFactory factory=new
XmlBeanFactory(resource);
(2)ClassPathXmlApplicationContext appcontext=new
ClassPathXmlApplicationContext("appcontext.xml");
BeanFactory
factory=(BeanFactory)appcontext;
4. 说说在hibernate中使用Integer做映射和使用int做映射之间有什么差别
Integer
code和int
code;的区别:
Integer是对象.
code = null; 对象可以为空.
int 是普通类型,
不可能
= null.
根据你的数据库code是可以空的, 故应该映射成Integer.
你没理由hbm.xml里写Integer, 类里却写int
(1)使用Spring如何简化了Hibernate编码?
通过org.springframework.orm.hibernate3.support.HibernateDaoSupport类支持数据库操作,且封装了事务.
public
class AccountDAO extends HibernateDaoSupport implements IAccountDAO{
(2)Spring如何与Struts集成?
<?xml
version="1.0" encoding="UTF-8"?>
<!DOCTYPE
struts-config PUBLIC "-//Apache Software Foundation//DTD Struts
Configuration 1.2//EN"
"http://struts.apache.org/dtds/struts-config_1_2.dtd">
<struts-config>
<data-sources />
<form-beans >
<form-bean name="regForm"
type="demo.form.RegForm" />
</form-beans>
<global-exceptions />
<global-forwards />
<action-mappings >
<action
attribute="regForm"
name="regForm"
path="/reg"
scope="request"
type="org.springframework.web.struts.DelegatingActionProxy">
<forward name="ok"
path="/ok.jsp" />
</action>
</action-mappings>
<message-resources
parameter="demo.ApplicationResources" />
<plug-in
className="org.springframework.web.struts.ContextLoaderPlugIn">
<set-property
property="contextConfigLocation"
value="/WEB-INF/classes/applicationContext.xml" />
</plug-in>
</struts-config>
(3)如何使用Spring2.0实现声明式事务?
<!--通用事务管理器-->
<bean
id="TransactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property
name="sessionFactory" ref="sessionFactory" />
</bean>
<!--声明一个通知,用以指出要管理哪些事务方法及如何管理-->
<tx:advice
id="txAdvice" transaction-manager="TransactionManager">
<tx:attributes>
<!-- 对get/load/search开头的方法要求只读事务 -->
<tx:method
name="get*" propagation="SUPPORTS"
read-only="true"
/>
<tx:method
name="load*" propagation="SUPPORTS"
read-only="true"
/>
<tx:method
name="search*" propagation="SUPPORTS"
read-only="true"
/>
<!-- 对其它方法要求事务 -->
<tx:method name="*"
propagation="REQUIRED" />
</tx:attributes>
</tx:advice>
<!--声明一个config,用以将通知和目标业务类关联起来-->
<aop:config>
<!-- 添加事务支持,因为前面配置的transactionManager是专对Hibernate的事务管理器-->
<aop:pointcut
id="bizMethods" expression="execution(* demo.*.*(..))"
/>
<!-- 织入 -->
<aop:advisor
advice-ref="txAdvice" pointcut-ref="bizMethods" />
</aop:config>
(4)依赖注入的好处是?
程序可扩展性更强;
利于并行开发;
(5)Spring怎么实现依赖注入?
<?xml
version="1.0" encoding="UTF-8"?>
<beans
xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">
<bean id="userdao"
class="demo.dao.UserDAO"/>
<bean
id="usermanager" class="demo.biz.UserManager">
<property name="userdao"
ref="userdao"/>
</bean>
</beans>
(6)“面向方面编程”的好处是?
将程序中涉及的公共问题集中解决
(7)和SQL相比,HQL有哪些特点?
HQL是面向对象的查询语言。select Fw表示查询Fw对象
(8)如何配置单向多对一关联?
<class
name="Jd" table="TBL_JD">
<id name="jdid"
column="jdid" type="long">
<generator class="identity"
/>
</id>
<property name="jdname"
column="jd" type="string" />
<many-to-one
name="qx" class="Qx" column="qxid" />
</class>
(9)如何配置单向一对多关联?
<class
name="Qx" table="TBL_QX">
<id name="qxid"
column="qxid" type="long">
<generator
class="native" />
</id>
<property name="qxname"
column="qx" type="string" />
<set
name="jds" >
<key
column="qxid" />
<one-to-many
class="Jd" />
</set>
</class>
(10)如何配置双向一对多关联?
<class
name="Jd" table="TBL_JD">
<id name="jdid"
column="jdid" type="long">
<generator
class="identity" />
</id>
<property name="jdname"
column="jd" type="string" />
<many-to-one name="qx"
class="Qx" column="qxid" />
</class>
<class
name="Qx" table="TBL_QX">
<id name="qxid"
column="qxid" type="long">
<generator
class="native" />
</id>
<property name="qxname"
column="qx" type="string" />
<set name="jds" >
<key column="qxid" />
<one-to-many class="Jd"
/>
</set>
</class>
<!--[if !supportLineBreakNewLine]-->
<!--[endif]-->
- 大小: 283.4 KB
- 大小: 63.1 KB
分享到:
相关推荐
以下是对SSH面试题的详细解析,以及与SSH相关的源码和工具的知识点。 1. **SSH基本概念** - SSH的全称是Secure Shell,它为网络服务提供加密的安全通信通道。 - SSH主要用作命令行接口(CLI)远程登录,但也可...
【JAVA SSH面试题及答案】 SSH(Struts + Spring + Hibernate)是Java Web开发中常见的三大框架,它们各自承担着不同的职责,共同构建了一个高效、灵活的企业级应用程序架构。 **Hibernate工作原理及为什么使用** ...
### 面试题解析 1. **SSH框架整合开发:** - SSH框架整合开发时,Struts作为Web层的控制器,Hibernate处理数据持久化,Spring管理Struts和Hibernate的生命周期及依赖关系,实现各层之间的解耦。 2. **Struts2的...
Java-SSH面试题主要涉及到Java企业级开发中的三个重要框架:Struts、Hibernate和Spring,它们合称为SSH。这些框架的使用和集成是Java web开发中的常见知识点。 **MVC设计模式** MVC(Model-View-Controller)是一种...
SSH面试题通常指的是Java开发中三个重要框架的面试问题,这三个框架是Struts、Spring和Hibernate。在这篇文章中,我们将详细探讨关于Hibernate的部分,因为它是SSH面试中的常见考点。 **Hibernate工作原理及为什么...
通过阅读和练习《三大框架SSH面试题.docx》中的题目,你可以更好地检验自己的知识水平,找出不足并加以补充,从而提高获得高薪工作的机会。在学习过程中,不断实践和反思,将理论知识转化为实际能力,才能在面试中...
### J2EE-SSH面试题解析 #### 一、MVC设计模式理解 MVC(Model-View-Controller)设计模式是一种广泛应用于Web应用程序的设计模式,它将应用程序分为三个核心部分: 1. **模型(Model)**:模型代表了应用程序的...
有关于面试的java—SSH框架面试题目。
JAVA-SSH面试题 MVC是Model—View—Controler的简称。即模型—视图—控制器。MVC是一种设计模式,它强制性的把应用程序的输入、处理和输出分开。 MVC中的模型、视图、控制器它们分别担负着不同的任务。 视图: 视图...
【SSH面试题详解】 在Java Web开发领域,SSH(Struts、Spring、Hibernate)是一个常见的经典框架组合,常用于构建企业级应用。以下是对2013年SSH面试题的详细解析: 1. **Struts工作机制与优势** Struts是一个...
SSH面试题通常涉及对SSH协议的理解、配置、安全实践以及问题排查等多个方面。以下是一些可能的SSH面试题及相关的知识点: 1. **SSH基础概念:** - SSH如何保证通信的安全性?它采用了什么加密算法? - 什么是公钥...
### Java SSH面试题详解 #### Struts1与Struts2的工作流程及区别 **Struts1**: 在Struts1中,当一个HTTP请求到达时,`web.xml`中的配置被用于初始化`ActionServlet`,这是一个核心的Servlet,它根据`struts-...
SSH 面试题总结 本总结涵盖了 SSH 面试的常见问题,涵盖了 Hibernate、Struts 和 Spring 等技术。以下是详细的知识点: Hibernate 1. Hibernate 工作原理及为什么要用? Hibernate 通过对 JDBC 进行封装,对 ...
Java SSH面试题主要涵盖三个核心领域:Java、Spring和Hibernate,这些都是Java Web开发中的关键框架。下面将分别解析这三个框架的主要知识点。 1. **Java**: - **基础语法**:包括类、对象、接口、多态、异常处理...
最全面的ssh面试题及其知识点,其中包含struts,hibernate,spring最重要知识
Java SSH面试题主要涵盖Spring、Struts和Hibernate这三个核心Java Web开发框架的相关知识。下面将对这些框架的基本概念、功能、使用方法以及它们之间的协作进行详细介绍。 ### Spring框架 Spring是一个全面的Java...