每日十题八股-2025年1月14日

1.为什么进程崩溃不会对其他进程产生很大影响
2.你说到进程是分配资源的基本单位,那么这个资源指的是什么?
3.讲下为什么进程之下还要设计线程?
4.多线程比单线程的优势,劣势?
5.多线程是不是越多越好,太多会有什么问题?
6.进程切换和线程切换的区别?
7.线程切换为什么比进程切换快,节省了什么资源?
8.线程切换详细过程是怎么样的?上下文保存在哪里?
9.进程的状态(五种状态),如何切换?
10.进程上下文有哪些?

1.为什么进程崩溃不会对其他进程产生很大影响?

进程崩溃通常不会对其他进程产生很大影响,因为现代操作系统为进程提供了 内存隔离资源独立性
每个进程运行在自己的 虚拟地址空间 中,并且有独立的资源(如文件描述符、网络连接等)。
这样即使一个进程崩溃,也不会直接访问或修改其他进程的内存或资源。操作系统的 进程调度机制 会检测到崩溃进程并释放其资源,而其他进程可以继续正常运行。
这种设计提高了系统的 稳定性可靠性

2.你说到进程是分配资源的基本单位,那么这个资源指的是什么?

内存资源,文件描述符,信号处理器,IO缓冲区,进程控制块(PCB)。
内存资源 :虚拟地址空间(每个进程有自己的内存空间);堆和栈内存。
文件描述符 :打开的文件或流(如输入输出文件、套接字)。
CPU时间片 : 每个进程按调度分配独立的CPU执行时间。
信号处理器 :每个进程独立设置的信号处理函数。
线程 :进程内的线程属于该进程专有,互相共享资源,但与其他进程隔离。
环境变量和全局变量 :每个进程维护自己的环境变量副本。
I/O缓冲区 :进程进行文件或网络操作时拥有自己的缓冲区
进程控制块(PCB) :操作系统为每个进程维护的独立结构,存储进程的状态信息。

3.讲下为什么进程之下还要设计线程?

进程之下设计线程是为了提高程序的并发性和资源利用效率 ,从而更好地适应多核处理器和复杂应用的需求。主要是进程要切换速度慢,复杂程度高,且进程之间通信问题和共享数据问题比较难以解决。因此,需要线程,其更轻量级的线程切换,并且同一进程的线程可以共享数据。
在这里插入图片描述

4.多线程比单线程的优势,劣势?

多线程比单线程的优势:提高程序的运行效率,可以充分利用多核处理器的资源,同时处理多个任务,加快程序的执行速度。

多线程比单线程的劣势:线程切换的消耗,锁机制的复杂,死锁危机。 存在多线程数据竞争访问的问题,需要通过锁机制来保证线程安全,增加了加锁的开销,并且还会有死锁的风险。多线程会消耗更多系统资源,如CPU和内存,因为每个线程都需要占用一定的内存和处理时间。

5.多线程是不是越多越好,太多会有什么问题?

不是。线程多,线程竞争CPU越激烈,切换越多消耗越大,并且死锁发生的概率越大。

6.进程切换和线程切换的区别?

进程切换:进程切换涉及到更多的内容,包括整个进程的地址空间、全局变量、文件描述符等。 因此,进程切换的开销通常比线程切换大。
线程切换**:线程切换只涉及到线程的堆栈、寄存器和程序计数器等** ,不涉及进程级别的资源,因此线程切换的开销较小。

7.线程切换为什么比进程切换快,节省了什么资源?

线程切换比进程切换快是因为线程共享同一进程的地址空间和资源,线程切换时只需切换堆栈和程序计数器等少量信息 ,而不需要切换地址空间,避免了进程切换时需要切换内存映射表等大量资源的开销,从而节省了时间和系统资源。

8.线程切换详细过程是怎么样的?上下文保存在哪里?

在这里插入图片描述

9.进程的状态(五种状态),如何切换?

创建-就绪-运行-阻塞-结束
在这里插入图片描述
在这里插入图片描述

