7月7号所做习题

1.将文件file1复制为file2可以用下面哪些命令()

A.cp file1 file2

B.cat file1 >file2

C.cat < file1 >file2

D.dd if=file1 of=file2

E.cat file1 | cat >file2



解析:
ABCDE
cp命令 :cp指令用于复制文件或目录。 将文件file1复制成文件file2命令如下:cp file1 file2
cat命令 :cat命令是linux下的一个文本输出命令,通常是用于观看某个文件的内容的。   一次显示整个文件命令如下: cat filename
> : linux中的数据流重导向:输出导向,覆盖导向的文件内容。
< : linux中的数据流重导向:输入导向,理解为原本由键盘输入改为文本输入
dd命令 : 作用是用指定大小的块拷贝一个文件,并在拷贝的同时进行指定的转换。
        参数:if  输入文件(或设备名称)  of  输出文件(或设备名称)
       将文件file1拷贝到文件file2中命令如下:  dd if=file1 of=file2
| :管道命令操作符,处理经由前面一个指令传出的正确输出信息,然后,传递给下一个命令,作为标准的输入



2.如何在命令行查看一台linux机器的CPU、SWAP分区信息、硬盘信息

A.cat /proc/cpuinfo

B.du

C.cat /proc/swaps

D.df -lh


解析
ACD
cat /proc/cpuinfo:查看一台linux机器的CPU信息 du:查看该目录占用文件系统数据块的情况
cat /proc/swaps:查看SWAP分区信息
df -lh:查看硬盘信息


3.在linux中,列举当前目录下文件的是哪个命令______。

A.ps

B.cd

C.mv

D.ls


解析
D
 ls 命令将每个由 Directory 参数指定的目录或者每个由 File 参数指定的名称写到标准输出,以及您所要求的和标志一起的其它信息。如果不指定 File 或 Directory 参数, ls 命令显示当前目录的内容。
ps 查看运行中的进程
• cd 进入某个目录
• mv 移动文件或者文件夹
• ls list的缩写,列出某个目录下的文件或者文件夹



4.在Unix系统中,若一个进程退出时,其子进程还在运行(没有被杀死),则这些子进程会变成孤儿进程(Orphan Process),请问孤儿进程会被以下哪一个系统进程接管?

A.syslogd

B.init

C.sshd

D.vhand

解析
B
僵尸进程:一个子进程在其父进程还没有调用wait()或waitpid()的情况下退出。这个子进程就是僵尸进程。
孤儿进程:一个父进程退出,而它的一个或多个子进程还在运行,那么那些子进程将成为孤儿进程。孤儿进程将被init进程(进程号为1)所收养,并由init进程对它们完成状态收集工作。
僵尸进程将会导致资源浪费,而孤儿则不会。


5.关于linux的I/O复用接口select和epoll,下列说法错误的是()

A.select调用时会进行线性遍历,epoll采用回调函数机制,不需要线性遍历

B.select的最大连接数为FD_SETSIZE

C.select较适合于有大量并发连接,且活跃链接较多的场景

D.epoll较适用于有大量并发连接,但活跃连接不多的场景

E.epoll的效率不随FD数目增加而线性下降

F.epoll通过共享存储实现内核和用户的数据交互



解析
C
smartz头像smartz
select 和 epoll效率差异的原因:select采用轮询方式处理连接,epoll是触发式处理连接。
Select:
1.Socket数量限制:该限制可操作的Socket数由FD_SETSIZE决定,内核默认32*32=1024.
2.操作限制:通过遍历FD_SETSIZE(1024)个Socket来完成调度,不管哪个Socket是活跃的,都遍历一遍。
Epoll
1.Socket数量无限制:该模式下的Socket对应的fd列表由一个数组来保存,大小不限制(默认4k)。
2.操作无限制:基于内核提供的反射模式,有活跃Socket时,内核访问该Socket的callback,不需要遍历轮询。
但当所有的Socket都活跃的时候,所有的callback都被唤醒,会导致资源的竞争。既然都是要处理所有的Socket,
那么遍历是最简单最有效的实现方式。
6.
下面有关new/delete和malloc/free的区别,描述错误的是?

A.malloc与free是标准库函数,new/delete是运算符

B.new初始化对象,调用对象的构造函数,malloc仅仅分配内存

C.new、delete只能在C++使用,而malloc、free只能在C中可以使用

D.new、delete返回的是所分配类型变量(对象)的指针,malloc、free返回的是void指针



