Java面试题(1)-----基础篇、

“金三银四”—–对于即将跳槽和正在跳槽,或者说现在招工作的人来说,三月四月无疑是最好的时间段,新年伊始,很多人的跳槽,给了我们很多机会,单也会因为应聘的人数曾多给我们带来的些许的困难。
俗话说:打铁还得自身硬,所以,废话不多说,直接上题


1、Java为什么能够跨平台运行?

答:Java代码本身不是能直接运行的,因为它是.java文件,需要JVM虚拟机来编译成.class字节码文件,所以只要对应的平台上有JVM的存在,Java程序就可以在这个平台上运行。

2、谈谈你对Java反射的理解!

答:JAVA反射机制是指在运行状态中,对于任意一个类,都能够获取到这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。
任何一个类都是Class类的实例对象。
比如:有一个A类,我们通常可以这样得到这个类的对象:A a = new A();;通过上面一句话我们可以知道:A类其实也是Class类的一个对象。
表现方式有以下三种方法:

1、Class c1 = Class.forName("类的全名");
2、Class c2 = A.class;
3、Class c3 = a.getClass();

注:Java反射是很重要的知识点,理解透彻了,对于以后学习框架是有帮助的,面试回答的时候,只要意思表达出来就好,自己一知半解的东西就不要说了。
3、谈谈 & 和 && 的区别!

答:& 和 && 都可以作为逻辑与的运算符,表示逻辑与(and),当运算符结果都是true时,运算结果才为true,只要一方为false,则运算结果为false
&& 短路或,是具有短路效果的,只要&&前面运算结果为false时,&&后面的表达式不会参与运算;
& 是不会产生短路效果的,如果&前面运算结果为false时,&后面的表达式还会参与运算。
& 还可以作为位运算符,当&操作符两边的表达式不是boolean类型时,&表示按位与操作。

4、short s1=1; s1=s1+1; short s2=1; s2+=1; 这两个的运算结果是否一致?请说出原因。

答:不一样。第一个会在运行时报类型转换异常,第二个运算正常,结果为2。
因为,基本类型在转换的时候,小转大,是需要强制转换的。在运算s1=s1+1的时候,因为1是int类型,s1short类型,short是小类型,则需要强制转换。
而在运算s2+=1时,由于+= 是java语言规定的运算符,java编译器会对它进行特殊处理,会进行自动的类型转换,所以不会出错。

5、char 类型能否存储一个汉字?为什么?

答:char型变量是用来存储Unicode编码的字符的,unicode编码字符集中包含了汉字,所以,char型变量中当然可以存储汉字啦。不过,如果某个特殊的汉字没有被包含在unicode编码字符集中,那么,这个char型变量中就不能存储这个特殊汉字。
补充:unicode编码占用两个字节,所以,char类型的变量也是占用两个字节。

6、如何用最有效的办法计算出2乘以8的结果?

答:2<<3,计算机底层运算的时候是使用的位运算,所以使用位运算,效率最高;而一个数向左移n位,结果就是这个数乘以2的n次幂。

7、final 修饰变量时,该变量如果是对象,对象的值可不可以变?

答:可以变,final修饰变量时,引用变量不会变,引用变量指向的对象的内容是可以变化的。

8、谈谈你对面向对象的理解!

答:这个问题的回答就很广泛了,重点以“万物皆对象”和面向对象的三大特征“封装、继承、多态”这几个方面展开来说,不要意味的被概念。

9、override 和 overload 的区别?

答:首先要说这两个都是什么意思,然后从其共同点出发,再说区别。
override是重写(覆盖),overload是重载,他们都是面向对象中多态的体现;
override重写发生在父子类之间,子类重写父类的方法,规则:(1)方法名、参数、返回值相同。(2)子类方法不能缩小父类方法的访问权限。(3)子类方法不能抛出比父类方法更多的异常(但子类方法可以不抛出异常)。(4)方法被定义为final不能被重写。
(5)被覆盖的方法不能为private,否则在其子类中只是新定义了一个方法,并没有对其进行覆盖。
overload重载是一个类中多态性的一种表现;规则:(1)有相同的方法名,但参数类型或个数彼此不同;(2)不能通过访问权限、返回类型、抛出的异常进行重载;(3)方法的异常类型和数目不会对重载造成影响;

