嵌入式软件工程师面试题(非常经典)

预处理器( 
我在这想看到几件事情: 
1). #define 
2). 
3). 
4).  
C/C++
2). 
3). 
4). 
Least = MIN(*p++, b);

3. 
问题的答案。当然如果你不是在找一个书呆子,那么应试者最好希望自己不要知道答案。

死循环(
while(1) { } 
一些程序员更喜欢如下方案: 
for(;;) { } 
这个实现方式让我为难,因为这个语法没有确切表达到底怎么回事。如果一个应试者给出这个作为方案,我将用这个作为一个机会去探究他们这样做的 
基本原理。如果他们的基本答案是:
第三个方案是用 
Loop: 
 
goto Loop; 
应试者如给出上面的方案,这说明或者他是一个汇编语言程序员(这也许是好事)或者他是一个想进入新领域的
a) 
b) 
c) 
d) 
e) 
f) 
g) 
h) 
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 
f) int (*a)[10]; // A pointer to an array of 10 integers 
g) int (*a)(int); // 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


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


Static

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


Const

7
我只要一听到被面试者说: 
int const a; 
const int *a; 
int * const a; 
int const * a const;

前两个的作用是一样,
1). 
2). 
3). 

一个定义为
1). 
2).  
3). 
回答不出这个问题的人是不会被雇佣的。我认为这是区分
假设被面试者正确地回答了这是问题(嗯,怀疑这否会是这样),我将稍微深究一下,看一下这家伙是不是直正懂得
1). 
2). 
3). 
int square(volatile int *ptr) 
{ 
return *ptr * *ptr; 
} 
下面是答案: 
1). 
2). 
3). 
int square(volatile int *ptr) 
{ 
int a,b; 
a = *ptr; 
b = *ptr; 
return a * b; 
} 
由于
long square(volatile int *ptr) 
{ 
int a; 
a = *ptr; 
return a * a; 
}

位操作(
1). 
2). 
3). 
#define BIT3 (0x1<<3) 
static int a; 
void set_bit3(void) 
{ 
a |= BIT3; 
} 
void clear_bit3(void) 
{ 
a &= ~BIT3; 
} 
一些人喜欢为设置和清除值而定义一个掩码同时定义一些说明常数,这也是可以接受的。我希望看到几个要点:说明常数、

10. 
int *ptr; 
ptr = (int *)0x67a9; 
*ptr = 0xaa55;

一个较晦涩的方法是: 
*(int * const)(0x67a9) = 0xaa55;

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

中断( 
{ 
double area = PI * radius * radius; 
printf(” Area = %f”, area); 
return area; 
}

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2014年1月24日
下一篇 2014年1月24日

相关推荐