spring和hibernate考试

1. 简述hibernate采取了哪些措施来减少java与数据库之间的交互次数
延迟加载
缓存 (session级别一级缓存, sessionfactory级别的二级缓存(查询缓存属于二级缓存))

对于增删改 hql中批处理
session.createQuery("delete from 实体 where 条件").executeUpdate();
jdbc 批处理 batch_size
jdbc fetch_size

双向关联

2. HQL与SQL的说法哪些是正确的:bc
a. HQL与SQL没有差别
b. HQL面向对象,而SQL面向关系型数据库
c. HQL与SQL都包含select, insert, update, delete语句
d. HQL仅用于查询数据,不支持insert, update, delete语句

3. 下面哪些方法不属于org.hibernate.Session
a, f, e
a. find b. load c. save
d. delete e. upload f. open
g. close h. evict i. clear j. flush

4. 有如下实体类和映射文件
public class Employee{
...
private Department department;
}
public class Department {
...
private Set employees = new HashSet();
}
...

...




执行查询(假设有一条部门记录id=1存在,并有3条员工记录) 问:
Session session = ...
Department d = session.load(Department.class, 1); //1
session.close(); //2
System.out.println(d.getName()); //3
System.out.println(d.getEmployees().size()); //4
下面哪种说法正确: c
a. 会正常打印部门名称,以及员工人数
b. 程序运行到2处出现异常
c. 程序运行到3处出现异常
d. 程序运行到4处出现异常

5. 实体类、映射文件和数据库数据同上题
执行:
Session session = ...
Department d = session.load(Department.class, 1); //1
System.out.println(d.getName()); //2
session.close(); //3
System.out.println(d.getEmployees().size()); //4
下面哪种说法正确:d
a. 会正常打印部门名称,以及员工人数
b. 程序运行到2处出现异常
c. 程序运行到3处出现异常
d. 程序运行到4处出现异常

