Java面试知识库

Java面试知识库

Java基础

Java是个面向对象的语言,如何理解面向对象呢?

  • 面向对象的三大基本特征:继承、封装、多态
    • 继承:子类继承父类,父类的属性和方法继承到子类。
    • 封装:将现实世界的事物抽象为一个Java类,该类封装了事物的属性、方法。
    • 多态:子类继承父类,可以通过重写(overwrite)父类方法,实现一个方法具有不同的实现。
  • 面向对象的五大基本原则:单一职责原则、开放封闭原则、里氏替换原则、依赖倒置原则、接口隔离原则
    • 单一职责原则:一个类只负责一件事。提高代码可维护性。
    • 开放封闭原则:对扩展开放,对修改封闭。提高代码可扩展性。
    • 里氏替换原则:子类必须能够替换其基类。提高代码灵活性。
    • 依赖倒置原则:方法依赖于抽象接口,而不是具体的实现。降低系统的耦合。
    • 接口隔离原则:将一个复杂臃肿的接口拆分为更小、更专注的接口。提高代码的灵活性和稳定性。

Java的继承

  • Java只允许多实现,不允许多继承
  • 多继承在C++中存在菱形继承的问题,Java为了避免该类问题,不允许多继承。
  • Java允许多实现,为了避免菱形继承的问题,实现的接口如果方法存在重复,就必须重写(overwrite)重复的方法。
  • Java的接口和抽象类的区别
    • Java8中接口有default方法,其余只能为抽象方法,没有实现代码。而抽象类可以有实现代码。
    • 接口不可以有构造器,抽象类可以有。
    • 接口被实现,抽象类被继承。
    • 接口只能使用public修饰符。

Java的基本类型与包装类型

  • 基本类型:byte、short、int、long、char、float、double、boolean
  • 包装类型:Byte、Short、Integer、Long、Character、Float、Double、Boolean
  • 包装类型存在的意义:Java是面向对象的语言,很多地方需要使用包装类型而不是基本类型。
  • 基本类型默认值为:0、false、\u0000,包装类型默认值为:null
  • Java为了便于开放人员,提供了自动装箱自动拆箱的功能
    • 自动装箱:自动将基本类型转换对应包装类型。通过包装类型的valueOf()方法
    • 自动拆箱:自动将包装类型转换对应基本类型。通过包装类型的xxxValue()方法

Java用什么适合存储金额的类型

Java中,floatdouble都是浮点数,浮点数在计算机中都是近似值,因此使用这两个类型存储金额的话,容易产生计算错误的问题。
因此,Java中提供了BigDecimal进行精确运算。

  • BigDecimal中的等值比较应使用compareTo,而不是equals方法。因为equals比较value(值)和scale(标度),0.1与0.10的value是一样的,而scale的值是不一样的。
  • BigDecimal需要准确的运算,那么BigDecimal(double)BigDecimal(String)对比,BigDecimal(String)的值是准确的,而BigDecimal(double)由于double是近似值,因此值是不准确的。

String、StringBuilder、StringBuffer

  • 可变性:String不可变、StringBuilder/StringBffer是可变的。
  • 线程安全:StringBuffer、String是线程安全,StringBuilder非线程安全。

Java的动态代理

  • 动态代理:在运行时动态地创建代理对象,并处理代理方法调用的机制。
  • 动态代理用途:各种框架中,在运行期生成代理类,如过滤器、拦截器等。
  • Java中的动态代理:Spring AOP的动态代理有两种方式:JDK动态代理Cglib动态代理
    • JDK动态代理:通过反射接收被代理的类。(要求必须要实现一个接口)
    • Cglib动态代理:第三方类库,通过继承的方式做动态代理。

什么是AIO、BIO、NIO

  • AIOAsynchronous I/O异步非阻塞I/O模型,操作后会回调通知调用方。
  • BIO:Blocking I/O同步阻塞I/O模型,一直阻塞,直到处理完成。
  • NIO:Non-Blocking I/O同步非阻塞I/O模型,不阻塞,进行其他操作,定时轮询检查。

Java集合

未完待续。。。

实时更新:https://labi-xiaoxin.github.io/labi-xiaoxin/#/docs/Java-Interview

你可能感兴趣的:(面试题,java,面试)