Java面试题目,java关键字final

1 进程

进程与程序

操作系统之中最为通用的概念就是「进程」。与此相关的面试题以及各种技术优化策略也层出不穷,足以够证明它对于理解操作系统中举足轻重的地位。事实上,通过「进程」,程序员可以更为直观的理解自己所开发的软件,并且能够从中深刻的认识到操作系统在软件运行做了些什么。

简单来讲,进程就是正在执行的程序。每个进程都包含有属于自己的一段地址空间,可以看作是一部分内存空间。在这样的地址空间中,进程能够根据需要进行内存的读写。

地址空间里面一般包含可执行程序,以及对应程序的数据及其堆栈。与每个进程相关的还有一组资源,通常包括寄存器(包括程序计数器和堆栈指针)以及运行程序所需的所有其他信息。从这可以看出,程序本身只是指令、数据以及其组织形式的一种描述方式,而程序的实际的运行实例就是一个进程。

不过进程与程序也并不完全等同,他们不是简单的一一对应的关系,而是在不同层面的表现形式。他们的主要区别在于:

  • 程序是进程的静态文本,而进程是执行程序的动态过程;
  • 进程与程序不是一一对应,同一程序可在不同进程中运行,一个进程也可以执行多个程序;
  • 程序是一种长期可保存的文本,进程是暂时的一次执行过程;
  • 进程是操作系统分配调度的独立单位,而程序是操作系统层级之上的应用程序。

进程状态

从上面我们知道,进程可看作是程序运行的动态过程。那么为了更好的对进程进行描述,我们给运行中的进程定义了三种基本状态,包括就绪、执行和阻塞。

这就是所谓的三态模型,描述了进程在整个运行周期中状态变化。每个状态的转移过程可以通过下图来表示。

就绪状态 是指进程已经被分配到了所有必需的资源,除了CPU。在这个状态下,进程处于箭在弦上随时待发的状态,只要一获得CPU的执行权限,进程便会立刻执行,从而进入执行状态。

当有多个处于就绪状态的进程时,不同的进程会根据优先级被划分入不同的队列。一个因为时间片用完而进入就绪状态的进程会被划分入低优先级队列,而因为I/O操作完成而进入就绪状态的进程,则会被划分入高优先级队列。

执行状态 是指进程正常运行的状态。而当处于执行状态的进程由于需要等待某个事件发送(通常为等待I/O)时,就会放弃CPU,从而进入暂时的阻塞状态。CPU这时一旦空出,通过不同的调度算法,CPU又会被分配给另一个就绪进程。

阻塞状态 相当于就绪状态和执行状态的一个缓冲状态。当处于执行状态的进程无法正常执行时,会先进入阻塞状态,等待需要的请求执行完成,再回到就绪状态,等待下一次的CPU分配和执行。

三态模式是用来描述进程状态转移最为精简的模型,实际上光这三种状态是无法处理复杂的进程运行过程的。所以为了对进程进行更好的管理和调度,在三态模型的基础上引入了两种进程状态,即创建状态终止状态,这就有了五态模型。

创建状态 是指进程刚刚创建的状态,在这个状态下,需要等待操作系统完成创建和分配进程的各种所需信息,包括建立PCB(Process Control Block)、加载程序并创建地址空间等。在完成这些准备工作后,该进程的状态就会转移为就绪状态并划分入就绪队列中。

PCB:进程控制块,用于存放进程的管理和控制信息的数据结构

创建状态看起来好像没什么太多用处,毕竟进程就绪的时候肯定完成了创建。但是之所以还是要引入,还是为了确保进程控制块的完整。只有在创建状态完成了进程完整的准备工作(PCB生成创建及资源分配),才能进入就绪状态。

这样就保证了处于就绪状态进程的正确性,同时也提升了操作系统对进程的管理的灵活性。操作系统可以从一开始就对进程的创建和资源分配进行管理,更大程度上节省了系统资源的调控。