6. 实体类、映射文件和数据库数据同上题
执行:
Session session = ...
Department d = session.createQuery("select distinct d from Department d inner join fetch
d.employees where d.id=1").uniqueResult(); //1
System.out.println(d.getName()); //2
session.close(); //3
System.out.println(d.getEmployees().size()); //4
下面哪种说法正确: a
a. 会正常打印部门名称,以及员工人数
b. 程序运行到2处出现异常
c. 程序运行到3处出现异常
d. 程序运行到4处出现异



7. hibernate中的对象状态有哪几种?
update方法可以将对象由______状态变为______状态,
save方法可以将对象由______状态变为______状态,
delete方法可以将对象由___持久或游离___状态变为___瞬时___状态,
evict可以将对象由______状态变为______状态。

8. 对于hibernate中的一级缓存,二级缓存,说法错误的是? c e
a.二级缓存能够提高查询效率
b.一级缓存只能缓存单个实体对象,不能缓存HQL查询
c.二级缓存只能缓存单个实体对象,不能缓存HQL查询
d.二级缓存可以被多个Session所共享
e.一级缓存需要单独配置
f.一级缓存属于Session级别,session关闭,一级缓存中内容也会被清空

9. 实体类、映射文件和数据库数据同第4题 c, f
假设数据库中已有记录Department(id=1),并且没有为部门设置二级缓存,下面哪种说法正确?
a. 执行
session.get(Department.class, 1);
session.get(Department.class, 1);
会导致查询2次数据库
b. 执行
session.load(Department.class, 1);
session.load(Department.class, 1);
会导致查询2次数据库
c. 执行
session.createQuery("from Department where id=1").uniqueResult();
session.createQuery("from Department where id=1").uniqueResult();
会导致查询2次数据库
d. 执行
session.createQuery("from Department where id=1").uniqueResult();
session.get(Department.class, 1);
会导致查询2次数据库
e. 执行
session.createQuery("from Department where id=1").uniqueResult();
session.load(Department.class, 1);
会导致查询2次数据库
f. 执行
session.get(Department.class, 1);
session.createQuery("from Department where id=1").uniqueResult();
会导致查询2次数据库

10. 接上题,如果开启并正确配置了部门的二级缓存,并同时开启了查询缓存,以下哪个说法正确?
c, f
a. 执行
session.get(Department.class, 1);
session.get(Department.class, 1);
会导致查询2次数据库
b. 执行
session.load(Department.class, 1);
session.load(Department.class, 1);
会导致查询2次数据库
c. 执行
session.createQuery("from Department where id=1").uniqueResult();
session.createQuery("from Department where id=1").uniqueResult();
会导致查询2次数据库
d. 执行
session.createQuery("from Department where id=1").uniqueResult();
session.get(Department.class, 1);
会导致查询2次数据库
e. 执行
session.createQuery("from Department where id=1").uniqueResult();
session.load(Department.class, 1);

会导致查询2次数据库
f. 执行
session.get(Department.class, 1);
session.createQuery("from Department where id=1").uniqueResult();
会导致查询2次数据库

11. hibernate中解决数据并发访问的技术(锁)有哪几种,简述之。
悲观锁 select ... for update;
乐观锁 版本列 数据变化版本加1, 查询的版本与更新的版本应当一致, 否则会报异常

12. 请简单介绍一下hibernate框架(假设这个问题由面试官来问)?
ORM 框架
对jdbc封装,简化对数据库的CRUD操作
提高开发效率

jdbc和hibernate 运行效率上, jdbc高

==================================== spring 部分 ===================

1.关于spring的控制反转与依赖注入,说法错误的是:d
A.在未使用spring之前,对象的创建和对象之间的依赖关系是由程序代码维护,
使用了spring以后,这些对象创建的控制权和关系维护转移到了spring容器
B.依赖注入配合接口的使用让java代码实现了松散耦合
C.依赖注入的类型常见的有setter方法注入和构造方法注入
D.Spring容器主要被用来控制dao, service, 和entity类
E.在使用spring以前,要获取service等对象需要主动创建、使用spring之后,变成了被动接收由容器创建的对象

2.要配置下面service和dao之间的依赖关系,那种配置方法是正确的?
public class BookDaoImpl implements BookDao{
}
public class BookServiceImpl implements BookService {
private BookDao bookDao;
public void setBook(BookDao bookDao) {
this.bookDao = bookDao;
}
public BookServiceImpl() {
}
public BookServiceImpl(BookDao book) {
this.bookDao = book;
}
}
b.c.
A.




B.




C.




D.





3.Spring中bookDao 的scope设置为singleton,执行下列代码,打印结果为:a
ApplicationContext context1= new ClassPathXmlApplicationContext("app.xml");
ApplicationContext context2= new ClassPathXmlApplicationContext("app.xml");
BookDao dao1 = (BookDao)context1.getBean("bookDao");
BookDao dao2 = (BookDao)context1.getBean("bookDao");
BookDao dao3 = (BookDao)context2.getBean("bookDao");
System.out.println(dao1== dao2);
System.out.println(dao1== dao3);



A.true, false
B.true,true
C.false,true
D.false,false

4.Spring中bookDao 的scope设置为prototype,执行下列代码,打印结果为:d
ApplicationContext context1= new ClassPathXmlApplicationContext("app.xml");
ApplicationContext context2= new ClassPathXmlApplicationContext("app.xml");
BookDao dao1 = (BookDao)context1.getBean("bookDao");
BookDao dao2 = (BookDao)context1.getBean("bookDao");
BookDao dao3 = (BookDao)context2.getBean("bookDao");
System.out.println(dao1== dao2);
System.out.println(dao1== dao3);

A.true, false
B.true,true
C.false,true
D.false,false

5. 请解释什么是AOP,它有哪些优点?
面向切面编程
将重复代码集中在通知类中统一处理, 通过切入点将通知类和目标类联系起来,最后需要代理类去调用通知对象和目标对象

6. 简单解释OpenSessionInViewFilter 的作用和工作原理
用来解决hibernate中关系属性的延迟加载问题
请求来, 经过过滤器,session打开
每个service不会关闭session
响应返回前,经过过滤器,关闭session


7. 在现在所学框架中,__框架中__知识点和__框架中__知识点体现了设计模式中的代理模式
__框架中__知识点和__框架中__知识点体现了AOP的编程思想.
hibernate 延迟加载 通过子类继承实现
spring 里aop 动态代理, 跟目标对象实现了共同接口

struts2 拦截器
spring 里的aop






相关文档
最新文档