#yyds干货盘点# 大厂面试Java内功深厚?
Posted 程序员大彬
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了#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()
方法。
面试官:好的。再问一个问题,接口与抽象类有哪些区别?大彬:从语法层面上来说,有以下几种区别:
大彬:抽象类可以有方法实现,而接口的方法中只能是抽象方法
大彬:抽象类中的成员变量可以是各种类型的,接口中的成员变量只能是public static final类型
大彬:接口中不能含有静态代码块以及静态方法,而抽象类可以有静态代码块和静态方法
大彬:一个类只能继承一个抽象类,而一个类却可以实现多个接口
大彬:从语法层面上来看,两者抽象的层次不同。
大彬:抽象类是对整个类整体进行抽象,包括属性、行为,但是接口只是对类行为进行抽象。
大彬:继承抽象类是一种"是不是"的关系,而接口实现则是 "有没有"的关系。如果一个类继承了某个抽象类,则子类必定是抽象类的种类,而接口实现则是具备不具备的关系,比如鸟是否能飞。
面试官:不错,理解的挺到位
面试官:今天面试就到这吧
以上是关于#yyds干货盘点# 大厂面试Java内功深厚?的主要内容,如果未能解决你的问题,请参考以下文章