面试题
一、C/C++
1、内联函数的实现
内联函数可避免函数调用的开销,通常将它在每个调用点上“内联地”展开。
在函数前加上关键字 inline,这只是向编译器发出一个请求,编译器可以忽略这个请求。
内联机制适用于优化规模较小、流程直接、频繁调用的函数。
2、拷贝构造函数的用法
函数的名称必须和类名称一致,它必须的一个参数是本类型的一个引用变量。
深拷贝:地址传递
浅拷贝:值传递
//拷贝构造函数 Class A
A(const A&c)
{
a=c.a;
printf("copy constructor is called\n");
}
3、sizeof(char*)和 sizeof(int *)
指针的大小,32位机 >> 4个字节;64位机 >> 8个字节
4、全局、局部、静态等变量
5、静态链接库、动态链接库
- 静态链接:
在链接的时候就已经把要调用的函数或者过程链接到了生成的可执行文件中,就算你在去把静态库删除也不会影响可执行程序的执行;生成的静态链接库,Windows下以.lib为后缀,Linux下以.a为后缀。- 动态链接:
在链接的时候没有把调用的函数代码链接进去,而是在执行的过程中,再去找要链接的函数,生成的可执行文件中没有函数代码,只包含函数的重定位信息,所以当你删除动态库时,可执行程序就不能运行。生成的动态链接库,Windows下以.dll为后缀,Linux下以.so为后缀。
6、哪些可以作为虚函数?哪些不可以?
虚函数的作用是实现动态绑定的,也就是说程序在运行的时候动态的的选择合适的成员函数。
要成为虚函数必须满足两点:
- 这个函数依赖于对象调用,因为虚函数就是依赖于对象调用
- 这个函数必须可以取地址
不可以作为虚函数的是:
- 内联函数
- 静态函数
- 构造函数
- 友元函数
- 普通函数
可以作为虚函数的是:
- 成员函数
- 析构函数
二、Linux
1、内核
1、linux进程主动调度时机
- 进程状态转换的时刻:进程终止、进程睡眠
- 当前进程的时间片用完时(current -> counter = 0)
- 设备驱动程序
- 进程从中断、异常及系统调用返回到用户态时