Linux常见易错题

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/kaikai_sk/article/details/83096302

进程 线程 协程

线程是共享进程的地址空间

协程是一种用户态的轻量级线程,协程的调度完全由用户控制。协程拥有自己的寄存器上下文和栈。协程调度切换时,将寄存器上下文和栈保存到其他地方,在切回来的时候,恢复先前保存的寄存器上下文和栈,直接操作栈则基本没有内核切换的开销,可以不加锁的访问全局变量,所以上下文的切换非常快。

ext2/etx3 文件系统

EXT2、EXT3:linux环境上的文件系统。ext2/ext3文件系统使用索引节点来记录文件信息,作用像windows的文件分配表。索引节点是一个结构,它包含了一个文件的长度、创建及修改时间、权限、所属关系、磁盘中的位置等信息。

EXT2、EXT3的区别如下:
(1)ext2和ext3的格式完全相同,只是在ext3硬盘最后面有一部分空间用来存放Journal(日志)的记录;
(2)在ext2中,写资料到硬盘中时,先将资料写入缓存中,当缓存写满时才会写入硬盘中;
(3)在ext3中,写资料到硬盘中时,先将资料写入缓存中,鼗缓存写满时系统先通知Journal,再将资料写入硬盘,完成后再通知Journal,资料已完成写入工作;
(4)是否有Journal的差别:
在ext2中,系统开机时会去检查有效位(Valid bit),如果值为1,表示系统上次有正常关机;如果为0,表示上次关机未正常关机,那系统就会从头检查硬盘中的资料,这样时间会很长;
在ext3中,也就是有Journal机制里,系统开机时检查Journal的资料,来查看是否有错误产生,这样就快了很多;
(5)tune2fs –j 将ext2转换成ext3

Ext3 目前所支持的最大16TB 文件系统和最大2TB 文件,Ext4 分别支持 1EB(1,048,576TB, 1EB=1024PB, 1PB=1024TB)的文件系统,以及 16TB 的文件。

数据和代码分开

1)防止程序指令被修改,设置代码段权限为只读,设置数据段权限为可读写
2)代码段和数据段分开有利于提高程序的局部性,现代CPU缓存一般设计为数据缓存和指令缓存分离,指令和数据分开存放可以提高CPU缓存命中率。
3)共享指令,当系统运行多个程序的副本时,它们指令时一样的,因此内存只需保存一份程序的指令代码。每个副本进程的数据区是进程私有,可以节省内存。

Ngix配置

A. 进程数设置为CPU总核心数最佳。 (正确)
B. 配置虚拟主机,多个域名时,用 空格 分隔。 (错误)
C. 设定http服务器中 sendfile on; #开启高效文件传输模式
普通应用设置为on;
用于进行下载等应用磁盘IO重负载应用,设置为off,以平衡磁盘与网络I/O处理速度,降低系统的负载。(错误)
D. 工作模式与连接数上限 :(最大连接数 = 连接数 * 进程数)(正确)

cront tab

基本格式 :
*  *  *  *  *  command
分 时 日 月 周 命令
第1列表示分钟1~59 每分钟用*或者 */1表示
第2列表示小时1~23(0表示0点)
第3列表示日期1~31
第4列表示月份1~12
第5列标识号星期0~6(0表示星期天)
第6列要运行的命令

*/5 * * * * exam
每5分钟运行一次exam

用户态和内核态的切换

用户态切换到内核态的 3 种方式
a. 系统调用
read系统调用
b. 异常
整数除以零
c. 外围设备的中断

&& ||

[ -z “” ] 命令判断双引号中变量的字符串长度是否为0,
[ -z “” ] && echo 0 || echo 1
^ ^ ^
命令1 命令2 命令3

本题即: 先判断 “” 变量中是否无值,成功
然后根据 && 符特性,当命令1执行成功时执行命令2,也就是执行echo 0
然后根据 || 符特性,前一个命令不能执行才执行后一个,命令2 echo 0 执行成功,所以命令3 echo 1 不执行
命令结束

c++内存区域

(1)从静态存储区域分配:
内存在程序编译时就已经分配好,这块内存在程序的整个运行期间都存在。速度快、不容易出错,因为有系统会善后。例如全局变量,static变量等。

(2)在栈上分配:
在执行函数时,函数内局部变量的存储单元都在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。

(3)从堆上分配:
即动态内存分配。程序在运行的时候用malloc或new申请任意大小的内存,程序员自己负责在何时用free或delete释放内存。动态内存的生存期由程序员决定,使用非常灵活。如果在堆上分配了空间,就有责任回收它,否则运行的程序会出现内存泄漏,另外频繁地分配和释放不同大小的堆空间将会产生堆内碎块。

一个C、C++程序编译时内存分为5大存储区:堆区、栈区、全局区、文字常量区、程序代码区。

从四个选项选出不同的一个。

telnet为用户提供了在本地计算机上完成远程主机工作的能力,使用Telnet协议,是TCP/IP 协议族中的一员,是Internet远程登陆服务的标准协议和主要方式。;

wget 是一个从网络上自动下载文件的自由工具,支持通过HTTP、HTTPS、FTP三个最常见的TCP/IP协议下载,并可以使用HTTP代理。

scp是有Security的文件copy,可以把当前一个文件copy到远程另外一台主机上,基于SSH登录,SSH采用面向连接的TCP协议传输 ,应用22号端口 安全系数较高。

rsync是类unix系统下的数据镜像备份工具——remote sync。支持本地复制,或者与其他SSH、rsync主机同步。可以使用scp、ssh等方式来传输文件,当然也可以通过直接的socket连接。

个人认为,rsync支持的协议更多,可以是面向连接的(tcp协议),也可以是无连接的(udp协议,socket中可以选择),然而上面三个采用的都是面向连接的协议(Telnet,TCP,HTTP, SSH等),一定程度上保证可靠性。

猜你喜欢

转载自blog.csdn.net/kaikai_sk/article/details/83096302