面试知识点(操作系统)

个人记录,来源参考了很多网上的资料

锁有哪些类型?

互斥锁:用于保护关键代码段,以确保其独占式的访问
读写锁:读操作可以共享,写操作是排它的,读可以有多个在读,写只有唯一个在写,写的时候不允许读操作。
自旋锁:自旋锁和互斥锁很像,唯一不同的是自旋锁访问加锁资源时,会一直循环的查看是否释放锁。这样要比互斥锁效率高很多,但是会一直占用CPU。所以自旋锁适用于多核的CPU。但是还有一个问题是当自旋锁递归调用的时候会造成死锁现象。所以慎重使用自旋锁。
自旋锁的使用场景:锁的持有时间比较短,或者说小于2次上下文切换的时间

线程局部变量

ThreadLocal,顾名思义,它不是一个线程,而是线程的一个本地化对象。当工作于多线程中的对象使用ThreadLocal维护变量时,ThreadLocal为每个使用该变量的线程分配一个独立的变量副本。所以每一个线程都可以独立地改变自己的副本,而不会影响其他线程所对应的副本。从线程的角度看,这个变量就像是线程的本地变量,这也是类名中“Local”所要表达的意思。
是线程的一个“拷贝”,修改它不影响其他线程。

设置线程池有多少个线程,从哪些方面考虑?

来自:线程池线程数目的设置_守望希望-CSDN博客

  • cpu个数
  • 任务的性质:cpu密集型、IO密集型
  • 任务的执行时间:长、中、短
  • 任务的依赖性:是否依赖其他的服务

1、CPU密集型
应该尽量减少线程数,尽量减少切换带来的开销,建议是CPU核数 + 1(计算密集型的线程偶尔由于缺失故障或者其他原因而暂停时,这个额外的线程也能确保CPU的时钟周期不会被浪费)。

2、IO密集型

最佳线程数目 = ((线程等待时间+线程CPU时间)/线程CPU时间 )* CPU数目

根据上面的公式,线程等待的时间越长我们需要设置的线程数目越多:
(1)、高并发、任务执行时间短的业务,线程池线程数可以设置为CPU核数+1,减少线程上下文的切换

(2)、并发不高、任务执行时间长的业务要区分开看:

a、假如是业务时间长集中在IO操作上,也就是IO密集型的任务,因为IO操作并不占用CPU,所以不要让所有的CPU闲下来,可以适当加大线程池中的线程数目,让CPU处理更多的业务
b、假如是业务时间长集中在计算操作上,也就是计算密集型任务,这个就没办法了,和(1)一样吧,线程池中的线程数设置得少一些,减少线程上下文的切换

(3)、并发高、业务执行时间长,解决这种类型任务的关键不在于线程池而在于整体架构的设计,看看这些业务里面某些数据是否能做缓存是第一步,增加服务器是第二步,至于线程池的设置,设置参考(2)。最后,业务执行时间长的问题,也可能需要分析一下,看看能不能使用中间件对任务进行拆分和解耦。

计算密集型任务主要消耗大量CPU资源,不停进行计算。由于依靠CPU性能,一直占用CPU进行计算,也就说一般情况下能够采用多任务的数量等于CPU核心数

linux命令

查看进程和线程的命令

ps命令,或者top命令,它能显示当前运行中进程的相关信息,包括进程的PID占用内存等信息。ps命令能提供一份当前进程的快照,而如果想状态可以自动刷新,可以使用top命令。
获得线程信息,输入下列命令:
ps -eLf
ps axms

查看磁盘的命令du,df,这两个分别要看什么?

du,disk usage,是通过搜索文件来计算每个文件的大小,然后累加,du能看到的文件只是一些当前存在的,没有被删除的。他计算的大小就是,当前他认为存在的所有文件大小的累加和。另外,du显示的是文件所占用的磁盘的大小,文件而在磁盘中一定是占据block的整数倍,所以即使是一个只含一个字符的文件也是4k大小。

