2016年月薪过万的Java面试题及回答.doc

上传人:xt****7 文档编号:125778076 上传时间:2020-03-20 格式:DOC 页数:18 大小:159KB
返回 下载 相关 举报
2016年月薪过万的Java面试题及回答.doc_第1页
第1页 / 共18页
2016年月薪过万的Java面试题及回答.doc_第2页
第2页 / 共18页
2016年月薪过万的Java面试题及回答.doc_第3页
第3页 / 共18页
2016年月薪过万的Java面试题及回答.doc_第4页
第4页 / 共18页
2016年月薪过万的Java面试题及回答.doc_第5页
第5页 / 共18页
点击查看更多>>
资源描述

《2016年月薪过万的Java面试题及回答.doc》由会员分享,可在线阅读,更多相关《2016年月薪过万的Java面试题及回答.doc(18页珍藏版)》请在金锄头文库上搜索。

1、有关Java的一般问题1. 什么是JVM?为什么称Java为跨平台的编程语言?Java虚拟机(Java Virtual Machine)是可以执行Java字节码的虚拟机,每个Java源文件将被编译成字节码文件,然后在JVM中执行。Java之所以被设计成可以在任意的平台运行,而不需要重写或者在不同的平台下重新编译,这些都要归功于Java虚拟机(JVM),因为JVM非常了解特定的指令的长度以及底层硬件平台的特殊性。2. JDK和JRE之间的差异是什么?Java运行环境(Java Runtime Enviroment) 是运行Java程序的基本的Java虚拟机,包括执行applet的浏览器插件。JD

2、K (Java Development Kit) 是为了开发,编译和执行Java应用程序,针对Java的全功能的软件开发包,包含了JRE,编译器和工具(比如说 JavaDoc和Java Debugger)。3. “static” 关键字是什么意思?在Java里可以 override private 或 static 的方法吗? keyword mean ? Can you override private or static method in Java ?static 关键字表示,访问这个成员变量或方法时,不必获取它属于的类的实例。Java 里的 static 方法不能被 override,

3、因为 override 的机制是运行时(runtime)的动态绑定,而 static 方法是在编译时静态绑定的。static 方法并不与任何类的具体实例有关,因此无法应用继承的概念。4. 在静态方法里可以访问非静态变量吗?Java中的 static 变量归相应的类所有,它的值对于类的所有实例都是相同的。static 变量是在 JVM 加载类的时候初始化的。如果代码试图访问非静态的变量,而且不是通过类的实例去访问,编译器会报错,因为这些非静态变量还没有被创建呢,并且它们没有与实例相关联。 顶5. Java 支持哪些数据类型?什么是 Autoboxing 和 Unboxing?Java语言支持的8

4、个基本数据类型如下: byte short int long float double boolean charAutoboxing 是指在基本数据类型和对应的包装(wrapper)类之间Java 编译器所做的自动转换。例如,编译器将 int 转换为Integer,将double 转换为Double,等等。逆向的转换称为 unboxing。6. 在Java中什么是方法的Override(覆盖) 和 Overload(重载)?Java中方法的 overload 发生的条件是,同一个类里,有两个或以上的方法名称完全相同,但参数列表不同。另一方面,方法的 override 是指,子类重定义了父类里的

5、同一个方法。Override 的方法必须方法名、参数列表和返回类型都完全相同。Override 的方法不会限制原方法的访问权限。7.Java中构造函数、构造函数重载的概念和拷贝构造函数当类的对象被创建的时候,调用它的构造函数。每个类都有一个构造函数。如果程序员没有为类编写构造函数,Java编译器自动为类创建一个缺省的构造函数。构造函数重载和Java中函数重载类似,可以为同一个类创建不同的构造函数,每个构造函数必须拥有唯一的参数列表。Java与C+不同,它不支持拷贝构造函数,但是区别仅仅是,如果你没有编写类的拷贝构造函数,Java不会自动创建它。8.Java支持多继承吗?Java不支持多继承,每

6、个类只允许继承一个类,但是可以实现多个接口。9.接口和抽象类有什么不同?Java同时提供和支持抽象类和接口,它们的实现有一些共同的特点,也有如下不同: 接口中所有的方法默认都是抽象的,而抽象类可以同时包含抽象和非抽象的方法。 一个类可以实现多个接口,但它只能继承一个抽象类。 一个类要实现某个接口,必须实现这个接口声明的所有方法。而一个类不需要实现抽象父类中声明的所有方法,不过,这时候这个类也必须声明为抽象类。 抽象类可以实现接口,而且不需要实现接口中的方法。 接口中声明的变量默认是final的,而抽象类可以包含非final的变量。 接口中的成员默认是public的,而抽象类的成员可以是priv

