面试题

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)通过列名来获取结果集,不要使用列的下标来获取。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值