终止状态 代表着进程的结束,当进程执行完成后,需要操作系统在终止状态对进程的运行结果进行善后处理。这样的善后处理包括对进程所使用的资源进行回收,并将其它进程所需要的信息传递出去。最后,操作系统还需要对终止的进程进行内存释放,将其PCB中的内容清空,并将这部分内存返还给系统。

终止状态意味着进程的执行周期的结束,但却并不表示进程是正常结束的。当一个进程出现了无法预知的错误或者被操作系统或其它进程所终止时,它都会进入终止状态,进行各种资源的回收。

事实上即使是进程的五态模型也不足以用来描述进程复杂的运行过程。由于系统内部资源的限制,并不是为所有进程运行的要求都能够满足,因此在这个基础上,又引入了进程的挂起就绪状态以及对应的挂起阻塞状态。

在七态模型中,活跃就绪是指进程在主存并且可被调度的状态。而静止就绪状态是指就绪进程被对换到辅存时的状态,它是不能被直接调度的状态,只有当主存中没有活跃就绪态进程,或者是挂起态进程具有更高的优先级时,系统才会把挂起就绪态进程调回主存并转换为活跃就绪状态。

活跃阻塞状态是指进程在主存,一旦等待的事件产生便会进入活跃就绪状态。静止阻塞是指阻塞进程对换到辅存时的状态,一旦等待的事件产生便进入静止就绪状态。

进程相关的知识点实在是太多了,包括PCB、进程间通信以及和线程相关的概念和基础都是非常重要的知识。但是由于这篇文章的篇幅限制,不好在这里过多展开。

只是点到为止的介绍线程的状态模型,具体进程和线程的内容将会在之后几篇文章中详细展开介绍。

之所以花大力气来介绍线程模型,只因为这是线程跟操作系统关系最为直观的联系所在。

不断优化线程模型的目的就是为了使得操作系统能够更好的去管理程序软件和资源分配的问题。

通过对线程的管理来达到资源合理调配的目的。这本身也就是操作系统作用的重要体现之一,可谓是操作系统的第一大灵魂概念。

2 地址空间

地址空间的概念在进程的介绍中略有提及,实际上也与进程有不可分割的关系。一般上的理解上,每个进程拥有其对应的地址空间,存储着该进程用于程序运行时所需的信息和数据。

我们知道,每台计算机都有一些主内存,用于保存正在执行的程序。在一个非常简单的操作系统中,一次只有一个程序在内存中运行。要运行第二个程序,必须删除第一个程序,然后将第二个程序放在内存中。

更复杂的操作系统就能够解决这样的问题,它们可以允许多个程序同时存储在内存中。同时为了防止它们相互干扰(以及与操作系统之间的串扰),会采取某种一般存在于硬件中的保护机制。

通常,每个进程都有其可以使用的一组地址,通常从0到某个地址最大值。在最简单的情况下,进程具有的最大地址空间量小于主存储器的总容量。这样,进程可以填满它的地址空间,并且在主内存中也有足够的空间容纳这些信息。

但是,如果某个进程的地址空间大于计算机的主内存,并且该进程想全部使用它,该怎么办?

在最初的计算机中,这样的要求是十分过分的。而如今,好在有一种称为虚拟内存的技术,操作系统能够将地址空间抽象化为进程可以引用的地址集,从而使得地址空间与计算机的物理内存分离。这样一来,进程的地址空间就有可能大于计算机的物理内存。

地址空间和物理内存的管理是操作系统功能的重要组成部分,同样也是深入理解操作系统进/线程管理的基础。

3 文件

几乎所有操作系统都支持的另一个关键概念就是文件系统。操作系统的主要功能是隐藏磁盘和其他I/O设备的特性,并为程序员提供一个与设备或硬件无关的文件的简洁漂亮的抽象模型。

显然需要通过操作系统的调用来创建文件,删除文件,读取文件和写入文件。在读取文件之前,必须先将其放在磁盘上并打开,在读取文件后应将其关闭,以便能够提供调用来执行这些操作。

层次结构

