#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内功深厚?的主要内容,如果未能解决你的问题,请参考以下文章

#yyds干货盘点#算法学习的基本概念

#yyds干货盘点# 京东二面,Redis为什么这么快?

高频面试java高级进阶之锁?与CAS详解#yyds干货盘点#

#yyds干货盘点# 美团二面面经,最后竟然有惊喜?

#yyds干货盘点#JAVA三年经验面试题

#yyds干货盘点#Java面试经典100问