Java 面试经典 03--Database

MySQL、SQLServer、Oracle
为了防止一个用户的工作不适当地影响另一个用户,应该采取下面的哪一种控制?(单选)
完整性控制
安全性控制 
并发控制
访问控制
考点:数据库的控制    (C)

在MS SQL Server中,用来显示数据库信息的系统存储过程是下面的哪一个?(单选)
sp_ dbhelp 
sp_db
sp_help
sp_helpdb
考点:sqlServer命令  (D)

SQL语言中,下面的命令中,哪一个是删除数据库中的一个表的?  (单选)
delete
drop
remove
clear
考点:sqlServer的常用命令   (B)

设有一个关系:dept(dno,dname),如果要找出倒数第三个字母为w,并且至少包含4个字母的dname,则查询条件子句应写成where dname like?(单选)
‘_ _ W _ %’
‘_ % W _ _’
‘_ W _ _’
‘_ W _ %’
考点:数据库的语法  (B) 

SQL语言中,用于事务回滚的语句是_________。
考点:sqlserver的语法 (rollback)

在ORACLE中的物理文件包含哪四种?
数据文件   扩展名为*.dbf
控制文件    扩展名为*.rtl
配置文件    扩展名为*ora
日志文件    扩展名为*.dbf
数据文件   扩展名为*.mbf
考点:oracle物理文件的后缀名(ABCD)

Oracle 数据库中,通过()访问能够以最快的方式访问表中的一行。
主键
Rowid
唯一索引
整表扫描
考点:oracle  --> rowid (B)

在Oracle中,事务中使用下列SQL语句不会引起锁定
SELECT
 INSERT
UPDATE
DELETE
SELECT…FOR UPDATE
考点:oracle锁机制(A)

在Oracle中,当需要使用显式游标更新或删除游标中的行时,声明游标时指定的SELECT语句必须带有()子句
WHERE CURRENT OF
 INTO
FOR UPDATE
ORDER BY
考点:Oracle游标的声明(C)

 在Oracle中,有一个名为seq的序列对象,以下语句能返回序列值但不会引起序列值增加的是:
select seq.ROWNUM from dual;
select seq.ROWID from dual;
select seq.CURRVAL from dual;
 select seq.NEXTVAL from dual;
考点:Oracle序列号(C)
数据定义语言是用于()的方法。
确保数据的准确性
 定义和修改数据结构
查看数据
删除和更新数据
考点:考点:数据定义语言的概念 (B)

()函数通常用来计算累计排名,移动平均数和报表聚合等
汇总
分析
分组
单行
考点:数据库函数 (B)

锁用于提供()
改进的性能
数据的完整性和完整性
可用性和易于维护
用户安全
考点:锁的作用 (B)

带有(B)字句的select语句可以在表的一行或多行上放置排他锁
 FOR INSERT
FOR UPDATE
 FOR DELETE
FOR REFRESH
考点:Oracle排他锁 (B)

可以使用()伪列来访问序列
 CURRVAL 和NEXTVAL。
 NEXTVAL 和 PREVAL。
 CACHE 和 NOCACHE。
 MAXVALUE 和 MINVALUE。
考点:Oracle序列号的用法 (A)

带有错误的视图可以使用()选项来创建。
FORCE。
WITH CHECK OPTION
CREATE VIEW WITH ERROR。
CREATE ERROR VIEW。
考点:创建带有错误的视图 (A)

 在连接视图中,当(B)时,表被称为键保留表。
基表的主键不是结果集的主键
基表的主键是结果集的主键
基表的主键是结果集的外键
基表的主键不是结果集的外键
考点:保留表的概念 (B)

ORACLE中,执行语句: SELECT address1||','||address2||','||address2 "Adress" FROM employ;  将会返回()列。(选择一项)
 0
 1
 2
3
4
考点:Oracle查询语句(字段的连接) (B)

Oracle数据库中,下面()可以作为有效的列名
Column
123_NUM
NUM_#123
 #NUM123
考点:Oracle有效列名 (C)

 Oracle数据库中,以下()函数可以针对任意数据类型进行操作
TO_CHAR
 LOWER
 MAX
CEIL
考点:Oracle函数 (C)

 在Oracle中,PL/SQL块中定义了一个带参数的游标:CURSOR emp_cursor(dnum NUMBER) ISSELECT sal, comm FROM emp WHERE deptno = dnum;那么正确打开此游标的语句是()。(选择两项)
 OPEN emp_cursor(20);
OPEN emp_cursor FOR 20;
OPEN emp_cursor USING 20;
FOR emp_rec IN emp_cursor(20) LOOP … END LOOP;
考点:Oracle游标 (AD)

在Oracle中,关于触发器的描述正确的是(C)。(选择一项)
触发器可以删除,但不能禁用
触发器只能用于表
触发器可以分为行级和语句级
触发器是一个对关联表发出select、insert、update或delete语句时触发的存储过程
考点:Oracle触发器 (C)

