吐血整理!这200道阿里P6必备Java面试题,我简直太爱了

前言梳理了好久 , 总算是把面试题全部导出来了 , 毕竟还要上班 , 这次就给大家总结了一些JAVA开发岗位的经典面试题 。
篇幅较大 , 阅读过程中可能会有点繁琐! 但请细细观看 , 文章末尾有留给大家的小惊喜!!!
千万不要错过了~ 话不多说 , 咱们就直接开整!
Java开发岗面试题JavaOOPJava的数据结构有哪些?

  • 线性表(ArrayList)
  • 链表(LinkedList)
  • 栈(Stack)
  • 队列(Queue)
  • 图(Map)
  • 树(Tree)
Java中有几种数据类型四型八种
  • 整形:byte、short、int、long
  • 浮点型:float、double
  • 字符型:char
  • 布尔型:boolean
String str="aaa",与String str=new String("aaa")一样吗?
  • 不一样 , 第一个字面量声明字符串 , 会从常量池里面取 , 池中没有则创建 , 有则复用 , 后面再同样声明一个aaa时 , 就从池中取出复用 。第二个使用new的方式创建 , 是不会放到常量池中的 , 所以也不会复用 。
String、StringBu??er 和 StringBuilder 的区别是什么?
  • String是只读字符串 , 它不是基本数据类型 , 而是一个对象 , 它的底层是一个final的char字符数组 , 一经定义 , 就不能增加和修改 , 每次对String的操作都是重新生成一个String字符串对象 。
  • StringBu??er和StringBuilder都继承了AbstractStringBulder类 , 2个类都是用来进行字符串操作的 。
  • StringBu??er是线程安全的 , 而StringBuilder是非线程安全的 , 所以StringBuilder效率比StringBu??er高 , StringBu??er类的方法大多数都加了synchronized关键字 。
抽象类和接口的区别是什么?
  • 抽象类需要使用abstract关键字定义 , 它可以有抽象方法和实例方法 , 抽象方法没有方法体 , 需要子类实现 。包含抽象方法的类 , 一定是抽象类抽象只能被继承 , 不能被实例化
  • 接口接口的方法全部都是抽象方法 , 属性都是常量接口不能被实例化接口只能被实现 , 实现接口的类必须实现所有的抽象方法 , 除非该类是抽象类 , 可以选择实现部分抽象方法 , 剩余了让子类实现接口可以多继承
有了equals() , 为什么还需要hashCode()
  • Java集合有2类 , List和Set , List集合有序可重复 , 而Set集合无序但不可重复 。Set集合保证唯一的方法 , 就是插入时判断对象的equals()方法 , 是否和已有元素重复 , 但是元素较多时 , 调用equals()方法就会很低效 。所以增加了hashCode() , 通过元素对象的内存地址计算出一个hash值 , 比较时 , 先比较hashCode , hashCode的效率非常高 , 当元素的hashCode相同时 , 再调用元素的equals()进行比较 , 这样效率就提升了 。
介绍Java的强、弱、软、虚 , 4种引用
  • 强引用 , 强引用在内存不足时 , 宁愿发生OOM也不愿意回收它 。
  • 软引用 , 使用SoftReference包裹引用 , 内存不足时 , 就会回收 。
  • 弱引用 , 使用WeakReference包裹引用 , 只要JVM垃圾回收发现了它 , 就会回收 。
  • 虚引用 , 回收机制和弱引用差不多 , 但是它在被回收前 , 会放入到ReferenceQueue队列中 , 并且虚引用声明时 , 必须传ReferenceQueue队列 。因为这个机制 , 大部分用虚引用来做引用销毁前的处理工作 。
Java创建对象有几种方式?有4种:
  • new关键字
  • 通过反射机制
  • 通过clone克隆机制
  • 通过序列化和反序列化机制
浅拷贝和深拷贝的区别是什么?例如一个对象中有一个List , 浅拷贝和深拷贝效果不同 。
  • 浅拷贝 , 只拷贝外层对象 , 它引用的List并不会拷贝 , 所以原对象和拷贝对象的List对象是同一个 。
  • 深拷贝 , 外层对象拷贝 , 它所有引用的对象也拷贝 , 所以拷贝的对象 , 它引用的List对象是新的一个 。
?nal、?nalize()、?nally , 它们有什么区别?