为了提供存放以及找到文件的位置,大多数PC操作系统都具有目录的概念,该目录是将文件分组在一起的一种方式。目录是以文件夹的形式进行展现,可以在文件夹中嵌套多个目录。

整个文件系统的模型是一个层次结构,就像是一颗多叉树。从最顶层的文件夹依次以树干、树枝的形式进行查找,就可以搜索到最底部的文件目录。

目录层次结构中的每个文件都可以通过在目录层次结构的顶部(根目录)给出其路径名来指定。这样的绝对路径名包含必须从根目录遍历才能到达文件的目录列表,并用斜杠分隔各个组件。

D:/study/学习资源/个人/私は学ぶのが大好きです.mp4

每个进程都会有一个当前的工作目录,在该目录中查找不以斜杠开头的路径名。这就是所谓的相对路径。此外,进程可以通过发出指定新工作目录的系统调用来更改其工作目录。

需要注意的一点是,在读写文件之前,必须先打开该文件,然后再检查权限。如果允许访问,系统将返回一个称为文件描述符的小整数,以用于后续操作。如果禁止访问,则返回错误代码。

挂载

在操作系统的文件系统中,另一个重要概念就是挂载。大多数台式计算机都有一个或多个光盘驱动器,可以在其中插入CD-ROMDVD和光盘。(下面以Unix系统为例进行介绍)

这些计算机以外的光盘驱动器实际上都可看作是一个文件系统,并且与计算机本身硬盘上的根文件系统是相互独立,彼此无关的。为了提供一种优雅的方式来处理这些可移动介质,操作系统允许将光盘上的文件系统附加到根文件系统的主树上,这就是挂载。

但是,由于无法在CD-ROM上指定路径名,因此无法使用该文件系统。UNIX不允许使用驱动器名称或数字作为路径名的前缀。这是操作系统应该消除的对于设备的依赖性。取而代之的是,系统调用允许CD-ROM上的文件系统附加到根文件系统。

在下图中,CD-ROM上的文件系统已安装在目录b中,因此可以访问文件/b/x/b/y。如果目录b包含其它文件,则在安装CD-ROM时将无法访问它们,因为/b将引用CD-ROM的根目录。不过一般而言,文件系统几乎总是挂在空目录上。如果系统包含多个硬盘,它们也都可以挂载到单个树中。

专用文件

文件系统中的另一个重要概念是专用文件。提供专用文件的作用是为了使I/O设备看起来像文件。这样,可以使用与读写文件相同的系统调用来读写它们。

存在两种专用文件:块特殊文件和字符特殊文件。块特殊文件用于对设备进行建模,这些设备由一组可随机寻址的块(例如磁盘)组成。通过打开一个块专用文件并读取进行,这样一来程序就可以直接访问设备上相应的块,而无需考虑其上包含的文件系统的结构。

同样,字符专用文件可用于对打印机,调制解调器和其他接受或输出字符流的设备进行建模。按照惯例,特殊文件保存在/dev目录中。例如,dev/lp可能是打印机(曾经称为行式打印机)。

除此之外,还有一个特殊的文件,就是管道。没错,就是用来进程间通信的那个。事实上,管道是一种伪文件,可用于连接两个进程。如果进程AB希望使用管道进行通话,则必须提前进行设置。

当进程A想要将数据发送到进程B时,它将写在管道上,就好像它是输出文件一样。实际上,管道的实现与文件的实现非常相似。进程B可以通过从管道读取数据来读取数据,就像它是输入文件一样。

因此,进程之间的通信非常类似于普通文件的读写。更强大的是,当进程发现正在写入的输出文件不是真正的文件,而是管道时,就会进行特殊的系统调用。当然具体的实现这里就不展开了,之后在讲进程间通信时再详细介绍。持续关注,收获更多哦~

4 输入/输出

所有计算机都具有用于获取输入和产生输出的物理设备,这就是所谓的I/O。毕竟,如果用户在完成要求的工作后不知道该怎么办并且无法获得结果,那么计算机将有什么用?

现代计算机中存在多种输入和输出设备,包括键盘,鼠标,显示器,打印机等。这些设备都是由操作系统进行管理和资源的分配。