Jmock,junit,dbunit测试题
mock对象使用的范围,下面哪一个是不正确的?(单选)
真实对象具有不可确定的行为,产生不可预测的效果。
真实对象很难被创建的
真实对象的某些行为很难被触发
真实对象实际上还不存在的(和其他开发小组或者和新的硬件打交道) 等等...
在被测试代码中只是通过接口来引用对象,所以它不知道这个引用的对象是真实对象还是mock对象。
考点:jmock的使用范围  (E)

mock对象测试的关键步骤,下面哪些描述是错误的?(多选)
在产品代码中实现这个接口
在测试代码中实现这个接口
在被测试代码中只是通过接口来引用对象,所以它不知道这个引用的对象是真实对象还是mock对象。
使用一个类来描述这个对象
真实对象实际上还不存在的.
考点:jmock的使用  (DE)

测试类的命名规则是以下的哪一种: (单选)
Test+被测试类的类名
被测试类的类名+test
test+被测试类的类名
被测试类的类名+Test
考点:junit命名规范  (D)

使用junit测试粒度的原则是:  (多选)
被测试类中所有public、protected方法都要测到。
被测试类中的所有方法都需要测试。
对于简单的get和set方法就不必测试。
一些无意义的方法就不必测试。
考点:junit的测试使用 (AC)

Dbunit的原理是: (多选题)
数据库表里的数据和自己定义的xml文件里表示的数据关联起来
数据库表里的数据可以导出到一个对应的xml里
数据库表里的数据可以和xml文件里的数据并非一致。
可以将一个xml里的数据导入到数据库表里
考点:dbunit的原理  (ABD)


Hiberante测试题
以下关于SessionFactory的说法哪些正确?(多选)
对于每个数据库事务,应该创建一个SessionFactory对象
一个SessionFactory对象对应一个数据库存储源
SessionFactory是重量级的对象,不应该随意创建。如果系统中只有一个数据库存储源,只需要创建一个
SessionFactory的load()方法用于加载持久化对象
考点:SessionFactory (B C)

以下哪些属于Session的方法? (多选)
load()
save()
delete()
update()
open()
close()
考点:Session API  (A B C D F)

在持久化层,对象分为哪些状态?(多选)
临时(瞬时)状态
独立状态
游离(脱管)状态
持久化状态
考点:持久化对象生命周期 (A C D)

持久化状态的特征,下面说法正确的是: (多选)
总是被Session示例关联
持久化对象和数据库中的相关记录对应
Session在清理缓存时,会根据持久化对象的属性变化,来同步更新数据库
当一个持久化对象关联一个临时对象,在允许级联保存的情况下,Session在清理缓存时会把这个临时对象也转变为持久化对象
Hibernate保证在同一个Session示例的缓存中,数据库表中的每条记录只对应唯一的持久化对象
考点:持久化状态的特征 (A B C D E F)

以下程序的打印结果是什么?(单选) tx = session.beginTransaction(); Customer c1=(Customer)session.load(Customer.class,new Long(1)); Customer c2=(Customer)session.load(Customer.class,new Long(1)); System.out.println(c1==c2); tx.commit(); session.close();
运行出错,抛出异常
打印false
打印true
考点:持久化状态的特征  (C)

以下程序代码对Customer的name属性修改了两次:tx = session.beginTransaction(); Customer customer=(Customer)session.load(Customer.class,new Long(1)); customer.setName(\"Jack\"); customer.setName(\"Mike\"); tx.commit();

执行以上程序,Hibernate需要向数据库提交几条update语句?(单选)
0
1
2
3
考点:持久化状态的特征  (B)

Customer类中有一个Set类型的orders属性,用来存放Order订单对象,在Customer.hbm.xml文件中,用哪个元素映射orders属性?(单选)
<set>
<one-to-many>
<many-to-one>
<property>
考点:映射文件 (A)

<set>元素有一个cascade属性,如果希望Hibernate级联保存集合中的对象,casecade属性应该取什么值?(单选)
none
save
delete
save-update
考点:映射文件 (D)

在pojo包下User类中有个Passport类型的passport属性,Passport类中有User类型的user属性,请在空白处写出主键关联和外键关联2种映射方式映射(使用Mysql数据库)
User.hbm.xml
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >
<hibernate-mapping package="pojo">
<class name="User" table="uf_user">
<id name=”id”>
<generator class=”native”/>
</id>
<!-— 此处编写 -->

</class>
</hibernate-mapping>

Passport.hbm.xml
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >
<hibernate-mapping package="pojo">
<class name=" Passport " table="uf_passport">
<!-— 此处编写 -->



</class>
</hibernate-mapping>

考点:一对一映射(主键映射、外键映射)
答案:
主键映射
User.hbm.xml
<one-to-one name=“passport”
class=”pojo.Passport”
/>

  Passport.hbm.xml
<id name=”name”>
<generator class=”foreign”>
<param name=”property”>user</param>
</generator>
</id>
<one-to-one name=”user” constrained=”true” class=”pojo.User”/>

外键映射
User.hbm.xml
<many-to-one name=”passport”
Class=”pojo.Passport”
/>

Passport.hbm.xml
<one-to-one name=”user”
class=”pojo.User”
property-ref=”passport”/>

假设对Customer类的orders集合采用延迟检索策略,编译或运行以下程序,会出现什么情况(单选) Session session=sessionFactory.openSession(); tx = session.beginTransaction(); Customer customer=(Customer)session.get(Customer.class,new Long(1)); tx.commit(); session.close(); Iterator orderIterator=customer.getOrders().iterator();
编译出错
编译通过,并正常运行
编译通过,但运行时抛出异常
考点:延迟加载  (C)
以下哪一种检索策略利用了外连结查询?(单选)
立即检索
延迟检索
迫切左外连结检索
考点:检索策略 (C)

关于HQL与SQL,以下哪些说法正确?(多选)
A)HQL与SQL没什么差别
HQL面向对象,而SQL操纵关系数据库
在HQL与SQL中,都包含select,insert,update,delete语句
HQL仅用于查询数据,不支持insert,update和delete语句
考点:HQL与SQL的区别 (B D)

