java程序员面试考试题及答案
事务结束。
当事务回滚到一保留点(具有SAVEPOINT)时,有下列情况:
仅在该保留点之后执行的语句被撤消。
该指定的保留点仍然被保留,该保留点之后所建立的保留点被删除。
自该保留点之后所获取的全部表封锁和行封锁被释放,但指定的保留点以前所获取的全部数据封锁继续保持。
该事务仍可继续。
(3) 保留点
保留点(savepoint)是在一事务范围内的中间标志,经常用于将一个长的事务划分为小的部分。保留点可标志长事务中的任何点,允许可回滚该点之后的工作。在应用程序中经常使用保留点;例如一过程包含几个函数,在每个函数前可建立一个保留点,如果函数失败,很容易返回到每一个函数开始的情况。在回滚到一个保留点之后,该保持点之后所获得的数据封锁被释放。
26. 视图在什么情况下可以对其,删除,修改操作:
DML操作应遵循的原则:
1).简单视图可以执行DML操作;
2). 在视图包含GROUP 函数,GROUP BY子句,DISTINCT关键字时不能删除数据行;
3).在视图不出现下列情况时可通过视图修改基表数据或插入数据:
a.视图中包含GROUP 函数,GROUP BY子句,DISTINCT关键字;
b.使用表达式定义的列;
c.ROWNUM伪列。
d.基表中未在视图中选择的其他列定义为非空且无默认值。
WITH CHECK OPTION 子句限定:
通过视图执行的INSERTS和UPDATES操作不能创建该视图检索不到的数据行,
因为它会对插入或修改的数据行执行完整性约束和数据有效性检查。
视图的删除:
DROP VIEW VIEW_NAME语句删除视图。
删除视图的定义不影响基表中的数据。
只有视图所有者和具备DROP VIEW权限的用户可以删除视图。
视图被删除后,基于被删除视图的其他视图或应用将无效。
27. oracle中各种连接的写法:
内连接,外连接 ,左外连接,右外连接
以上几种连接一般用于多表之间复杂的查询,
下面先说说内连接,也即相等连接,如右两张表 dept ,employee,
dept里有字段deptid,deptname,employee有字段empno,deptid,ename,sal,age等
那连接查询语句如下:select A.* ,B.* from dept A,employee B where A.deptid=B.deptid
一般出现这种情况的是一张是主表,另一张是子表,主表的主键作为子表的外键,显示结果按照子表的显示,内连接简单,这里就不多说了
外连接在oralce里用(+)表示,先看例子
select empno,ename,sal,emp.deptno,dept.deptno from emp,dept where emp.deptno(+) =dept.deptno
这是一个右连接
看下面的例子
select empno,ename,sal,emp.deptno,dept.deptno from emp,dept where dept.no=emp.deptno(+)
这是一个左连接
两个查询显示的查询结果是一样的,刚开始学oracle的时候很多人都很难明白这个,现在有个笨办法,
大家不防记下来,(+)出现查询条件的左边即右连接,出现在右边即左连接。(+)可以放在左边也可以
放在右边,但是一定要放在缺少条件的那一边,如上面的例子中,如果公司最近准备成立一个新的部门,
测试部门,但现在还没有招新员工,而现在Boss想知道公司有知道公司的员工在那个部门并且想知道
没有员工的部门,我们可以用上面的查询语句实现。
左外连接(left outer join)和右外连接(reght outer join)如同上面的外连接,查询的结果是一样的。
左外连接:select empno,ename,sal,emp.deptno,dept.deptno from dept left outer join emp on (emp.deptno=dept.deptno)
右外连接:select empno,ename,sal,emp.deptno,dept.deptno from emp reight outer join dept on (emp.deptno=dept.deptno)
以上显示的结果和外连接查询出来的结果是一样的,只是写法不一样而已,实际工作中外连接用的比较多,没有必要都要去用它,但是概念大家一定要了解。
全外关联 :FULL OUTER JOIN
SELECT e.last_name, e.department_id, d.department_name
FROM employees e
FULL OUTER JOIN departments d
ON (e.department_id = d.department_id);
结果为:所有员工及对应部门的记录,包括没有对应部门编号department_id的员工记录和没有任何员工的部门记录。
28. 查询的优化
1).根据查询条件建立合适的index
2).因为SQL是从右向左解析,多表查询时,记录数少的表放在右边
3).多个条件时,收敛快的条件放在右边。
4).避免使用复杂的集合函数,象not in等。
5).避免在条件中对字段进行函数操作
6).尽量避免使用select *,应该写出需要查询的字段
7).在java中尽量使用preparestatement执行sql,从而共享执行计划"
29. 怎么看执行计划
使用explain或者autotrace查看执行计划
30. 如何强制一个SQL语句使用索引? 使用index hints
31. Oracle中的PL/SQL块是否熟悉?Oracle中的内置函数是否熟悉?
内置函数:ASCII,CHR,CONCAT, decode,to_date,to_char,to_number等等
32. 如何取一个没有排序的查询结果中的前10条记录?
select fielda from tablea where rownum<=10;
33. 问:如何取一个有排序的查询结果中的前10条记录?
select fielda from
(select fielda from tablea order by fieldb )
where rownum<=10;
错误写法:select fielda from tablea where rownum<=10 order by fieldb;
34. 如何取一个没有排序的查询结果中的第11条到第20条记录?
select fielda from
(select fielda,rownum rn from tablea where rownum<=20)
where rn>=11;
35. 如何取一个有排序的查询结果中的第11条到第20条记录?
select fielda from
(select fielda ,rownum rn from
(select fielda from tablea order by fieldb )
where rownum<=20
) where rn>=11;
36. 数据库设计中,主键的作用?
主键的作用保持数据表记录的唯一性,建立主键索引和作为外键使用.使用主键与外键的配对来表示实体间的连接.
37. Oracle数据库设计中,建立外键的方法?
(1)用Create table命令语句在设计数据库表时建立外键
Create table Depart (
DepNO Number(2),
DepName varchar2(10),
CONSTRAINT pk_dept PRIMARY KEY (DepNO)
);
Create table Emp (
EmpNo Number(4),
EmpName varchar2(20),
DepNo CONSTRAINT fk_deptno References Depart(DepNo)
);
(2)用Alter table命令语句,为一个存在的表添加外键
Create table Depart (
DepNO Number(2),
DepName varchar2(10),
CONSTRAINT pk_dept PRIMARY KEY (DepNO)
);
Create table Emp(
EmpNo Number(4),
EmpName varchar2(20),
DepNo Number(2)
);
Alter table Emp
ADD CONSTRAINT fk_deptno Foreign key(DepNo) References Depart(DepNo);
JAVA
38. jsp内置对象
1).HttpServletRequest类的Request对象
2).HttpServletResponse类的Respone对象
3).JspWriter类的out对象
4).HttpSession类的session对象
5).ServletContex类的application对象
6).PageContext类的PageContext对象
7).ServletConfig类的Config对象
8)Object类的Page(相当于this)对象
9)Exception
39. Servlet中的主要方法有哪些?各有什么作用?
init方法初始化Servlet
service方法是Servlet中的业务方法,根据请求方式调用不同的doXXX(doGet方法或doPost方法等)响应请求
destroy方法释放Servlet资源
40. 接口Interface有什么作用?使用接口主要有什么好处?
1) .接口只是一个框架而没有实现,因此在接口定义时不需要考虑接口中的方法如何实现;
2).利用接口可达到实现多继承的目的;
3).可以在不暴露对象的类的前提下,暴露对象的编程接口.
41. static和final修饰类,修饰方法和修饰属性时表示什么?
static可以修饰类,方法,属性,分别表示静态类,静态方法,静态属性
final修饰类表示类是最终类,不可再被继承
final修饰方法表示方法不可被子类重写(override)
final修饰属性表示属性是常量
42. 自定义标签有什么作用?
方便JSP页面代码的维护,代码重用
43. 数据库连接对象使用以后在何处释放?
try{}catch(){}finally{} 在finally{}中释放数据库连接对象
44. 异常对象如何分级捕获?
最底层的异常对象(子类异常)放在最前面,越高层的异常对象(父类异常)越放在后面
45. 重载(overload)和重写(override)是什么?
重载(overload)为类似功能的方法提供了统一的名称,但是根据参数列型态的不同,而自动呼叫对应的方法
重写(override)是子类继承父类的方法,但是在子类中有不同的方法实现
46. 工作中使用过哪些设计模式?请举2至3个例子并说明使用场景.
工厂模式,单态模式,Facade模式等等
47. 什么时候释放connection
应该在finally{}语句块里释放connection;
finally{
if (conn != null)
conn.close();
}
48. 异常处理,如何处理多个异常?
异常处理的语句是try{}catch(){}finally{}
当有多个catch()语句,来处理多个异常的话,强调(如果一个异常是另个异常的子类的话,在并行处理的时候子类的异常不会抓到);
49. 可以在try语句模块里释放connection吗?可以.
50. jsp标签的作用和好处
答:主要用来显示结果数据,用来沟通表示层和业务逻辑层,把页面美工工作和程序编写分开。
51. statement对象有多少种,以及作用和用法
答:三种,分别为statement,PreparedStatement,CallableStatement
作用是:建立了到特定数据库的连接之后,就可用该连接发送 SQL 语句.
1).PreparedStatement对象有可能比 Statement 对象的效率更高,因为它已被预编译过并存放在那以供将来使用。
2).由方法 prepareCall 所创建。CallableStatement 对象用于执行 SQL
储存程序 ─ 一组可通过名称来调用(就象函数的调用那样)的SQL 语句。CallableStatement 对象PreparedStatement 中继承了用于处理 IN 参数的方法,而且还增加了用于处理 OUT 参数和INOUT 参数的方法。
特别强调:如果数据库支持已存储过程,则可从 JDBC 中调用它们,CallableStatement可调用存储过程语法为:
{call procedure_name[(?, ?, . . .)]}
52. Final,finalizer,finally区别和各自的用法