写点什么

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

用户头像
极客good
关注
发布于: 刚刚

线程不安全的集合


  • ArrayList

  • LinkedList

  • HashMap

  • HashSet

  • TreeMap

  • TreeSet


JAVA 线程创建方式有哪些?


继承 Thread 类,重写 run 方法。


实现 Runnable 接口,重写 run 方法。


实现 Callable 接口,重写 call 方法,这是一个由返回值的方法。


怎么实现动态代理?


  • JDK 原生动态代理

  • Cglib 动态代理


什么是死锁?


======


线程 A 持有独占锁 a,并且还尝试获取独占锁 b 的同时,线程 B 持有独占锁 b,并且还尝试获取独占锁 a 的情况下,这时 A 和 B 线程都在等待对方释放需要的锁,从而发生的阻塞现象,我们称为死锁。


ArrayList 和 LinkedList 的区别?


ArrayList 底层是基于动态数组的数据结构实现,而 LinkedList 是基于双向链表的数据结构实现。


因为 ArrayList 底层是基于数组实现的,所以 ArrayList 比 LinkedList 随机访问效率快。而 LinkedList 是链表线性的数据结构,所以需要移动指针从前往后依次查找,效率比较慢。


在非首尾的增加和删除操作,LinkedList 要比 ArrayList 效率要高。


需要频繁读取集合中的元素时,推荐使用 ArrayList;在插入和删除操作较多时,推荐使用 LinkedList。


并行和并发有什么区别?


  • 并行是指两个或者多个事件在同一时刻发生;并发是指两个或多个事件在同一时间间隔发生。

  • 并行是在不同实体上的多个事件,并发是在同一实体上的多个事件。


Java 访问修饰符有哪些?



构造器(constructor)是否可被重写(override)?


=======================


【一线大厂Java面试题解析+核心总结学习笔记+最新架构讲解视频+实战项目源码讲义】
浏览器打开:qq.cn.hn/FTf 免费领取
复制代码


==========


构造器是不能被继承的,所以不能被重写,但是可以被重载。


String 属于基础的数据类型吗?


String 不属于基础类型,String 属于引用类型。基础类型有 8 种:byte、boolean、char、short、int、float、long、double。


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


  • 普通类不能包含抽象方法,抽象类可以包含抽象方法。

  • 抽象类不能直接实例化,普通类可以直接实例化。


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 则是锁定当前变量,只有当前线程可以访问该变量,其他线程被阻塞住。

用户头像

极客good

关注

还未添加个人签名 2021.03.18 加入

还未添加个人简介

评论

发布
暂无评论
成功拿到大厂offer的我熬夜整理了这份Java高频面试题(含答案)