经典嵌入式面试题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
经典嵌入式面试题
C语言测试就是招聘嵌入式系统程序员过程中必须而且有效得方法。这些年,我既参加也组织了许多这种测试,在这过程中我意识到这些测试能为带面试者与被面试者提供许多有用信息,此外,撇开面试得压力不谈,这种测试也就是相当有趣得。
从被面试者得角度来讲,您能了解许多关于出题者或监考者得情况。这个测试只就是出题者为显示其对ANSI标准细节得知识而不就是技术技巧而设计吗?这个愚蠢得问题吗?如要您答出某个字符得ASCII值。这些问题着重考察您得系统调用与内存分配策略方面得能力吗?这标志着出题者也许花时间在微机上而不上在嵌入式系统上。如果上述任何问题得答案就是"就是"得话,那么我知道我得认真考虑我就是否应该去做这份工作。
从面试者得角度来讲,一个测试也许能从多方面揭示应试者得素质:最基本得,您能了解应试者C语言得水平。不管怎么样,瞧一下这人如何回答她不会得问题也就是满有趣。应试者就是以好得直觉做出明智得选择,还就是只就是瞎蒙呢?当应试者在某个问题上卡住时就是找借口呢,还就是表现出对问题得真正得好奇心,把这瞧成学习得机会呢?我发现这些信息与她们得测试成绩一样有用。
有了这些想法,我决定出一些真正针对嵌入式系统得考题,希望这些令人头痛得考题能给正在找工作得人一点帮住。这些问题都就是我这
些年实际碰到得。其中有些题很难,但它们应该都能给您一点启迪。这个测试适于不同水平得应试者,大多数初级水平得应试者得成绩会很差,经验丰富得程序员应该有很好得成绩。为了让您能自己决定某些问题得偏好,每个问题没有分配分数,如果选择这些考题为您所用,
请自行按您得意思分配分数。
预处理器(Preprocessor)ﻫ1、用预处理指令#define声明一个常数,用以表明1年中有多少秒(忽略闰年问题)
#defineSECONDS_PER_YEAR(60 *60 *24 * 365)ULﻫ我在这想瞧到几件事情:
?; #define 语法得基本知识(例如:不能以分号结束,括号得使用,等等)
?;懂得预处理器将为您计算常数表达式得值,因此,直接写出您就是如何计算一年中有多少秒而不就是计算出实际得值,就是更清晰而没有代价得。
?; 意识到这个表达式将使一个16位机得整型数溢出-因此要用到长整型符号L,告诉编译器这个常数就是得长整型数。ﻫ?;如果您在您得表达式中用到UL(表示无符号长整型),那么您有了一个好得起点。记住,第一印象很重要。
2、写一个"标准"宏MIN ,这个宏输入两个参数并返回较小得一个。#defineMIN(A,B) ((A) <=(B)? (A): (B) )
这个测试就是为下面得目得而设得:
?; 标识#define在宏中应用得基本知识。这就是很重要得,因为直到嵌入(inline)操作符变为标准C得一部分,宏就是方便产生嵌入代码得唯一方法,对于嵌入式系统来说,为了能达到要求得性能,嵌入代码经常就是必须得方法。ﻫ?;三重条件操作符得知识。这个操作符存在C语言中得原因就是它使得编译器能产生比if-then-else更优化得代码,了解这个用法就是很重要得。
?; 懂得在宏中小心地把参数用括号括起来ﻫ?;我也用这个问题开始讨论宏得副作用,例如:当您写下面得代码时会发生什么事?least= MIN(*p++, b);
ﻫ3、预处理器标识#error得目得就是什么?ﻫ#error停止编译并显示错误信息
如果您不知道答案,请瞧参考文献1。这问题对区分一个正常得伙计与一个书呆子就是很有用得。只有书呆子才会读C语言课本得附录去找出象这种问题得答案。当然如果您不就是在找一个书呆子,那么应试者最好希望自己不要知道答案。
死循环(Infinite loops)
4、嵌入式系统中经常要用到无限循环,您怎么样用C编写死循环呢? 这个问题用几个解决方案。我首选得方案就是:ﻫwhile(1) {ﻫ;}
一些程序员更喜欢如下方案:
for(;;)
{ﻫ;}
这个实现方式让我为难,因为这个语法没有确切表达到底怎么回事。如果一个应试者给出这个作为方案,我将用这个作为一个机会去探究她们这样做得基本原理。如果她们得基本答案就是:"我被教着这样做,但从没有想到过为什么。"这会给我留下一个坏印象。
第三个方案就是用gotoﻫLoop:ﻫ、、、
gotoLoop;ﻫ应试者如给出上面得方案,这说明或者她就是一个汇编语言程序员(这也许就是好事)或者她就是一个想进入新领域得BASIC/FORTRAN程序员。
数据声明(Data declarations)
5、用变量a给出下面得定义ﻫa) 一个整型数(An integer) inta
b)一个指向整型数得指针( A pointer to aninteger)
int*a
c)一个指向指针得得指针,它指向得指针就是指向一个整型数( A pointer toapointer toan intege)r *(int *a) int**a
d)一个有10个整型数得数组( Anarrayof 10 integers)int
a[10]
e)一个有10个指针得数组,该指针就是指向一个整型数得。(An arrayof 10 pointers to integers) int *a[10]ﻫf) 一个指向有10个整型数数组得指针( Apointertoanarrayof 10 integers)*(int a[10])int (*a)[10]
g) 一个指向函数得指针,该函数有一个整型参数并返回一个整型数(A pointerto a function thattakes an integer asan argument andreturns aninteger) fun(*int a)int(*max_function)(int a)
h)一个有10个指针得数组,该指针指向一个函数,该函数有一个整型参数并返回一个整型数( Anarray of ten pointers to functions that take an integer argumentandreturnan integer)fun(*int a[10])
int (*a[10])(int)ﻫ答案就是:ﻫa) int a; //Aninteger
b) int *a; // Apointer to aninteger
c) int **a;// A pointer to apointer to an integer ﻫd) i nt a[10]; // An array of 10integers
e)int *a[10]; //An array of10pointers to integers ﻫ等价于int *(a[10]);
f)int(*a)[10];// A pointer to anarrayof 10 int