解析
C
void型指针,表示这个指针指向的内存中的数据的类型要由用户来指定。比如内存分配函数malloc函数返回的指针就是void *型,用户在使用这个指针的时候,要进行强制类型转换,也就是显式说明该指针指向的内存中是存放的什么类型的数据(int *)malloc(1024)表示强制规定malloc返回的void*指针指向的内存中存放的是一个个的int型数据。



7.
linux下查看磁盘使用情况的命令是?

A.dd

B.df

C.top

D.netstat


解析
B
详细的使用是df -lh
dd是磁盘维护命令
top是查看进程
netstat查看网络




8.
对于Linux说法,下列说法正确的是()

A.线性访问内存非法时,当前线程会进入信号处理函数

B.用mv命令移动文件时,文件的修改时间会发生变化

C.ulimit -c设置的是函数调用栈的大小

D.malloc函数是应用程序向操作系统申请内存的接口


解析
B
B:不会变化
C:ulimit用于shell启动进程所占用的资源.-c size:设置core文件的最大值.单位:blocks
D:malloc的全称是memory allocation,中文叫动态内存分配,当无法知道内存具体位置的时候,想要绑定真正的内存空间,就需要用到动态的分配内存。



9.
下面有关c++ traits,说法正确的有?

A.一个traits包括了enum、typedef、模板偏特化(template partial specialization)

B.typedef定义了各个类的各自不同的类型定义

C.模板偏特化用于实现各个类的不同功能

D.当函数,类或者一些封装的通用算法中的某些部分会因为数据类型不同而导致处理或逻辑不同,traits会是一种很好的解决方案




解析:
ABCD
traits是C++的自动类型判断。

出发点:因为C++没有反射的机制。所以利用traits来完成。

大量使用场景:STL(STL中大量使用traits来区分类别。注释POD标量类型和类类型的构造函数等)
机制:
template
//泛化
struct is_void
{ static const bool value = false; };
template <>
//特化
struct is_void
{ static const bool value = true; };
 
int main(){
    std::cout<::value;
    std::cout<::value;
}
 
根据模板的自动类型推导。在调用void的时候会使用特化版本。而其他类型呢?对,使用泛化版本。
这样就巧妙的区分了不同的类型。这就是traits的基本原理。
C++11中提供了大量的traits,可参考http://www.cplusplus.com/reference/type_traits/




10.
short a[10] = 0;sizeof(a)返回:()

A.2

B.20

C.4

D.10


解析
B



11.下面说法正确的是()

A.C++已有的任何运算符都可以重载

B.const对象只能调用const类型成员函数

C.构造函数和析构函数都可以是虚函数

D.函数重载返回值类型必须相同




解析
B
A,普通的运算符可以重载,特殊的不能重载,比如 . :: 等
 B,coust是常对象,也就是不改变成员变量的值,而成员函数中只有const函数可以确保不改变成员变量的值
 C,析构函数一般定义为虚函数,构造函数不能是虚函数
 D,重载只要求函数名相同,参数类型和个数不同,不要求返回值类型



12.
执行下面语句后的输出为
int I=1;
if(I<=0)
    printf("****\n") ;
else
    printf("%%%%\n");

A.%%

B.****

C.有语法错,不能正确执行

D.%%%%


解析
A



13.
64位系统下,*p=NULL和*p=new char[100], sizeof(p)各为多少?

A.4,4

B.4,8

C.8,4

D.8,8





解析
D

指针类型,32位就是4,64位就是8






14.
下面有关空指针和未初始化指针,说法错误的是?

A.对0x0这个地址取值是非法的

B.空指针可以确保不指向任何对象或函数; 而未初始化指针则可能指向任何地方。

C.空指针与任何对象或函数的指针值都不相等

D.mallc在其内存分配失败时返回的是一个未初始化的指针





解析
D
空指针与野指针的区别,空指针也就是通常指向为NULL的指针,野指针就是指向一块未知的内存区域(可以是通过malloc或new申请空间后,释放后没有将指针置为空),也有可能定义了一个指针没有初始化,由于内存空间中的值在未赋值之前是随机数,所以也有可能诞生野指针。
就上面这道题目而言:
A肯定是对的,无法为内存为0的地址取地址
B也是对的咯
C空指针的值肯定是NULL,也就是0,而其他指针都有对象了,有对象就有地址,有地址也就有值了,所以两个值是不可能相等的
Dmalloc申请内存空间失败的时候,人家返回的值为NULL,而不是任意的。


你可能感兴趣的:(linux,C语言,操作系统)