【后端开发面试题】每日 3 题(八)
✍个人博客:Pandaconda-CSDN博客
📣专栏地址:https://blog.csdn.net/newin2020/category_12903849.html
📚专栏简介:在这个专栏中,我将会分享后端开发面试中常见的面试题给大家~
❤️如果有收获的话,欢迎点赞👍收藏📁,您的支持就是我创作的最大动力💪
1. 简述负载均衡的概念、常见算法及其在后端开发中的应用场景
2. 在 Java 中,如何实现线程池?
在 Java 中,可以通过 java.util.concurrent 包下的 ThreadPoolExecutor 类或其提供的工厂方法来实现线程池。以下是几种常见的实现方式:
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class FixedThreadPoolExample {
public static void main(String[] args) {
// 创建一个固定大小为 3 的线程池
ExecutorService executor = Executors.newFixedThreadPool(3);
for (int i = 0; i < 5; i++) {
final int taskId = i;
executor.submit(() -> {
System.out.println("Task " + taskId + " is being executed by " + Thread.currentThread().getName());
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
});
}
executor.shutdown();
}
}
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class SingleThreadExecutorExample {
public static void main(String[] args) {
// 创建一个单线程线程池
ExecutorService executor = Executors.newSingleThreadExecutor();
for (int i = 0; i < 5; i++) {
final int taskId = i;
executor.submit(() -> {
System.out.println("Task " + taskId + " is being executed by " + Thread.currentThread().getName());
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
});
}
executor.shutdown();
}
}
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class CachedThreadPoolExample {
public static void main(String[] args) {
// 创建一个缓存线程池
ExecutorService executor = Executors.newCachedThreadPool();
for (int i = 0; i < 5; i++) {
final int taskId = i;
executor.submit(() -> {
System.out.println("Task " + taskId + " is being executed by " + Thread.currentThread().getName());
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
});
}
executor.shutdown();
}
}
import java.util.concurrent.*;
public class CustomThreadPoolExample {
public static void main(String[] args) {
// 手动创建线程池
ThreadPoolExecutor executor = new ThreadPoolExecutor(
2, // 核心线程数
5, // 最大线程数
60, // 线程空闲时间
TimeUnit.SECONDS,
new LinkedBlockingQueue<>(10) // 任务队列
);
for (int i = 0; i < 5; i++) {
final int taskId = i;
executor.submit(() -> {
System.out.println("Task " + taskId + " is being executed by " + Thread.currentThread().getName());
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
});
}
executor.shutdown();
}
}
3. 在 MongoDB 中,如何进行数据的备份和恢复?
mongodump --host <hostname> --port <port> --out <backup_directory>
其中, 是 MongoDB 服务器的主机名, 是端口号,<backup_directory> 是备份文件存储的目录。
mongodump --host <hostname> --port <port> --db <database_name> --out <backup_directory>
mongodump --host <hostname> --port <port> --db <database_name> --collection <collection_name> --out <backup_directory>
mongorestore --host <hostname> --port <port> <backup_directory>
mongorestore --host <hostname> --port <port> --db <database_name> --collection <collection_name> <backup_directory>/<database_name>/<collection_name>.bson
在恢复数据时,需要注意目标数据库的状态和权限,确保有足够的权限进行恢复操作。同时,如果备份文件是加密的,需要提供相应的解密密钥。
作者:Pandaconda 的测开之路