2019年公司内部Java面试题

2018-12-15  本文已影响0人  爱情绅士

公司招实习生,内部面试题
这是最基础的 java 基础面试题,还有 SQL 方面,线程也会提及,
Redis、springcloud 是加分项

1. final, finally, finalize的区别?

final 用于声明属性,方法和类,分别表示属性不可改变,方法不可覆盖,类不可继承。
finally 是异常处理语句结构的一部分,表示总是执行。
finalize 是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,供垃圾收集时的其他资源回收,例 如关闭文件等。

2. Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以implements(实现)interface(接口)?

匿名内部类在实现时必须借助一个类或一个接口,若从这个层次上讲它是可以继承其他类也可以实现接口的,
但若是通过extends 或implements 关键字那是不可能的

3. Static Nested Class 和 Inner Class的不同 ?

最大的不同就在于是否有指向外部的引用

4. &和&&的区别 ?

&和&&都是逻辑运算符,都是判断两边同时真则为真,否则为假;
但是&&当第一个条件不成之后,后面的条件都不执行了,而&则还是继续执行,直到整个条件语句执行完为止

5. HashMap和Hashtable的区别 ?

都是底层数组+链表来实现的。
HashMap 继承自AbstractMap,HashTable 继承自Dictionary,但都同时实现了Map、Cloneable、Serializable三个接口。
HashMap 是线程不安全的,但key、value可以为null。HashTable 是线程安全的,速度慢,key、value不能为null
HashTable已经被淘汰了,不要在代码中再使用它。

6. 什么时候用assert ?

断言在软件开发中是一种常用的调试方式,断言用于保证程序最基本、关键的正确性。断言检查通常在开发和测试时开启

7. String s = new String("xyz");创建了几个String Object ?

两个。"xyz" 在是常量池 pool 中的一个对象,new String() 将pool 中的对象拷贝到堆 heap 中,并把这个对象赋值给 s 。
一个在pool 中,一个在 heap 中

8. Math.round(11.5)等於多少? Math.round(-11.5)等於多少?

12 -11

9. 数组有没有length()这个方法? String有没有length()这个方法?

数组没有length()这个方法,但有这个属性
String有这个方法

10. Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型?

Overload 方法参数名、个数、类型不同,返回值也可以不同,在一个类中可以实现
Override 方法签名必须相同,返回值也必须相同,在两个类中实现

11. 最常见到的runtime exception ? 罗列出 > 5个

ClassCastException, 类型强制转换异常
ClassNotFoundException 类没找到时,抛出该异常
FileNotFoundException, 文件未找到异常
IndexOutOfBoundsException, 下标越界异常
IOException, 输入输出异常
NullPointerException, 空指针异常
SQLException, 操作数据库异常
SystemException, 系统异常

12. error和exception有什么区别?

Exception 和Error 都是继承了Throwable类,在Java中只有Throwable类型的实例才可以被抛出或者捕获,它是异常处理机制的基本类型
Exception是程序正常运行中,可以预料的意外情况,可能并且应该被捕获,进行相应处理。
Error是指正常情况下,不大可能出现的情况,绝大部分的Error都会导致程序处于非正常的、不可恢复的状态。

13. List, Set, Map是否继承自Collection接口 ?

List,Set是,Map不是。

14. abstract class和interface有什么区别 ?

抽象类可以有构造方法,接口不行。
抽象类可以有普通成员变量,接口不行。
抽象类可以包含非抽象方法,接口不行。
抽象类中可以包含静态方法,接口不行。
抽象类和接口中都可以包含静态成员变量,抽象类中的静态成员变量的访问类型可以任意,
但接口中定义的变量只能是public static final类型,并且默认即为public static final类型。

15. 接口是否可继承接口? 抽象类是否可实现(implements)接口? 抽象类是否可继承实体类(concrete class)?

接口可以继承接口
抽象类可以实现接口
抽象类可继承具体类也可以继承抽象类。

16. 启动一个线程是用run()还是start()? 选答题

start()来启动
实现并启动线程有两种方法
1、写一个类继承自Thread类,重写run方法。用start方法启动线程
2、写一个类实现Runnable接口,实现run方法。用new Thread(Runnable target).start()方法来启动

17. 构造器Constructor是否可被override?

不能

18. 是否可以继承String类?

不可以,被 final 修饰

19. try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后?

会执行,后

20. 两个对象值相同(x.equals(y) == true),但却可有不同的hash code,这句话对不对?

不对,如果两个对象相同(equals方法返回true),那么它们的hashCode值一定要相同;
如果两个对象的hashCode相同,它们并不一定相同。

21. float f=3.4;是否正确?

不正确。java 里面带点号的默认是 double 类型,不带点的是 int 类型。这里 double 转 float ,精度不够,需要强转

22. char 型变量中能不能存贮一个中文汉字?为什么?

可以。在Java中,char类型占2个字节,而且Java默认采用Unicode编码,一个Unicode码是16位,所以一个Unicode码占两个字节,Java中无论汉子还是英文字母都是用Unicode编码来表示的。所以,在Java中,char类型变量可以存储一个中文汉字。

23. 抽象的(abstract)方法是否可同时是静态的(static),是否可同时是本地方法(native),是否可同时被synchronized修饰?

都不可以

24. Java 中会存在内存泄漏吗,请简单描述。

存在。内存泄露就是指一个不再被程序使用的对象或变量一直被占据在内存中,Java中有垃圾回收机制,
它可以保证一对象不再被引用的时候,即对象编程了孤儿的时候,对象将自动被垃圾回收器从内存中清除掉。
两种情况存在内存泄漏:
①长生命周期的对象持有短生命周期对象的引用就很可能发生内存泄露,
尽管短生命周期对象已经不再需要,但是因为长生命周期对象持有它的引用而导致不能被回收,比如
一个外部类的实例对象的方法返回了一个内部类的实例对象,这个内部类对象被长期引用了,
即使那个外部类实例对象不再被使用,但由于内部类持久外部类的实例对象,这个外部类对象将不会被垃圾回收
②当一个对象被存储进HashSet集合中以后,就不能修改这个对象中的那些参与计算哈希值的字段了,否则,
对象修改后的哈希值与最初存储进HashSet集合中时的哈希值就不同了,在这种情况下,
即使在contains方法使用该对象的当前引用作为的参数去HashSet集合中检索对象,也将返回找不到对象的结果,
这也会导致无法从HashSet集合中单独删除当前对象,造成内存泄露

上一篇下一篇

猜你喜欢

热点阅读