面试题

来源:互联网 发布:python turtle库安装 编辑:程序博客网 时间:2024/06/02 04:31

1、数据库正常启动的几种状态 

        1)STARTUP NOMOUNT -数据库实例启动

        2)STARTUP MOUNT -数据库装载

        3)STARTUP OPEN -数据库打开

2、举出判断DDL改动的两个方法

        Logminer或Streams

3、创建数据库时自动建立的tablespace名称

SYSTEM tablespace

4、创建用户时,需要赋予什么权限才能使其连接数据库

CONNECT

5、常用的两个list的非同步实现类是

ArrayList和LinkedList,其中链表实现的是LinkedList,其查询效率较ArrayList差,增删效率较ArrayList快

6、默认情况下,用户请求一个servlet时,容器会为当前用户创建一个会话,当用户请求一个jsp页面时,容器不会为当前用户创建一个会话

7、java中线程的四种状态分别是 运行、就绪、挂起、结束,让线程从运行状态转换为暂停状态的有sleep()和wait()

8、在UML中,类之间的管理有 继承、关联、实现、依赖、聚合五种

9、set中的元素可以为NULL,不可以重复,hashMap中的key不可以为NULL,value可以为NULL

10、简述servlet中请求的转发和重定向的区别

转发:浏览器请求资源,服务器直接访问目标地址的URL,地址栏地址不改变,客户端不知道哪里来的资源,可以用session、request

重定向:服务器发送状态码告诉浏览器,重新发送请求到重定向地址,地址栏地址改变,不可以用session、request

11、简述Overload和Override的区别,Overload方法是否可以改变返回值类型

Overload:重载,方法名相同,参数不同,可以改变返回值类型

Override:重写,方法名相同,参数相同,不可以改变返回值类型,不能比原来的方法范围小,只能相等或更大

12、简述IO流中字节流与字符流之间的差别,并列举出常用的字符流与字节流,字节流与字符流之间转换的桥梁是什么

字符流:处理两个字节,以Reader和Writer结尾的都是字符流

字节流:处理一个字节,以Stream结尾的都是字节流

13、简述如下关键字用途try、catch、throw、throws、finally 
try:保护代码,如果try中某行代码出现异常,则try中代码不再继续执行。 
catch:捕获异常,当try中出现异常,则catch负责捕获异常,并处理。
throw:抛出异常。 
throws:声明异常。 
finally:无论try中是否出现异常,finally一定执行。

14、接口很重要,为了说明情况,这里稍微啰嗦点:
(1)接口用于描述系统对外提供的所有服务,因此接口中的成员常量和方法都必须是公开(public)类型的,确保外部使用者能访问它们;
(2)接口仅仅描述系统能做什么,但不指明如何去做,所以接口中的方法都是抽象(abstract)方法;
(3)接口不涉及和任何具体实例相关的细节,因此接口没有构造方法,不能被实例化,没有实例变量,只有静态(static)变量;
(4)接口的中的变量是所有实现类共有的,既然共有,肯定是不变的东西,因为变化的东西也不能够算共有。所以变量是不可变(final)类型,也就是常量了。
(5) 接口中不可以定义变量?
如果接口可以定义变量,但是接口中的方法又都是抽象的,在接口中无法通过行为来修改属性。有的人会说了,没有关系,可以通过实现接口的对象的行为来修
改接口中的属性。这当然没有问题,但是考虑这样的情况。如果接口 A 中有一个public 访问权限的静态变量 a。按照 Java 的语义,我们可以不通过实现接口
的对象来访问变量 a,通过 A.a = xxx; 就可以改变接口中的变量 a 的值了。正如抽象类中是可以这样做的,那么实现接口 A 的所有对象也都会自动拥有这一
改变后的 a 的值了,也就是说一个地方改变了 a,所有这些对象中 a 的值也都跟着变了。这和抽象类有什么区别呢,怎么体现接口更高的抽象级别呢,怎么体
现接口提供的统一的协议呢,那还要接口这种抽象来做什么呢?所以接口中不能出现变量,只能有常量,如果有变量,就和接口提供的统一的抽象这种思想是抵
触的。所以接口中的属性必然是常量,只能读不能改,这样才能为实现接口的对象提供一个统一的属性。
通俗的讲,你认为是要变化的东西,就放在你自己的实现中,不能放在接口中去,接口只是对一类事物的属性和行为更高层次的抽象。对修改关闭,对扩展(不
同的实现 implements)开放,接口是对开闭原则的一种体现。
所以:
接口的方法默认是public abstract;
接口中不可以定义变量即只能定义常量(加上final修饰就会变成常量)。所以接口的属性默认是public static final常量,且必须赋初值。
注意:final和abstract不能同时出现。

15、Java 中能创建 volatile 数组吗? 
能,Java 中可以创建 volatile 类型数组,不过只是一个指向数组的引用,而不是整个数组。
我的意思是,如果改变引用指向的数组,将会受到 volatile 的保护,但是如果多个线程同时
改变数组的元素,volatile 标示符就不能起到之前的保护作用了。

16、什么是线程局部变量? 
线程局部变量是局限于线程内部的变量,属于线程自身所有,不在多个线程间共享。
Java 提供 ThreadLocal 类来支持线程局部变量,是一种实现线程安全的方式。但是
在管理环境下(如 web 服务器)使用线程局部变量的时候要特别小心,在这种情况
下,工作线程的生命周期比任何应用变量的生命周期都要长。任何线程局部变量一旦
在工作完成后没有释放,Java 应用就存在内存泄露的风险。

17、a = a + b 与 a += b 的区别? 
+= 隐式的将加操作的结果类型强制转换为持有结果的类型。如果两这个整型相加,
如 byte、short 或者 int,首先会将它们提升到 int 类型,然后在执行加法操作。
如果加法操作的结果比a的最大值要大,则a+b会出现编译错误,但是a += b没问题,如下: 
byte a = 127; 
byte b = 127; 
b = a + b; // error : cannot convert from int to byte 
b += a; // ok 
注:其实无论 a+b 的值为多少,编译器都会报错因为a+b操作会将a、b提升为int类型,
所以将 int 类型赋值给 byte 就会编译出错 

18、Java 中,编写多线程程序的时候你会遵循哪些最佳实践? 
a)给线程命名,这样可以帮助调试。 
b)最小化同步的范围,而不是将整个方法同步,只对关键部分做同步。 
c)如果可以,更偏向于使用 volatile 而不是 synchronized。 
d)使用更高层次的并发工具,而不是使用 wait() 和 notify() 来实现线程间通信,如 BlockingQueue,CountDownLatch 及 Semeaphore。 
e)优先使用并发集合,而不是对集合进行同步。并发集合提供更好的可扩展性。 

19、说出几点 Java 中使用 Collections 的最佳实践? 
a)使用正确的集合类,例如,如果不需要同步列表,使用 ArrayList 而不是 Vector。 
b)优先使用并发集合,而不是对集合进行同步。并发集合提供更好的可扩展性。 
c)使用接口代表和访问集合,如使用List存储 ArrayList,使用 Map 存储 HashMap 等等。 
d)使用迭代器来循环集合。 
e)使用集合的时候使用泛型。 

20、列出应该遵循的 JDBC 最佳实践? 
a)使用批量的操作来插入和更新数据 
b)使用 PreparedStatement 来避免 SQL 异常,并提高性能。 
c)使用数据库连接池 
d)通过列名来获取结果集,不要使用列的下标来获取。 

0 0