7、ate,protected,或public的。 接口是绝对抽象的,不可实例化,抽象类也不可以实例化,但可以在main方法中触发实例化(注:通过匿名类实现)。也可以查阅Abstract class and Interface differences for JDK 8。10.传引用和传值当对象通过传值调用时,传递的是这个对象的一个拷贝。因此,即使函数修改这个对象,也不会影响原对象的值。当对象通过传引用调用时,对象本身没有被传递,而传递的是对象的一个引用。因此,外部函数对这个对象的修改,也会反映到任何出现这个对象的地方。 Java 线程11. 进程与线程的区别 ?进程是一个程序的执行(即正在运行的

8、程序), 然而线程是在进程中独立的执行序列. 一个进程可以包含很多线程. 线程有时被称为轻量级的进程.12. 说下创建线程的不同方式. 你倾向于哪种方式并说明原因 ?有三种创建线程的方式: 继承Thread类. 实现Runnable接口. 通过Executor框架创建线程池.首选方式是实现Runnable接口, 因为它不需要继承Thread类. 当你的程序设计需要多继承时, 使用接口会有所帮助. 另外, 线程池效率是很高的, 并且实施起来也很简单.13. 解释下可用的线程状态.在执行期间, 线程会处于以下状态中的一种: Runnable: 线程已准备就绪, 但没有立即运行. Running:

9、处理器正在执行的线程代码. Waiting: 处于阻塞状态的线程, 等待外部某种处理的结束. Sleeping: 被强制休眠的线程. Blocked on I/O: 等待I/O操作的完成. Blocked on Synchronization: 等待取得线程锁. Dead: 线程已经执行结束.14. 同步方法与同步块的区别 ?在Java程序中, 每个对象都拥有一个锁. 线程可以通过使用synchronized关键字来获取一个对象上的锁. synchronized关键字可以用于方法级别(粗粒度锁)或代码块级别(细粒度锁).15. 在监视器中的线程同步是怎样发生的? 你可以使用哪些级别的同步 ?J

10、VM使用结合了监视器的锁. 监视器是一个守护者, 它看管一个同步代码的序列, 并且确保在一个时刻只能有一个线程执行同步代码片段. 每个监视器关联着一个对象引用. 只能得到锁的线程才可以执行同步代码.16. 什么是死锁 ?当两个进程相互等待对方执行完毕时, 其结果是它们会永远等待下去.17. 怎样确保N个线程访问N个资源时不会发生死锁 ?使用N个线程时一个非常简单的避免死锁的方法是为所有的锁排序, 并强制每个线程也按那种方式排序. 这样, 如果所有线程以相同的顺序锁定和解锁互斥资源就不会发生死锁了.Java Collections18. Java Collections框架的基本接口 ?Java

11、 Collections 框架提供了一系列支持对象集合操作的设计良好的接口和类. Java Collections框架中最基础的接口是: Collection, 表示一组对象(元素). Set, 包含非重复元素的集合. List, 包含非重复元素的有序集合. Map, 包含非重复键的键值对的对象.19. 为什么Collection没有继承Cloneable和Serializable接口 ?Collection接口描述的是由元素组成的对象组. Collection的每一个具体实现可以选择自己的方式来管理元素. 一些集合允许存在重复键, 另一些则不允许.当处理实际实现时复制和序列化的语义和效果才会

12、起作用. 因此, 集合类的具体实现应该决定它们将怎样被复制和序列化.20. 什么是Iterator(叠代器) ?Iterator接口提供了许多能够叠代集合的方法.每个java集合(Collection)都含有一个返回Iterator实例的iterator方法. 叠代器在叠代过程中能够移除底层集合中的元素.21. Iterator 和ListIterator之间的不同 ?它们之间的不同如下: Iterator能够遍历Set和List集合, 而ListIterator只能用来遍历List. Iterator只能正向遍历集合, 而ListIterator可以双向遍历List. ListIterato

13、r实现了Iterator接口并提供了额外的功能, 例如添加元素, 替换元素, 取得上一个或上一个元素索引, 等等.22. fail-fast与fail-safe的区别?Iterator的fail_safe特性是对底层集合的拷贝进行操作, 因此对集合的任何改变都不会有影响. java.util包下的所有集合类是fail-fast的, 但java.util.concurrent包下的集合类是fail-safe的. fail-fast叠代器会抛出ConcurrentModificationException, 而fail-safe叠代器不会抛出这种异常.23. Java中的 HashMap 是怎么工

14、作的?Java 中的 HashMap 是用来存储键值对的。HashMap需要一个 hash 函数,它使用hashCode和equals 方法,来进行 collection 中元素的保存和查找。调用 put 方法时,HashMap会计算键(key)的 hash 值,然后将键值对存到 collection 的适当索引下。如果键已经存在,那么相应的值会更新。HashMap的重要特征主要有它的容量,装载因子(load factor)和容量扩充(threshold resizing)。24. hashCode() 和 equals() 方法重要性何在 ?Java中的HashMap使用hashCode和e

15、quals方法来确定键值对的索引。根据键去查询对应的值时,同样会用到这两个方法。如果这两个方法没有正确实现,两个不同的键可能会产生相同的 hash 值,因此会被 collection 认为是相同的。并且,这两个方法在检测重复时也会用到。因此,这两个方法都要正确实现,对HashMap的正确性和效率都至关重要。25.HashMap与HashTable之间有哪些不同?HashMap、HashTable这两个类都实现了Map接口,因此有些非常相似的特征,但他们在以下特性中又有所不同: HashMap的key与value都允许null值的存在,而HashTable则既不允许key为null,也不允许value为null。 HashTable是线程同步的,而HashMap则不是。因此,在单线程环境下HashMap是首选,而HashTable更适合在多线程环境下使用。 HashMap提供了它键的set集合,因此Java程序可以通过set进行迭代。因此,HashMap是快速失败的。另一方面,HashTable提供了它键的枚举。 HashTable类被当做遗

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 中学教育 > 试题/考题

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号