今天给大家总结了一份Java工程师面试题及答案,本篇主要详解19道常见的Java工程师面试题及答案@mikechen
Java基本类型有哪些?
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 引用的强弱顺序?
这4种级别由高到低依次为:强引用、软引用、弱引用和虚引用,如下图所示:
Integer与int的区别
int是java提供的8种原始数据类型之一,意思整型,占用4字节;
Integer是java为int提供的封装类,是引用数据类型;
int的默认值为0,而Integer的默认值为null,即Integer可以区分出未赋值和值为0的区别,int则无法表达出未赋值的情况;
例如,要想表达出没有参加考试和考试成绩为0的区别,则只能使用Integer
java中实现多态的机制是什么?
通过继承父类或实现接口,不同子类或实现类对同一父类方法有不同的实现。根据对象调用相应的实现方法。另外对于相似的方法,可以使用重载。
面向对象的特征有哪些方面?
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。
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
陈睿mikechen
10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。
关注「mikechen」公众号,获取更多技术干货!
后台回复【面试】即可获取《史上最全阿里Java面试题总结》,后台回复【架构】,即可获取《阿里架构师进阶专题全部合集》