您的位置:首页 > 职场人生

别人收集的一些面试题目(1)

2010-12-31 00:34 337 查看
(1)、请介绍下Java异常处理的一般性原则;
    参考答案如下:
    1、首先,不要丢弃异常,即catch异常后什么也不做。如果你认为不能很好的处理该异常,就让它继续传播,让别的地方处理去;或者,你可以把一个低级的异常转换成应用级的异常,重新抛出。
    2、catch语句应该指定具体的异常类型。不要把不该捕获的异常也扣下了。
    3、在finally里面释放资源。如果finally里面也会抛出异常,也一样的需要try catch处理。
    4、不要把大量的代码塞在try catch块里面,分离各个可能出现异常的语句并分别捕获异常。
    5、由于异常可能导致输出的数据不完整,你应该作出相应处理,至少要有提示数据的不完整 
(2)、在编写多线程代码时,sleep()和 wait() 有何区别?
参考答案如下:sleep()方法是使线程停止一段时间的方法。在sleep时间间隔期满后,线程不一定立即恢复执行。这是因为在那个时刻,其它线程可能正在运行而且没有被调度为放弃执行,除非(a)"醒来"的线程具有更高的优先级(b)正在运行的线程因为其它原因而阻塞。 
wait()是线程交互时,如果线程对一个同步对象x发出一个wait()调用,该线程会暂停执行,被调对象进入等待状态,直到被唤醒或等待时间到。
(3)Java  collection framework 的数据结构实现种类?以及这些数据结构的特征,请列举3~4个数据结构
参考答案如下:
· List 
o ArrayList。使用数组实现。 
o LinkedList。使用链表实现,是双向链表哦。 
· Set 
o HashSet。使用HashMap实现。 
o TreeSet。实现了SortedSet接口,是有序的Set。 
· Map 
o HashMap。基于Hash表的实现。 
o TreeMap。实现了SortedMap接口,是有序的Map
 
(4)请说明JAVA类实例化为对象的初始化顺序
参考答案如下:
1、 如果存在继承关系,就先父类后子类; 
2 、如果在类内有静态变量和静态块,就先静态后非静态,最后才是构造函数; 
3 、继承关系中,必须要父类初始化完成后,才初始化子类。
(5)一列数的规则如下,1,1,2,3,5,8,13,21,34.。。求第30位数是多少,用递归算法实现?
参考答案如下:832040
(6)Oracle数据库,一张表中有重复的记录,用任何一种方法,删除重复多余的记录
参考答案如下:
删除重复记录的几种方法:
(1).适用于有大量重复记录的情况(在C1,C10和C20列上建有索引的时候,用以下语句效率会很高):
SQL>delete cz where (c1,c10,c20) in (select c1,c10,c20 from cz group by c1,c10,c20 having count(*)>1) and rowid not in
(select min(rowid) from cz group by c1,c10,c20 having count(*)>1);
SQL>delete cz where rowid not in(select min(rowid) from cz group by c1,c10,c20);
(2).适用于有少量重复记录的情况(注意,对于有大量重复记录的情况,用以下语句效率会很低):
SQL>delete from cz a where a.rowid!=(select max(rowid) from cz b where a.c1=b.c1 and a.c10=b.c10 and a.c20=b.c20);
SQL>delete from cz a where a.rowid<(select max(rowid) from cz b where a.c1=b.c1 and a.c10=b.c10 and a.c20=b.c20);
SQL>delete from cz a where rowid <(select max(rowid) from cz  where c1=a.c1 and c10=a.c10 and c20=a.c20);
(3).适用于有少量重复记录的情况(临时表法):
SQL>create table test as select distinct * from cz; (建一个临时表test用来存放重复的记录)
SQL>truncate table cz;  (清空cz表的数据,但保留cz表的结构)
 
