乐趣区

关于java:Java面试问题汇总操作系统

1.64 位和 32 位的区别

操作系统只是硬件和应用软件两头的一个平台。32 位操作系统针对的 32 位的 CPU 设计。64 位操作系统针对的 64 位的 CPU 设计。

2.CentOS 和 Linux 的关系

CentOS 是 Linux 泛滥得发行版本之一,linux 有三大发行版本(:Slackware、debian、redhat), 而 Redhat 有免费的商业版和收费的开源版, 商业版的业内称之为 RHEL 系列,CentOS 是来自于按照凋谢源代码规定而颁布的源代码从新编译而成。能够用 CentOS 代替商业版的 RHEL 应用。两者的不同,CentOS 不蕴含关闭源代码软件,是收费的。

3. 解释一下,LINUX 下的线程,GDI 类

LINUX 实现的就是 基于外围轻量级过程的”一对一”线程模型 一个线程实体对应一个外围轻量级过程 ,而 线程之间的治理在·核外函数库·中实现
GDI 类为图像设施编程接口类库。

4. 零碎线程数量下限是多少

Linux 零碎中单个过程的最大线程数有其最大的限度 PTHREAD_THREADS_MAX。

这个限度能够在 /usr/include/bits/local_lim.h 中查看,对 linuxthreads 这个值个别是 1024,对于 nptl 则没有硬性的限度,仅仅受限于零碎的资源。

这个零碎的资源次要就是线程的 stack 所占用的内存,用 ulimit -s 能够查看默认的线程栈大小,个别状况下,这个值是 8M=8192KB。

5. 如何杀死一个过程

Kill pid

6.socket 编程的三种通信模型,BIO,NIO,AIO

Java 中的 BIO、NIO 和 AIO 了解为是 Java 语言对 操作系统的各种 IO 模型的封装。程序员在应用这些 API 的时候,不须要关怀操作系统层面的常识,也不须要依据不同操作系统编写不同的代码。只须要应用 Java 的 API 就能够了。

在讲 BIO,NIO,AIO 之前先来回顾一下这样几个概念:同步与异步,阻塞与非阻塞。

同步与异步

同步:同步就是发动一个调用后,被调用者未解决完申请之前,调用不返回。

异步:异步就是发动一个调用后,立即失去被调用者的回应示意已接管到申请,然而被调用者并没有返回后果,此时咱们能够解决其余的申请,被调用者通常依附事件,回调等机制来告诉调用者其返回后果。

同步和异步的区别最大在于异步的话调用者不须要期待处理结果,被调用者会通过回调等机制来告诉调用者其返回后果。

阻塞和非阻塞

阻塞:阻塞就是发动一个申请,调用者始终期待申请后果返回,也就是以后线程会被挂起,无奈从事其余工作,只有当条件就绪能力持续。

非阻塞:非阻塞就是发动一个申请,调用者不必始终等着后果返回,能够先去干其余事件。

那么同步阻塞、同步非阻塞和异步非阻塞又代表什么意思呢?

举个生存中简略的例子,你妈妈让你烧水,小时候你比拟笨啊,在哪里傻等着水开(同步阻塞)。等你略微再长大一点,你晓得每次烧水的空隙能够去干点其余事,而后只须要时不时来看看水开了没有(同步非阻塞)。起初,你们家用上了水开了会发出声音的壶,这样你就只须要听到响声后就晓得水开了,在这期间你能够轻易干本人的事件,你须要去倒水了(异步非阻塞)。

同步阻塞的 BIO同步非阻塞的 NIO异步非阻塞的 AIO。其中 BIO 是一个连贯一个线程。NIO 是一个申请一个线程。AIO 是一个无效申请一个线程。

7. 操作系统里的内存碎片 and 解决办法

内存碎片分为:外部碎片和内部碎片。

外部碎片 就是 曾经被调配 进来(能明确指出属于哪个过程)却不能被利用 的内存空间;

