嵌入式经典面试题解读

嵌入式经典面试题解读
嵌入式经典面试题解读

C语言测试是招聘嵌入式系统程序员过程中必须而且有效的方法。这些年,我既参加也组织了许多这种测试,在这过程中我意识到这些测试能为带面试者和被面试者提供许多有用信息,此外,撇开面试的压力不谈,这种测试也是相当有趣的。

从被面试者的角度来讲,你能了解许多关于出题者或监考者的情况。这个测试只是出题者为显示其对ANSI标准细节的知识而不是技术技巧而设计吗?这个愚蠢的问题吗?如要你答出某个字符的ASCII值。这些问题着重考察你的系统调用和内存分配策略方面的能力吗?这标志着出题者也许花时间在微机上而不上在嵌入式系统上。如果上述任何问题的答案是"是"的话,那么我知道我得认真考虑我是否应该去做这份工作。

从面试者的角度来讲,一个测试也许能从多方面揭示应试者的素质:最基本的,你能了解应试者C语言的水平。不管怎么样,看一下这人如何回答他不会的问题也是满有趣。应试者是以好的直觉做出明智的选择,还是只是瞎蒙呢?当应试者在某个问题上卡住时是找借口呢,还是表现出对问题的真正的好奇心,把这看成学习的机会呢?我发现这些信息与他们的测试成绩一样有用。

有了这些想法,我决定出一些真正针对嵌入式系统的考题,希望这些令人头痛的考题能给正在找工作的人一点帮住。这些问题都是我这些年实际碰到的。其中有些题很难,但它们应该都能给你一点启迪。

这个测试适于不同水平的应试者,大多数初级水平的应试者的成绩会很差,经验丰富的程序员应该有很好的成绩。为了让你能自己决定某些问题的偏好,每个问题没有分配分数,如果选择这些考题为你所用,请自行按你的意思分配分数。

预处理器(Preprocessor)

1 . 用预处理指令#define 声明一个常数,用以表明1年中有多少秒(忽略闰年问题)

#define SECONDS_PER_YEAR (60 * 60 * 24 * 365)UL

我在这想看到几件事情:

?; #define 语法的基本知识(例如:不能以分号结束,括号的使用,等等)

?; 懂得预处理器将为你计算常数表达式的值,因此,直接写出你是如何计算一年中有多少秒而不是计算出实际的值,是更清晰而没有代价的。

?; 意识到这个表达式将使一个16位机的整型数溢出-因此要用到长整型符号L,告诉编译器这个常数是的长整型数。

?; 如果你在你的表达式中用到UL(表示无符号长整型),那么你有了一个好的起点。记住,第一印象很重要。

2 . 写一个"标准"宏MIN ,这个宏输入两个参数并返回较小的一个。

#define MIN(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:

...

goto Loop;

应试者如给出上面的方案,这说明或者他是一个汇编语言程序员(这也许是好事)或者他是一个想进入新领域的BASIC/FORTRAN程序员。

数据声明(Data declarations)

5. 用变量a给出下面的定义

a) 一个整型数(An integer)

b)一个指向整型数的指针(A pointer to an integer)

c)一个指向指针的的指针,它指向的指针是指向一个整型数(A pointer to a pointer to an intege)r

d)一个有10个整型数的数组(An array of 10 integers)

e) 一个有10个指针的数组,该指针是指向一个整型数的。(An array of 10 pointers to integers)

f) 一个指向有10个整型数数组的指针(A pointer to an array of 10 integers)

g) 一个指向函数的指针,该函数有一个整型参数并返回一个整型数(A pointer to a function that takes an integer as an argument and returns an integer)

h)一个有10个指针的数组,该指针指向一个函数,该函数有一个整型参数并返回一个整型数(An array of ten pointers to functions that take an integer argument and return an integer )答案是:

a) int a; // An integer

b) int *a; // A pointer to an integer

c) int **a; // A pointer to a pointer to an integer

d) int a[10]; // An array of 10 integers

e) int *a[10]; // An array of 10 pointers to integers

等价于int *(a[10]);

f) int (*a)[10]; // A pointer to an array of 10 integers

g) int (*max_function)(int a); // A pointer to a function a that takes an integer argument and returns an integer

h) int (*a[10])(int); // An array of 10 pointers to functions that take an integer argument and return an integer

人们经常声称这里有几个问题是那种要翻一下书才能回答的问题,我同意这种说法。当我写这篇文章时,为了确定语法的正确性,我的确查了一下书。但是当我被面试的时候,我期望被问到这个问题(或者相近的问题)。因为在被面试的这段时间里,我确定我知道这个问题的答案。应试者如果不知道所有的答案(或至少大部分答案),那么也就没有为这次面试做准备,如果该面试者没有为这次面试做准备,那么他又能为什么出准备呢?

6. 关键字static的作用是什么?

在C语言中,关键字static有三个明显的作用:

一旦声明为静态变量,在编译时刻开始永远存在,不受作用域范围约束,但是如果是局部静态变量,则此静态变量只能在局部作用域内使用,超出范围不能使用,但是它确实还占用内存,还存在.

?; 在模块内(但在函数体外),一个被声明为静态的变量可以被模块内所用函数访问,但不能被模块外其它函数访问。它是一个本地的全局变量。

?; 在模块内,一个被声明为静态的函数只可被这一模块内的其它函数调用。那就是,这个函数被限制在声明它的模块的本地范围内使用。

大多数应试者能正确回答第一部分,一部分能正确回答第二部分,很少人能懂得第三部分。这是一个应试者的严重的缺点,因为他显然不懂得本地化数据和代码范围的好处和重要性。

7.关键字const有什么含意?

总结:1)只读。2)使用关键字const也许能产生更紧凑的代码。3)使编译器很自然地保护那些不希望被改变的参数,防止其被无意的代码修改。

我只要一听到被面试者说:"const意味着常数",我就知道我正在和一个业余者打交道。去年Dan Saks已经在他的文章里完全概括了const的所有用法,因此ESP(译者:Embedded Systems Programming)的每一位读者应该非常熟悉const能做什么和不能做什么.如果你从没有读到那篇文章,只要能说出const意味着"只读"就可以了。尽管这个答案不是完全的答案,但我接受它作为一个正确的答案。(如果你想知道更详细的答案,仔细读一下Saks的文章吧。)

如果应试者能正确回答这个问题,我将问他一个附加的问题:

下面的声明都是什么意思?

const int a;

int const a;

const int *a;

int * const a;

int const * a const;

/******/

前两个的作用是一样,a是一个常整型数。

第三个意味着a是一个指向常整型数的指针(也就是,整型数是不可修改的,但指针可以)。第四个意思a是一个指向整型数的常指针(也就是说,指针指向的整型数是可以修改的,但指针是不可修改的)。

最后一个意味着a是一个指向常整型数的常指针(也就是说,指针指向的整型数是不可修改的,同时指针也是不可修改的)。

如果应试者能正确回答这些问题,那么他就给我留下了一个好印象。顺带提一句,也许你可能会问,即使不用关键字const,也还是能很容易写出功能正确的程序,那么我为什么还要如此看重关键字const呢?我也如下的几下理由:

?; 关键字const的作用是为给读你代码的人传达非常有用的信息,实际上,声明一个参数为常量是为了告诉了用户这个参数的应用目的。如果你曾花很多时间清理其它人留下的垃圾,你就会很快学会感谢这点多余的信息。(当然,懂得用const的程序员很少会留下的垃圾让别人来清理的。)

?; 通过给优化器一些附加的信息,使用关键字const也许能产生更紧凑的代码。

?; 合理地使用关键字const可以使编译器很自然地保护那些不希望被改变的参数,防止其被无意的代码修改。简而言之,这样可以减少bug的出现。

8. 关键字volatile有什么含意?并给出三个不同的例子。

一个定义为volatile的变量是说这变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值了。精确地说就是,优化器在用到这个变量时必须每次都小心地重新读取这个变量的值,而不是使用保存在寄存器里的备份。

下面是volatile变量的几个例子:

?; 并行设备的硬件寄存器(如:状态寄存器)

?; 一个中断服务子程序中会访问到的非自动变量(Non-automatic variables)

?; 多线程应用中被几个任务共享的变量

回答不出这个问题的人是不会被雇佣的。我认为这是区分C程序员和嵌入式系统程序员的最基本的问题。搞嵌入式的家伙们经常同硬件、中断、RTOS等等打交道,所有这些都要求用到volatile变量。不懂得volatile的内容将会带来灾难。

假设被面试者正确地回答了这是问题(嗯,怀疑是否会是这样),我将稍微深究一下,看一下这家伙是不是直正懂得volatile完全的重要性。

?; 一个参数既可以是const还可以是volatile吗?解释为什么。

?; 一个指针可以是volatile 吗?解释为什么。

?; 下面的函数有什么错误:int square(volatile int *ptr){return *ptr * *ptr;}

下面是答案:

?; 是的。一个例子是只读的状态寄存器。它是volatile因为它可能被意想不到地改变。它是const因为程序不应该试图去修改它。

?; 是的。尽管这并不很常见。一个例子是当一个中断服务子程序修改一个指向一个buffer 的指针时。

?; 这段代码有点变态。这段代码的目的是用来返回指针*ptr指向值的平方,但是,由于*ptr

指向一个volatile型参数,编译器将产生类似下面的代码:

int square(volatile int *ptr)

{

int a,b;

a = *ptr;

b = *ptr;

return a * b;

}

由于*ptr的值可能被意想不到地该变,因此a和b可能是不同的。结果,这段代码可能返不是你所期望的平方值!正确的代码如下:

long square(volatile int *ptr)

{

int a;

a = *ptr;

return a * a;

}

位操作(Bit manipulation)

9. 嵌入式系统总是要用户对变量或寄存器进行位操作。给定一个整型变量a,写两段代码,第一个设置a的bit 3,第二个清除a 的bit 3。在以上两个操作中,要保持其它位不变。

对这个问题有三种基本的反应

?; 不知道如何下手。该被面者从没做过任何嵌入式系统的工作。

?; 用bit fields。Bit fields是被扔到C语言死角的东西,它保证你的代码在不同编译器之间是不可移植的,同时也保证了的你的代码是不可重用的。我最近不幸看到Infineon为其较复杂的通信芯片写的驱动程序,它用到了bit fields因此完全对我无用,因为我的编译器用其它的方式来实现bit fields的。从道德讲:永远不要让一个非嵌入式的家伙粘实际硬件的边。?; 用#defines 和bit masks 操作。这是一个有极高可移植性的方法,是应该被用到的方法。最佳的解决方案如下:

#define BIT3 (0x1 << 3)

static int a;

void set_bit3(void) {a |= BIT3;}

void clear_bit3(void) {a &= ~BIT3;}

一些人喜欢为设置和清除值而定义一个掩码同时定义一些说明常数,这也是可以接受的。我希望看到几个要点:说明常数、|=和&=~操作。

访问固定的内存位置(Accessing fixed memory locations)

10. 嵌入式系统经常具有要求程序员去访问某特定的内存位置的特点。在某工程中,要求设置一绝对地址为0x67a9的整型变量的值为0xaa55。

编译器是一个纯粹的ANSI编译器。写代码去完成这一任务。

这一问题测试你是否知道为了访问一绝对地址把一个整型数强制转换(typecast)为一指针是合法的。这一问题的实现方式随着个人风格不同而不同。典型的类似代码如下:

int *ptr;

ptr = (int *)0x67a9;

*ptr = 0xaa55;

A more obscure approach is:

一个较晦涩的方法是:

*(int * const)(0x67a9) = 0xaa55;

即使你的品味更接近第二种方案,但我建议你在面试时使用第一种方案。

中断(Interrupts)

11. 中断是嵌入式系统中重要的组成部分,这导致了很多编译开发商提供一种扩展——让标准C支持中断。具代表事实是,产生了一个新的关键字__interrupt。下面的代码就使用了__interrupt关键字去定义了一个中断服务子程序(ISR),请评论一下这段代码的。

__interrupt double compute_area (double radius)

{

double area = PI * radius * radius;

printf("/nArea = %f", area);

return area;

}

这个函数有太多的错误了,以至让人不知从何说起了:

?; ISR 不能返回一个值。如果你不懂这个,那么你不会被雇用的。

?; ISR 不能传递参数。如果你没有看到这一点,你被雇用的机会等同第一项。

?; 在许多的处理器/编译器中,浮点一般都是不可重入的。有些处理器/编译器需要让额处的寄存器入栈,有些处理器/编译器就是不允许在ISR中做浮点运算。此外,ISR应该是短而有效率的,在ISR中做浮点运算是不明智的。

?; 与第三点一脉相承,printf()经常有重入和性能上的问题。如果你丢掉了第三和第四点,我不会太为难你的。不用说,如果你能得到后两点,那么你的被雇用前景越来越光明了。

*****

代码例子(Code examples)

12 . 下面的代码输出是什么,为什么?

void foo(void)

{

unsigned int a = 6;

int b = -20;

(a+b > 6) ? puts("> 6") : puts("<= 6");

}

这个问题测试你是否懂得C语言中的整数自动转换原则,我发现有些开发者懂得极少这些东西。不管如何,这无符号整型问题的答案是输出是">6"。

原因是当表达式中存在有符号类型和无符号类型时所有的操作数都自动转换为无符号类型。因此-20变成了一个非常大的正整数,所以该表达式计算出的结果大于6。这一点对于应当

频繁用到无符号数据类型的嵌入式系统来说是丰常重要的。如果你答错了这个问题,你也就到了得不到这份工作的边缘。

13. 评价下面的代码片断:

unsigned int zero = 0;

unsigned int compzero = 0xFFFF; //1's complement of zero

对于一个int型不是16位的处理器为说,上面的代码是不正确的。应编写如下:

unsigned int compzero = ~0;

这一问题真正能揭露出应试者是否懂得处理器字长的重要性。在我的经验里,好的嵌入式程序员非常准确地明白硬件的细节和它的局限,然而PC机程序往往把硬件作为一个无法避免的烦恼。

到了这个阶段,应试者或者完全垂头丧气了或者信心满满志在必得。如果显然应试者不是很好,那么这个测试就在这里结束了。但如果显然应试者做得不错,那么我就扔出下面的追加问题,这些问题是比较难的,我想仅仅非常优秀的应试者能做得不错。提出这些问题,我希望更多看到应试者应付问题的方法,而不是答案。不管如何,你就当是这个娱乐吧...

动态内存分配(Dynamic memory allocation)

14. 尽管不像非嵌入式计算机那么常见,嵌入式系统还是有从堆(heap)中动态分配内存的过程的。那么嵌入式系统中,动态分配内存可能发生的问题是什么?

这里,我期望应试者能提到内存碎片,碎片收集的问题,变量的持行时间等等。这个主题已经在ESP杂志中被广泛地讨论过了(主要是P.J. Plauger, 他的解释远远超过我这里能提到的任何解释),所有回过头看一下这些杂志吧!让应试者进入一种虚假的安全感觉后,我拿出这么一个小节目:

下面的代码片段的输出是什么,为什么?

char *ptr;

if ((ptr = (char *)malloc(0)) == NULL) puts("Got a null pointer");

else puts("Got a valid pointer");

这是一个有趣的问题。最近在我的一个同事不经意把0值传给了函数malloc,得到了一个合法的指针之后,我才想到这个问题。这就是上面的代码,该代码的输出是"Got a valid pointer"。我用这个来开始讨论这样的一问题,看看被面试者是否想到库例程这样做是正确。得到正确的答案固然重要,但解决问题的方法和你做决定的基本原理更重要些。

15 Typedef 在C语言中频繁用以声明一个已经存在的数据类型的同义字。也可以用预处理器做类似的事。例如,思考一下下面的例子:

#define dPS struct s *

typedef struct s * tPS;

以上两种情况的意图都是要定义dPS 和tPS 作为一个指向结构s指针。哪种方法更好呢?(如果有的话)为什么?这是一个非常微妙的问题,任何人答对这个问题(正当的原因)是应当被恭喜的。答案是:typedef更好。思考下面的例子:

dPS p1,p2;

tPS p3,p4;

第一个扩展为struct s * p1, p2;

上面的代码定义p1为一个指向结构的指针,p2为一个实际的结构,这也许不是你想要的。第二个例子正确地定义了p3 和p4 两个指针。

晦涩的语法

16 . C语言同意一些令人震惊的结构,下面的结构是合法的吗,如果是它做些什么?

int a = 5, b = 7, c;

c = a+++b;

这个问题将做为这个测验的一个愉快的结尾。不管你相不相信,上面的例子是完全合乎语法的。问题是编译器如何处理它?水平不高的编译作者实际上会争论这个问题,根据最处理原则,编译器应当能处理尽可能所有合法的用法。因此,上面的代码被处理成:c = a++ + b; 因此, 这段代码持行后a = 6, b = 7, c = 12。

如果你知道答案,或猜出正确答案,做得好。如果你不知道答案,我也不把这个当作问题。我发现这个问题的最大好处是这是一个关于代码编写风格,代码的可读性,代码的可修改性的好的话题。

好了,伙计们,你现在已经做完所有的测试了。这就是我出的C语言测试题,我怀着愉快的心情写完它,希望你以同样的心情读完它。如果是认为这是一个好的测试,那么尽量都用到你的找工作的过程中去吧。

memcmp

Compare characters in two buffers.

比较两块内存中的字符

int memcmp( const void *buf1, const void *buf2, size_t count );

memset

Sets buffers to a specified character

将内存块设置为指定的字符

sprintf

Write formatted data to a string

将格式化的数据写到字符串

读书的好处

1、行万里路,读万卷书。

2、书山有路勤为径,学海无涯苦作舟。

3、读书破万卷,下笔如有神。

4、我所学到的任何有价值的知识都是由自学中得来的。——达尔文

5、少壮不努力,老大徒悲伤。

6、黑发不知勤学早,白首方悔读书迟。——颜真卿

7、宝剑锋从磨砺出,梅花香自苦寒来。

8、读书要三到:心到、眼到、口到

9、玉不琢、不成器,人不学、不知义。

10、一日无书,百事荒废。——陈寿

11、书是人类进步的阶梯。

12、一日不读口生,一日不写手生。

13、我扑在书上,就像饥饿的人扑在面包上。——高尔基

14、书到用时方恨少、事非经过不知难。——陆游

15、读一本好书,就如同和一个高尚的人在交谈——歌德

16、读一切好书,就是和许多高尚的人谈话。——笛卡儿

17、学习永远不晚。——高尔基

18、少而好学,如日出之阳;壮而好学,如日中之光;志而好学,如炳烛之光。——刘向

19、学而不思则惘,思而不学则殆。——孔子

20、读书给人以快乐、给人以光彩、给人以才干。——培根

无领导小组讨论的经典面试题目及答案解析

无领导小组讨论的经典面试题目及答案解析 沙漠求生记 一、内容 1、在炎热的八月,你乘坐的小型飞机在撒哈拉沙漠失事,机身严重撞毁,将会着火焚烧。 2、飞机燃烧前,你们只有十五分钟时间,从飞机中领取物品。 3、问题:在飞机失事中,如果你们只能从十五项物品中,挑选五项。在考虑沙漠的情况后,按物品的重要性,你们会怎样选择呢?请解释原因。 二、沙漠情况 1、飞机的位置不能确定,只知道最近的城镇是附近七十公里的煤矿小城。 2、沙漠日间温度是40度,夜间温度随时骤降至5度。 三、假设 1、飞机上生还人数与你的小组人数相同。你们装束轻便,只穿着短袖T恤、牛仔裤、运动裤和运动鞋,每人都有一条手帕。 2、全组人都希望一起共同进退。 3、机上所有物品性能良好。 四、物品清单 请从以下十五项物品中,挑选最重要的五项: 1、一支闪光信号灯(内置四个电池)

2、一把军刀 3、一张该沙漠区的飞行地图 4、七件大号塑料雨衣 5、一个指南针 6、一个小型量器箱(内有温度计、气压计、雨量计等) 7、一把45口径手枪(已有子弹) 8、三个降落伞(有红白相间图案) 9、一瓶维他命丸(100粒装) 10、十加仑饮用水 11、化妆镜 12、七副太阳眼镜 13、两加仑伏特加酒 14、七件厚衣服 15、一本《沙漠动物》百科全书 专家解题: 一位專家在沙漠研究求生問題,搜集了無數事件和生還者資料,得出以下結論: 1.化妝鏡: 在各項物品中,鏡子是獲救的關鍵.鏡子在太陽下可產生相等於七萬支燭光;如反射太陽光線,地平線另一端也可看見.只要有一面鏡,獲救機會有80%

2.外套1件: 人體內有40%是水份,流汗和呼吸會使水份消失,保持鎮定可減低脫水速度.穿外套能減低皮膚表面的水份蒸發.如沒有外套,維持生命的時間便減少一日. 3.四公升水: 如有以上兩項物品,可生存三天.水有助減低脫水速度.口渴時,飲水可使頭腦清醒. 但身體開始脫水時,飲水也沒有多大作用了. 4.手電筒: 電筒是在晚上最快最可靠的工具.有了化妝鏡和手電筒,24小時都可發出訊號;而且可用電筒作反光鏡和玻璃做訊號,亦可作引火點燃之用. 5.降落傘: 可用作遮蔭和發出訊號,用仙人掌做營桿,降落傘做營頂,可減低20度. 6.大摺刀: 可切碎仙人掌或切割營桿,也有其他用途,可排於較前位置. 7.膠雨衣: 可做(集水器),在地上掘一個洞,用雨衣蓋在上面,再在中間放一小石塊,使之成漏斗形.日夜溫度差距可使空氣的水份附在雨衣上:將雨衣上的水滴在電筒中儲存.這樣做一天可提取500毫升的水,但也可消耗兩倍可收集的水份. 8.手槍: 第二天之後,說話和行動已很困難.彈藥有時要做起火之用,而國際求救訊號是連續三個短的符號.無數事件是因為求生者不能作聲而沒有給發現.還有槍柄可作槌仔用. 9.太陽眼鏡: 在猛烈陽光下會有光盲症.用降落傘遮蔭可避免眼睛受損,但用太陽眼鏡更舒適. 10.紗布一箱: 沙漠濕度低,是最少傳染病的地方.,但身體脫水會使血液凝結. 有事例紀錄,有一男子身體內失去水份,而身上的衣服已撕破,倒在仙人掌和石上. 滿身傷口但無流血.後來獲救,飲水後傷口再度流血,紗布可當繩子或包紮保護之用. 11.指南針: 除用其反射面作發訊外,它並無用處,反而引誘了人離開失事地點的危機. 12.航空圖: 可用作起火或廁紙用,亦會引誘人走出沙漠. 13.書一本: 最大問題是脫水而非饑餓,打獵所得相等於失去水份,沙漠中也沒什麼動物可見.進食亦需要大量的水以幫助消化. 14.伏特加酒:劇烈的酒精會吸去人體水份,更可致命,它只能用作暫時降低體溫之用. 15.鹽片千片:人們過分高估鹽的用途.如血液內鹽份增加,同時也需要大量的水以降低身體內的含鹽量. 月球求生记

华为嵌入式面试题

华为嵌入式系统面试题 (1)什么是预编译,何时需要预编译: 答案: 1、总是使用不经常改动的大型代码体。 2、程序由多个模块组成,所有模块都使用一组标准的包含文件和相同的编译选 项。在这种情况下,可以将所有包含文件预编译为一个预编译头。 (2)char * const p char const * p const char *p 上述三个有 什么区别? 答案: char * const p; //常量指针,p的值不可以修改 char const * p;//指向常量的指针,指向的常量值不可以改 const char *p; //和char const *p (3)char str1[] = "abc"; char str2[] = "abc"; const char str3[] = "abc"; const char str4[] = "abc"; const char *str5 = "abc"; const char *str6 = "abc"; char *str7 = "abc"; char *str8 = "abc"; cout < < ( str1 == str2 ) < < endl; cout < < ( str3 == str4 ) < < endl; cout < < ( str5 == str6 ) < < endl; cout < < ( str7 == str8 ) < < endl; 结果是:0 0 1 1 str1,str2,str3,str4是数组变量,它们有各自的存空间;而 str5,str6,str7,str8是指针,它们指向相同的常量区域。 (4)以下代码中的两个sizeof用法有问题吗? [C易] void UpperCase( char str[] ) // 将 str 中的小写字母转换成大 写字母{ for( size_t i=0; i

大学生面试15个经典问题与答案

大学生面试20个经典问题与答案 面试是大学生就业关键一关,要知己知彼,百战不殆。下面由首席大学生就业顾问、著名职业生涯规划专家:李震东老师向大家介绍面试问题及回答思路: 问题一:“请你自我介绍一下” 我就读于华南理工大学工商管理学院,我的专业是国际经济与贸易,此外还辅修了法学. 在校期间,除了学习课本,我比较喜欢参加一些课外活动.包括发传单,做家庭教师,参加各种比赛和项目.主要就是简历上介绍的那些. 我比较喜欢踢足球,看各种企业培训的讲座. 不知道您对哪些方面还需要进一步了解. 思路: 1、这是面试的必考题目。 2、介绍内容要与个人简历相一致。 3、表述方式上尽量口语化。 4、要切中要害,不谈无关、无用的内容。 5、条理要清晰,层次要分明。 6、事先最好以文字的形式写好背熟。 问题二:“谈谈你的家庭情况” 思路: 1、况对于了解应聘者的性格、观念、心态等有一定的作用,这是招聘单位问该问题的主要原因。 2、简单地罗列家庭人口。 3、宜强调温馨和睦的家庭氛围。 4、宜强调父母对自己教育的重视。 5、宜强调各位家庭成员的良好状况。 6、宜强调家庭成员对自己工作的支持。 7、宜强调自己对家庭的责任感。 问题三:最能概括你自己的三个词是什么? 思路:我经常用的三个词是:适应能力强,有责任心和做事有始终,结合具体例子向主考官解释,使他们觉得你具有发展潜力。 问题四:“你有什么业余爱好?” 思路: 1、业余爱好能在一定程度上反映应聘者的性格、观念、心态,这是招聘单位问该问题的主要原因。 2、最好不要说自己没有业余爱好。

3、不要说自己有那些庸俗的、令人感觉不好的爱好。 4、最好不要说自己仅限于读书、听音乐、上网,否则可能令面试官怀疑应聘者性格孤僻。 5、最好能有一些户外的业余爱好来“点缀”你的形象。 6、找一些富于团体合作精神的。这里有一个真实的故事:有人被否决掉,因为他的爱好是深海潜水。主考官说:因为这是一项单人活动,我不敢肯定他能否适应团体工作。 问题五:“你最崇拜谁?” 思路: 1、最崇拜的人能在一定程度上反映应聘者的性格、观念、心态,这是面试官问该问题的主要原因。 2、不宜说自己谁都不崇拜。 3、不宜说崇拜自己。 4、不宜说崇拜一个虚幻的、或是不知名的人。 5、不宜说崇拜一个明显具有负面形象的人。 6、所崇拜的人人最好与自己所应聘的工作能“搭”上关系。 7、最好说出自己所崇拜的人的哪些品质、哪些思想感染着自己、鼓舞着自己。 问题六:“你的座右铭是什么?” 思路: 1、座右铭能在一定程度上反映应聘者的性格、观念、心态,这是面试官问这个问题的主要原因。 2、不宜说那些医引起不好联想的座右铭。 3、不宜说那些太抽象的座右铭。 4、不宜说太长的座右铭。 5、座右铭最好能反映出自己某种优秀品质。 6、参考答案——“只为成功找方法,不为失败找借口”。 问题七:“谈谈你的缺点” 思路: 1、不宜说自己没缺点。 2、不宜把那些明显的优点说成缺点。 3、不宜说出严重影响所应聘工作的缺点。 4、不宜说出令人不放心、不舒服的缺点。 5、可以说出一些对于所应聘工作“无关紧要”的缺点,甚至是一些表面上看是缺点,从工作的角度看却是优点的缺点.。绝对不要自作聪明地回答“我最大的缺点是过于追求完美”,有的人以为这样回答会显得自己比较出色,但事实上,他已经岌芨可危了。 问题八:“谈一谈你的一次失败经历”

华为经典嵌入式面试题集资料

(1)什么是预编译,何时需要预编译: 答案: 1、总是使用不经常改动的大型代码体。 2、程序由多个模块组成,所有模块都使用一组标准的包含文件和相同的编译选项。在这种情况下,可以将所有包含文件预编译为一个预编译头。 (2)char * const p char const * p const char *p 上述三个有什么区别? 答案: char * const p; //常量指针,p的值不可以修改 char const * p;//指向常量的指针,指向的常量值不可以改const char *p;//和char const *p (3)char str1[] = "abc"; char str2[] = "abc"; const char str3[] = "abc"; const char str4[] = "abc"; const char *str5 = "abc"; const char *str6 = "abc"; char *str7 = "abc"; char *str8 = "abc"; cout < < ( str1 == str2 ) < < endl; cout < < ( str3 == str4 ) < < endl; cout < < ( str5 == str6 ) < < endl; cout < < ( str7 == str8 ) < < endl; 结果是:0 0 1 1 str1,str2,str3,str4是数组变量,它们有各自的内存空间;而str5,str6,str7,str8是指针,它们指向相同的常量区域。 (4)以下代码中的两个sizeof用法有问题吗? [C易] void UpperCase( char str[] ) // 将str 中的小写字母转换成大写字母{ for( size_t i=0; i

经典嵌入式面试题

经典嵌入式面试题 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) )

面试题嵌入式软件开发

1. 什么是预编译,何时需要预编译: 答案: 1、总是使用不经常改动的大型代码体。(好工程的回答,不是么~~~:)) 2、程序由多个模块组成,所有模块都使用一组标准的包含文件和相同的编译选项。在这种情况下,可以将所有包含文件预编译为一个预编译头。 2. char * const p char const * p const char *p 上述三个有什么区别? 答案: char * const p; //常量指针,const修饰的是指针p,故p的值不可以修改 char const * p;//const修饰的是*p,为指向常量的指针,指向的常量值不可以改const char *p;//和char const *p 3. 数组变量和指针的区别? [cpp]view plaincopy 1.#include https://www.360docs.net/doc/4113550031.html,ing namespace std; 3. 4.int main(int argc, char const *argv[]) 5.{ 6.char str1[] = "abc"; 7.char str2[] = "abc"; 8.const char str3[] = "abc"; 9.const char str4[] = "abc"; 10.const char *str5 = "abc"; 11.const char *str6 = "abc"; 12.char *str7 = "abc"; 13.char *str8 = "abc"; 14. 15. cout << ( str1 == str2 ) << endl; 16. cout << ( str3 == str4 ) << endl; 17. cout << ( str5 == str6 ) << endl; 18. cout << ( str7 == str8 ) << endl; 19. 20.return 0; 21.} 结果是:0 0 1 1 str1,str2,str3,str4是数组变量,它们有各自的内存空间;而str5,str6,str7,str8是指针,它们指向相同的常量区域。

校园招聘经典面试问题汇编(含答案)

校园招聘系列校园招聘系列之 校招经典面试问题汇编(含答案) 一、认识自我类 1、自我评价一下你自己,最大的优点以及最大的缺点,另外你的人生规划是什么? 答:我热爱生活,积极看待人生,对于很多东西都有旺盛的求知欲,愿意从任何人身上学习我不懂的东西,我也非常喜欢交朋友,乐于在一个团结友好的大团队之中开展工作。总的来说,热情,好学,以及良好的沟通协调能力是我的最大优势。当然我也有很多缺点,由于年龄的关系,我看一些问题不够深入,有时候未免做事情未免急躁,不过我能够虚心听取意见,相信在开展工作之时,能够发挥我的特长并且出色完成任务。 2、如果本单位无法给你解决户口问题,但是其他条件都能满足你,你是否还会来本公司工作? 答:我很喜欢贵单位,对于单位能够在各个方面最大程度的证明我的价值表示衷心的感谢。户口是我比较关注的问题,如果单位能够尽可能的帮助我解决这个后顾之忧,那么我就能够保证全心全意的投入到工作之中来,如果单位暂时有困难,我也表示理解。毕竟事业的发展空间对于我来说才是最重要的。我会好好权衡。

3、看你的简历中得知你有在大公司作intern的经历,为什么你在找正式工作的时候来我们这样一家小公司? 答:大公司有大公司的优势,小公司也有小公司的好处。对于一个刚毕业的学生来说,我需要学习的地方很多,而最最急需掌握的是独立处理问题的能力和承担一个项目的经验.在大公司中由于人员组织结构的复杂庞大以及井然有序,每个人各司其职,往往长年累月做的都是重复性的相同工作,难以接触到自己职责之外的事情,而小公司因为部门少,人事关系相对简单,每个人在挽成自己的本职工作之外,还有很多机会接触别人做的东西,这样只需要在短时间内就可以锻炼成为一个"多面手".有了在小公司的工作经验,不需要很长时间,我想我就可以独立策划一个项目并且出色的完成它.还有一点,大公司创造利润之后?配到每个员工头上的红利其实并不多;而小公司的利益都会切实的落实到每个职工身上,是那种所谓你能看得到摸的着的好处,这一点也是相当吸引我的。 4、请问你是否有男友?他/她和你不在一个城市工作,你如何解决这个问题? 答:是的,我有一个感情很稳定的男友,并且确实我们暂时不在一个地方。从我个人来讲,我确实很希望能有机会两个人在一个地方,不过我不认为这将是我事业前途的羁绊。如果我为了这份感情放弃一份我十分满意的工作,那将会令我和男友之间的?系变得非常沉重。这不是我所希望看到的,也不是我男友所希望看到的。我们希望能够各自拥有各自事业的发展空间,双方都是独立出色的个体,这将会使我们更加欣赏对方。

嵌入式工程师经典面试题

上个星期, 去深圳一家搞 ARM 开发的公司面试, HR 叫我做了一份卷子, 里面都是 C 编程, 心中暗喜, 因为这些题基本上都在程序员面试宝典里见过。后来回到学校, 在网上搜索,原来这些题都是嵌入式工程师的经典面试题目, 很多网站上都可以找得到。现把他贴出来, 附上网上的答案,跟大家分享,因为这些题实在太经典了。 预处理器(Preprocessor 1 . 用预处理指令 #define 声明一个常数, 用以表明 1年中有多少秒 (忽略闰年问题 #define SECONDS_PER_YEAR (60 * 60 * 24 * 365UL 我在这想看到几件事情: 1 #define 语法的基本知识(例如:不能以分号结束,括号的使用,等等 2 懂得预处理器将为你计算常数表达式的值,因此直接写出你如何计算一年中有多少秒而不是计算出实际的值,是更清晰而没有代价的。 3 意识到这个表达式将使一个 16位机的整型数溢出 -因此要用到长整型符号 L, 告诉编译器这个常数是的长整型数。 4 如果你在你的表达式中用到 UL (表示无符号长整型,那么你有了一个好的起点。记住,第一印象很重要。 2 . 写一个 " 标准 " 宏 MIN ,这个宏输入两个参数并返回较小的一个。 #define MIN(A,B ((A <= (B ? (A : (B 这个测试是为下面的目的而设的: 1 标识 #define在宏中应用的基本知识。这是很重要的。因为在嵌入 (inline操作符变为标准 C 的一部分之前,宏是方便产生嵌入代码的唯一方法,对于嵌入式系统来说,为了能达到要求的性能,嵌入代码经常是必须的方法。

经典面试题及答案分析

经典面试题及答案分析 人事主管最常用的面试题和最喜欢的答案 咨询题1: 假如我录取你,你认为你在这份工作上会待多久呢? a?这咨询题可能要等我工作一段时刻后,才干比较具体地回答。 b?—份工作至少要做3年、5年,才干学习到精华的部分。 c?那个咨询题蛮难回答的,可能要看当时的情形。 d?至少2年,2年后我打算再出国深造。 解答:挑选 b 最多, a 次之。 b 的回答能充分显示出你的稳定性,只是,这必须配合你的履历表上,之前的工作是否也有一致性。a的回答则是特别实际,有些人事主管因为观赏应征者的坦诚,可以同意如此的回答。 咨询题2:除了我们公司之外,你还应征了其它哪些公司呢? a?除了向贵公司如此的计算机外设产品公司外,我还应征了x饮料公司、x软件设计公 司及x化工公司。 b?因为是经过人才站,因此有不少公司与我联络,别胜枚举。 c?由于我只对计算机公司较感兴趣,所以除贵公司外,我还应征了x及x公司。 d?我别是很积极地想换工作,这半年多来陆陆续续寄了一些履历,公司名字别太记得。 解答:最理想的回答是c。c的回答能够显示出应征者的目标明确,关于自己的下一具工作应该在哪里,考虑得很清晰。 咨询题3:你希翼5 年后达到什么成就? a. 做一天和尚敲一天钟,尽人事听天命、顺其自然。 b?依我的灵巧及才能,晋升到部门经理是我的中期目标。 c. 自己独当一面开公司。 d. “全力以赴”是我的座右铭,希翼能随着经验的增加,被给予更多的职责及挑战。解答: 最理想的回答是d。 咨询题4:假如你离开现职,你认为你的老总会有什么反应? a. 很震惊,因为老总对我就是很信赖,我就如同他的左右手一样。 b. 还好吧,他似乎内心也有数,反正公司如今也别忙。 c. 他似乎适应了,反正他手下的人来来去去已是司空见惯。 d. 我想他一定会生气地破口大骂,他是一具相当情绪化的人。 解答:最理想的回答是a。面谈者想借此了解你和前(现)任主管的相处情形,以及你在主管心目中的地位怎么? 咨询题5:你什么原因想来我们公司工作? a. 要紧是这份工作的内容很吸引我。 b. 贵公司在业界颇出名的,听说治理也很人性化。 c. 我的大学同学在贵公司会计部工作,是他建议我来应征的。 d. 贵公司所处的产业,以及在业界的声誉、工作性质,都很吸引我。解答:最理想的回答是d。

嵌入式工程师面试题--经典

1、将一个字符串逆序 2、将一个链表逆序 3、计算一个字节里(byte)里面有多少bit被置1 4、搜索给定的字节(byte) 5、在一个字符串中找到可能的最长的子字符串 6、字符串转换为整数 7、整数转换为字符串 style="MARGIN: 0px; COLOR: rgb(102,102,102); LINE-HEIGHT: 150%" wrap="break-word"1、char *strconv(char *p) { int i,length; char temp; length = strlen(p); for(i = 0;i < length/2;i++) { temp = *(p + i);

*(p + i) = *(p + length - 1 - i); *(p +length - 1 - i) = temp; } return p; } int main() { char src[100]; char *p; scanf("%s",src); p = strconv(src); printf("%s\n",p); return 0;

style="MARGIN: 0px; COLOR: rgb(102,102,102); LINE-HEIGHT: 150%" wrap="break-word"3、int cal(int data) //calculation the number of bit in one byte { int a; int count = 0; a = data % 100; while (a != 0) { count += a % 2; a /= 2; } return count;

经典面试题分类及答案

一、人际关系题。 例:如何处理与同事(领导)的分歧? 由于每个人的观点、立场、经验阅历、看待和分析问题的方式不同,发生争执是一种正常现象,我会理智的处理好这件事情。 第一,从大局出发,以工作为重,处以公心,冷静对待,不要为此闹情绪,影响工作,也不要闹矛盾,影响团结,首先要塌实做好自己的本分工作,完成组织领导交给我的任务。 第二,及时反思。“横看成岭侧成峰,远近高低各不同”,许多时候,双方的分歧只是看问题的角度不同而已,因此,并不一定我的看法是对的,别人的看法就一定是错的。我会仔细分析对方观点中的可取之处,反思自己观点考虑不周的地方,对自己的观点有一个客观正确的认识。 第三,适时沟通。根据对方的性格,我会选择合适的时间地点方式主动与对方进行真诚的沟通,把矛盾消灭在萌芽状态,保证工作顺利开展。如果对方是性格开朗的类型,我会采用直言建议的方式;如果对方是内向严肃的性格,我会通过委婉的方式或者通过第三方来间接表达自己的看法。 总之,除了明显的违法犯罪行为要坚决抵制以外,我会本着组织性、纪律性的原则,从大局出发,团结同事,求同存异,取长补短(认真执行领导的指示),维护好单位内部的和谐关系,始终使单位充满凝聚力、战斗力。 二、应变能力题 例:一份机密文件不见了,当你准备向领导报告。第2天却又出现在你的抽屉里。你如何处理这件事? 首先,我在平时的工作中还是比较细心谨慎的,以前没有发生过也会尽力避免以后发生此类事件。但如果发生了像题目中的类似事件,我会冷静的妥善处理好: 第一、我还是会及时向领导报告,详细说明整个情况,对于自己的失职作深刻的检讨。 第二、追查资料被何人传阅过,有什么人接触过资料,防止资料内容落入别有用心的人,并及时向领导汇报有关进展情况。 第三、总结经验教训,自我反省,提高对保密工作的认识,严格按照单位的资料归档管理制度办理,防止此类事件再次发生。 总之,作为一名公务员,面对突发事件,要时刻保持头脑清醒,科学分析,准确判断,果断行动,整合资源,调动各种力量,有序应对突发事件,尽量将损失降到最低。 三、活动组织题 例:领导让你组织某次活动,你怎么做? 领导交付给自己这项工作任务,是对自己工作能力的信任,也是我锻炼能力提升自身素质的机会,我一定会按照以下几个步骤认真仔细的完成这项任务: 第一,制定计划方案。“凡事预则立,不预则废”,我会在掌握实际情况的基础上有针对性地拟定一个详细的计划方案,根据活动的主题、性质,对活动的内容、方式、时间、地点、参加人员、经费预算等方面进行合理的安排。然后将该方案上报领导,请领导指正和批示。 第二,实施计划方案。计划方案得到批准后,我会先将有关工作人员召集起来开一个协调会,进行任务分配、人员分工,切实将责任落实到人。活动开始后,总体把握好活动,协同有关工作人员采取多种方式调动参与人员的积极性和主动性,及时纠正活动过程中与原计划方案有偏差的地方,冷静处理意外事件,并及时向领导汇报互动情况,让领导了解活动总体进程。 第三,及时总结。活动结束后,首先做好善后事宜。及时对整个活动进行回顾,总结经验教训,形成书面材料,向领导汇报。此外,我还会拿出当初的计划方案,结合总结分析需要加以完善的地方,以便今后更好的完成类似任务。 总之,经过周密的计划,认真的实施,即使的总结,我相信一定能保质保量地完成领导交给我的任务。 四、社会现象分析题 例:有人说:“一把手绝对真理,二把手相对真理,三把手没有真理”。你如何评价这句话? 我认为“一把手绝对真理,二把手相对真理,三把手没有真理”这句话是片面的,我会辨证的看待这个问题: 第一、这句话反映了当前我国个别地区个别部门确实存在的一种“官本位”的思想,即在单位内部以职位高低定言论可信度的偏颇现象。 第二、这种现象违背了实事求是,一切从实际出发的工作原则,不利于单位决策的民主化、科学化,对单位工作的开展和事业的发展都是不利的。 第三、我们要努力改变这种现象,政府部门应该建立健全完善的监督约束机制,多多利用集体的能力,而不以领导个人的价值趋向为唯一标准。可喜的是,党和政府对这个问题已给予了高度重视,出台了相关的政策措施,如推行民主集中制、听证制等,已取得了明显的成效。 第四、当然作为党和政府选定的一把手,一般社会阅历,处事经验比之其他人更为丰富,所以在领导班子成员之间,有适当的主次,维护一把手的权威,有利于增强领导班子战斗力,有利于提高行政效率。

经典嵌入式面试题

经典嵌入式面试题 C语言测试就是招聘嵌入式系统程序员过程中必须而且有效的方法。这些年,我既参加也组织了许多这种测试,在这过程中我意识到这些测试能为带面试者与被面试者提供许多有用信息,此外,撇开面试的压力不谈,这种测试也就是相当有趣的。 从被面试者的角度来讲,您能了解许多关于出题者或监考者的情况。这个测试只就是出题者为显示其对ANSI标准细节的知识而不就是技术技巧而设计不?这个愚蠢的问题不?如要您答出某个字符的ASCII值。这些问题着重考察您的系统调用与内存分配策略方面的能力不?这标志着出题者也许花时间在微机上而不上在嵌入式系统上。如果上述任何问题的答案就是"就是"的话,那么我知道我得认真考虑我就是否应该去做这份工作。 从面试者的角度来讲,一个测试也许能从多方面揭示应试者的素质:最基本的,您能了解应试者C语言的水平。不管怎么样,瞧一下这人如何回答她不会的问题也就是满有趣。应试者就是以好的直觉做出明智的选择,还就是只就是瞎蒙呢?当应试者在某个问题上卡住时就是找借口呢,还就是表现出对问题的真正的好奇心,把这瞧成学习的机会呢?我发现这些信息与她们的测试成绩一样有用。 有了这些想法,我决定出一些真正针对嵌入式系统的考题,希望这些令人头痛的考题能给正在找工作的人一点帮住。这些问题都就是我这些

年实际碰到的。其中有些题很难,但它们应该都能给您一点启迪。 这个测试适于不同水平的应试者,大多数初级水平的应试者的成绩会很差,经验丰富的程序员应该有很好的成绩。为了让您能自己决定某些问题的偏好,每个问题没有分配分数,如果选择这些考题为您所用,请自行按您的意思分配分数。 预处理器(Preprocessor) 1 、用预处理指令#define 声明一个常数,用以表明1年中有多少秒(忽略闰年问题) #define SECONDS_PER_YEAR (60 * 60 * 24 * 365)UL 我在这想瞧到几件事情: ?; #define 语法的基本知识(例如:不能以分号结束,括号的使用,等等) ?; 懂得预处理器将为您计算常数表达式的值,因此,直接写出您就是如何计算一年中有多少秒而不就是计算出实际的值,就是更清晰而没有代价的。 ?; 意识到这个表达式将使一个16位机的整型数溢出-因此要用到长整型符号L,告诉编译器这个常数就是的长整型数。 ?; 如果您在您的表达式中用到UL(表示无符号长整型),那么您有了一个好的起点。记住,第一印象很重要。 2 、写一个"标准"宏MIN ,这个宏输入两个参数并返回较小的一个。#define MIN(A,B) ( (A) <= (B) ? (A) : (B) )

社会招聘面试-11个经典问题及答案-强力推荐

招聘面试 11 个经典问题及答案 问题一:请你自我介绍一下“请你自我介绍一下请你自我介绍一下” 这个问题的面试方法是:应聘者站起来用五分钟的时间面对大家进行演讲。 我的目的是:了解应聘者的心理承受能力、逻辑思维能力、演讲能力,而他的生平介绍却是其次的,因为,我们在他的简历中已经对其有所了解。应聘者应该做到: 1、介绍内容要与个人简历相一致。 2、表述方式上尽量口语化。 3、要切中要害,不谈无关、无用的内容。 4、条理要清晰,层次要分明。 5、要有训练有素的演讲语气和肢体语言,这是最重要的。 问题二:你有什么业余爱好“你有什么业余爱好你有什么业余爱好?” 我的目的是:了解应聘者的性格、观念、心态、思维的深度等。为了深入了解应聘者的爱好程度,我会提出更加深刻的问题,比如,应聘者喜欢流行音乐,我就会问相关的问题:“您什么时候开始喜欢的?您最喜欢哪个歌手?她的演唱风格如何?她的成名曲是哪一首?您最喜欢她的哪一首歌曲?为什么?”一个真正有这方面业余爱好的应聘者应该对答如流,遗憾的是,许多应聘者不能做到。有的应聘者喜欢读书,我的相关问题就更加尖锐:“您最喜欢哪一位作家?您最喜欢这个作家的哪一本书?这本书的中心思想是什么?您阅读了这本书后有什么感悟?对人生的启示又是什么?”能够应答这类问题的应聘者寥寥无几。应聘者应该做到:1、事先做好这方面的准备。2、最好不要说自己没有业余爱好。 3、不要说自己有那些庸俗的、令人感觉不好的爱好。 问题三:谈谈你的缺点“谈谈你的缺点谈谈你的缺点” 我的目的是:了解应聘者是否认真思考过自己,分析过自己,反省过自己。如果一个人能认清自己的缺点,并有改进的愿望和方法,他可能是一个不可多得的人才。应聘者应该做到:1、不宜说自己没有缺点,因为人一定有缺点的,除非是神。2、不宜说出严重影响所应聘工作的缺点。 3、对于自己真正的缺点,就认真对其进行剖析,并用积极的心态去面对,去修炼。 问题四:举一个人生中最失败的经历“举一个人生中最失败的经历举一个人生中最失败的经历” 我的目的是:了解应聘者的胆量和勇气,是否陷入了选择性知觉的陷阱,是否进行了深刻的反省,是否接受了深刻的教训。应聘者应该做到: 1、不宜说自己没有失败的经历。2、宜说明失败之前自己曾信心白倍、尽心尽力。 3、明确说明失败是主要由主观原因导致的。 4、失败后自己曾做了深刻的反省,很快振作起来,以更加饱满的热情面对以后的学习或工作。 问题五:你为什么选择我们公司“你为什么选择我们公司你为什么选择我们公司?”我的目的是:了解应聘者求职的动机、愿望以及对此项工作的态度。我十分欣赏对我公司很了解的应聘者。应聘者应该做到:1、建议从行业、企业和岗位这三个角度来回答。 2、参考答案——“我十分看好贵公司所在的行业,我认为贵公司十分重视人才,而且这项工作很适合我,相信自己一定能做好。” 问题六:对这项工作,你有哪些可预见的困难“对这项工作你有哪些可预见的困难?”对这项工作,我的目的是:应聘者的预测能力,并有应对方法。绝大多数的应聘者做不到。

嵌入式C语言面试题汇总(超经典)

第一部分:基本概念及其它问答题 1、关键字static的作用是什么? 这个简单的问题很少有人能回答完全。在C语言中,关键字static有三个明显的作用: 1). 在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变。 2). 在模块内(但在函数体外),一个被声明为静态的变量可以被模块内所用函数访问,但不能被模块外其它函数访问。它是一个本地的全局变量。 3). 在模块内,一个被声明为静态的函数只可被这一模块内的其它函数调用。那就是,这个函数被限制在声明它的模块的本地范围内使用。 大多数应试者能正确回答第一部分,一部分能正确回答第二部分,同是很少的人能懂得第三部分。这是一个应试者的严重的缺点,因为他显然不懂得本地化数据和代码范围的好处和重要性。 2、“引用”与指针的区别是什么? 答、1) 引用必须被初始化,指针不必。 2) 引用初始化以后不能被改变,指针可以改变所指的对象。 3) 不存在指向空值的引用,但是存在指向空值的指针。 指针通过某个指针变量指向一个对象后,对它所指向的变量间接操作。程序中使用指针,程序的可读性差;而引用本身就是目标变量的别名,对引用的操作就是对目标变量的操作。 流操作符<<和>>、赋值操作符=的返回值、拷贝构造函数的参数、赋值操作符=的参数、其它情况都推荐使用引用。 3、.h头文件中的ifndef/define/endif 的作用? 答:防止该头文件被重复引用。 4、#include 与#include “file.h”的区别? 答:前者是从Standard Library的路径寻找和引用file.h,而后者是从当前工作路径搜寻并引用file.h。 5、描述实时系统的基本特性 答:在特定时间内完成特定的任务,实时性与可靠性。 6、全局变量和局部变量在内存中是否有区别?如果有,是什么区别? 答:全局变量储存在静态数据区,局部变量在堆栈中。 7、什么是平衡二叉树? 答:左右子树都是平衡二叉树且左右子树的深度差值的绝对值不大于1。 8、堆栈溢出一般是由什么原因导致的? 答:1.没有回收垃圾资源 2.层次太深的递归调用

嵌入式笔试题

嵌入式笔试题 国内普遍认同的嵌入式系统定义为:以应用为中心,以计算机技术为基础,软硬件可裁剪,适应应用系统对功能、可靠性、成本、体积、功耗等严格要求的专用计算机系统。 下面就由为大家介绍一下嵌入式笔试题的文章,欢迎阅读。 嵌入式笔试题篇11:用C语言实现大小端的测试Int CheckCpu(){union{int a;char b;}c;c.a=1;if(c.b==1)printf(“小端);else printf(“大端);}2:volatile的作用有哪些?Volatile第一变量相当于告诉编译器这个变量的值会随时发生变化,每次使用之前都要去内存里从新读取它的值,并不要随意针对它做优化,主要用在:1:一个中断子程序中会访问到的非自动变量;2:多线程应用中被几个线程共享的变量;3:并行设备的硬件寄存器。 3:C语言中static关键字的作用有哪些?1:在函数体中,一个被声明为静态的变量在这个变量在调用过程中维持其值不变;2:在模块内(但在函数体外),一个被声明为静态的变量,可以被这个模块内的所用函数使用,但不能被模块外的函数使用,它是一个本地的全局变量;3:在模块内,一个被声明为静态变量的函数,智能被这个模块内的函数调用;4:static全局变量与局部变量的区别:static全局变量只能被初始化一次,防止其他单元文件中被引用;5:static局部变量与局部变量的区别:static局部变量只能被初始化一次,下一次依据上一次结果的值;6:static函数与普通函数的区别:static在内存中只用一份,普通函数在每

一次调用中维持一份拷贝。 4:请问下面三种变量的区别:Int const *p : 指向常整型的指针;Int *const p; 指向整型的常指针;Int *const *p:指向常整型的常指针;5:在ARM系统中,在函数调用的时候,参数是通过哪种方式传递的。 当参数小于等于4的时候是通过r0~r3来进行传递的,当参数大于4的时候是通过压栈的方式进行传递。 6:中断与异常有何区别.异常在处理的时候必须考虑与处理器的时钟同步,实际上异常也称为同步中断,在处理器执行到因编译错误而导致的错误指令时,或者在执行期间出现特殊错误,必须靠内核处理的时候,处理器就会产生一个异常;所谓中断是指外部硬件产生的一个电信号从CPU的中断引脚进入,打断CPU的运行。 所谓异常是指软件运行过程中发生了一些必须作出处理的事件,CPU自动产生一个陷入来打断CPU的运行。 7:用预处理指令#define表示一年中有多少秒#define SECONDS_PER_YEAR (60*60*24*365)UL注意后面必须加UL,表示计算的结构是常整型。 8:简述SPI,UART,I2C三种传输方式。 SPI:高速同步串行口,首发独立,可同步进行SPI接口主要应用在EEPROM,Flash,实时时钟,A/D转化器,数字信号处理,是一种全双工同步通讯总线,该接口一般使用四条线:串行时钟线(sck),主出从入线,主入从出线,低电平有效地的从机选择线。

相关文档
最新文档