10.进程上下文有哪些?

各个进程之间是共享 CPU 资源的,在不同的时候进程之间需要切换,让不同的进程可以在 CPU 执行,那么这个一个进程切换到另一个进程运行,称为进程的上下文切换。 进程上下文包括处理器状态(寄存器)、内存映射(页表、段表)、资源信息和PCB中的调度和管理信息。在进程切换时,操作系统保存当前进程的上下文到PCB,加载新进程的上下文,使其继续运行。
在这里插入图片描述

### 常见技术面试问题及答案 #### 1. Java 基础知识 **问题:解释Java中的多态性。** 答案:多态性是指允许不同类的对象对同一消息作出响应的能力。多态性主要通过方法重载(编译时多态)和方法重写(运行时多态)来实现。在运行时多态中,父类引用可以指向子类对象,调用方法时会根据实际对象类型来决定执行哪个方法。 ```java class Animal { void sound() { System.out.println("Animal makes a sound"); } } class Dog extends Animal { void sound() { System.out.println("Dog barks"); } } public class TestPolymorphism { public static void main(String[] args) { Animal myAnimal = new Dog(); // Upcasting myAnimal.sound(); // Outputs "Dog barks" } } ``` #### 2. 数据结构与算法 **问题:解释快速排序的基本思想。** 快速排序的基本思想是选择一个基准元素,通过一趟排序将待排序记录分割成独立的两部分,其中一部分记录的关键字均比基准元素小,另一部分记录的关键字均比基准元素大,然后分别对这两部分记录继续进行排序,以达到整个序列有序的目的[^1]。 ```java public class QuickSort { public static void quickSort(int[] arr, int low, int high) { if (low < high) { int pi = partition(arr, low, high); quickSort(arr, low, pi - 1); quickSort(arr, pi + 1, high); } } private static int partition(int[] arr, int low, int high) { int pivot = arr[high]; int i = (low - 1); for (int j = low; j < high; j++) { if (arr[j] <= pivot) { i++; int temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; } } int temp = arr[i + 1]; arr[i + 1] = arr[high]; arr[high] = temp; return i + 1; } public static void main(String[] args) { int[] arr = {10, 7, 8, 9, 1, 5}; quickSort(arr, 0, arr.length - 1); for (int num : arr) { System.out.print(num + " "); } } } ``` #### 3. 系统设计 **问题:如何设计一个高并发的Web应用?** 设计高并发的Web应用需要考虑多个方面,包括但不限于负载均衡、缓存机制、数据库优化、异步处理等。负载均衡可以通过Nginx或HAProxy来实现,将请求分发到多个服务器上。缓存机制可以使用Redis或Memcached来减少数据库的压力。数据库优化包括索引优化、读写分离等。异步处理可以通过消息队列如RabbitMQ或Kafka来解耦系统组件,提高系统的响应速度和吞吐量。 #### 4. 编程实践 **问题:解释Java中的垃圾回收机制。** Java的垃圾回收机制是自动管理内存的一种方式,它负责回收不再使用的对象所占用的内存空间。垃圾回收器会定期检查哪些对象是可达的(即仍然被引用的对象),哪些对象是不可达的(即不再被引用的对象)。不可达的对象会被标记为垃圾,并在后续的垃圾回收过程中被清除。Java提供了多种垃圾回收算法,如标记-清除算法、复制算法、标记-整理算法等,不同的垃圾回收器适用于不同的应用场景。 #### 5. 分布式系统 **问题:解释CAP定理。** CAP定理指出,在一个分布式系统中,一致性(Consistency)、可用性(Availability)和分区容忍性(Partition tolerance)这三个特性最多只能同时满足两个。一致性意味着所有节点在同一时间看到相同的数据;可用性意味着每个请求都能得到响应,但不保证是最新的数据;分区容忍性意味着即使网络分区存在,系统仍能继续运行。根据不同的业务需求,可以选择牺牲其中一个特性来实现其他两个特性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值