Java|成功拿到大厂offer的我熬夜整理了这份Java高频面试题(含答案)( 二 )


普通类和抽象类有哪些区别?

  • 普通类不能包含抽象方法 , 抽象类可以包含抽象方法 。
  • 抽象类不能直接实例化 , 普通类可以直接实例化 。
BIO、NIO、AIO 有什么区别?
  • BIO:Block IO 同步阻塞式 IO , 平常使用的传统 IO , 它的特点是模式简单使用方便 , 并发处理能力低 。
  • NIO:New IO 同步非阻塞 IO , 传统 IO 的升级 , 客户端和服务器端通过 Channel(通道)通讯 , 实现了多路复用 。
  • AIO:Asynchronous IO 是 NIO 的升级 , 也叫 NIO2 , 实现了异步非堵塞 IO, 异步 IO 的操作基于事件和回调机制 。
JDK 和 JRE 区别?
JDK:Java Development Kit , java 开发工具包 , 提供了 java 的开发环境和运行环境 。
JRE:Java Runtime Environment , java 运行环境 , 提供了 java 的运行环境 。
什么是守护线程?守护线程(daemon thread) , 是一个服务线程 , 即服务其他线程的线程 。
线程的 run() 和 start() 有什么区别?
线程真正执行的操作是定义在 run() 方法中的 , 也称为线程体 。 而通过调用 Thread 类的 start() 方法来启动一个线程 。
synchronized 和 volatile 的区别?
volatile 可以告诉告诉 jvm 当前变量在寄存器(工作内存)中的值是不确定的 , 需要从主存中读取; synchronized 则是锁定当前变量 , 只有当前线程可以访问该变量 , 其他线程被阻塞住 。
  • volatile仅能使用在变量级别;synchronized则可以使用在变量、方法、
    和类级别的 。
  • volatile仅能实现变量的修改可见性 , 不能保证原子性;而synchronized则可以保证变量的修改可见性和原子性 。
  • volatile不会造成线程的阻塞;synchronized可能会造成线程的阻塞 。
  • volatile标记的变量不会被编译器优化;synchronized标记的变量可以被编译器优化 。
今日份分享已结束 , 请大家多多包涵和指点!
如何获取?
转发分享此文 , 后台私信小编:“1”即可获取 。 (注:转发分享 , 感谢大家)