牛客模拟面试-02

硬链接和软链接的区别

得分点

概念、inode、文件属性、创建方式和限制、链接数目

参考答案

标准回答

软链接和硬链接的区别主要有:概念、inode、文件属性、创建方式和限制、链接数目

  1. 概念

    硬链接就是一个文件的一个或多个文件名。所谓链接无非是把文件名和计算机文件系统使用的节点号链接起来。可以用多个文件名与同一个文件进行链接,这些文件名可以在同一目录或不同目录。

    软链接又叫符号链接,这个文件包含了另一个文件的路径名。可以是任意文件或目录,可以链接不同文件系统的文件。

  2. inode

    硬链接源文件和链接共用一个 inode 号,就像一个文件有多个文件名,说明它们是同一个文件,删除一个硬链接文件并不影响其他有相同 inode 号的文件。

    软链接源文件和链接文件拥有不同的 inode 号,表明它们是两个不同的文件。删除软链接并不影响被指向的文件,但若被指向的原文件被删除,则相关软连接被称为死链接(即 dangling link,若被指向路径文件被重新创建,死链接可恢复为正常的软链接)。

  3. 文件属性

    硬链接没有写出来,因为本质上硬链接文件和源文件是完全平等关系。

    软链接明确写出了是链接文件

  4. 创建方式和限制

    硬链接只能对已存在的文件进行创建,硬链接不支持跨文件系统建立。

    软链接可对不存在的文件或目录创建,软链接支持跨文件系统建立。

  5. 链接数目

    硬链接文件显示的链接数目跟源文件是一致的。

    软链接文件显示的链接数目不会增加,文件大小是不一样的。

延伸阅读

硬链接和软链接创建都是使用 ln 指令,默认创建的是硬链接,

ln hello.txt link_hello.txt        # 创建硬链接
ln -s hello.txt link_hello.txt    # 创建软链接

说一说static 关键字的作用

【得分点】

关键字、作用域、生命周期、共享数据

【参考答案】

标准回答

static 是一个关键字,可以用来修饰局部变量、全局变量、成员变量、函数和成员方法。主要作用有:限制数据的作用域、延长数据的生命周期、修饰成员可以被该类所有对象共享。

  1. 限制数据的作用域(隐藏)

所有没有加static 的全局变量和函数都具有全局可见性,其它源文件中也可以访问。被 static 修饰的全局变量和函数只能在当前源文件中访问,其它源文件访问不了,利用这个特性可以在不同的文件中定义同名变量和同名函数,而不必担心命名冲突。

  1. 延长数据的生命周期

普通的局部变量出了作用域就会释放,而静态变量存储在静态区,知道程序运行结束才会释放。

  1. 静态成员被该类所有对象共享

static 关键字可以修饰类中的成员变量和成员方法,被称为静态成员变量和静态成员方法,静态成员拥有一块单独的存储区,不管创建多少个该类的对象,所有对象都共享这一块内存。静态成员本质上属于类,可以通过类名直接访问。

加分回答

  1. 静态变量默认初始化值为0,如果没有显示初始化静态变量或者初始化为0的静态变量会存储在BSS段,而初显示初始化的静态变量存储在DATA段。

  2. 静态成员函数中不能访问普通的成员变量,只能访问静态成员变量,并且在静态成员函数中没有this 指针。

STL 中 resize() 和 reserve() 的区别

【得分点】

capacity、size、重新调整大小、预留空间

【参考答案】

标准回答

resize() 和 reserve() 两个成员函数都是 vector 容器的公有成员函数,涉及到容器的 capacity 和 size。

  1. capacity 和 size

capacity:该值在容器初始化时赋值,指的是容器能够容纳的最大的元素的个数,也就是容量。

size:指的是容器中实际元素的个数。

  1. resize() 和 reserve() 的功能及区别

resize():重新指定容器的长度,若容器变长,则以默认值填充新位置(还有一个重载的 resize() 函数,可以使用指定的元素进行填充),如果容器变短,则末尾超出容器长度的元素被删除。

reserve():容器预留len个元素长度,预留位置不初始化,元素不可访问。

resize() 既修改了 capacity 大小,也修改了 size 大小,而 reserve() 只修改 capacity 大小,不修改 size 大小。

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务