因此,每个操作系统都有一个I/O子系统来管理其I/O设备。某些I/O软件与设备无关,也就是说,它们同样适用于许多或所有I/O设备。其它的I/O软件(例如设备驱动程序)则会用于特定的I/O设备。

依据I/O设备工作方式的不同,通常进行如下分类:

(1)字符设备character device,又叫做人机交互设备。用户通过这些设备实现与计算机系统的通信。它们大多是以字符为单位发送和接受数据的,数据通信的速度比较慢。

例如,键盘和显示器为一体的字符终端、打印机、扫描仪、包括鼠标等,还有早期的卡片和纸带输入和输出机。含有显卡的图形显示器的速度相对较快,可以用来进行图像处理中的复杂图形的显示。

(2)块设备block device,又叫外部存储器,用户通过这些设备实现程序和数据的长期保存。与字符设备相比,它们是以块为单位进行传输的,如磁盘、磁带和光盘等。块的常见尺寸为512~32768B之间。

(3)网络通信设备。这类设备主要有网卡、调制解调器等,主要用于与远程设备的通信。这类设备的传输速度比字符设备高,但比外部存储器低。

5 保护

我们知道操作系统可以对进程和资源进行管理和控制,而在这个管理过程中,进程运行的正确性必须要得以保证。因此,操作系统内部需要提供一种保护机制来确保进程运行和获取资源的正确性。

从概念上来说,操作系统的保护是指一种控制程序、进程或用户对计算机系统资源进行访问的机制。操作系统中的进程必须加以保护,使其免受其他进程活动的干扰。各种机制是为了确保只有从操作系统中获得了恰当授权的进程才可以操作相应的文件、内存段、CPU和其他的资源。

通俗点说,计算机包含大量用户经常希望保护和保密的信息。这些信息可能包括电子邮件,商业计划书,纳税申报单等等。操作系统需要采取一些机制来管理系统的安全性。例如,某些重要文件只能由授权用户访问。

通过为每个文件分配一个9位的二进制保护代码来保护系统中的文件。保护代码由三个3位字段组成,一个用于所有者,一个用于所有者组的其他成员,另一个用于其他所有者。

每个字段都有3位,一位表示读权限,一位表示写权限,一位表示执行权限,这3个位称为rwx位。例如,保护代码rwxr-x--x表示所有者可以读取,写入和执行文件,其他组成员可以读取或执行(但不能写入)文件,其他所有者都可以执行(但不能读取或写入)文件。

除了文件保护之外,操作系统还存在许多其他安全方面的保护机制。这些机制贯穿在操作系统的各个方面,从而能够保证其在资源分配以及程序运行中的可靠性。

6 虚拟内存

虚拟内存想必都不会陌生,它主要是解决物理内存所带来的一系列局限问题。虚拟内存能够通过在RAM和磁盘之间快速来回移动程序来运行比计算机物理内存更大的程序。

因为虚拟内存的存在,使得应用程序以为它拥有了连续可用的内存,即一个连续完整的地址空间。而实际上,它在物理内存中可能并不连续,通常是被分隔成多个物理内存碎片,甚至还有部分暂时存储在外部磁盘存储器上,在需要时才进行数据交换。

总的来说,虚拟内存将主存看成是一个存储在磁盘空间上的地址空间的高速缓存,主存中只保存活动的区块,并根据需要在磁盘和主存之间来回传送数据。同时,它为进程提供了一致的地址空间,从而简化了内存管理。

除此之外,操作系统为每个进程提供了一个独立的虚拟地址空间,从而保护了每个进程的地址空间不被其他进程破坏。

由此可见,虚拟内存的提出解决了内存空间利用率问题、读写内存的安全性问题、进程间的通信安全问题以及内存读写的效率问题。现在大多数操作系统都使用了虚拟内存,已经成为操作系统中最为基础的概念之一。

总结

