### JAVA程序员面试题集合知识点详解
#### 一、面向对象的四大特征
1. **抽象**
抽象是面向对象编程中的一个重要概念,它指的是在设计阶段仅关注对象的关键属性和行为,忽略不必要的细节。抽象有两种形式:
- **过程抽象**:指的是将一组相似的操作抽象为一个通用的过程或函数。
- **数据抽象**:指的是隐藏对象的具体实现细节,只暴露必要的接口给外部使用。
2. **继承**
继承是面向对象编程的核心特征之一,它支持类之间的层次结构关系。一个新类可以从现有类中继承属性和方法,从而减少重复代码并增强代码复用性。新类被称为**派生类**或**子类**,而现有类则被称为**基类**或**父类**。
3. **封装**
封装是面向对象编程的另一个核心特征,它的主要目的是隐藏对象的内部实现细节,只暴露必要的接口给外部使用。封装有助于保护数据不被意外修改,并确保数据的一致性。
4. **多态性**
多态性是指一个接口可以有多种不同的实现方式,或者一个方法可以根据调用时传入的不同参数执行不同的行为。多态分为**参数化多态性**和**包含多态性**,它提高了程序的灵活性和可扩展性。
#### 二、String是否是最基本的数据类型?
- **基本数据类型**包括`byte`、`int`、`char`、`long`、`float`、`double`、`boolean`和`short`。
- `String`不是基本数据类型,它是`java.lang.String`类的一个实例,该类是不可变的(`final`),意味着一旦创建后其值不能被更改。
#### 三、int与Integer的区别
- **int**是Java的基本数据类型之一,用于存储整数值。
- **Integer**是`int`的封装类,提供了额外的方法和功能,如`toString()`和`valueOf()`等。
#### 四、String与StringBuffer的区别
- `String`表示不可变的字符序列,即一旦创建后其值不能改变。
- `StringBuffer`表示可变的字符序列,可以在原对象上进行修改,适用于字符串拼接频繁的场景。
- `StringBuffer`是线程安全的,而`String`不是。
#### 五、运行时异常与一般异常的异同
- **运行时异常**(如`NullPointerException`、`ArrayIndexOutOfBoundsException`等)通常是由编程错误导致的,如访问空指针或数组越界。
- **非运行时异常**(也称为**检查异常**,如`IOException`、`SQLException`等)是应用程序中可能会发生的异常情况,需要显式处理或声明抛出。
- Java编译器要求方法必须声明抛出可能发生的非运行时异常,但不需要声明抛出未被捕获的运行时异常。
#### 六、Servlet的生命周期及与CGI的区别
- **Servlet的生命周期**包括:
- 初始化(`init`方法)
- 请求处理(`service`方法)
- 销毁(`destroy`方法)
- **Servlet与CGI的区别**:
- Servlet是在服务器进程中运行的,可以通过多线程处理多个请求,实例通常不会销毁。
- CGI对每个请求都会创建一个新的进程,服务完成后即销毁,因此效率较低。
#### 七、ArrayList、Vector、LinkedList的存储性能与特性
- **ArrayList**和**Vector**都使用数组存储数据,支持快速索引访问但插入操作较慢。
- **Vector**是线程安全的,性能上通常比**ArrayList**差。
- **LinkedList**使用双向链表实现,按序号索引数据较慢但插入操作快。
#### 八、EJB技术及SessionBean与EntityBean的区别
- **EJB**(Enterprise JavaBeans)是基于Java的组件模型,用于构建企业级应用。
- **SessionBean**分为**StatefulBean**和**StatelessBean**:
- **StatefulBean**维护客户端会话状态,适合于需要保持会话状态的应用场景。
- **StatelessBean**不保留任何会话状态,适用于无状态的服务。
- **EntityBean**用于持久化实体对象,可以是**CMP**(Container Managed Persistence,容器管理持久化)或**BMP**(Bean Managed Persistence,Bean管理持久化)。