#yyds干货盘点# 大厂面试Java内功深厚()

一万年来谁著史,三千里外欲封侯。这篇文章主要讲述#yyds干货盘点# 大厂面试Java内功深厚?相关的知识,希望能为你提供帮助。


面试开始面试官:听说你Java内功深厚,来会会你
独白:别来无恙
面试官:先来个简单的,String, StringBuffer 和 StringBuilder的区别?大彬:从两方面来看,第一是可变性
大彬:String不可变,而??StringBuffer??和??StringBuilder??可变
大彬:第二是线程安全方面
大彬:String不可变,因此是线程安全的。??StringBuffer??是线程安全的,内部使用 ??synchronized?? 进行同步。??StringBuilder?? 不是线程安全的。
面试官:嗯,使用new String("dabin")会创建几个对象?大彬:如果字符串常量池中没有 "dabin" 这个字符串对象,那么会创建两个字符串对象
大彬:"dabin" 属于字符串字面量,因此编译时期会在字符串常量池中创建一个字符串对象,指向这个 "dabin" 字符串字面量
大彬:使用 new 的方式会在堆中创建一个字符串对象
面试官:嗯,刚提到字符串常量池,那什么是字符串常量池呢?大彬:字符串常量池,??String Pool??,保存着所有字符串字面量,这些字面量在编译时期就确定。
大彬:字符串常量池位于堆内存中,专门用来存储字符串常量。在创建字符串时,JVM首先会检查字符串常量池,如果该字符串已经存在池中,则返回其引用,如果不存在,则创建此字符串并放入池中,并返回其引用。
面试官:知道BIO/NIO/AIO的区别吗?大彬:嗯嗯,了解过。
大彬:BIO,同步阻塞IO,是用户进程发起一个IO操作以后,必须等待IO操作的真正完成后,才能继续运行。
大彬:NIO,同步非阻塞IO,客户端与服务器通过Channel连接,采用多路复用器轮询注册的??Channel??。用户进程发起一个IO操作以后,可做其它事情,但用户进程需要轮询IO操作是否完成,这样造成不必要的CPU资源浪费。
大彬:AIO,异步非阻塞IO,非阻塞异步通信模式,采用异步通道实现异步通信,其read和write方法均是异步方法。用户进程发起一个IO操作,然后立即返回,等IO操作真正的完成以后,应用程序会得到IO操作完成的通知。
面试官:嗯嗯,Java创建对象有几种方式?大彬:java创建对象有以下几种方式:

  • 用new语句创建对象。
  • 使用反射,使用??Class.newInstance()??创建对象。
  • 调用对象的??clone()??方法。
  • 运用反序列化手段,调用??java.io.ObjectInputStream??对象的??readObject()??方法。
面试官:好的。再问一个问题,接口与抽象类有哪些区别?大彬:从语法层面上来说,有以下几种区别:
【#yyds干货盘点# 大厂面试Java内功深厚()】大彬:抽象类可以有方法实现,而接口的方法中只能是抽象方法
大彬:抽象类中的成员变量可以是各种类型的,接口中的成员变量只能是public static final类型
大彬:接口中不能含有静态代码块以及静态方法,而抽象类可以有静态代码块和静态方法
大彬:一个类只能继承一个抽象类,而一个类却可以实现多个接口
大彬:从语法层面上来看,两者抽象的层次不同。
大彬:抽象类是对整个类整体进行抽象,包括属性、行为,但是接口只是对类行为进行抽象。
大彬:继承抽象类是一种"是不是"的关系,而接口实现则是 "有没有"的关系。如果一个类继承了某个抽象类,则子类必定是抽象类的种类,而接口实现则是具备不具备的关系,比如鸟是否能飞。
面试官:不错,理解的挺到位
面试官:今天面试就到这吧

    推荐阅读