在阿里巴巴的同学,说她面试实习生必问的Java基础面试题!
2021/7/4 20:25:10
本文主要是介绍在阿里巴巴的同学,说她面试实习生必问的Java基础面试题!,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
我是陈皮,一个在互联网 Coding 的 ITer,微信搜索「陈皮的JavaLib」第一时间阅读最新文章,回复【资料】,即可获得我精心整理的技术资料,电子书籍,一线大厂面试资料和优秀简历模板。
文章目录
- Throw 和 throws 的区别?
- 获取 Class 对象有哪些方法?
- 什么是 Java 反射机制?
- final 的作用?
- Java 集合类哪些是线程安全和线程不安全的?
- JAVA 线程创建方式有哪些?
- 怎么实现动态代理?
- 什么是死锁?
- ArrayList 和 LinkedList 的区别?
- 并行和并发有什么区别?
- Java 访问修饰符有哪些?
- 构造器(constructor)是否可被重写(override)?
Throw 和 throws 的区别?
- throws 用在方法定义上,后面跟着的是异常类,可以多个。
package com.chenpi; /** * @Description * @Author 陈皮 * @Date 2021/7/4 * @Version 1.0 */ public class ChenPiMain { public static void main(String[] args) throws InterruptedException { Thread.sleep(1000); } }
- 而 throw 用在方法内部,后面跟着的是异常对象。
package com.chenpi; /** * @Description * @Author 陈皮 * @Date 2021/7/4 * @Version 1.0 */ public class ChenPiMain { public static void main(String[] args) { if (null == args) { throw new IllegalArgumentException(); } } }
- throws 表示这个方法可能会抛出哪些异常,这样调用者可以知道这个方法会抛出什么异常,可以提前进行预处理; throw 表示要抛出什么异常对象,throw 后面的语句不会被执行到,会将异常抛出到调用者。
- throws 和 throw 都不处理异常,而是将抛出或者可能抛出异常,由调用者去处理异常。
获取 Class 对象有哪些方法?
- 调用对象的
getClass()
方法来获取。
Person person = new Person(); Class<? extends Person> aClass = person.getClass();
- 调用类的
class
属性来获取。
Class<Person> personClass = Person.class;
- 调用 Class 类的
forName()
静态方法来获取,比较常用,也是性能最好的。
Class<?> aClass = Class.forName("com.chenpi.Person");
什么是 Java 反射机制?
Java 反射机制是在运行期,对于任意一个类,都能够获得这个类的所有属性和方法。对于任意一个对象都能够调用它的任意一个属性和方法。这种在运行时动态的获取信息以及动态调用对象的方法的功能称为 Java 的反射机制。
我们知道,程序运行时,允许改变程序结构或变量类型的语言称为动态语言。例如 Python,Ruby等是动态语言。而 Java 不是动态语言,但是 Java 的反射机制让它成为准动态语言。反射允许静态语言在运行时检查,修改程序的结构与行为。
final 的作用?
- final 修饰类时,说明这个类不能被继承。如果你希望一个不要被继承,就可以用 final 关键字修饰。
- final 修饰方法,说明这个方法不能被重写。
- final 修饰变量,说明这个变量的值赋值后不能被修改。
Java 集合类哪些是线程安全和线程不安全的?
线程安全的集合
- Vector
- HashTable
- Stack
- Properties
线程不安全的集合
- 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 访问修饰符有哪些?
修饰符 | 当前类 | 同 包 | 子 类 | 其他包 |
---|---|---|---|---|
public | √ | √ | √ | √ |
protected | √ | √ | √ | × |
default | √ | √ | × | × |
private | √ | × | × | × |
构造器(constructor)是否可被重写(override)?
- 构造器是不能被继承的,所以不能被重写,但是可以被重载。
这篇关于在阿里巴巴的同学,说她面试实习生必问的Java基础面试题!的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-10-06小米11i印度快充版ROM合集:极致体验,超越期待
- 2024-10-06【ROM下载】小米11i 5G 印度版系统, 疾速跃迁,定义新速度
- 2024-10-06【ROM下载】小米 11 青春活力版,青春无极限,活力全开
- 2024-10-05小米13T Pro系统合集:性能与摄影的极致融合,值得你升级的系统ROM
- 2024-10-01基于Python+Vue开发的医院门诊预约挂号系统
- 2024-10-01基于Python+Vue开发的旅游景区管理系统
- 2024-10-01RestfulAPI入门指南:打造简单易懂的API接口
- 2024-10-01初学者指南:了解和使用Server Action
- 2024-10-01Server Component入门指南:搭建与配置详解
- 2024-10-01React 中使用 useRequest 实现数据请求