【2024秋招】2023-9-14 最右线下后端开发二面

news/2024/6/17 16:48:57 标签: java后端, 2024秋招, 最右

1 OS

1.1 讲讲什么是虚拟内存,怎么实现的

虚拟内存是一种存储器管理能力,它使得一个应用程序似乎有更多的物理内存(RAM)可用,而实际上,系统使用了一部分硬盘空间来模拟额外的 RAM。通过使用虚拟内存,系统可以运行更大、更复杂的应用程序,甚至在物理内存不足的情况下也不会崩溃。

以下是虚拟内存的工作原理和它是如何实现的:

  1. 分页和分段:大多数现代操作系统都使用分页或分段技术来实现虚拟内存。分页是将物理内存分为固定大小的页面,而分段是根据应用程序的需求将内存分为不同大小的段。

  2. 页表:页表是一个数据结构,用于映射虚拟地址到物理地址。每当应用程序访问一个地址,页表被用来找出这个地址在物理内存中的位置。

  3. 页面错误:当一个程序尝试访问一个当前不在物理内存中的页面时,会发生页面错误。这时,操作系统需要从磁盘上将所需的页面载入到物理内存中。

  4. 置换算法:当物理内存满了,并且需要为新的页面腾出空间时,操作系统必须决定哪个页面被移出物理内存。这是通过所谓的置换算法来完成的,如LRU(最近最少使用)或FIFO(先进先出)。

  5. 后备存储:当页面从物理内存被移除时,它们被存放在一个称为后备存储或交换空间的磁盘区域。这样,当这个页面再次被访问时,它可以被重新载入到物理内存中。

  6. 写回与写通过:当数据被修改时,有两种方法可以更新后备存储中的数据。写回方法是在页面被移出物理内存时才更新后备存储。而写通过方法是在数据被修改时立即更新后备存储。

  7. 页大小:页的大小可以根据硬件和操作系统的设计而变化,常见的页大小有4KB、8KB等。

虚拟内存的实现和管理涉及操作系统、硬件和应用程序之间的密切协作。虽然虚拟内存为应用程序提供了更多的可用内存,但过度的页面交换(称为"页面抖动")可能导致性能下降,因为访问磁盘要比访问物理内存慢得多。

1.2 每一个进程都有自己独立的虚拟地址空间嘛?

  1. 每个进程是否都有一个页表?

    是的,每个进程都有其自己的页表。这是因为每个进程都有自己的虚拟地址空间,需要一个独立的映射机制来映射其虚拟地址到物理地址。这样,进程A中的虚拟地址0x1000可能映射到物理地址0x2000,而进程B中的同一个虚拟地址0x1000可能映射到一个完全不同的物理地址,例如0x3000。这个独立的地址空间为进程提供了隔离,确保一个进程不能轻易地访问或干扰另一个进程的内存。

  2. 每个进程可以是分页、分段或段页式布局吗?

    是的,进程的内存布局可以基于分页、分段或者两者的组合,即段页式布局。

    • 分页:这是现代操作系统中最常用的方式,它将虚拟内存和物理内存都分割成固定大小的页。每一页都有一个独立的虚拟到物理的映射。

    • 分段:分段是基于变长区段的,这些区段是根据程序的不同部分(如代码段、数据段)来划分的。每个段都有其自己的基址和限制。

    • 段页式布局:这是分段和分页的结合。首先,内存被分成多个段,每个段再进一步被分页。这样,首先会使用段表找到对应的段,然后在该段中使用页表找到具体的页。

    这三种布局中,分页是最常用的,因为它简化了内存管理并允许更细粒度的内存保护。而段页式布局则结合了分段和分页的优点,但也增加了一些复杂性。纯分段的布局现在在现代操作系统中不太常见。

1.2 进程和线程的区别