大型分布式系统犹如一个生命,系统中各个服务犹如骨骼,其中的数据犹如血液,而Kafka犹如经络,串联整个系统。这份Kafka源码笔记通过大量的设计图展示、代码分析、示例分享,把Kafka的实现脉络展示在读者面前,帮助读者更好地研读Kafka代码。

需要免费领取这份Kafka源码笔记的铁汁们,麻烦帮忙转发一下这篇文章+关注我,然后戳这里免费获取!

ka犹如经络,串联整个系统。这份Kafka源码笔记通过大量的设计图展示、代码分析、示例分享,把Kafka的实现脉络展示在读者面前,帮助读者更好地研读Kafka代码。

需要免费领取这份Kafka源码笔记的铁汁们,麻烦帮忙转发一下这篇文章+关注我,然后戳这里免费获取!

就这一次!拼多多内部架构师培训Kafka源码笔记(现已绝版)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/385748.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

工作组无法访问计算机用户,工作组计算机无法访问,详细教您工作组计算机无法访问怎么解决...

电脑用户反映称在局域网中,查看工作组计算机时说无法访问,没有权限使用网络资源。就是双击“查看工作组计算机”时,提示“Workgroup无法访问。” what the fuck !!怎么解决?(泄气)下面,小编给大…

Java面试题目,java工程师成神之路

2. ZooKeeper 介绍 2.1. ZooKeeper 由来 正式介绍 ZooKeeper 之前,我们先来看看 ZooKeeper 的由来,还挺有意思的。 下面这段内容摘自《从 Paxos 到 ZooKeeper 》第四章第一节,推荐大家阅读一下: ZooKeeper 最早起源于雅虎研究院…

Java面试题目,极客时间免费课程

一、对Kafka的认识 1.Kafka的基本概念 2.安装与配置 3.生产与消费 4.服务端参数配置 二、生产者 1.客户端开发 2.原理分析 3.重要的生产者参数 三、消费者 1.消费者与消费组 2.客户端开发 四、主题与分区 1.主题的管理 2.初识KafkaAdminCilent 3.分区的管理 4.如何…

w7重启计算机打印机无法使用,win7系统电脑重启打印机服务就会被关闭的解决方法...

很多小伙伴都遇到过win7系统电脑重启打印机服务就会被关闭的困惑吧,一些朋友看过网上零散的win7系统电脑重启打印机服务就会被关闭的处理方法,并没有完完全全明白win7系统电脑重启打印机服务就会被关闭是如何解决的,今天小编准备了简单的解决…

Java面试题!centos安装yum

技术焦虑 现在的技术圈子很火热,任何技术点,任何知识,只要你肯搜索,都能找到资料。但是现在技术圈确实有一个不好的地方,就是贩卖焦虑。这种贩卖焦虑的点并不在于形式,而是一种普遍的心态。特别是对于那种…

2016年全国计算机技术与软件,2016年的上半年的全国计算机技术与软件专业技术资格(水平)考.doc...

2016年的上半年的全国计算机技术与软件专业技术资格(水平)考.doc (1页)本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦!19.90 积分2011年上半年全国计算机技术与软件专业技术资格(水平)考试…

Java面试题!java面向对象程序设计答案

一、对Kafka的认识 1.Kafka的基本概念 2.安装与配置 3.生产与消费 4.服务端参数配置 二、生产者 1.客户端开发 必要的参数配置消息的发送序列化分区器生产者拦截器 2.原理分析 整体架构元数据的更新 3.重要的生产者参数 三、消费者 1.消费者与消费组 2.客户端开发 必要的…

Java面试题,java培训北京哪家好

一、公务员都不要35岁以上的,何况大公司 这让很多人感到惶恐,现在职场上有一种现象:很多用人单位会在招聘信息上明确标注,年龄需在35岁以下。为什么有经验、有人脉的职场中年人会如此遭“嫌弃”呢? 首先,…

Java面试题,java工程师求职简历

