面试Linux比java容易吗,四 面试总结C/C++/Java/Linux

1.滑动窗口的理解

TCP的滑动窗口主要有两个作用,一是提供TCP的可靠性,二是提供TCP的流控特性对于TCP会话的发送方,任何时候在其发送缓存内的数据都会分为四类:“已经发送并且得到对端ACK的”,“已经发送但是还未收到对端ACK的”,“未发送但对端允许发送的”,“未发送且对端不允许发送”;其中“已经发送但是还未收到对端ACK的”,“未发送但对端运行发送的”这两部分的数据称之为发送窗口对于TCP的接收方,在某一时候它的接收缓存有三类:“已接收”,“未接收准备接收”,“未接收并未准备接收”(由于ACK直接由TCP协议栈回复,默认无应用延迟,不存在“已接收未回复ACK”的),其中“未接收准备接收”称之为接收窗口。

0581122d67ded142f9b9200dc4b40b7c.png滑动窗口

TCP的滑动串口的可靠性也是建立在“确认重传”基础上的,接收窗口只有在前面所有的段都确认的情况下才会移动左边界。应用程序根据自身的处理能力变化,通过本端的TCP接收窗口的大小控制来对对端的发送窗口流量限制;应用程序在需要(内存不足)时,通过API通知TCP协议栈缩小TCP的接收窗口,然后TCP协议栈在下个段发送时包含新的窗口大小通知给对端,对端按通知的窗口来改变发送窗口,以便达到减缓发送速率的目的。

2.虚拟文件系统vfs的理解

vfs是Linux内核和存储设备之间的抽象层,有两个好处

简化了应用程序的开发:应用通过统一的系统调用访问各种存储介质简化了新文件系统加入内核的过程:新文件系统只要实现VFS的各个接口即可,不需要修改内核部分

超级块对象(super_block):描述已安装的文件系统。描述的文件系统储存在磁盘中

索引结点对象(inode):描述一个具体的文件。描述的文件或目录存储在磁盘中,当被应用程序访问时才会在内存中创建

目录项对象(dentry):描述一个目录项,是路径的组成部分

文件对象(file):描述由进程打开的文件

为什么不把文件的位置信息存放在索引结点inode中而要设定一个files数据结构呢?

在linux中文件是能够共享的,不同的进程可以打开相同的文件,假如把位置放到inode中,不同的进程访问的是同一个文件,于是一个进程的lseek操作会影响到另一个进程的读操作

inode和dentry都是对文件各方面属性进行描述,为什么不把两者合二为一呢?

inode和dentry所描述的的目标不同,dentry所代表的是逻辑意义上的文件,所描述的文件是逻辑上的属性,因此,目录下对象在磁盘上并没有对 应的映像;inode所代表的是物理上的文件,记录的是物理文件的属性,对应具体文件系统,inode结构在磁盘上就有对应的映像。

3.硬链接和软链接区别

硬链接:硬链接只是在某个目录下新增一文件名链接到某个inode号码的关联记录而已,不同文件名对应同一个inode结点(i_nlink会增加)

不能对目录进行硬链接不能对没有的文件进行硬链接不能跨文件系统进行硬链接删除其中的一个硬链接并不影响其他有相同inode号的文件

de47b8e2ddd02292f26e6fc41be58d14.png硬链接

软链接:软连接就是建立一个独立的文件,而这个文件会让数据的读取指向它link的那个数据的的名字(i_nlink不会增加)

可对不存在的文件和目录进行软链接软链接可以跨文件系统删除软链接并不影响被指向的文件,但若被指向的原文件被删除,则相关的软链接被称为死链接(即dangling link,若被指向路径文件被重新创建,死链接可恢复为正常的软连接)

a6fa0611147f0aa65cad91adc3c8c281.png软连接

4.Linux系统启动步骤

第一步:按下电源键后,加载BIOS(因为BIOS包含了CPU的相关信息、设备启动顺序信息、磁盘信息、内存信息、时钟信息等)第二步:读取MBR(第0磁道的第一个扇区,即主引导记录,大小512个字节,存放了预启动的信息、分区表信息;系统找到BIOS所指定的磁盘MBR后,就会将其复制到0x7c00地址所在的物理内存中,其实被复制的就是Boot Loader)第三步:Boot Loader,Boot Loader就是系统内核运行之前运行的一段小程序,通过这段程序我们可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件带到一个合适的状态,以便为最终调用操作系统内核做好一切准备第四步:加载内核,把内核解压后放置在内存中,并调用start_kernel( )函数来启动一系列的初始化函数,并初始化各种设备,完成Linux核心环境的建立第五步:第一个运行的程序就是init,来完成初始化工作第六步:执行/etc/rc.d/rc.sysinit脚本程序,包括设定PATH、设定网络配置、启动swap分区等第七步:启动内核模块第八步:执行不同运行级别的脚本程序,系统会运行rc0.d-->rc6.d中的相应的脚本程序,来完成相应的初始化工作和启动相应的服务第九步:执行/etc/rc.local,rc.local就是在一切初始化工作后,Linux留给用户进行个性化的地方第十步:执行/bin/login程序,进入登录状态,输入username和password就登录了

5.死锁

产生死锁的原因:

1.系统资源不足2.资源分配不合适3.进程运行的顺序不合适

死锁产生的必要条件

1.资源独占:一个资源每次只能被一个进程使用2,不可剥夺:进程已获得资源,在未使用完之前不能强行剥夺3.请求与保持:一个进程因请求资源而阻塞时,对已获得的资源保持不放4.循环等待:若干进程之间形成一种头尾相连接的循环等待资源

举报/反馈

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值