进程和线程都是操作系统中用于并发执行的基本单位,但它们之间存在明显的区别。以下列举了进程和线程之间的主要区别:

  1. 定义

    • 进程:进程是程序在执行时的一个实例。它是一个独立的执行实体,拥有自己的私有地址空间和系统资源。
    • 线程:线程是进程内的一个执行单位或执行路径。它分享父进程的地址空间和资源,但执行自己的指令序列。
  2. 资源独立性

    • 进程:每个进程都有其独立的地址空间、数据栈以及系统资源。这使得进程之间相对隔离,但也增加了进程切换的开销。
    • 线程:所有线程共享同一进程的地址空间和系统资源。线程之间的切换因此比进程切换要快得多。
  3. 通信

    • 进程:进程间通信 (IPC) 相对复杂,通常涉及如管道、消息队列、共享内存、套接字等机制。
    • 线程:由于线程共享相同的地址空间,所以它们之间的通信比进程间通信更为简单。线程可以直接读写同一进程中的数据结构,但这也带来了同步问题。
  4. 创建和终止开销

    • 进程:创建或终止一个进程的开销通常比线程更大,因为涉及到更多的资源分配和回收。
    • 线程:线程的创建和终止相对更为轻量级。
  5. 故障隔离

    • 进程:由于进程拥有独立的地址空间,一个进程崩溃不太可能影响其他进程。
    • 线程:一个线程在执行中出现问题(如访问非法内存)可能会影响同一进程中的其他线程。
  6. 调度和上下文切换

    • 进程:进程的上下文切换涉及更多的开销,因为要保存和恢复更多的信息。
    • 线程:线程的上下文切换相对较快,因为大部分资源(如地址空间)都是共享的。
  7. 应用场景

    • 进程:适用于需要更强隔离或运行在不同地址空间的应用。
    • 线程:适用于需要频繁的通信和快速上下文切换的应用。

总之,进程和线程都有各自的优点和缺点。在设计并发系统或应用时,开发者需要根据特定需求来选择合适的执行实体。

1.3 进程间的通信方式

进程间通讯的7种方式

2 java

2.1 讲讲jvm的垃圾回收机制吧

3 快手实习

3.1 基础crud启动器是怎么回事


http://www.niftyadmin.cn/n/5114346.html

相关文章

RustDay06------Exercise[91-100]

91.将指针还原成指定类型 因为指针不知道里面具体有什么,所以一般约定打上unsafe 申明开发者自己对该部分可用性负责,且在调试的时候也能起强调作用 // tests6.rs // // In this example we take a shallow dive into the Rust standard librarys // unsafe functions. Fix …

新能源汽车展厅用哪些种类的显示屏比较好?

现在有越来越多的新能源汽车展厅开到了商场、购物中心当中。在新能源汽车展厅中,显示屏已经成为不可或缺的设备设施,可以用来展现产品介绍、优惠信息、文化宣传等。那么新能源汽车展厅的显示大屏用什么屏比较好呢? LED大屏幕:LED显…

Integer和int

Integer和int 1.定义2. 区别2.1 数据类型2.2 可空性2.2.1 int的可空性2.2.2 Integer的可空性 2.3 效率和性能2.4 自动装箱和拆箱2.4.1 自动装箱2.4.2 自动拆箱2.4.3 注意事项 3. 比较 1.定义 int是Java中的一种基本数据类型,用于表示整数。它是Java语言中最常用的数…

C语言可变参数函数及其实现

概述 本文讨论C语言中的可变参数函数,特别关注printf和scanf,它们允许根据需要确定参数的个数。这篇文章还介绍了可变参数函数的实现细节和相关宏 1. 可变参数函数的概念 C语言引入了可变参数函数的概念,允许函数的参数个数根据需要确定。…

柴油发电机测试的工作原理

柴油发电机测试的工作原理是通过对柴油发电机进行一系列的性能测试和功能检查,以确保其正常运行和可靠性,通过加载发电机负载,测试发电机的额定功率、最大功率和稳定性。这可以通过连接负载设备,如电阻箱或电动机,来模…

Java计算两个日期之间的工作时长【包含节假日、补班、周末】

目的:用来计算两个日期之间的工作时长 说明:其中节假日、工作日工作时间需要从配置表中获取 直接上代码 public static void main(String[] args) throws Exception {calTime("2023-09-23 07:30:00", "2023-09-25 18:30:05");}/***…

实战公益SRC | 弱口令登录+任意文件上传

目录 附言:从补天的公益src公司中选中了幸运儿。 1. 通过hunter鹰图平台搜索公司的相关资产,发现其采用了华途应用安全网关。 2.访问相关地址,尝试使用弱口令登录,发现直接利用admin/admin就登录了,可以看到后台的相…

深入浅出:Python内存管理机制详解

文章目录 一、什么是内存?1.1、RAM简介1.2、RAM容量1.3、查看电脑内存1.4、监控电脑内存 二、内存管理2.1、python是如何分配内存的?2.2、python采用自动内存管理机制2.3、python自动内存管理机制的缺点2.4、python内存优化的方法 三、项目实战3.1、查看…