Java工程师面试题及答案(19道常见必考题解析)

Java工程师面试题及答案(19道常见必考题解析)-mikechen

今天给大家总结了一份Java工程师面试题及答案,本篇主要详解19道常见的Java工程师面试题及答案@mikechen

Java基本类型有哪些?

Java工程师面试题及答案(19道常见必考题解析)-mikechen

String是最基本的数据类型吗?

基本数据类型包括byte、int、char、long、float、double、boolean和short。

String是引用数据类型。

java.lang.String类是final类型的,因此不可以继承这个类、不能修改这个类。为了提高效率节省空间,我们应该用StringBuffer/StringBuilder类。

 

String、StringBuffer、StringBuilder的区别?

String、StringBuffer、StringBuilder最大的不同是String不可变,后者可变。

StringBuffer是线程安全的,StringBuilder线程不安全速度较快。

 

Java 有哪些引用?

Java引用主要包含4大引用:

  • 强引用详解
  • 弱引用详解
  • 软引用详解
  • 虚引用详解
  • 四大引用总结

Java四大引用详解:强引用、弱引用、软引用、虚引用

 

Java 引用的强弱顺序?

这4种级别由高到低依次为:强引用、软引用、弱引用和虚引用,如下图所示:

 

Java工程师面试题及答案(19道常见必考题解析)-mikechen

 

Integer与int的区别

int是java提供的8种原始数据类型之一,意思整型,占用4字节;

Integer是java为int提供的封装类,是引用数据类型;

int的默认值为0,而Integer的默认值为null,即Integer可以区分出未赋值和值为0的区别,int则无法表达出未赋值的情况;

例如,要想表达出没有参加考试和考试成绩为0的区别,则只能使用Integer

 

java中实现多态的机制是什么?

通过继承父类或实现接口,不同子类或实现类对同一父类方法有不同的实现。根据对象调用相应的实现方法。另外对于相似的方法,可以使用重载。

 

面向对象的特征有哪些方面?

Java工程师面试题及答案(19道常见必考题解析)-mikechen

1. 封装,隐藏内部实现,只暴露公共行为

2. 继承,提高代码的重用性

3. 多态,体现现实生活中相似对象的差异性

4. 抽象,抽取现实世界中相似对象的共同点

 

抽象和接口有什么区别?

含有abstract修饰符的class即为抽象类,abstract类不能创建的实例对象。含有abstract方法的类必须定义为abstract class,abstract class类中的方法不必是抽象的。abstract class类中定义抽象方法必须在具体(Concrete)子类中实现,所以,不能有抽象构造方法或抽象静态方法。如果的子类没有实现抽象父类中的所有抽象方法,那么子类也必须定义为abstract类型。

接口(interface)可以说成是抽象类的一种特例,接口中的所有方法都必须是抽象的。接口中的方法定义默认为public abstract类型,接口中的成员变量类型默认为public static final。

 

重载Overload和Override重写的区别?

Overload是重载的意思,Override是覆盖的意思,也就是重写。

重载和重写有共同之处,两个方法的方法名都必须相同,如果不同,既不构成重载,也不构成重写。

 

Java异常有哪些分类?

Java 所有的异常都是从Throwable继承而来的,其下有2个子接口,Error和Exception。

Java工程师面试题及答案(19道常见必考题解析)-mikechen

1.Error

Error是无法处理的异常,比如OutOfMemoryError,一般发生这种异常,JVM会选择终止程序,因此我们编写程序时不需要关心这类异常。

2.Exception

Exception,是另外一个非常重要的异常子类,比如NullPointerException、IndexOutOfBoundsException、ClassCastException,这些异常是我们可以处理的异常。

3.Error和Exception的区别

异常和错误的区别是,异常是可以被处理的,而错误是没法处理的。

4.可查的异常(checked exceptions)和不可查的异常(unchecked exceptions)

 

运行时异常与检查异常有何异同?

异常表示程序运行过程中可能出现的非正常状态,运行时异常表示虚拟机的通常操作中可能遇到的异常,是一种常见运行错误。java编译器要求方法必须声明抛出可能发生的非运行时异常,但是并不要求必须声明抛出未被捕获的运行时异常。

 

HashMap和Hashtable的区别?

1. 线程同步,Hashtable线程安全,HashMap线程不安全;

2. 效率问题,Hashtable效率低,HashMap效率高;

3. HashMap可以使用null作为key,Hashtable不可以使用null为key;

4. HashMap使用的是新实现,继承AbstractMap,而Hashtable是继承Dictionary类,实现比较老;

5. Hash算不同,HashMap的hash算法比Hashtable的hash算法效率高。

 

ArrayList和Vector的区别?

1. 线程同步,Vector线程安全,ArrayList线程不安全;

2. 效率问题,Vector效率低,ArrayList效率高;

3. 增长数量,Vector以1.5倍增长,ArrayList以2倍增长。

 

HashMap线程安全?有哪些安全方式?

HashMap不是线程安全的,线程安全的有HashTable、ConcurrentHashMap、SynchronizedMap,性能最好的是ConcurrentHashMap

 

常用的Map集合有哪些?

常用的Map集合:HashMap、HashTable、LinkedHashMap、ConcurrentHashMap。

 

HashSet和HashTree的区别?

HashSet哈希表实现,数据是无序的,可以放入一个null值。TreeSet二差树实现,数据是自动排好序的,不允许放入null值。

 

error和exception有什么区别?

error 表示恢复不是不可能但很困难的情况下的一种严重问题。比如说内存溢出,不可能指望程序能处理这样的情况。exception表示一种设计或实现问题,也就是说,它表示如果程序运行正常,从不会发生的情况。

 

Java异常捕获有哪些方式?

异常捕获处理的方法通常有:

  • try-catch
  • try-catch-finally
  • try-finally
  • try-with-resource

Java工程师面试题及答案(19道常见必考题解析)-mikechen

陈睿mikechen

10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。

关注「mikechen」公众号,获取更多技术干货!

后台回复面试即可获取《史上最全阿里Java面试题总结》,后台回复架构,即可获取《阿里架构师进阶专题全部合集

评论交流
    说说你的看法