SQL>insert into cz select * from test;  (再将临时表test里的内容反插回来)
(4).适用于有大量重复记录的情况(Exception into 子句法):
采用alter table 命令中的 Exception into 子句也可以确定出库表中重复的记录。这种方法稍微麻烦一些,为了使用“excepeion into ”子句,必须首先创建 EXCEPTIONS 表。创建该表的 SQL 脚本文件为 utlexcpt.sql 。对于win2000系统和 UNIX 系统, Oracle 存放该文件的位置稍有不同,在win2000系统下,该脚本文件存放在$ORACLE_HOME/Ora90/rdbms/admin 目录下;而对于 UNIX 系统,该脚本文件存放在$ORACLE_HOME/rdbms/admin 目录下。
(7)Oralce数据库中的rowid何rownum有什么不同?
参考答案如下:
直接使用rownum是要受到限制的。但是很容易遇到这样的需求“查出符合条件的第xx条到第xx条记录”,比如页面的分页处理。这个时候如何构造出适合自己的结果集?嗯,墙边那位说全取出来手工挑选的哥们可以拉出去了。当然这样做也是可以的,但是前提是整个数据集的数据条数不多的情况下。假如遇到上十万百条的数据,全部取出来的话,用户就不用干别的事情了。这个时候用户应该怎么做呢?当然就是要用到我们介绍的rownum 拉!rownum不是个“伪数列”么,好说,我们现在把它弄成一个实在的字段就可以了。具体做法就是利用子查询,在构建临时表的时候,把rownum也一起构造进去。比如“select xx,yy from (select xx,yy,rownum as xyz from table where zz >20) where xyz between 10 and 20”这样就可以了。另外使用oracle提供的结果集处理函数minus也可以做到,例如“select xx,yy from table where zz > 20 and rownum <20 minus select xx,yy from table where zz>20 and rownum <10”,但是使用minus好像比使用子查询更加消耗资源。

  和rownum相似,oracle还提供了另外一个伪数列:rowid。不过rowid和rownum不同,一般说来每一行数据对应的 rowid是固定而且唯一的,在这一行数据存入数据库的时候就确定了。可以利用rowid来查询记录,而且通过rowid查询记录是查询速度最快的查询方法。(这个我没有试过,另外要记住一个长度在18位,而且没有太明显规律的字符串是一个很困难的事情,所以我个人认为利用rowid查询记录的实用性不是很大)rowid只有在表发生移动(比如表空间变化,数据导入/导出以后),才会发生变化。
(8)阐述你的sql性能优化的经验
参考答案如下:
1、在可以使用union all的与语句里,使用了union
2、在where 语句中,尽量避免对索引字段进行计算操作
3、查询的模糊匹配,尽量避免在一个复杂查询里面使用LIKE “%PARML%”-红色标识位置的百分号会导致相关列的索引无法使用,最好不要用。
     4、索引问题,在做性能跟踪分析过程中,经常发现有不少后台程序的性能问题是因为缺少合适索引造成的,有些表甚至一个索引都没有。这种情况往往都是因为在设计表时,没去定义索引,而开发初期,由于表记录很少,索引创建与否,可能对性能没啥影响,开发人员因此也为多加重视。
5、部分UPDATE、SELECT语句 写的很复杂(经常嵌套多级子查询)-可以考虑适当拆成几步,先生成一些临时数据表,再进行关联操作。
 
 
 
大纲:

(1) java基础 运算符等

(2)  java基础 日期处理
 (3)  java基础 JDBC操作,数据库操作
(4)  java基础 类操作
 (5)  java基础 对象操作
(6)  java基础 日志操作
(7)java基础 异常处理
(8) java基础 数据结构
(9)java基础 设计模式
(10)java web开发应用
(11)java基础 算法
(12)java基础 内部类
(13)java基础 多线程
(14) java基础 字符串操作
(15) java基础 垃圾回收机制
(16) java操作数据库,可使用JDBC
(17) web开发应用中,分页处理(数据库操作)
(18) web开发应用中,数据事务处理(数据库操作)
(19) web开发应用中的数据库性能优化
(20) oracle数据库操作,基础
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息