在Java面试中,掌握基础概念和技术细节至关重要。以下是一些基于给定文件内容的关键知识点:
1. **类的加载**:`Class.forName()`方法用于根据给定的字符串类名动态加载类。这在需要在运行时确定类名或加载类时非常有用。
2. **进程与线程**:进程是操作系统资源分配的基本单位,是独立执行的应用程序。线程是进程内部的执行单元,轻量级进程,共享进程的资源,具有独立的执行路径。
3. **创建线程**:Java提供了三种主要的创建线程的方式:
- 继承`Thread`类:重写`run()`方法,并通过`thread.start()`启动。
- 实现`Runnable`接口:将`Runnable`对象传递给`Thread`的构造函数,然后启动`Thread`。
- 使用`Executor`框架:创建线程池,如`Executors.newFixedThreadPool()`,更高效且易于管理。
4. **Java集合框架**:主要包括`Collection`、`Set`、`List`和`Map`接口:
- `Collection`是最基本的接口,包括单个元素。
- `Set`接口不包含重复元素。
- `List`接口是有顺序的`Collection`,允许重复元素。
- `Map`接口存储键值对,键是唯一的。
5. **Struts框架**:
- Struts1的核心是`ActionServlet`,负责拦截用户请求。
- Struts2基于`FilterDispatcher`,提供更灵活的控制流和处理机制。
6. **Servlet生命周期**:包括`init()`、`service()`和`destroy()`方法:
- `init()`:初始化,当Servlet实例化时调用。
- `service()`:处理请求,根据请求类型调用`doGet()`或`doPost()`。
- `destroy()`:销毁,当Servlet不再使用时调用。
7. **switch语句**:只接受`int`、`short`、`char`、`byte`类型的常量表达式,不支持`long`和`String`。
8. **线程睡眠方法**:
- `sleep()`:使当前线程暂停指定时间,不释放锁。
- `wait()`:让线程等待,释放对象锁,需要其他线程调用`notify()`或`notifyAll()`唤醒。
9. **数据连接池**:池连接在J2EE服务器启动时创建并维持最小连接数。当需要连接时,池驱动程序提供空闲连接,结束后归还。这种机制减少了连接创建和销毁的开销。
10. **Cookie与Session**:
- Cookie:服务器发送给浏览器的小型数据,存储在客户端,用于跟踪用户状态。
- Session:存储在服务器端,与特定用户关联,存储用户会话信息。与Cookie相比,Session不受客户端限制,可存储复杂数据。
11. **HTTP协议**:浏览器和Servlet之间通信使用HTTP协议,这是互联网上应用最为广泛的一种网络协议,用于传输超文本信息。
12. **Java网络编程**:Java的Socket通信用于网络通信,建立客户端和服务端的连接。服务端监听端口,客户端发起请求建立会话,之后双方通过Socket进行数据交换。
13. **线程的start()与run()**:
- `start()`:启动新线程,调用`run()`方法。这是异步执行。
- `run()`:如果直接调用,只是在当前线程中执行,无新线程启动。
这些是Java面试中常见的问题,深入理解这些概念和技术对于成为一名合格的Java开发者至关重要。在实际工作中,这些知识不仅适用于面试,也是日常编程和系统设计的基础。