java基础篇面试整理(一)

  整理些面试题,以备面试会遇到。

1、重载和重写的区别?

  重载:发生在同一个类中,方法名相同,形式参数类型不同,和返回值类型无关,和修饰符列表无关。

  重写:发生在不同的类中,方法名相同,形式参数类型相同,返回值小于等于父类 ,修饰符大于等于父类。

  形式参数类型指参数类型、参数个数、参数顺序。

2、String、StringBuffer和StringBuilder区别?

  String:不可变字符串。

  StringBuffer:可变字符串,效率较低,线程安全。

  StringBuilder:可变字符串,效率较高,线程不安全。

3、抽象类和接口区别?

  抽象类:可以有抽象方法和实现方法,

      一个类只能继承一个抽象类,实现时可以有选择地重写需要用到的方法,

      is a关系,比如空调制冷机,并具有加热功能。所以空调需继承制冷机类。

      接口:只能有抽象方法,

      一个类能实现多个接口,实现接口时一定要实现接口里定义的所有方法,

      like a关系,比如空调是制冷机,并加热功能。所以空调需实现加热接口。

4、BIO、NIO、AIO 有什么区别?

  BIO:同步阻塞,使用那个经典的烧开水例子,有一排水壶在烧开水,BIO模式是一个线程停留在一个水壶那,直到这个水壶烧开,才去处理下一个水壶。

  NIO:同步非阻塞,如果还拿烧开水来说,NIO的做法是叫一个线程不断的轮询每个水壶的状态,当检测到有某个水壶的状态发生了改变,从而进行下一步的操作。

  AIO:异步非阻塞,对应到烧开水中就是,为每个水壶上面装了一个开关,水烧开之后,水壶会自动通知我水烧开了。

  简而言之,同步和异步最关键的区别在于同步必须等待(BIO)或者主动的去询问(NIO)IO是否完成,而异步(AIO)操作提交后只需等待操作系统的通知即可。

5、ArrayList、Vector、LinkedList区别?

  ArrayList:动态数组实现,查询快,更新慢,属于非线程安全的操作类。

  Vector(弃用):动态数组实现,查询较快,更新慢,属于线程安全的操作类。

  LinkedList:双向链表实现,查询慢,更新快,属于非线程安全的操作类。

 

6、HashMap底层实现原理是什么?

  jdk1.7及之前:采用数组+链表的形式。

  jdk1.8及之后:采用数组+链表+红黑树的形式。当链表的长度超过8时,转换成红黑树。当红黑树上的元素个数减少到6个时就退化为链表。

                扩容时默认长度为16,初始化时判断容量是否是2的幂次方,如果不是扩容至最接近的幂次方。

java基础篇面试整理(一)

上一篇:一行Python代码玩遍童年的小游戏


下一篇:C# 根据Word 模板生成word 文件