One:JVM实践思维图(完整版) Two: 走近Java 概述 Java技术体系Java发展史Java虚拟机家族:(Sun Classic/Exact VM、HotSpot VM、Mobile/Embedded VM、BEA JRockit/IBM J9 VM、BEA Liquid VM/Azul VM、Apache…

java高分面试指南:javamvc模式简单案例

Spring面试高频问题 SpringMVC面试高频问题 MyBatis面试高频问题 SpringBoot面试高频题 SpringCloud面试高频问题 Redis高级面试题 Dubbo高频常问面试问题 Java虚拟机(JVM) MySQL数据库高频面试问题 Java高频面试专题合集解析: 当然在这还有更…

java高分面试指南:java单例模式双重检查

1. CAP 的由来 要理解 CAP,首先我们要清楚,为何会有人提出 CAP?他提出 CAP 是为了解决什么问题? 时间回到 1985 年,彼时,后来证明了 CAP 理论的 Lynch 教授此时给当时的 IT 界来了一记惊雷: …

win10计算机磁盘图标,Win10 21H1怎么更换电脑磁盘的图标标识

导语:每台win10电脑的磁盘图标都是一样的,有什么办法可以修改硬盘图标呢?为了让我们的电脑更具个性化,小编给大家分享下Win10 21H1怎么更换电脑磁盘的图标标识。方法如下:手动配置.inf文件1、首先,将要设置为驱动器图标的图标文件(ico格式)复…

java高分面试指南:java定时删除文件

本文框架如下 第一部分,主要是在阅读代码过程中的日志和笔记; 第二部分,主要介绍了 Redis 的主要框架,以及 Redis 是如何提供服务的,从一个最简单的命令开始讲起; 第三部分,主要介绍 Redis 底…

大牛手把手教你!2021大厂Java面试经历

我听到的一些发声 你们赚的钱已经可以了: 我一个发小是做土木工程的,上海大学博士,参与很多著名建筑的工程,但是从薪资上看,还不如一些稍微像样的公司的6年多的高级开发。为什么?这就是行业的红利&#xf…

登录华为账户显示无法连接服务器,App提示连接不到服务器

App提示连接不到服务器 内容精选换一换本章节指导您使用MongoDB客户端,通过弹性云服务器内网方式连接GaussDB(for Mongo)集群实例。操作系统使用场景:弹性云服务器的操作系统以Linux为例,客户端本地使用的计算机系统以Windows为例。目标实例必…

大牛深入讲解!9次Java面试经验总结

阿里巴巴Java岗面试题分享 1.HashMap 的内部结构?内部原理?和 HashTable 的区别,假如发⽣了 hash 碰撞,如何设计能让遍历效率⾼? 2.讲一讲讲讲 ConcurrentHashMap吧。 3.讲一下JVM虚拟机内存结构,以及它…

大牛深入讲解!最经典的HashMap图文详解

栈和队列部分(10) 设计一个有getMin功能的栈(士★☆☆☆) 由两个栈组成的队列(尉★★☆☆) 如何仅用递归函数和栈操作逆序一个栈(尉★★☆☆) 猫狗队列(士★☆☆☆&am…

服务器几种系统,服务器有几种操作系统

服务器有几种操作系统 内容精选换一换公共镜像是由华为云官方提供的镜像,适配了弹性云服务器或裸金属服务器兼容性并安装了必要的初始化插件,所有用户均可使用,涵盖大部分主流操作系统。本文介绍公共镜像类型和公共镜像特点。华为云提供的公共…

Java面试题2021,文末有福利

正文 做了 3~5 年编程开发,你已经积累了不少项目经验,扩宽了技术广度,也许已发力成为团队管理者。到了这个阶段,大家却常有这种感受:感觉自己卡在瓶颈进步缓慢,技术水平很难像早期一样实现大幅突破&#x…

移动端上传大文件到服务器,android上传大文件到服务器地址

android上传大文件到服务器地址 内容精选换一换安装传输工具在本地主机和Windows云服务器上分别安装数据传输工具,将文件上传到云服务器。例如QQ.exe。在本地主机和Windows云服务器上分别安装数据传输工具,将文件上传到云服务器。例如QQ.exe。本地磁盘映…