Java面试:设计模式与并发处理

需积分: 5 0 下载量 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语言特性的核心内容。理解和掌握这些知识点对于面试和实际开发都至关重要。