面试题 | LINUX
应用开发
时间:2023-04-08
就业模拟测试题-LINUX应用开发工程师职位
本试卷从考试酷examcoo网站导出,文件格式为mht,请用WORD/WPS打开,并另存为doc/docx格式后再使用
试卷编号:143989
试卷录入者:yisonghua
试卷总分:118
出卷时间:2012-09-12 18:23
答题时间:150分钟
姓名: 学号: 班级:
说明:应用开发可考察的点非常多,关键的还是C语言和数据结构,此份试卷中包括了一部分的基本C语言,数据结构和SHELL编程没有涉及,请各位下来再精心准备C语言和数据结构,也了解一下shell编程(课件已经共享到考试酷班级空间里面),多看《程序员面试宝典》和一些经典的面试题。此份试卷中的分数表示的作用是“相应知识点的重要程度”,5分题是必须掌握的,其他的相应重要性依次降低。
1.写一个"标准"宏MIN ,这个宏输入两个参数并返回较小的一个。[5分]
参考答案:
#define MIN(A,B) ((A) <= (B) ? (A) : (B))
解析:
这个测试是为下面的目的而设的:1.标识
#define
在宏中应用的基本知识。这是很重要的。因为在 嵌入(inline
)操作符 变为标准C的一部分之前,宏是方便产生嵌入代码的唯一方法,对于嵌入式系统来说,为了能达到要求的性能,嵌入代码经常是必须的方法。2.三重条件操作符的知识。这个操作符存在C语言中的原因是它使得编译器能产生比
if-then-else
更优化的代码,了解这个用法是很重要的。3.懂得在宏中小心地把参数用括号括起来。
2.用预处理指令#define 声明一个常数,用以表明1年中有多少秒[2分]
参考答案:
#define SECONDS_PER_YEAR (60 * 60 * 24 * 365)UL
解析:
#define
语法的基本知识(例如:不能以分号结束,括号的使用,等等);懂得预处理器将为你计算常数表达式的值,因此,直接写出你是如何计算一年中有多少秒而不是计算出实际的值,是更清晰而没有代价的。;
意识到这个表达式将使一个16位机的整型数溢出-因此要用到长整型符号
L
,告诉编译器这个常数是的长整型数。如果你在你的表达式中用到
UL
(表示无符号长整型),那么你有了一个好的起点。记住,第一印象很重要。
3.以下3个关键词,记得不要完全照搬网上的说法,加上自己的一点自己的理解和整理
static有什么用途?(请至少说明两种)[5分]
参考答案:
在C语言中,关键字static有三个明显的作用:
在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变。
在模块内(但在函数体外),一个被声明为静态的变量可以被模块内所用函数访问,但不能被模块外其它函数访问。它是一个本地的全局变量。
在模块内,一个被声明为静态的函数只可被这一模块内的其它函数调用。那就是,这个函数被限制在声明它的模块的本地范围内使用。
4.关键字const
有什么含意?[5分]
参考答案:
《程序员面试宝典》中是这样说的:
1.定义const常量
2.const可以修饰函数的参数和返回值,在C++中,还可以修饰函数的定义体
被const修饰的东西都受到保护,可以防止意外的改动,能提高程序的健壮性
扩展:
下面声明都是什么意思?
const int a;
int const a;
const int *a;
int * const a;
int const * a const;
前两个的作用是一样,a是一个常整型数
第三个意味着a是一个指向常整型数的指针(也就是,整型数是不可修改的,但指针可以)
第四个意思a是一个指向整型数的常指针(也就是说,指针指向的整型数是可以修改的,但指针是不可修改的)
最后一个意味着a是一个指向常整型数的常指针(也就是说,指针指向的整型数是不可修改的,同时指针也是不可修改的)
5.关键字volatile
有什么含意?并给出三个不同的例子?[5分]
参考答案:
优化器在用到这个变量时必须每次重新从内存去读写这个变量的值,而不是使用保存在cache中数据。
下面是volatile变量的几个例子:
1、中断服务程序中修改的供其它程序检测的变量需要加volatile;
2、多任务环境下各任务间共享的标志应该加volatile;
3、存储器映射的硬件寄存器通常也要加volatile说明,因为每次对它的读写都可能由不同意义;
6.解释下面a的含义:
/*a)*/ int a; //一个整型数
/*b)*/ int *a; //一个指向整型数的指针
/*c)*/ int **a; //一个指向指针的的指针,它指向的指针是指向一个整型数
/*d)*/ int a[10]; //一个有10个整型数的数组
/*e)*/ int *a[10]; //一个有10个指针的数组,该指针是指向一个整型数的
/*f)*/ int (*a)[10]; //一个指向有10个整型数数组的指针
/*g)*/ int (*a)(int); //一个指向函数的指针,该函数有一个整型参数并返回一个整型数
/*h)*/