java程序员面试考试题及答案
final—修饰符
如果一个类被声明为final,意味着它不能再派生出新的子类,不能作为父类被继承。因此一个类不能既被声明为 abstract的,又被声明为final的。
将变量或方法声明为final,可以保证它们在使用中不被改变。被声明为final的变量必须在声明时给定初值,而在以后的引用中只能读取,不可修改。
被声明为final的方法也同样只能使用,不能重载。
finally—程序控制字
在异常处理时提供 finally 块来执行任何清除操作。如果抛出一个异常,那么相匹配的 catch 子句就会执行,然后控制就会进入 finally 块(如果有的话)。例如下面语句
Try{
语句1
}
catch(){
语句2
}
finally{
语句3
}
语句3始终都会执行
finalize—方法名
Java 技术允许使用 finalize() 方法在垃圾收集器将对象从内存中清除出去之前做必要的清理工作。这个方法是由垃圾收集器在确定这个对象没有被引用时对这个对象调用的。它是在 Object 类中定义的,因此所有的类都继承了它。子类覆盖 finalize() 方法以整理系统资源或者执行其他清理工作。finalize() 方法是在垃圾收集器删除对象之前对这个对象调用的。
53. equals,toString,hasCode三个方法
Equals:比较的两个对象不愿是同一对象,你就应该实现equals方法,让对象用你认为相等的条件来进行比较.
toString: 返回代表该对象的一个字串。一般的,toString方法返回该对象‘文字描述’的字串。返回的结果(即字串)应该是简明且易读的信息。建议所有继承类覆盖该方法
hasCode:(杂凑码)会根据对象型别、个数及内容等计算出所对应的内存识别值,相同对象与内容会计算出相同的hasCode。
54. 什么时候会使用hasCode
hascode是用hashTable的时候为了检索才用的
55. Hashtable和hashmap的区别
共同点:都属于Map接口的类,实现了将惟一键映射到特定的值上。
区别:(1)HashMap 类没有分类或者排序。它允许一个 null 键和多个 null 值。
(2)Hashtable 类似于 HashMap,但是不允许 null 键和 null 值。因为它是同步的它比HashMap 慢。线程安全性比较好
56. 问:举例介绍java中有哪些集合?
答:主要有LinkedList,ArrayList,Vector等
下面是详细
Collection
├List
│├LinkedList
│├ArrayList
│└Vector
│ └Stack
└Set
Map
├Hashtable
├HashMap
└WeakHashMap
57. ArrayList,Vector,LinkedList的区别
答:
(1) ArrayList和Vector都是使用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,它们都允许直接按序号索引元素,但是插入元素要涉及数组元素移动等内存操作,所以索引数据快而插入数据慢。
(2) Vector由于使用了synchronized方法(线程安全),通常性能上较ArrayList差
(3) LinkedList使用双向链表实现存储,按序号索引数据需要进行前向或后向遍历,但是插入数据时只需要记录本项的前后项即可,所以插入速度较快。
58. 说说抽象类和接口的区别。
(1)抽象类可以提供某些方法的实现。如果向抽象类中加入一个新的具体的方法,那么所有的子类一下子就得到了这个方法。接口做不到这一点!(这也许是抽象类的唯一优点)。
(2)因java的单根结构限制,子类只能实现一个抽象类类型,而接口类型则无此限制。这使抽象类作为类型定义工具的效能落后于接口。接口是定义混合类型(实现多重继承)的理想工具。
(3)从代码重构的角度上讲,将一个具体类从构成一个接口类型实现起来更容易。
接口可以实现接口。抽象类可以实现(implements)接口,抽象类可继承实体类,但前提是实体类必须有明确的构造函数。
59. Severlet的认识,有那些方法
Severlet的生命周期:
web容器加载servlet,生命周期开始。通过调用servlet的init()方法进行servlet的初始化。通过调用service()方法实现,根据请求的不同调用不同的do***()方法。结束服务,web容器调用servlet的destroy()方法。
主要方法:
public void init(ServletConfig config)
public ServletConfig getServletConfig()
public String getServletInfo()
public void service(ServletRequest request,ServletResponse response)
public void destroy()
60. 如何做一个队列?
队列是设计程序中常用的一种数据结构。它类似日常生活中的排队现象,采用一种被称为“先进先出”(LIFO)的存储结构。数据元素只能从队尾进入,从队首取出。在队列中,数据元素可以任意增减,但数据元素的次序不会改变。每当有数据元素从队列中被取出,后面的数据元素依次向前移动一位。所以,任何时候从队列中读到的都是队首的数据。
Vector类是JAVA中专门负责处理对象元素有序存储和任意增删的类,因此,用Vector可以快速实现JAVA的队列类。
方法说明
enq(x) 向队列插入一个值为x的元素;
deq() 从队列删除一个元素;
front() 从队列中读一个元素,但队列保持不变;
empty() 判断队列是否为空,空则返回真;
clear() 清空队列;
search(x) 查找距队首最近的元素的位置,若不存在,返回-1
其他
61. 条件覆盖、分支覆盖等属于哪种测试
62. 对CMM五个级别的解释。
(1)初始级。软件过程的特点是杂乱无章,有时甚至混乱,几乎没有明确定义的步骤,成功完全依赖个人努力和英雄式核心人物,管理是反应式(消防式)。
(2)可重复级。建立了基本的项目管理过程来跟踪成本、进度和功能特性,制定了必要的过程纪律,能重复早先类似应用项目取得成功。
(3)确定级。管理和工程的软件过程已文件化、标准化,并综合成整个软件开发组织的标准软件过程。所有项目都采用根据实际情况修改后得到的标准软件过程来发展和维护软件。
(4)管理级。制定了软件过程和产品质量详细的度量标准。软件过程和产品的质量都被开发组织的成员所理解和控制。
(5)优化级。加强了定量分析,通过来自过程质量反馈和来自新观念、新科技的反馈使过程能不断持续地改进。
跳跃无限
易慰怀
【java程序员面试考试题及答案】相关文章: