C语言测试想成为嵌入式程序员应知道的0x10个基本问题.docx
《C语言测试想成为嵌入式程序员应知道的0x10个基本问题.docx》由会员分享,可在线阅读,更多相关《C语言测试想成为嵌入式程序员应知道的0x10个基本问题.docx(179页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、C语言测试:想成为嵌入式程序员应知道的0x10个基本问题C语言测试是招聘嵌入式系统程序员过程中必须而且有效的方法。这些年,我既参加也组织了许多这种测试,在这过程 中我意识到这些测试能为带面试者和被面试者提供许多有用信息,此外,撇开面试的压力不谈,这种测试也是相当有趣 的。从被面试者的角度来讲,你能了解许多关于出题者或监考者的情况。这个测试只是出题者为显示其对ANSI标准细节的知 识而不是技术技巧而设计吗?这个愚蠢的问题吗?如要你答出某个字符的ASCII值。这些问题着重考察你的系统调用和 内存分配策略方面的能力吗?这标志着出题者也许花时间在微机上而不上在嵌入式系统上。如果上述任何问题的答案是 “
2、是”的话,那么我知道我得认真考虑我是否应该去做这份工作。从面试者的角度来讲,一个测试也许能从多方面揭示应试者的素质:最基本的,你能了解应试者C语言的水平。不管怎 么样,看一下这人如何回答他不会的问题也是满有趣。应试者是以好的直觉做出明智的选择,还是只是瞎蒙呢?当应试 者在某个问题上卡住时是找借口呢,还是表现出对问题的真正的好奇心,把这看成学习的机会呢?我发现这些信息与他 们的测试成绩一样有用。有了这些想法,我决定出一些真正针对嵌入式系统的考题,希望这些令人头痛的考题能给正在找工作的人一点帮住。这 些问题都是我这些年实际碰到的。其中有些题很难,但它们应该都能给你一点启迪。这个测试适于不同水平的应
3、试者,大多数初级水平的应试者的成绩会很差,经验丰富的程序员应该有很好的成绩。为了 让你能自己决定某些问题的偏好,每个问题没有分配分数,如果选择这些考题为你所用,请自行按你的意思分配分数。预处理器 1 Preprocessor)1 .用预处理指令#define声明一个常数,用以表明1年中有多少秒(忽略闰年问题)#define SECONDS_PER YEAR (60 * 60 * 24 * 365)UL我在这想看到几件事情:#define语法的基本知识(例如:不能以分号结束,括号的使用,等等)懂得预处理器将为你计算常数表达式的值,因此,直接写出你是如何计算一年中有多少秒而不是计算出实际的值,是更
4、 清晰而没有代价的。意识到这个表达式将使一个16位机的整型数溢出-因此要用到长整型符号L,告诉编译器这个常数是的长整型数。如果你在你的表达式中用到UL (表示无符号长整型),那么你有了一个好的起点。记住,第一印象很重要。2 .写一个“标准”宏MIN ,这个宏输入两个参数并返回较小的一个。#define MIN(A,B) (A) 6)? puts( 6): puts(6。原因是当表达式中存在有符号类型和无符号类型时所有的操作数都自动转换为无符号类 型。因此-20变成了一个非常大的正整数,所以该表达式计算出的结果大于6。这一点对于应当频繁用到无符号数据类型 的嵌入式系统来说是丰常重要的。如果你答错
5、了这个问题,你也就到了得不到这份工作的边缘。13 .评价下面的代码片断:unsigned int zero = 0;unsigned int compzero = OxFFFF;/* l*s complement of zero */对于一个int型不是16位的处理器为说,上面的代码是不正确的。应编写如下:unsigned int compzero =旬;这一问题真正能揭露出应试者是否懂得处理器字长的重要性。在我的经验里,好的嵌入式程序员非常准确地明白硬件的 细节和它的局限,然而PC机程序往往把硬件作为一个无法避免的烦恼。到了这个阶段,应试者或者完全垂头丧气了或者信心满满志在必得。如果显然应试
6、者不是很好,那么这个测试就在这里 结束了。但如果显然应试者做得不错,那么我就扔出下面的追加问题,这些问题是比较难的,我想仅仅非常优秀的应试 者能做得不错。提出这些问题,我希望更多看到应试者应付问题的方法,而不是答案。不管如何,你就当是这个娱乐吧动态内存分配(Dynamic memory allocation)14 .尽管不像非嵌入式计算机那么常见,嵌入式系统还是有从堆(heap)中动态分配内存的过程的。那么嵌入式系统中, 动态分配内存可能发生的问题是什么?这里,我期望应试者能提到内存碎片,碎片收集的问题,变量的持行时间等等。这个主题已经在ESP杂志中被广泛地讨 论过了(主要是P.J. Plau
7、ger,他的解释远远超过我这里能提到的任何解释),所有回过头看一下这些杂志吧!让应试者进 入一种虚假的安全感觉后,我拿出这么一个小节目:下面的代码片段的输出是什么,为什么?char *ptr;if (ptr = (char *)malloc(0)=NULL)elseputs(Got a null pointer);puts(Got a valid pointer);这是一个有趣的问题。最近在我的一个同事不经意把0值传给了函数malloc,得到了一个合法的指针之后,我才想到这 个问题。这就是上面的代码,该代码的输出是“Got a valid pointer。我用这个来开始讨论这样的一问题,看看被
8、面试者是 否想到库例程这样做是正确。得到正确的答案固然重要,但解决问题的方法和你做决定的基本原理更重要些。Typedef:15 Typedef在C语言中频繁用以声明一个已经存在的数据类型的同义字。也可以用预处理器做类似的事。例如,思考一 下下面的例子:#define dPS struct s *typedef struct s * tPS;以上两种情况的意图都是要定义dPS和tPS作为一个指向结构s指针。哪种方法更好呢?(如果有的话)为什么? 这是一个非常微妙的问题,任何人答对这个问题(正当的原因)是应当被恭喜的。答案是:typedef更好。思考下面的例 子:dPSpl,p2;tPS p3,p
9、4;第一个扩展为struct s * pl, p2;.上面的代码定义pl为一个指向结构的指针,p2为一个实际的结构,这也许不是你想要的。第二个例子正确地定义了 p3和 p4两个指针。晦涩的语法16 . C语言同意一些令人震惊的结构,下面的结构是合法的吗,如果是它做些什么?int a = 5, b = 7, c;c = a+b;这个问题将做为这个测验的一个愉快的结尾。不管你相不相信,上面的例子是完全合乎语法的。问题是编译器如何处理 它?水平不高的编译作者实际上会争论这个问题,根据最处理原则,编译器应当能处理尽可能所有合法的用法。因此, 上面的代码被处理成:c = a+ + b;因此,这段代码持行
10、后a = 6, b = 7, c = 12。如果你知道答案,或猜出正确答案,做得好。如果你不知道答案,我也不把这个当作问题。我发现这个问题的最大好处 是这是一个关于代码编写风格,代码的可读性,代码的可修改性的好的话题。好了,伙计们,你现在已经做完所有的测试了。这就是我出的C语言测试题,我怀着愉快的心情写完它,希望你以同样 的心情读完它。如果是认为这是一个好的测试,那么尽量都用到你的找工作的过程中去吧。天知道也许过个一两年,我 就不做现在的工作,也需要找一个。Nigel Jones是一个顾问,现在住在Maryland,当他不在水下时,你能在多个范围的嵌入项目中找到他。他很高兴能收到 读者的来信,
11、他的email地址是:NAJones。ReferencesJones, Nigel, In Praise of the #error directive, Embedded Systems Programming, September 1999, p. 114.Jones, Nigel, Efficient C Code for Eight-bit MCUs Embedded Systems Programming, November 1998, p. 66.C语言1 . static有什么用途?(请至少说明两种)1)限制变量的作用域2)设置变量的存储域2 .引用与指针有什么区别?1)引用必须
12、被初始化,指针不必。2)引用初始化以后不能被改变,指针可以改变所指的对象。3)不存在指向空值的引用,但是存在指向空值的指针。3 .描述实时系统的基本特性在特定时间内完成特定的任务,实时性与可靠性4 .全局变量和局部变量在内存中是否有区别?如果有,是什么区别?全局变量储存在静态数据库,局部变量在堆栈5 .什么是平衡二叉树?左右子树都是平衡二叉树且左右子树的深度差值的绝对值不大于16 .堆栈溢出一般是由什么原因导致的?没有回收垃圾资源7 .什么函数不能声明为虚函数?constructor8 .冒泡排序算法的时间复杂度是什么?0(n2)9 .写出float x与“零值”比较的if语句。if(x0.0
13、00001 &x-0.000001)10 . Internet采用哪种网络协议?该协议的主要层次结构?tcp/ip应用层/传输层/网络层/数据链路层/物理层11 . Internet物理地址和IP地址转换采用什么协议?ARP (Address Resolution Protocol)(地址解析12 . IP地址的编码分为哪俩部分?IP地址由两部分组成,网络号和主机号。不过是要和“子网掩码”按位与上之后才能区分哪些是网络 位哪些是主机位。13 .用户输入M,N值,从1至N开始顺序循环数数,每数到M输出该数值,直至全部输出。写出C程 序。循环链表,用取余操作做14 .不能做switch。的参数类型
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 测试 成为 嵌入式 程序员 知道 x10 基本 问题
限制150内