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

1.讲一下银行家算法
2.乐观锁和悲观锁有什么区别?
3.介绍一下操作系统内存管理
4.什么是虚拟内存和物理内存?
5.讲一下页表?
6.讲一下段表?
7.虚拟地址是怎么转化到物理地址的?
8.程序的内存布局是怎么样的?
9.堆和栈的区别?
10.fork()会复制哪些东西?

1.讲一下银行家算法

首先确定是避免死锁的算法,得名于银行向客户放贷时确保有足够资金来满足所有需求的类比。
算法核心:在每次资源请求时,检查分配后系统是否处于安全状态 ,只有在不会导致死锁的情况下,才会分配资源。记忆的最好方法还是想起来当初上操作系统课上的题目:参考 一定要看,一定要看参考的例题才能记住。

在这里插入图片描述

2.乐观锁和悲观锁有什么区别?

记住主体是事务和冲突。

悲观锁很直白,就是很悲观地认为事务一定会冲突,对资源的操作一定会导致不一致所以,一进来就加锁,操作完成才解锁。
乐观锁是乐观地认为多个事务之间很少发生冲突,所以允许所有事务同时操作,但是操作完之后会检查版本号或者时间戳,发生了不一致就回滚。

乐观锁适合读多写少,悲观锁适合写多。

3.介绍一下操作系统内存管理?

说句废话,内存管理就是管理内存,主要的作用有为进程分配与释放内存,虚拟地址和物理地址的转换,内存扩充,内存映射(把文件映射到进程空间中),内存优化,内存安全。
其中一个主要的特点就是虚拟内存的设计,操作系统为每一个进程构建一个虚拟空间,使得进程能够使用自己的虚拟内存指针方便操作,且隔离各个进程。

4.什么是虚拟内存和物理内存?

物理内存通常就是指RAM,随机存取存储器。对于用户使用来说,目前计算机装配的物理内存是不足以满足全部的进程使用的,
虚拟内存的本质是通过空间置换等操作让系统能够处理超出物理内存容量的任务。但是需要明白的是虚拟内存的实现本身也需要内存来存储信息,以及这样比直接从物理内存进行存取更慢。

虚拟内存通过将程序的地址空间划分成若干个固定大小的页或段,并将这些页或者段映射到物理内存中的不同位置,从而使得程序在运行时可以更高效地利用物理内存。

5.讲一下页表?

这一块怎么有点像计算机组成原理,好多对应关系,记得我头疼。就记一句话管理虚拟内存和物理内存之间的映射关系。
页表(Page Table)是计算机操作系统中的一种数据结构,用来管理虚拟内存和物理内存之间的映射关系。页表是实现分页存储管理的重要部分。
分页的概念
在分页系统中,虚拟内存被划分为固定大小的块,称为页(Page)。
物理内存(RAM)同样被划分为大小相等的块,称为页框(Page Frame)。

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

6.讲一下段表?

分页和分段是两种不同的内存管理机制,它们解决的问题和实现方式各有不同,但可以独立使用或结合使用。

将程序按内容或过程函数关系分成段,例如程序段、数据段…以段为单位分配内存,通过地址映射机制,将段式虚拟地址转换成实际内存物理地址。段的长度由相应的逻辑信息组的长度决定,因而各段长度不等。
在这里插入图片描述
在这里插入图片描述
更近一部分的还有段页式,多级页表等等
在这里插入图片描述

7.虚拟地址是怎么转化到物理地址的?

在现代操作系统中,通常用页表完成虚拟地址和物理地址的映射。并且通过内存管理单元(Memory Management Unit,MMU)来完成,MMU是计算机系统中的硬件组件,负责虚拟地址和物理地址之间的转换。
在这里插入图片描述

8.程序的内存布局是怎么样的?

在这里插入图片描述

9.堆和栈的区别?

在这里插入图片描述

10.fork()会复制哪些东西?

小林coding的答案:
fork 阶段会复制父进程的页表(虚拟内存);
fork 之后,如果发生了写时复制,就会复制物理内存。

fork() 是一种用于 创建新进程 的系统调用,是 Unix 和类 Unix 操作系统(如 Linux)中进程创建的基础。fork() 调用时,会创建一个子进程,并复制父进程的资源,使子进程成为父进程的几乎完全拷贝。

#include <stdio.h>
#include <unistd.h>

int main() {
    pid_t pid = fork();  // 创建子进程
    if (pid < 0) {
        printf("Fork failed\n");
    } else if (pid == 0) {
        printf("This is the child process.\n");
    } else {
        printf("This is the parent process. Child PID: %d\n", pid);
    }
    return 0;
}
This is the parent process. Child PID: 1234
This is the child process.
### 常见技术面试问题及答案 #### 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)这三个特性最多只能同时满足两个。一致性意味着所有节点在同一时间看到相同的数据;可用性意味着每个请求都能得到响应,但不保证是最新的数据;分区容忍性意味着即使网络分区存在,系统仍能继续运行。根据不同的业务需求,可以选择牺牲其中一个特性来实现其他两个特性。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值