Java常见面试题汇总(一)
1)什么是Java虚拟机?为什么Java被称作是“平台无关的编程语言”?
Java虚拟机是一个能够运行Java字节码的虚拟机进程。Java源文件被编译成能被Java虚拟机运行的字节码文件。
Java被设计成同意应用程序能够执行在随意的平台,而不须要程序猿为每个平台单独重写或者是又一次编译。
Java虚拟机让这个变为可能。由于它知道底层硬件平台的指令长度和其它特性。
2)JDK和JRE的差别是什么?
Java运行时环境(JRE)是将要运行Java程序的Java虚拟机。它同一时候也包括了运行applet须要的浏览器插件。Java开发工具包(JDK)是完整的Java软件开发包,包括了JRE。编译器和其它的工具(比方:JavaDoc,Java调试器)。能够让开发人员开发、编译、运行Java应用程序。
3)”static”keyword是什么意思?Java中能否够覆盖(override)一个private或者是static的方法?
“static”keyword表明一个成员变量或者是成员方法能够在没有所属的类的实例变量的情况下被訪问。
Java中static方法不能被覆盖,由于方法覆盖是基于执行时动态绑定的。而static方法是编译时静态绑定的。static方法跟类的不论什么实例都不相关。所以概念上不适用。
4)能否够在static环境中訪问非static变量?
static变量在Java中是属于类的,它在全部的实例中的值是一样的。当类被Java虚拟机加载的时候。会对static变量进行初始化。
假设你的代码尝试不用实例来訪问非static的变量。编译器会报错,由于这些变量还没有被创建出来,还没有跟不论什么实例关联上。
5)Java支持的数据类型有哪些?什么是自己主动拆装箱?
Java语言支持的8中基本数据类型是:byte、short、int、long、float、double、boolean、char
自己主动装箱是Java编译器在基本数据类型和相应的对象包装类型之间做的一个转化。比方:把int转化成Integer,double转化成Double,等等。反之就是自己主动拆箱。
6)Java中的方法覆盖(Overriding)和方法重载(Overloading)是什么意思?
Java中的方法重载发生在同一个类里面两个或者是多个方法的方法名同样可是參数不同的情况。与此相对,方法覆盖是说子类又一次定义了父类的方法。方法覆盖必须有同样的方法名,參数列表和返回类型。
覆盖者可能不会限制它所覆盖的方法的訪问。
7)Java中。什么是构造函数?什么是构造函数重载?什么是复制构造函数?
当新对象被创建的时候,构造函数会被调用。每个类都有构造函数。在程序猿没有给类提供构造函数的情况下。Java编译器会为这个类创建一个默认的构造函数。
Java中构造函数重载和方法重载非常相似。能够为一个类创建多个构造函数。每个构造函数必须有它自己唯一的參数列表。
Java不支持像C++中那样的复制构造函数,这个不同点是由于假设你不自己写构造函数的情况下。Java不会创建默认的复制构造函数。
8)Java支持多继承么?
Java中类不支持多继承,仅仅支持单继承(即一个类仅仅有一个父类)。
可是java中的接口支持多继承,,即一个子接口能够有多个父接口。
(接口的作用是用来扩展对象的功能。一个子接口继承多个父接口,说明子接口扩展了多个功能,当类实现接口时,类就扩展了对应的功能)。
9)接口和抽象类的差别是什么?
Java提供和支持创建抽象类和接口。它们的实现有共同点,不同点在于:
接口中全部的方法隐含的都是抽象的。而抽象类则能够同一时候包括抽象和非抽象的方法。
类能够实现非常多个接口,可是仅仅能继承一个抽象类
类能够不实现抽象类和接口声明的全部方法。当然。在这样的情况下,类也必须得声明成是抽象的。
抽象类能够在不提供接口方法实现的情况下实现接口。
Java接口中声明的变量默认都是final的。抽象类能够包括非final的变量。
Java接口中的成员函数默认是public的。抽象类的成员函数能够是private,protected或者是public。
接口是绝对抽象的,不能够被实例化。抽象类也不能够被实例化,可是,假设它包括main方法的话是能够被调用的。
10)什么是值传递和引用传递?
对象被值传递,意味着传递了对象的一个副本。因此。就算是改变了对象副本。也不会影响源对象的值。
对象被引用传递,意味着传递的并非实际的对象。而是对象的引用。因此,外部对引用对象所做的改变会反映到全部的对象上。
11)进程和线程的差别是什么?
进程是运行着的应用程序,而线程是进程内部的一个运行序列。一个进程能够有多个线程。线程又叫做轻量级进程。
12)创建线程有几种不同的方式?你喜欢哪一种?为什么?
有三种方式能够用来创建线程:
继承Thread类
实现Runnable接口
应用程序能够使用Executor框架来创建线程池
实现Runnable接口这样的方式更受欢迎,由于这不须要继承Thread类。在应用设计中已经继承了别的对象的情况下。这须要多继承(而Java不支持多继承),仅仅能实现接口。
同一时候,线程池也是非常高效的,非常easy实现和使用。
13)概括的解释下线程的几种可用状态。
新建、可执行、执行、堵塞、死亡
14)同步方法和同步代码块的差别是什么?
差别:
同步方法默认用this或者当前类class对象作为锁;
同步代码块能够选择以什么来加锁,比同步方法要更细颗粒度。我们能够选择仅仅同步会发生同步问题的部分代码而不是整个方法;
15)在监视器(Monitor)内部,是怎样做线程同步的?程序应该做哪种级别的同步?
监视器和锁在Java虚拟机中是一块使用的。
监视器监视一块同步代码块。确保一次仅仅有一个线程运行同步代码块。每个监视器都和一个对象引用相关联。线程在获取锁之前不同意运行同步代码。
16)什么是死锁(deadlock)?
两个或多个进程都在等待其它部分进程运行完成才干继续往下运行的时候就发生了死锁。
结果就是全部进程都陷入了无限的等待中。
17)怎样确保N个线程能够訪问N个资源同一时候又不导致死锁?
使用多线程的时候,一种很easy的避免死锁的方式就是:指定获取锁的顺序。并强制线程依照指定的顺序获取锁。因此,假设全部的线程都是以相同的顺序加锁和释放锁,就不会出现死锁了。
18)Java集合类框架的基本接口有哪些?
集合类接口指定了一组叫做元素的对象。集合类接口的每一种详细的实现类都能够选择以它自己的方式对元素进行保存和排序。
有的集合类同意反复的键,有些不同意。
Java集合类提供了一套设计良好的支持对一组对象进行操作的接口和类。Java集合类里面最主要的接口有:
Collection:代表一组对象。每个对象都是它的子元素。
Set:不包括反复元素的Collection。
List:有顺序的collection。而且能够包括反复元素。
Map:能够把键(key)映射到值(value)的对象,键不能反复。
19)为什么集合类没有实现Cloneable和Serializable接口?
克隆(cloning)或者是序列化(serialization)的语义和含义是跟详细的实现相关的。因此,应该由集合类的详细实现来决定怎样被克隆或者是序列化。
20)什么是迭代器(Iterator)?
Iterator接口提供了非常多对集合元素进行迭代的方法。每个集合类都包括了能够返回迭代器实例的迭代方法。迭代器能够在迭代的过程中删除底层集合的元素,可是不能够直接调用集合的remove(Object
Obj)删除,能够通过迭代器的remove()方法删除。
Java常见面试题汇总(一)的更多相关文章
- Java基础知识常见面试题汇总第一篇
[Java面试题系列]:Java基础知识常见面试题汇总 第一篇 文中面试题从茫茫网海中精心筛选,如有错误,欢迎指正! 1.前言 参加过社招的同学都了解,进入一家公司面试开发岗位时,填写完个人信息后 ...
- iOS常见面试题汇总
iOS常见面试题汇总 1. 什么是 ARC? (ARC 是为了解决什么问题而诞生的?) ARC 是 Automatic Reference Counting 的缩写, 即自动引用计数. 这是苹果在 i ...
- PHP常见面试题汇总(二)
PHP常见面试题汇总(二) //第51题:统计一维数组中所有值出现的次数?返回一个数组,其元素的键名是原数组的值;键值是该值在原数组中出现的次数 $array=array(4,5,1,2,3,1, ...
- java常见面试题及答案 1-10(基础篇)
java常见面试题及答案 1.什么是Java虚拟机?为什么Java被称作是"平台无关的编程语言"? Java 虚拟机是一个可以执行 Java 字节码的虚拟机进程.Java 源文件被 ...
- java常见面试题及答案
java常见面试题及答案 来源 https://blog.csdn.net/hsk256/article/details/49052293 来源 https://blog.csdn.net/hsk25 ...
- Java 常见面试题(一)
1)什么是Java虚拟机?为什么Java被称作是“平台无关的编程语言”? Java虚拟机是一个可以执行Java字节码的虚拟机进程.Java源文件被编译成能被Java虚拟机执行的字节码文件.Java被设 ...
- 【转载】JAVA常见面试题及解答(精华)
JAVA常见面试题及解答(精华) 1)transient和volatile是java关键字吗?(瞬联) 如果用transient声明一个实例变量,当对象存储时,它的值不需要维持.例如: ...
- Mybatis常见面试题汇总
Mybatis常见面试题汇总 最近在复习整理Mybatis的相关知识,针对面试中的典型问题,结合相关书籍和网上相关帖子,做如下整理. ================================= ...
- JAVA常见面试题问题简述(持续更新中)
JAVA常见面试题问题简述 1. springcloud和dubbo的区别 ①相比之下springcloud 的社区会更加活跃,解决问题的速度也会越来越快,dubbo相对来说如果碰到没有解决的问题,就 ...
随机推荐
- Python面试题(练习二)
1.用Python实现一个二分查找的函数. data = [1, 3, 6, 7, 9, 12, 14, 16, 17, 18, 20, 21, 22, 23, 30, 32, 33, 35] def ...
- logging——日志
导读 很多程序都有记录日志的需求,并且日志中包含的信息即有正常的程序访问日志,还可能有错误.警告等信息输出,python的logging模块提供了标准的日志接口,你可以通过它存储各种格式的日志,log ...
- Leetcode 472.连接词
连接词 给定一个不含重复单词的列表,编写一个程序,返回给定单词列表中所有的连接词. 连接词的定义为:一个字符串完全是由至少两个给定数组中的单词组成的. 示例: 输入: ["cat" ...
- 九度oj 题目1084:整数拆分 清华大学2010年机试题目
题目描述: 一个整数总可以拆分为2的幂的和,例如:7=1+2+4 7=1+2+2+2 7=1+1+1+4 7=1+1+1+2+2 7=1+1+1+1+1+2 7=1+1+1+1+1+1+1总共有六种不 ...
- struts拦截器详解
拦截器是Struts2最强大的特性之一,它是一种可以让用户在Action执行之前和Result执行之后进行一些功能处理的机制. 说到拦截器interceptor,就会想到过滤器filter: 过滤器f ...
- iOS学习笔记46-Swift(六)扩展
一.Swift扩展 扩展就是向一个已有的类.结构体或枚举类型添加新功能,这包括在没有权限获取原始源代码的情况下扩展类型的能力.扩展和 Objective-C中的分类(category)类似,但是它要比 ...
- 关闭chrome浏览器的input香蕉黄背景
chrome浏览器input的自动完成,点击之后自动输入,input的背景会变成香蕉黄,用如下方法修复: /* Change the white to any color ;) 就是给input设置内 ...
- MIPS中的异常处理和系统调用【转】
转自:http://blog.csdn.net/jasonchen_gbd/article/details/44044091 权声明:本文为博主原创文章,转载请附上原博链接. 异常入口 系统调用是用户 ...
- hdu 3605 /状态合并最大流
题意:N个人去m个星球,给出n个人可以去哪些星球的01矩阵.求是否能满足所有人都去.(n到10万,m<=10) 一看,起先一瞬间就建图,准备秒了,人向星球连边,直接最大流判断是否为n,提交超时. ...
- C++ 细节知识
1.typedef struct child {string name;struct child* next;}; child* head; head = (child*)malloc(sizeof( ...