硬链接和软链接的区别
得分点
概念、inode、文件属性、创建方式和限制、链接数目
参考答案
标准回答
软链接和硬链接的区别主要有:概念、inode、文件属性、创建方式和限制、链接数目
-
概念
硬链接就是一个文件的一个或多个文件名。所谓链接无非是把文件名和计算机文件系统使用的节点号链接起来。可以用多个文件名与同一个文件进行链接,这些文件名可以在同一目录或不同目录。
软链接又叫符号链接,这个文件包含了另一个文件的路径名。可以是任意文件或目录,可以链接不同文件系统的文件。
-
inode
硬链接源文件和链接共用一个 inode 号,就像一个文件有多个文件名,说明它们是同一个文件,删除一个硬链接文件并不影响其他有相同 inode 号的文件。
软链接源文件和链接文件拥有不同的 inode 号,表明它们是两个不同的文件。删除软链接并不影响被指向的文件,但若被指向的原文件被删除,则相关软连接被称为死链接(即 dangling link,若被指向路径文件被重新创建,死链接可恢复为正常的软链接)。
-
文件属性
硬链接没有写出来,因为本质上硬链接文件和源文件是完全平等关系。
软链接明确写出了是链接文件
-
创建方式和限制
硬链接只能对已存在的文件进行创建,硬链接不支持跨文件系统建立。
软链接可对不存在的文件或目录创建,软链接支持跨文件系统建立。
-
链接数目
硬链接文件显示的链接数目跟源文件是一致的。
软链接文件显示的链接数目不会增加,文件大小是不一样的。
延伸阅读
硬链接和软链接创建都是使用 ln 指令,默认创建的是硬链接,
ln hello.txt link_hello.txt # 创建硬链接
ln -s hello.txt link_hello.txt # 创建软链接
说一说static 关键字的作用
【得分点】
关键字、作用域、生命周期、共享数据
【参考答案】
标准回答
static 是一个关键字,可以用来修饰局部变量、全局变量、成员变量、函数和成员方法。主要作用有:限制数据的作用域、延长数据的生命周期、修饰成员可以被该类所有对象共享。
- 限制数据的作用域(隐藏)
所有没有加static 的全局变量和函数都具有全局可见性,其它源文件中也可以访问。被 static 修饰的全局变量和函数只能在当前源文件中访问,其它源文件访问不了,利用这个特性可以在不同的文件中定义同名变量和同名函数,而不必担心命名冲突。
- 延长数据的生命周期
普通的局部变量出了作用域就会释放,而静态变量存储在静态区,知道程序运行结束才会释放。
- 静态成员被该类所有对象共享
static 关键字可以修饰类中的成员变量和成员方法,被称为静态成员变量和静态成员方法,静态成员拥有一块单独的存储区,不管创建多少个该类的对象,所有对象都共享这一块内存。静态成员本质上属于类,可以通过类名直接访问。
加分回答
-
静态变量默认初始化值为0,如果没有显示初始化静态变量或者初始化为0的静态变量会存储在BSS段,而初显示初始化的静态变量存储在DATA段。
-
静态成员函数中不能访问普通的成员变量,只能访问静态成员变量,并且在静态成员函数中没有this 指针。
STL 中 resize() 和 reserve() 的区别
【得分点】
capacity、size、重新调整大小、预留空间
【参考答案】
标准回答
resize() 和 reserve() 两个成员函数都是 vector 容器的公有成员函数,涉及到容器的 capacity 和 size。
- capacity 和 size
capacity:该值在容器初始化时赋值,指的是容器能够容纳的最大的元素的个数,也就是容量。
size:指的是容器中实际元素的个数。
- resize() 和 reserve() 的功能及区别
resize():重新指定容器的长度,若容器变长,则以默认值填充新位置(还有一个重载的 resize() 函数,可以使用指定的元素进行填充),如果容器变短,则末尾超出容器长度的元素被删除。
reserve():容器预留len个元素长度,预留位置不初始化,元素不可访问。
resize() 既修改了 capacity 大小,也修改了 size 大小,而 reserve() 只修改 capacity 大小,不修改 size 大小。