【实习面试】问题归纳总结

问题一:介绍一下C++中的const关键字

1、const修饰变量
若一个变量前用const修饰,就意味着该变量的值是可以被访问的,但是不能被修改,即该变量是只读的。
注意:const修饰变量时,一定要给变量初始化,否则之后就不能再进行赋值了。

2、const修饰指针
常量指针:

int a = 5;
int b = 6;
const int * p = &a; 
//*p = b;    //错误,指针指向的内容不可以修改
p = &b;    //指针的指向可以更改,也就是指针可以指向其他变量的地址

特点:指针的指向可以修改,但是指针指向的内容不可修改
指针常量:

int a = 5;
int b = 6;
int * const p = &a;
*p = b;   //指针指向的内容可以修改
//p = &b;   //错误,指针的指向不可以修改

特点:指针的指向不可以修改,但是指针指向的内容可以修改

3、const修饰函数的参数

const修饰函数参数时,主要有两个作用

  • 防止修改传入指针指向的内容
void StingCopy(char *dest,const char * src);
  • 防止修改传入指针的指向
void swap(int * const p1,int * const p2);

4、const修饰函数的返回值

const修饰函数返回值时,注意在调用该函数时,主调函数中接收该函数返回值的变量应该与被调函数返回值的类型相匹配

例如:有如下函数

const char * GetString();

当用一下语句来接收函数返回值时是错误的:

char * str = GetString();

正确的接收函数返回值的方式为:

const char *str = GetString(); 

问题拓展:const与宏定义#define的区别

a、宏定义只是对值进行简单替换,不进行类型检查;而const有具体类型,在编译阶段会进行类型检查
b、#define宏是在预处理阶段展开,而const常量在编译运行阶段使用
c、const定义的常量在程序的运行过程中只有一份拷贝;而#define定义的常量在内存中有若干个拷贝
d、cosnt效率高,因为编译器通常不为普通的const常量分配内存,而是保存在符号表中,没有了存储与读取的操作,效率较高。(这一点不是不是很理解,需要查阅资料验证)


问题二:介绍一下Linux系统中的软链接和硬链接的区别和联系

前言:在Linux系统中,内核为每一个新创建的文件分配一个inode(索引结点),每个文件都有一个唯一的inode号。文件属性保存在索引结点里,在访问文件时,索引结点被复制到内存,从而实现文件的快速访问。

链接是什么?

链接是一种在共享文件和访问它的用户的若干目录项之间建立联系的一种方法。Linux中包括两种链接:硬链接和软链接,软链接有被称为符号链接。

1、硬链接
硬链接简单来说就是一个指针,指向文件索引结点,系统并不为他们重新分配inode。可以用ln命令来建立硬链接。

当我们创建一个文件的硬链接时,硬链接会使用和文件相同的inode号,此时我们发现,原来文件的inode连接数量由最初的1变为了2,实际上硬链接和文件使用了相同的inode,只不过是inode连接数增加了,删除文件不会影响硬链接,硬链接的inode数会从2变为1。

只有将所有指向文件内容的指针,即链接数减为0,内核才会把文件内容从磁盘上删除。此外,硬链接,只能应用于文件,而不能应用于目录,而且不能跨文件系统(即分区)。

尽管硬链接节省空间,也是Linux系统整合文件系统的传统方式,但是硬链接存在的不足之处有:
a、不可以在不同文件系统的文件间建立链接
b、只有超级用户才可以为目录创建硬链接

2、软链接(符号链接)

符号链接是对一个文件的间接指针。硬链接直接指向文件的inode结点。

软链接克服了硬链接的不足,没有任何文件系统的限制,任何用户可以创建指向目录的符号链接。因而现在得到更为广泛的使用,它具有更大的灵活性,甚至可以跨越不同的机器、不同网络对文件进行链接,只要在命令ln后面加上选项-s

在创建文件的软链接时,软链接会使用一个新的inode,所以软链接的inode号和文件的inode号不同,软链接的inode里存放着指向文件的路径,删除文件,软链接也就无法使用了,因为文件的路径不存在了;当我们再次创建这个文件时(文件名与之前的文件名相同),软链接又会重新指向这个文件(inode号和之前删除的文件的inode号不同了),而硬链接不会受删除文件的影响。

当然软链接也有硬链接没有的缺点,因为链接文件包含有原文件的路径信息,所以原文件从一个目录下移动到其他目录中时,再次访问链接文件,系统就会找不到,而硬链接就没有这个缺陷;另外,软链接还要系统分配额外的内存空间用于建立新的索引结点和保存原文件的路径。

总结:

A、只能在同种存储媒体上的文件之间创建硬链接,不能在不同挂载点下的文件间创建硬链接,对于后面这种情况,可以使用软链接。
B、软链接就相当于Win中的快捷方式,即如果软链接一个目录,操作系统找这个快捷方式会直接找到真实的目录下的文件。而硬链接相当于镜像的方式,创建一个目录的硬链接之后,操作系统需要把这个目录下所有的文件都要做一次硬链接(赋值一份过去),这样操作系统在访问这个链接时就压不断去遍历,大大增加了复杂度,而且容易进入死循环。
C、硬链接不能对目录创建受限于文件系统的设计。Linux文件系统的目录均隐藏了两个特殊的目录,当前目录和父目录,这两个目录起始是两个硬链接,若系统运行对目录创建硬连接,则会产生目录环。
D、硬链接源文件和链接文件使用同一个inode号,说明他们是同一个文件,而软链接源文件和链接文件拥有不同的inode号,表明他们是两个不同的文件;
E、在文件属性上软链接明确写出了是链接文件,而硬链接没有写出来,因为本质上硬链接文件和源文件是完全平等的关系,就像文件被复制了一份一样;
F、链接数目是不一样的,软链接的数目不会增加,硬链接会相应加1;
G、硬链接文件显示的文件大小跟源文件是一样的,而这里软链接显示的大小与源文件的大小不同。

----未完待续,明天继续补充……………………

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值