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相对来说如果碰到没有解决的问题,就 ...
随机推荐
- oracle 控制文件的重建
目录 oracle 控制文件的重建 NORESETLOGS RESETLOGS oracle 控制文件的重建 不到最后时刻,如三个控制文件都已损坏,又没有控制文件的备份.还是不要重建控制文件,处理不好 ...
- RHEL6.X设置163yum源
目录 RHEL6.X设置163yum源 卸载系统的yum 检查是否已经卸载完成 下载yum以及相关包 安装yum相关rpm包 清除原有缓存,建立yum列表 本地yum源设置 挂载本地光盘 修改配置文件 ...
- 如何利用App打造自明星实现自盈利
1.了解各个概念 为了大家都能看懂这篇文章,先说明几个概念. App(Application):可以在移动设备上使用,满足人们咨询.购物.社交.娱乐.搜索等需求的一切应用程序. ...
- Selenium WebDriver- 操作JavaScript的confirm弹窗
#encoding=utf-8 import unittest import time from selenium import webdriver from selenium.webdriver i ...
- centos7下nginx添加到自定义系统服务中提示Access denied
安装好nginx后,添加到系统服务中 在/usr/lib/systemd/system下创建nginx.service文件内容如下: [Unit] Description=nginx - high p ...
- 2016湖南省赛----G - Parenthesis (括号匹配)
2016湖南省赛----G - Parenthesis (括号匹配) Bobo has a balanced parenthesis sequence P=p 1 p 2…p n of lengt ...
- C/C++、Java、Python谁是编译型语言,谁是解释型语言?
最近各大互联网公司线上笔试,编程题目里的编译器只支持C/C++.Java,甚至有的支持javaScrpit和Pascal,就是不支持Python.让一直以来用惯了Python的我直吐血,于是今天痛定思 ...
- python 序列化之pickle模块 json模块
一 pickle import pickle s='dd' print(pickle.dumps(s)) 输出: b'\x80\x03X\x02\x00\x00\x00ddq\x00.' pickle ...
- centos7配置国内yum源
文章目录 1.什么是yum仓库? 2.yum仓库配置 2.1.阿里镜像仓库配置 2.1.1.配置步骤 2.1.2.epel源 安装和配置 2.1.3.查看yum源 2.2.配置 清华大学镜像仓库 1. ...
- 【CF505D】Mr. Kitayuta's Technology
题目大意: 在一个有向图中,有n个顶点,给出m对数字(u,v)表示顶点u和顶点v必须直接或者间接相连,让你构造一个这样的图,输出最少需要多少条边. 挖坑待填 官方题解链接:http://codefor ...