国外同行总结的最近经常遇到的10个java面试题,看看和我们这边有什么不一样的

1,如果总分10分,你给自己在java领域的能力打几分?

这是一个比较棘手的问题,尤其是你对自己的技能没有足够的自信。切忌盲目打高分,因为接下来必然要面对匹配相应难度的问题。

2,聊一下java7和8的区别

实际上有很多区别,这里只需要阐述一下最典型的几个即可。例如

lambda表达式,接口的默认方法和静态方法, 方法引用,重复注解等

每一项可以多聊几句

3,你了解的集合类型?

这真是个老生常谈的问题,

ArrayList

LinkedList

HashMap

HashSet

你可能会面对这些类型的数据结构,使用场景,如何存储的等各种问题。

4,Object类都有哪些方法

这是考察你的基本功。Object类,在java.lang包里,处于java继承数的顶端。

Object类没有属性,只有一些重要的方法。必须知道的有:

clone()方法,看到clone又想到了深克隆和浅克隆,以后再讲。

equals()方法,finalize方法,getClass,hashcode,toString这几个非常熟悉的方法。

还有notify, notifyAll, and wait等几个用来处理线程并发的方法。

5,为什么java的string是不可变类型

java的string是放在string pool中,各个string变量可以指向同一个string,这为jvm节省了大量的内存。如果string是可变的,那么一个变量的改变,会导致其他指向该string的变量受影响。

因为string是不可变的,所以没有线程安全问题,可以在多个线程间共享。

String也用在java 类加载过程中。string的不可变性,保证了类加载的安全。

因为String是不可变的,所以他的hashcode在创建时就是确定的,没有了再次计算hashcode的操作。这样对于map结构来说,尤其方便。所以string是map里最常用的key类型。

6,Final, Finally, and Finalize的区别

final 是关键字。修饰类表示该类不能再被继承。修饰方法和变量表示其不能再被修改。

finally 是try-catch块的一部分,无论如何都会执行的那部分。

finalize是一个方法,Object类的方法。java的垃圾回收在回收一个对象之前,会执行该对象的finalize方法。

7,什么是钻石问题?

这其实说的是java的单继承问题。为什么java不允许多继承?如图所示。如果ClassA和ClassB都是想了父类SuperClass的MethodS

那么ClassC如果继承了ClassA和ClassB,他在调用MethodS的时候,java会无法确认是要调用哪一个方法。这就是java的钻石问题。

8,如何让一个类不能被修改?

这个问题还是能考察到很多点的。

1,需要将类申明为final的。

2,将类的属性字段全部设为private的

3,不提供操作属性字段的setter方法。

4,将可变字段声明为final,这样只能被赋值一次

5,在构造器中初始化所有字段,如果是对象字段,要进行深克隆。

6,在getter方法中返回对象的copy,而不是直接返回对象的引用。

9,解释一下单例模式

前面的文章有详细说明

10,说一下依赖注入DI

这是要考察spring相关的点

查看原文 >>
相关文章