面向对象的四大特征
- 封装(Encapsulation):将对象的状态(成员变量)和行为(方法)封装在一个类中,并通过访问控制(如public、private等修饰符)来控制对对象的访问和操作。
- 继承(Inheritance):子类可以继承父类的属性和方法,从而实现代码的复用。Java支持单继承,即一个类只能继承一个父类。
- 多态(Polymorphism):多态是指同一个方法或操作在不同对象上具有不同的行为。Java中的多态主要体现在方法的重写(override)和接口(interface)上。
- 抽象(Abstraction):抽象是将具有相似特征的对象抽象成一个类或接口,以提高代码的可维护性和可扩展性。抽象类和接口是Java中实现抽象的两种方式。
方法覆盖和重载的区别
- 覆盖是子类重写父类的方法,实现多态;
- 重载是同一个类中有相同方法名但不同参数列表的方法,提供多种处理方式。
final和finally和finalize的区别
- final是一个关键字,用于修饰类、方法和变量;
- finally是一个语句块,用于释放资源;
- finalize是一个方法,用于垃圾回收时回收资源。
BIO、NIO 和 AIO 的区别?
- BIO是同步阻塞I/O模型,每个连接需要一个线程处理;(老实短信传输)
- NIO是同步非阻塞I/O模型,使用多路复用技术,可以让一个线程处理多个连接;(聊天软件)
- AIO是异步非阻塞I/O模型,基于事件驱动,可以让线程在读/写时不阻塞。(云盘备份)
Exception 和 Error 有什么区别?
- java.lang.Exception: Exception 是可预见并可处理的异常情况; 捕获并处理
- java.lang.Error: Error 是无法预料和处理的严重问题。
字节流和字符流的区别(分别用什么类实现),读图片用什么流,读文本用什么流
- 字节流是以字节为单位处理二进制数据的流;
- 字符流是以字符为单位处理文本数据的流。
- 读图片用字节流,读文本用字符流。
List和Set的区别
- List 是有序、可重复的集合;
- Set 是无序、不重复的集合。
ArrayList和LinkedList区别
- ArrayList 是基于数组实现的,支持随机访问,插入和删除效率较低;
- LinkedList 是基于双向链表实现的,不支持随机访问,插入和删除效率较高。
HashMap和HashTable和ConcurrentHashMap的区别
- HashMap 是非线程安全的,允许null键和值;
- HashTable 是线程安全的,不允许null键和值;
- ConcurrentHashMap 是线程安全的,不允许null键和值,采用分段锁技术实现线程安全。
HashMap是不是线程安全的,如果不是那么在多线程中应该怎么处理
HashMap 不是线程安全的,在多线程中可以选择使用 ConcurrentHashMap、Collections.synchronizedMap(hashMap) 或者使用锁来实现线程安全。