事务隔离级别是由谁实现的?(单选)
Java应用程序
Hibernate
数据库系统
JDBC驱动程序
考点:事务 (C)

悲观锁与乐观锁,哪个具有较好的并发性能?(单选)
悲观锁
乐观锁
考点:悲观锁与乐观锁 (B)
下面哪些情况不适合加载到二级缓存中
经常被修改的数据
绝对不允许出现并发访问的重要数据
与其他应用共享的数据
不会被第三方修改的数据
考点:二级缓存中应存放的数据 (D)

Session中load方法与get方法的区别 (多选)
记录不存在时,get()方法会返回空(null),而load()方法会抛出一个HibernateException异常。
load()方法可以返回实体的代理类实例,而get()方法永远都直接返回实体类。
load()方法可以充分利用Hibernate的内部缓存和二级缓存中的现有数据,而 get()方法则仅仅在hibernate内部缓存中进行数据查找,如果内部缓存中没有找到相应的数据,那么将直接执行SQL语句进行数据查询,并生成相应的实体对象。
记录不存在时,load ()方法会返回空(null),而get ()方法会抛出一个HibernateException异常。
考点:load与get方法的区别 (A B C)

  下面对Hibernate中Query.list与Query.iterate的说法正确的是 (多选)
list: 结果存入缓存,但不从缓存里面取
list: 查询时属性连同id一起找出来,只有“一句”select
iterate: 结果存入缓存,并在缓存中查找结果
iterate: 查询时先找出所有的 id,然后根据 id 到缓存里面查找,如果没有命中,再到数据库中查找该id对应的其他属性。可能会有多行 select
考点:Query.list与Query.iterate (A B C D)

以下查询颜色为”白色”的猫的代码正确的是(多选)
String hql = "from Cat where color like :color";
session.createQuery(hql).setString("color",
"白色").list();
String hql = "from Cat c where c.color like ? ";
session.createQuery(hql).setString(0,
"白色").list();
session.createCriteria(Cat.class).add(Expression.eq("color","白色")).list();
session.createCriteria(Classes.class).add(Restrictions.eq("color", "白色")).list()
考点:HQL 、Criteria (A B C D)

hibernate继承映射3中基本策略使用标签正确的是 (多选)
每个类分层结构一张表 -- <subclass>
每个子类一张表 -- <joined-subclass>
每个类分层结构一张表 -- <union-subclass>
每个具体类一张表 -- <union-subclass>
考点:继承映射 (A B D)
在映射文件中定义二级缓存的标签是: (单选)
<cache usage=""/>
<class-cache class="" usage=""/>
<cache-class class="" usage=""/>
考点:定义二级缓存 (A B)

Hibernate支持哪3种缓存策略: (多选)
Transactional
read-write
nonstrict-read-write
read-only
考点:hibernate支持的3中缓存策略

hibernate一级缓存和二级缓存的交换模式: (多选)
CacheMode.GET
CacheMode.NORMAL
CacheMode.PUT
CacheMode.POST
考点:一级缓存与二级缓存的交换模式

Hibernate中类的lazy加载策略说法正确的是: (多选)
当类采用lazy加载策略时,load方法不发出SQL语句,查询对象的ID时也不会发出,只有第一次获取对象的其他属性时才会发出SQL语句
在同一个Session中再次查询该对象时,由于缓存中有该对象,所有不会发出SQL语句
lazy加载策略只在Session打开期间是有效的
类默认采用lazy加载策略,当在映射文件的class标签中设置lazy="true"时不采用lazy加载策略
考点:延时加载 (A B C)

Session接口中save方法与persist方法在事务没开启时的区别:
save方法是把数据库插入数据库,再回滚
save方法是把数据库插入数据库
persist方法是抛出异常
persist方法是直接不插入数据库
考点:save方法与persist方法的区别 (A D)

                                                                                                                                                                                                                    

你可能感兴趣的:(java,oracle,sql,Hibernate,面试)