外部碎片是处于区域外部或页面外部的存储块。占有这些区域或页面的过程并不应用这个存储块。而在过程占有这块存储块时,零碎无奈利用它。直到过程开释它,或过程完结时,零碎才有可能利用这个存储块。

单道间断调配只有外部碎片。多道固定间断调配既有外部碎片,又有内部碎片。

内部碎片 指的是 还没有被调配进来 (不属于任何过程),但因为 太小了无奈调配 给申请内存空间的新过程的内存闲暇区域。

内部碎片是出于任何已调配区域或页面内部的闲暇存储块。这些存储块的总和能够满足以后申请的长度要求,然而因为它们的地址不间断或其余起因,使得零碎无奈满足以后申请。

应用 搭档零碎算法
假如要申请一个 256 个页框的块(即 1MB)。算法先在 256 个页框的链表中查看是否有一个闲暇块。如果没有这样的块,算法会查找下一个更大的页块,也就是,在 512 个页框的链表中找一个闲暇块。如果存在这样的块,内核就把 256 的页框分成两等份,一半用作满足申请,另一半插入到 256 个页框的链表中。如果在 512 个页框的块链表中也没找到闲暇块,就持续找更大的块 —— 1024 个页框的块。如果这样的块存在,内核把 1024 个页框块的 256 个页框用作申请,而后从残余的 768 个页框中拿 512 个插入到 512 个页框的链表中,再把最初的 256 个插入到 256 个页框的链表中。如果 1024 个页框的链表还是空的,算法就放弃并收回错信号。

8. 页式存储

主存被等分成大小相等的片,称为主存块,又称为实页。

当一个用户程序装入内存时,以页面为单位进行调配。页面的大小是为 2n , 通常为 1KB、2KB、2n KB 等

9. 零碎如何进步并发性

1、进步 CPU 并发计算能力

(1)多过程 & 多线程

(2)缩小过程切换,应用线程,思考过程绑定 CPU

(3)缩小应用不必要的锁,思考无锁编程

(4)思考过程优先级

(5)关注零碎负载

2、改良 I / O 模型

(1)DMA 技术

(2)异步 I /O

(3)改良多路 I / O 就绪告诉策略,epoll

(4)Sendfile

(5)内存映射

(6)间接 I /O

10. 什么状况下会产生死锁?预防死锁的策略有哪些?

(一)互斥条件:一个资源一次只能被一个过程拜访。即某个资源在一段时间内只能由一个过程占有,不能同时被两个或两个以上的过程占 有。这种独占资源如 CD-ROM 驱动器,打印机等等,必须在占有该资源的过程被动开释它之后,其它过程能力占有该资源。这是由资源自身的属性所决定的。

(二)申请与放弃条件:一个过程因申请资源而阻塞时,对已取得的资源放弃不放。过程至多曾经占有一个资源,但又申请新的资源;因为该资源已被另外过程占有,此时该过程阻塞;然而,它在期待新资源之时,仍持续占用已占有的资源。

(三)不剥夺条件:过程曾经取得的资源,在未应用完之前不能强行剥夺,而只能由该资源的占有者过程自行开释。

(四)循环期待条件:若干资源造成一种头尾相接的循环期待资源关系。

预防死锁:
银行家算法
所谓银行家算法是是指,零碎在为过程分配资源之前,首先计算此次资源分配的安全性,如果是平安的,则进行调配;如果这次调配会导致进入不平安状态,不进行调配。
所谓的装置状态是指存在一个过程序列,如果依照这个程序为各个过程分配资源,则所有的过程都能顺利运行实现,这是咱们说零碎是平安的,这个序列叫做平安序列。

是一种预判。穷举出所有的计划(游戏中的路线),判段是否有危险(本人的角色是否通关;血条、蓝条、攻打)
没有危险的计划就是平安序列(能扛到起点,通过关卡)
有危险的计划就会导致进入不平安状态,不进行调配。(半路被怪打死,中途 gg 了)

退出移动版