java面试八股文2024全面
时间: 2025-04-28 21:25:50 浏览: 20
### 2024 Java面试常见问题及答案
#### 创建线程池的方式及其特点
`java.util.concurrent.Executors` 提供了多种创建线程池的方法,每种方法适用于不同的场景。常见的几种线程池包括固定大小的线程池 `newFixedThreadPool(int nThreads)`、缓存型线程池 `newCachedThreadPool()`、单一线程执行者 `newSingleThreadExecutor()` 等[^1]。
```java
// 使用Executors创建不同类型的线程池
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class ThreadPoolExample {
public static void main(String[] args) {
ExecutorService fixedPool = Executors.newFixedThreadPool(5);
ExecutorService cachedPool = Executors.newCachedThreadPool();
ExecutorService singlePool = Executors.newSingleThreadExecutor();
// 关闭线程池
fixedPool.shutdown();
cachedPool.shutdown();
singlePool.shutdown();
}
}
```
#### JMM的作用与机制
Java内存模型(JMM)旨在屏蔽底层硬件和操作系统之间的差异,确保Java程序在任何平台上运行时具有一致性的内存访问行为。具体来说,JMM规定了所有共享变量存储于主内存中,而每个线程都有自己的工作内存,在读写共享变量时会遵循特定规则来维护数据一致性[^2]。
#### Collection与Collections的区别
`Collection` 是一个接口,位于 `java.util` 包内,作为集合框架的一部分,提供了对集合对象进行基本操作的标准API;而 `Collections` 则是一个工具类,同样位于 `java.util` 包下,包含了大量用于处理集合实例的方法,比如排序、查找等实用功能[^3]。
#### 请求参数传递方式对比 (@RequestParam vs @PathVariable)
当通过URL路径传递参数给Spring MVC控制器时,可以采用两种主要形式之一:一种是在查询字符串后面附加键值对的形式(`?key=value`)并使用 `@RequestParam` 注解接收;另一种则是在URI模板中指定位置占位符 `{variable}` 并借助 `@PathVariable` 来捕获这些动态部分[^4]。
```java
@GetMapping("/example/path/{id}")
public String getPathVariable(@PathVariable Long id, Model model){
// 处理逻辑...
}
@GetMapping("/example/query")
public String getQueryParameter(@RequestParam(value="param", required=false) String paramValue, Model model){
// 处理逻辑...
}
```
阅读全文
相关推荐



















