java面试题(四)
来源:互联网 发布:网络主播直播内容规划 编辑:程序博客网 时间:2024/05/16 08:44
第四部分 核心API
1. 请画出Java集合框架的主要接口和类的继承关系。
解析:集合石非常重要的类型, 也是企业考察员工编程能力时常常关注的知识点。程序员应该熟悉Java集合框架的主要继承关系, 掌握常用集合类的用法和特点
Collection | Set ------ HashSet
List ------- | ArrayList
LinkedList
Map ------------- HashMap
2. 用简单代码演示创建一个泛型类为Customer类的List对象,并使用增强for循环迭集合。
解析:JDK5以后,集合框架中的接口和类都是泛型类及泛型接口,并可以使用增强for循环迭代集合。程序员需要确认开发平台的JDK版本,如果低于5.0则不能使用这些功能。
参考答案:
ArrayList<Customer> list = new ArrayList<Customer>();
for(Customer c : list){
}
3. 线程之间通信的方法有哪几个?分别起到什么作用?
解析:如果多个线程共享了某些数据,同时线程之间有存在一定的“依赖”关系,即执行某类线程必须依赖另一类的执行结果,如消费者必须等待生产者生产了商品才能消费。这种情况下,线程之间就需要通信。必须在同步代码块中调用线程通信的方法。
参考答案:线程通信的方法有三个,在Object类中定义。①wait方法:使得线程进入等待状态。②notify 方法:随意通知等待池中的某一个线程。③notifyAll 方法:通知等待池中所有线程。
4. Collection接口和Map接口分别定义了什么集合类型?有什么区别?
解析:Collection和Map是Java集合框架中两个基本集合类型,要区别不同的集合首先要从Collection和Map开始。
参考答案:Collection接口是传统的集合接口,可以把单个对象存储进来。而Map接口是映射接口,存储的是键值对。
5. List和Set集合有什么区别?
解析:List和Set是Collection接口的两个子接口,也是使用最多的两种集合类型。程序员应该熟悉这两个接口的基本特征,能够更准确地选择正确的集合类型。
参考答案:List实现了列表类型的集合,List中的元素是有序(ordered)的,每个元素根据放入集合的顺序而对应一个索引值, 可以根据这个索引值返回集合原宿。而Set实现了不重复元素集合,即Set中的元素不能够重复,重复的元素将无法添加到集合中。
6. List接口有哪几个实现类?分别说明其特征
解析:List是用的较多的集合类型,List是一个接口,具体使用List集合类型时,需要使用时实现类。List接口的每个实现类也都实现了不同的数据结构,各自具有不同的特征,其中最常用的是List实现类。
参考答案:List接口中有以下几个常用实现1 ArrayList:实现了动态数组的特征。
LinkedList: 实现了链表的数据结构,LinkedList也可以用作栈或者队列。
Vector:向量。
ArrayList Vector类的功能 ArrayList都可以实现,区别在于Vector是现行同步的。
7. Collectioin 和Collections有什么区别?
解析:很多初级程序员对Collectioni和Collections容易混淆,二者的名字非常类似,本义却大大不同,Collections类与Arrays类非常类似,都是工具类,程序员应该熟悉掌握。
参考答案:Collection是一个接口的名字,定义了集合类型的共同特征。而Collections是一个类的名字,是集合类型的工具类,类中定义了大量的静态方法,能够操作及和对象。
8. 如何将一个Collection转换成数组?
解析:集合和数组有很多共同的地方,二者都是作为数据容器使用, 用来持有数据。数组的长度是固定的,集合的长度却可以动态扩展,数组由于可以直接通过索引操作其元素,所以性能和效率较高。实际应用中,可能使用及合作为临时变量持有数据,却将处理结果转换成数组返回。
参考答案:Collection接口中定义了toArray(T[] a)方法来将集合转换为数组,其中T是泛型类型。
8.1 集合的作用?
集合是可以存储一批类型不同的对象,针对集合的实现类有很多,作用都是一样的,即存储、传输数据,但存储的数据结构不一样,其速度、安全性也不一样。
9. HashMap和TreeMap在性能上有什么样的差别呢?你比较倾向于使用哪一个?
一个平衡树的性能是O(logn)。Java里的TreeMap用一个红黑树来保证key/value的排序。红黑树是平衡二叉树。保证二叉树的平衡性,使得插入,删除和查找都比较快,时间复杂度都是O(log n)。不过它没有HashMap快,HashMap的时间复杂度是O(1),但是TreeMap的优点在于它里面键值是排过序的,这样就提供了一些其他的很有用的功能。
10. 什么是Iterator?
一些集合类提供了内容遍历的功能,通过java.util.Iterator接口。这些接口允许遍历对象的集合。依次操作每个元素对象。当使用Iterators时,在获得Iterator的时候包含一个集合快照。通常在遍历一个Iterator的时候不建议修改集合本省。
11. 什么是HaspMap和Map?
Map是接口,Java 集合框架中一部分,用于存储键值对,HashMap是用哈希算法实现Map的类
12. Java集合框架都有哪些最佳实践呢?
根据实际的使用情况选择合适的数据结构,例如固定大小的还是需要增加大小的,有重复元素的还是没有的,需要保持有序还是不需要,遍历是正向的还是双向的,插入是在末尾的还是任意位置的,更多的插入还是更多的读取,是否需要并行访问,是否允许修改,元素类型是相同的还是不同的,等等。另外,还需要尽早考虑多线程,原子性,内存使用量以及性能等因素。
不要假设你的集合里元素的数量一直会保持较小,它也有可能随着时间增长。所以,你的集合最好能够给定一个合适的大小。
针对接口编程优于针对实现编程。例如,可能在某些情况下,LinkedList是最佳的选择,但是后来ArrayList可能因为性能的原因变得更加合适
在取得列表的时候,如果返回的结果是空的话,最好返回一个长度为0的集合或者数组,而不要返回null。因为,返回null的话可能能会导致程序错误。调用你的方法的开发人员可能会忘记对返回为null的情况进行处理。
封装好集合:一般来说,集合都是不可变的对象。所以尽量不要把集合的成员变量暴露给调用者。因为他们的操作一般都不会进行必要的校验。
13. ArrayList和Vector的区别。
同步性:Vector是线程安全的,也就是说是同步的,而ArrayList是线程序不安全的,不是同步的 .数据增长:当需要增长时,Vector默认增长为原来一培,而ArrayList却是原来的一半
14. ArrayList、Vector、LinkedList的区别?
ArrayList、Vector:以线性表的方式存储,查、改快,增删慢 Vector:是线程安全,方法是同步方法 。
ArrayList:是线程不安全,方法是非同步方法 。
LinkedList:单链表,查、改慢,增删快
15. Map的接口和特点?
键名+键值,键名不可以重复,键值可以重复,通过键名取键值
HashMap:线程不安全 Hasttable:线程安全 jsp中的作用域对象(session、request、application、page)属于map这个体系
16. Collection及Collections的区别?
Collection是集合的根 Collections是算法,提供了静态方法,可以对集合进行操作
17. 假设存在文本文件etc.doc,请用代码展示将文件按行读出,并打印输出到控制台。
解析:能够使用java.io包进行文件的输入输出操作是一个程序员必备的技能,使用io中类操作的步骤都基本类似,都需要经历IO选择、创建流对象、进行读写操作、关闭流对象的过程,程序员应该熟悉常用的IO流, 能够根据需要选择适当的IO类。
参考答案:
File file = new File(“etc.doc”);
try{
FileReader fr = new FileReader(File);
BufferedReader br = new BufferedReader(fr);
String line = br.readLine();
while(line == null){
System.out.println(line);
Line = br.readLine();
}
}catch(FileNotFoundException e){
e.printStackTrace();
}catch(IOException e){
e.printStackTrace();
}
18.使用java语言如何创建线程对象?请列出常用的两种方法。
解析:Java 语言能够支持多线程编程,将线程封装成Thread类型的对象,只要创建Thread类型的对象,就能够便捷地启动线程、执行线程体。程序员首先必须掌握创建线程的常用方法。
参考答案:Java语言中经常使用两种方法创建线程。①创建Thread类的子类,在子类中覆盖Thread类的run方法,实现线程的运行体,只要创建该子类对象就是线程对象。②创建Runable接口的实现类,在实现类中覆盖接口中的run方法,实现线程的运行体。使用Thread(Runable)构造方法可以创建线程对象,参数是Runable接口实现类的实例。
19.关键字synchronized有什么作用?用简单代码展示synchronized的方法。
解析:线程可以共享数据,而共享数据时,可能会因为多个线程并发处理共享数据而导致数据不一致。这种时候,线程同步就费城关键。程序员必须掌握同步的用法,尤其不能随意将代码进行同步,因为同步将降低性能,所以一定不能把不需要同步的代码进行同步,而是只把必须同步的代码进行同步。
参考答案:synchronized可以将某个代码块或者某个方法进行线程同步,被同步的代码块在一个时刻只能被一个线程访问,只有当前线程处理结束后,方能被其他线程访问。例如:
public void run(){
for(int i=0;i<50;i++){
synchronized(this){
System,out,println(Thread.currentThread().getName()+”:x=”+x);
X++;
}
}
}
3. 用简单代码演示创建一个泛型类为Customer类的List对象,并使用增强for循环迭集合。
解析:JDK5以后,集合框架中的接口和类都是泛型类及泛型接口,并可以使用增强for循环迭代集合。程序员需要确认开发平台的JDK版本,如果低于5.0则不能使用这些功能。
参考答案:
ArrayList<Customer> list = new ArrayList<Customer>();
for(Customer c : list){
}
4. 线程之间通信的方法有哪几个?分别起到什么作用?
解析:如果多个线程共享了某些数据,同时线程之间有存在一定的“依赖”关系,即执行某类线程必须依赖另一类的执行结果,如消费者必须等待生产者生产了商品才能消费。这种情况下,线程之间就需要通信。必须在同步代码块中调用线程通信的方法。
参考答案:线程通信的方法有三个,在Object类中定义。①wait方法:使得线程进入等待状态。②notify 方法:随意通知等待池中的某一个线程。③notifyAll 方法:通知等待池中所有线程。
- 面试题(四)Java
- java面试题(四)
- java面试题(四)
- java面试题(四)
- Java面试题(四)
- java面试题(四)
- java面试题四
- Java面试题四
- java 面试题(四)
- java面试题(四)
- Java面试题四
- Java面试题系列(四)转载
- JAVA面试题集(四)
- java面试题集锦(四)
- java面试题汇总(四)
- 2014年java面试题(四)
- java面试题总结(四)
- java面试题整理(四)
- RabbitMQ镜像模式集群可用性测试总结
- 第一篇博客
- 高可用性系统在大众点评的实践与经验
- 三阶贝塞尔曲线拟合圆弧的一般公式
- jquery svg圆环渐变进度条
- java面试题(四)
- datatables 学习(一)
- HBuilder 使用教程
- pyh 修改addJS时默认的位置
- 我们分析了200款“二次元游戏”,最终发现了这些
- xcode8升级cocoapad
- [LeetCode]401. Binary Watch
- 什么是元数据(Metadata)
- 重写QAbstractItemModel