10、构造器可不可以被重写或重载?

答:构造器可以被重载,不能被重写,原因可以参照第9题。

11、抽象类和接口的区别?

答:接口和抽象类都是继承树的上层,他们的共同点如下:(1)都不能被实例化;(2)都能包含抽象的方法,这些抽象的方法用于描述类具备的功能,但是不提供具体的实现。
他们的区别如下:(1)在抽象类中可以写非抽象的方法,从而避免在子类中重复书写他们,这样可以提高代码的复用性,这是抽象类的优势;接口中只能有抽象的方法。(2)一个类只能继承一个直接父类,这个父类可以是具体的类也可是抽象类;但是一个类可以实现多个接口;一个接口可以继承多个接口,但不能实现接口、也不能继承其他的类。
其实这个问题还有更多的回答方式,具体大家可以参考https://www.zhihu.com/question/20149818,其中很多回答都是很好理解的。

12、int 和 Integer 的区别?

答:int是java中的基本数据类型,Integer是int类型的包装类,当两者作为成员变量时:int的默认值是0,Integer的默认值是null;Integer中封装了一些对整数操作的方法,还定义了一些最值,其他的基本类型也有其对应的包装类。

13、String、StringBuffer、StringBuilder之间的区别?

答:String是字符串常量,String对象是不可变的,例如:
String s = “a”;
s = s+1;
System.out.println(s);//结果是a1
如果你看到这以为s的值已经变了,那么恰恰说明你入坑了,jvm在解释这段代码的第一行时候,先是创建了一个对象s;执行第二行的时候,重新创建了一个s赋值为上一个对象的值加上1(这里做的是字符串的拼接),而原来的s就会被JVM的垃圾回收机制(GC)给回收掉;
StringBuffer是字符串变量,是线程安全的;和上面的例子不一样的是:对变量进行操作就是直接对该对象进行更改,而不进行重新创建和回收的操作;
StringBuilder也是字符串变量,是非线程安全的,它的修改和StringBuffer是一样的。

14、“==” 和 “equals” 的区别?

答:==比较的是变量(栈)内存中存放的对象的(堆)内存地址,用来判断两个对象的地址是否相同,即是否是指相同一个对象。
equals比较的是两个对象的内容是否相等,由于所有的类都是继承自java.lang.Object类的,所以适用于所有对象,如果没有对该方法进行覆盖的话,调用的仍然是Object类中的方法,而Object中的equals方法返回的却是==的判断。
(Stringequals()进行了重写,比较的是两个对象的内容是否相等,这里可以结合常量池去理解一下)。

15、List、Set、Map 的区别?

答:List:
(1)、List的特征是其元素以线性方式存储,集合中可以存放重复对象;
(2)、可以插入多个null元素;
(3)、是一个有序容器,保持了每个元素的插入顺序,输出的顺序就是插入的顺序;
(4)、常用的实现类有ArrayListLinkedListVectorArrayList最为流行,它提供了使用索引的随意访问,而LinkedList则对于经常需要从List中添加或删除元素的场合更为合适。

Set:
(1)、Set存放的是对象的引用,没有重复对象;
(2)、无序容器,你无法保证每个元素的存储顺序,TreeSet通过 Comparator或者Comparable维护了一个排序顺序;
(3)、只允许一个null元素;
(4)、Set接口最流行的几个实现类是HashSetLinkedHashSet以及TreeSet。最流行的是基于HashMap实现的 HashSetTreeSet还实现了SortedSet 接口,因此 TreeSet是一个根据其compare()compareTo()的定义进行排序的有序容器。

Map:
(1)、Map不是collection的子接口或者实现类。Map是一个接口;
(2)、Map 的 每个 Entry 都持有两个对象,也就是一个键一个值,Map 可能会持有相同的值对象但键对象必须是唯一的;
(3)、TreeMap也通过mparator或者Comparable维护了一个排序顺序;
(4)、Map里你可以拥有随意个null值但最多只能有一个null键;
(5)、Map接口最流行的几个实现类是HashMapLinkedHashMapHashtableTreeMap

猜你喜欢

转载自blog.csdn.net/qq_41244651/article/details/79520251
今日推荐