df,disk free,通过文件系统来快速获取空间大小的信息。当我们删除一个文件的时候,这个文件不是马上就在文件系统当中消失了,而是暂时消失了,当所有程序都不用时,才会根据OS的规则释放掉已经删除的文件。 df记录的是通过文件系统获取到的文件的大小,他比du强的地方就是能够看到已经删除的文件,而且计算大小的时候,把这一部分的空间也加上了,更精确了。

ls -l 、 du、 df 的区别_chiliaolm的博客-CSDN博客

看端口号被占用用哪个?

netstat命令

什么是守护进程?

守护进程是运行在后台的一种特殊进程,它是独立于控制终端的(没有控制终端,终端名为?),并周期性地执行某些任务,大多数都以超级用户特权执行,例如网络服务

用户层守护进程的父进程是init进程。

按下开机键的那一刻,Linux 究竟发生了什么

按下开机键的那一刻,Linux 究竟发生了什么?_杰哥的IT之旅-CSDN博客

  • 计算机会自动从主板的BIOS(Basic Input/Output System)读取其中所存储的程序。这一程序通常知道一些直接连接在主板上的硬件(硬盘,网络接口,键盘,串口,并口)。
  • 计算机将从你所选择的存储设备(软盘、光盘或者硬盘)中读取起始的512 bytes(比如光盘一开是的512 bytes,如果我们从光盘启动的话)。这512 bytes叫做主引导记录MBR(master boot record)。
  • MBR会告诉电脑从该设备的某一个分区(partition)来装载引导加载程序(boot loader)。Boot loader储存有操作系统(OS)的相关信息,比如操作系统名称,操作系统内核 (内核)所在位置等。
  • boot loader会帮助我们加载内核(kernel)。内核实际上是一个用来操作计算机的程序,它是计算机操作系统的内核,主要的任务是管理计算机的硬件资源,充当软件和硬件的接口。
  • 内核会首先预留自己运行所需的内存空间,然后通过驱动程序(driver)检测计算机硬件。随后,内核会启动一个init进程。它是Linux系统中的1号进程(Linux系统没有0号进程)。到此,内核就完成了在计算机启动阶段的工作,交接给init来管理。
  • init会运行一系列的初始脚本(startup scripts),这些脚本是Linux中常见的shell scripts。这些脚本执行如下功能:
    设置计算机名称,时区,检测文件系统,挂载硬盘,清空临时文件,设置网络……
    当这些初始脚本,操作系统已经完全准备好了,只是,还没有人可以登录。init会给出登录(login)对话框,或者是图形化的登录界面。
  • 以用户(user)vamei的身份操作电脑。此外,根据你创建用户时的设定,Linux还会将你归到某个组(group)中,比如可以是stupid组,或者是vamei组。

综上:BIOS -> MBR -> 引导加载程序 -> 内核 ->init process ->login

不同位(16,32,64)的操作系统的区别

简单的说32位的CPU的数据线、地址线、控制线总线)都是32位的,即CPU一次能够传送、处理32位的二进制数,所以理论上它能够寻址的范围是2的32次方,即4个GB,所以即使你的电脑能够安装8个GB的内存,系统也只能使用前4个GB的内存,而另4个GB的内存电脑就当没有。当然由于32位XP的限制,32位的机器也只能使用3个GB多点的内存。

而64位对应的内存就是128G。

用户复制粘贴的时候,计算机都进行了什么操作?

用了这么多年Ctrl+C和Ctrl+V的复制粘贴,你知道简单的原理吗?_threecat.up的博客-CSDN博客

这涉及到进程之间的通信,通过消息队列实现通信过程,是间接通信(在Windows中如果复制之后没有执行粘贴操作,会一直存在,就相当于放在了存储空间中,当关机的时候就消失了)。

复制一个文件,在粘贴之前删除文件,再粘贴会成功吗,为什么?

和上一题结合,复制的时候,实际上并没有拷贝整个文件,而是拷贝一个绝对路径。删除了路径就不存在了,会粘贴失败。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值