Java面试:设计模式与并发处理
需积分: 5 70 浏览量
更新于2024-08-04
收藏 94KB MD 举报
本文档是关于面试中常见的一些IT知识点,包括设计模式的单例模式、Java中的串行流与并行流以及Java 8的新特性,如Lambda表达式、接口默认方法等。
### 设计模式 - 单例模式
单例模式是一种常见的设计模式,确保一个类只有一个实例,并提供全局访问点。它分为三种实现方式:
1. **懒汉式(延迟加载,非线程安全)**:这种实现方式在第一次调用`getInstance()`时才创建对象,但多线程环境下可能产生多个实例。代码示例如下:
```java
class Single {
private static Single single = null;
private Single() {}
public static Single getInstance() {
if (single == null) {
single = new Single();
}
return single;
}
}
```
2. **饿汉式(线程安全)**:在类加载时就创建了对象,因此是线程安全的,但牺牲了空间效率。代码示例如下:
```java
class Single {
private static final Single single = new Single();
private Single() {}
public static Single getInstance() {
return single;
}
}
```
3. **懒汉模式之线程安全:双重检查锁定(DCL,Double-Check Locking)**:在多线程环境下,通过`volatile`关键字和双重检查确保线程安全的延迟加载。代码示例如下:
```java
class Single {
private volatile static Single single = null;
private Single() {}
public static Single getInstance() {
if (single == null) {
synchronized (Single.class) {
if (single == null) {
single = new Single();
}
}
}
return single;
}
}
```
### 串行流和并行流
- **串行流**:在处理数据时,串行流遵循单线程模型,逐一处理流中的元素,适用于对线程安全要求高的场景。
- **并行流**:并行流将数据分块,使用多个线程同时处理这些数据块,可以显著提高处理速度,但可能会引入线程安全问题。
### Java 8 新特性
1. **Lambda表达式**:简化了函数式编程,使得可以将代码块作为参数传递,减少了匿名内部类的使用。
2. **接口的默认方法和静态方法**:默认方法允许在接口中添加有实现的方法,而静态方法则允许在接口中定义工具方法。
3. **方法引用**:可以使用方法引用直接传递方法,而不是使用Lambda表达式。
4. **重复注解**:允许多个相同类型的注解在同一声明上出现。
5. **更好的类型推断**:Java 8增强了编译器的类型推断能力,简化了代码编写。
6. **拓宽注解的应用场景**:注解可以用于更多地方,比如字段、局部变量、方法参数等。
### 动态代理
动态代理分为两种:
- **JDK动态代理**:基于接口实现,如果目标对象实现了接口,可以通过Proxy类创建代理对象,实现代理操作。
- **CGLIB动态代理**:基于字节码生成技术,如果目标对象没有实现接口,CGLIB可以创建代理对象,通常用于Spring AOP中。当Spring需要代理非接口类时,会使用CGLIB。
以上是面试中常被问到的一些IT知识点,涵盖了设计模式、并发编程以及Java语言特性的核心内容。理解和掌握这些知识点对于面试和实际开发都至关重要。
m0_53141846
- 粉丝: 0
- 资源: 1
最新资源
- 前端协作项目:发布猜图游戏功能与待修复事项
- Spring框架REST服务开发实践指南
- ALU课设实现基础与高级运算功能
- 深入了解STK:C++音频信号处理综合工具套件
- 华中科技大学电信学院软件无线电实验资料汇总
- CGSN数据解析与集成验证工具集:Python和Shell脚本
- Java实现的远程视频会议系统开发教程
- Change-OEM: 用Java修改Windows OEM信息与Logo
- cmnd:文本到远程API的桥接平台开发
- 解决BIOS刷写错误28:PRR.exe的应用与效果
- 深度学习对抗攻击库:adversarial_robustness_toolbox 1.10.0
- Win7系统CP2102驱动下载与安装指南
- 深入理解Java中的函数式编程技巧
- GY-906 MLX90614ESF传感器模块温度采集应用资料
- Adversarial Robustness Toolbox 1.15.1 工具包安装教程
- GNU Radio的供应商中立SDR开发包:gr-sdr介绍