Java中高级面试题,开发模拟练习
发布人:shili8
发布时间:2025-01-29 01:42
阅读次数:0
**Java 高级面试题**
###1. Java 中的线程池#### 题目描述:
在 Java 中,我们经常会使用线程池来管理多个线程。请写出一个简单的线程池类,实现以下功能:
* 创建固定大小的线程池* 提交任务到线程池中执行* 等待所有任务完成####代码示例:
javaimport java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; public class ThreadPoolExample { public static void main(String[] args) { // 创建一个固定大小的线程池(5个线程) ExecutorService executor = Executors.newFixedThreadPool(5); // 提交任务到线程池中执行 for (int i =0; i < 10; i++) { final int num = i; executor.submit(() -> { System.out.println("Task " + num + " is running on thread " + Thread.currentThread().getName()); }); } // 等待所有任务完成 executor.shutdown(); } }
####代码注释:
* `Executors.newFixedThreadPool(int nThreads)`:创建一个固定大小的线程池,参数 `nThreads` 表示线程池中线程的数量。
* `executor.submit(Runnable command)`:提交任务到线程池中执行,参数 `command` 是要执行的任务。
* `executor.shutdown()`:等待所有任务完成后关闭线程池。
###2. Java 中的并发集合#### 题目描述:
在 Java 中,我们经常会使用并发集合来存储和操作数据。请写出一个简单的并发集合类,实现以下功能:
* 创建一个并发哈希表* 添加元素到并发哈希表中* 删除元素从并发哈希表中* 检查元素是否存在于并发哈希表中####代码示例:
javaimport java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentMap; public class ConcurrentHashMapExample { public static void main(String[] args) { // 创建一个并发哈希表 ConcurrentMapconcurrentMap = new ConcurrentHashMap<>(); // 添加元素到并发哈希表中 concurrentMap.put("key1",10); concurrentMap.put("key2",20); // 删除元素从并发哈希表中 concurrentMap.remove("key1"); // 检查元素是否存在于并发哈希表中 System.out.println(concurrentMap.containsKey("key2")); // true System.out.println(concurrentMap.containsKey("key1")); // false } }
####代码注释:
* `ConcurrentHashMap()`:创建一个并发哈希表。
* `put(K key, V value)`:添加元素到并发哈希表中,参数 `key` 是键,参数 `value` 是值。
* `remove(Object key)`:删除元素从并发哈希表中,参数 `key` 是要删除的键。
* `containsKey(Object key)`:检查元素是否存在于并发哈希表中,返回 true 表示存在,false 表示不存在。
###3. Java 中的锁#### 题目描述:
在 Java 中,我们经常会使用锁来保护共享资源。请写出一个简单的锁类,实现以下功能:
* 创建一个可重入锁* 加锁(获取锁)
* 解锁(释放锁)
####代码示例:
javaimport java.util.concurrent.locks.ReentrantLock; public class LockExample { private final ReentrantLock lock = new ReentrantLock(); public void method1() { // 加锁 lock.lock(); try { System.out.println("Method1 is running"); method2(); // 调用method2方法 } finally { // 解锁 lock.unlock(); } } private void method2() { // 加锁 lock.lock(); try { System.out.println("Method2 is running"); } finally { // 解锁 lock.unlock(); } } public static void main(String[] args) { LockExample example = new LockExample(); example.method1(); // 调用method1方法 } }
####代码注释:
* `ReentrantLock()`:创建一个可重入锁。
* `lock()`:加锁(获取锁)。
* `unlock()`:解锁(释放锁)。
###4. Java 中的线程#### 题目描述:
在 Java 中,我们经常会使用线程来执行任务。请写出一个简单的线程类,实现以下功能:
* 创建一个线程* 启动线程* 等待线程完成####代码示例:
javaimport java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; public class ThreadExample { public static void main(String[] args) { // 创建一个线程 Runnable runnable = () -> { System.out.println("Thread is running"); }; // 启动线程 ExecutorService executor = Executors.newSingleThreadExecutor(); executor.submit(runnable); // 等待线程完成 executor.shutdown(); } }
####代码注释:
* `Runnable()`:创建一个可执行的任务。
* `submit(Runnable command)`:启动线程,参数 `command` 是要执行的任务。
* `shutdown()`:等待线程完成后关闭线程池。
###5. Java 中的并发集合#### 题目描述:
在 Java 中,我们经常会使用并发集合来存储和操作数据。请写出一个简单的并发集合类,实现以下功能:
* 创建一个并发哈希表* 添加元素到并发哈希表中* 删除元素从并发哈希表中* 检查元素是否存在于并发哈希表中####代码示例:
javaimport java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentMap; public class ConcurrentHashMapExample { public static void main(String[] args) { // 创建一个并发哈希表 ConcurrentMapconcurrentMap = new ConcurrentHashMap<>(); // 添加元素到并发哈希表中 concurrentMap.put("key1",10); concurrentMap.put("key2",20); // 删除元素从并发哈希表中 concurrentMap.remove("key1"); // 检查元素是否存在于并发哈希表中 System.out.println(concurrentMap.containsKey("key2")); // true System.out.println(concurrentMap.containsKey("key1")); // false } }
####代码注释:
* `ConcurrentHashMap()`:创建一个并发哈希表。
* `put(K key, V value)`:添加元素到并发哈希表中,参数 `key` 是键,参数 `value` 是值。
* `remove(Object key)`:删除元素从并发哈希表中,参数 `key` 是要删除的键。
* `containsKey(Object key)`:检查元素是否存在于并发哈希表中,返回 true 表示存在,false 表示不存在。
###6. Java 中的锁#### 题目描述:
在 Java 中,我们经常会使用锁来保护共享资源。请写出一个简单的锁类,实现以下功能:
* 创建一个可重入锁* 加锁(获取锁)
* 解锁(释放锁)
####代码示例:
javaimport java.util.concurrent.locks.ReentrantLock; public class LockExample { private final ReentrantLock lock = new ReentrantLock(); public void method1() { // 加锁 lock.lock(); try { System.out.println("Method1 is running"); method2(); // 调用method2方法 } finally { // 解锁 lock.unlock(); } } private void method2() { // 加锁 lock.lock(); try { System.out.println("Method2 is running"); } finally { // 解锁 lock.unlock(); } } public static void main(String[] args) { LockExample example = new LockExample(); example.method1(); // 调用method1方法 } }
####代码注释:
* `ReentrantLock()`:创建一个可重入锁。
* `lock()`:加锁(获取锁)。
* `unlock()`:解锁(释放锁)。
###7. Java 中的线程#### 题目描述:
在 Java 中,我们经常会使用线程来执行任务。请写出一个简单的线程类,实现以下功能:
* 创建一个线程* 启动线程* 等待线程完成####代码示例:
javaimport