Java求职,这些基本功你需要掌握!
课程导航
Java求职,这些基本功你需要掌握!报名
Java求职,这些基本功你需要掌握!新闻
Java求职,这些基本功你需要掌握!环境
热门课程:
400-882-5311
  • 学校新闻

Java求职,这些基本功你需要掌握!

今天南京万和Java培训会和大家分享Java面试宝典之--基本功,帮助我们在面试中更加得心应手,不参加面试的同学也能够借此机会梳理一下自己的知识体系,进行查漏补缺。
 
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”关键字是什么意思?Java中是否可以覆盖(override)一个private或者是static的方法?
 
“static”关键字表明一个成员变量或者是成员方法可以在没有所属的类的实例变量的情况下被访问。
 
Java中static方法不能被覆盖,因为方法覆盖是基于运行时动态绑定的,而static方法是编译时静态绑定的。static方法跟类的任何实例都不相关,所以概念上不适用。
 
4.是否可以在static环境中访问非static变量?
 
static变量在Java中是属于类的,它在所有的实例中的值是一样的。当类被Java虚拟机载入的时候,会对static变量进行初始化。如果你的代码尝试不用实例来访问非static的变量,编译器会报错,因为这些变量还没有被创建出来,还没有跟任何实例关联上。
 
5.接口和抽象类的区别是什么?
 
Java提供和支持创建抽象类和接口。它们的实现有共同点,不同点在于:
 
接口中所有的方法隐含的都是抽象的。而抽象类则可以同时包含抽象和非抽象的方法。
 
类可以实现很多个接口,但是只能继承一个抽象类
 
类如果要实现一个接口,它必须要实现接口声明的所有方法。但是,类可以不实现抽象类声明的所有方法,当然,在这种情况下,类也必须得声明成是抽象的。
 
抽象类可以在不提供接口方法实现的情况下实现接口。
 
Java接口中声明的变量默认都是final的。抽象类可以包含非final的变量。
 
Java接口中的成员函数默认是public的。抽象类的成员函数可以是private,protected或者是public。
 
接口是绝对抽象的,不可以被实例化。抽象类也不可以被实例化,但是,如果它包含main方法的话是可以被调用的。
 
6.什么是值传递和引用传递?
 
对象被值传递,意味着传递了对象的一个副本。因此,就算是改变了对象副本,也不会影响源对象的值。
 
对象被引用传递,意味着传递的并不是实际的对象,而是对象的引用。因此,外部对引用对象所做的改变会反映到所有的对象上。
 
7.进程和线程的区别是什么?
 
进程是执行着的应用程序,而线程是进程内部的一个执行序列。一个进程可以有多个线程。线程又叫做轻量级进程。
 
8.创建线程有几种不同的方式?哪一种更好?为什么?
 
有三种方式可以用来创建线程:
 
继承Thread类
 
实现Runnable接口
 
应用程序可以使用Executor框架来创建线程池
 
实现Runnable接口这种方式更好,因为这不需要继承Thread类。在应用设计中已经继承了别的对象的情况下,这需要多继承(而Java不支持多继承),只能实现接口。同时,线程池也是非常高效的,很容易实现和使用。
 
9.Iterator和ListIterator的区别是什么?
 
Iterator可用来遍历Set和List集合,但是ListIterator只能用来遍历List。
 
Iterator对集合只能是前向遍历,ListIterator既可以前向也可以后向。
 
ListIterator实现了Iterator接口,并包含其他的功能,比如:增加元素,替换元素,获取前一个和后一个元素的索引,等等。
 
10.Java中的HashMap的工作原理是什么?
 
Java中的HashMap是以键值对(key-value)的形式存储元素的。HashMap中的每个元素都是一个Entry,这些key-value存在于map的entry数组中,HashMap需要一个hash函数,它使用hashCode()和equals()方法来向集合/从集合添加和检索元素。当调用put()方法的时候,HashMap会计算key的hash值,然后把键值对存储在集合中合适的索引上。如果key已经存在了,value会被更新成新值。
 
不同key的hash值是可能会相同的,这时之前相同key的值会被移到entry的后面,entry是一个类似链表的结构。因此HashMap是一个数组加链表的结合体。
 
11.HashMap和Hashtable有什么区别?
 
HashMap和Hashtable都实现了Map接口,因此很多特性非常相似。但是,他们有以下不同点:
 
HashMap允许键和值是null,而Hashtable不允许键或者值是null。
 
Hashtable是同步的,而HashMap不是。因此,HashMap适合于单线程环境,而Hashtable适合于多线程环境。
 
12.数组(Array)和列表(ArrayList)有什么区别?什么时候应该使用Array而不是ArrayList?
 
下面列出了Array和ArrayList的不同点:
 
Array可以包含基本类型和对象类型,ArrayList只能包含对象类型。
 
Array大小是固定的,ArrayList的大小是动态变化的。
 
ArrayList提供了更多的方法和特性,比如:addAll(),removeAll(),iterator()等等。
 
对于基本类型数据,集合使用自动装箱来减少编码工作量。但是,当处理固定大小的基本数据类型的时候,这种方式相对比较慢。
 
13.ArrayList和LinkedList有什么区别?
 
ArrayList和LinkedList都实现了List接口,他们有以下的不同点:
 
ArrayList是基于索引的数据接口,它的底层是数组。它可以以O(1)时间复杂度对元素进行随机访问。与此对应,LinkedList是以元素列表的形式存储它的数据,每一个元素都和它的前一个和后一个元素链接在一起,在这种情况下,查找某个元素的时间复杂度是O(n)。
 
相对于ArrayList,LinkedList的插入,添加,删除操作速度更快,因为当元素被添加到集合任意位置的时候,不需要像数组那样重新计算大小或者是更新索引。
 
LinkedList比ArrayList更占内存,因为LinkedList为每一个节点存储了两个引用,一个指向前一个元素,一个指向下一个元素。
 
14.HashSet和TreeSet有什么区别?
 
HashSet是由一个hash表来实现的,因此,它的元素是无序的。TreeSet是由一个树形的结构来实现的,它里面的元素是有序的。
 
15.short s1=1;s1=s1+1;有什么错?short s1=1;s1+=1;有什么错?
 
short s1=1;s1=s1+1;中,s1是short,1是int,所有s1+1的结构是int,不能用short的s1接收结果;而s1+=1的计算方式,在jvm规范中,指明了s1+=s2实际上是s1=(T1)(s1+s2),其中T1是s1的数据类型。s1+=1等效于s1=(short)(s1+1),所以是正确的。也就是++及类似的运算符会有jvm自动做类型转换。
 
今天南京万和Java培训的分享就到这里,*这些问题而引发出的一系列问题正是为我们指出了完善自身知识体系的一条道路,我们要做的是顺着这条道路坚持走下去!