记得那是周五,一天连着四轮面试(上午两场+下午两场),上午是百度一面和shopee,下午两轮全是百度的
一面
-
String,StringBuffer, StringBuilder
- String是由final修饰的类,同时它是由byte(9+)或者char(8-)数组组成的,这些数组也是final的
- StringBuffer是线程安全的,StringBuilder是线程不安全的。StringBuffer是通过synchronized的方法级别来实现的
- 对于StringBuffer和StringBuilder来说,他们有一个共同的父类,即AbstractStringBuilder,他们的属性和类都没有final修饰,所以导致了他们是可变的。相对来说,StringBuffer有自己的cache,保证了查询的性能,这个cache在builder中是没有的。
-
接口和抽象类
- 在JDK5之前,接口和抽象类在语法层面上有着显著的区别:接口不能有自己的方法体,同时接口只能是public的;抽象类可以有自己实现的方法,同时抽象类也可以有空方法
- 随着JDK的升级,在Java8时,接口可以有default方法,到了Java9之后,接口也可以有自己的私有方法。接口除了属性默认是public final的之外,几乎和抽象类在语法层面,没有任何区别
- 所以对于这两者的区别,我们要站在更高的的角度,从设计的层面去看它们之间的区别。在我看来接口的设计是自上而下的,而抽象类的设计是自下而上的。设