当前位置:文档之家› 嵌入式Linux C语言面试试题1

嵌入式Linux C语言面试试题1

嵌入式Linux C语言面试试题1
嵌入式Linux C语言面试试题1

基础试题(C语言)

一、ANSI C/C++方面的知识

一.1、简答题。下面的题目必须全部答对才给分(20分):

1、如何在C中初始化一个字符数组。

2、如何在C中为一个数组分配空间。

3、如何初始化一个指针数组。

4、如何定义一个有10个元素的整数型指针数组。

5、s[10]的另外一种表达方式是什么。

6、GCC3.2.2版本中支持哪几种编程语言。

7、要使用CHAR_BIT需要包含哪个头文件。

8、对(-1.2345)取整是多少?

9、如何让局部变量具有全局生命期。

10、C中的常量字符串应在何时定义?

11、如何在两个.c文件中引用对方的变量。

12、使用malloc之前需要做什么准备工作。

13、realloc函数在使用上要注意什么问题。

14、strtok函数在使用上要注意什么问题。

15、gets函数在使用上要注意什么问题。

16、C语言的词法分析在长度规则方面采用的是什么策略?

17、a+++++b所表示的是什么意思?有什么问题?

18、如何定义Bool变量的TRUE和FALSE的值。

19、C语言的const的含义是什么。在定义常量时,为什么推荐使用const,而不是#defin

e。

20、C语言的volatile的含义是什么。使用时会对编译器有什么暗示。

一.2、问答题。

1、-----------------------------------------------------------

"匈牙利命名法"有什么优缺点?(2分)

2、-----------------------------------------------------------

下面x, y, *p的值是多少,有什么问题?(2分)

int x, y, z = 2;

int *p=&z;

x=sizeof*p;

y=x/*p; /* x=?, *p=?, y=?, 有什么问题?*/

3、-----------------------------------------------------------

下面的语句是什么意思?如何声明或定义才使它们更易懂?(10分)

int (*foo())();

int (*foo())[];

int (*foo[])();

(*(void(*)())0)();

void (*signal(int,void(*)(int)))(int);

4、-----------------------------------------------------------

本题(2分)。一般使用malloc时,需要进行强制类型转换,如:

char *s; s = (char *)malloc(31);

下面中???该如何填写,才可以正确执行强制类型转换?

int (*monthp)[31]; monthp = (???)malloc(31);

5、-----------------------------------------------------------

关于C语言运算符优先级的记忆技巧是什么?(2分)

/* 下面r的值是多少*/

int hi, low, r;

hi=7;low=3;

r=hi<<4+low;

6、-----------------------------------------------------------

指针和数组的区别是什么?用一个简单的声明把它们区分开。(2分)

指针和数组的声明在什么情况下是相同的?(2分)

7、-----------------------------------------------------------

C语言的左值(lvalue)和右值(rvalue)的含义是什么?(2分)

8、-----------------------------------------------------------

为什么C语言可以实现printf(char *format, ...)这样可变参数的调用形式?这样有什

么缺点?(2分)

9、-----------------------------------------------------------

说明C语言中术语"声明""定义""原型"的含义?(2分)

10、-----------------------------------------------------------

举一个例子,说明使用assert和防错代码的区别。(5分)

11、-----------------------------------------------------------

对语句if else 与操作符? : 使用场合的比较。(2分)

12、-----------------------------------------------------------

编写一个函数,输入一个的整型数字,可以选择按照8/10/16进制输出字符串。注意边界值。(5分)

13、-----------------------------------------------------------

本题(2分)。下面是一个16x16的黑白图标:

static unsigned short stopwatch[] = {

0x07c6,

0x1ff7,

0x383b,

0x600c,

0x600c,

0xc006,

0xc006,

0xdf06,

0xc106,

0xc106,

0x610c,

0x610c,

0x3838,

0x1ff0,

0x07c0,

0x0000,

};

如何修改声明,可以使之在源代码中形象地表现出图形的模样。

14、-----------------------------------------------------------

说出可以使用calendar[11][30]变量的四种类型定义。(5分)

如:int calendar[12][31]; /* 二维数组*/

15、-----------------------------------------------------------

使用strcmp,当字符串相同时会返回'\0'。但'\0'一般作为逻辑假,

因此下面的语句不容易理解:

if (!strcmp(s, "string")) return EQUATION;

如何经过简单修改,使之更易懂?(2分)

16、-----------------------------------------------------------

编写一个自己的完全C语言版本的memset函数,并且评价这个实现的性能和可移植性。(5

分)

17、-----------------------------------------------------------

在树和图这些数据结构中,通常使用指针来组织数据。如果我们要把这些数据保存到文

中,指针是没有意义的。我们该如何解决这个问题。(2分)

18、-----------------------------------------------------------

用2种不同的方法计算long变量的"1"bit的个数。(2分)

19、-----------------------------------------------------------

任意给出一个C的基本数据类型,如何编码判断这个数据类型是有符号还是无符号的?(2

分)

不得上机实验,写出下面代码的输出。解释这个行为是标准定义的,还是依赖实现的。(

2分)

int i;

for (i = 0; i < 10; i++) {

int j = i;

printf ("%d\n", j);

}

20、-----------------------------------------------------------

列出5种以上你所看过的C编程的书籍,并写简要书评。(5分)

对C的评价。如果要你改造一把菜刀,使之更加安全,你是否会使用这样的菜刀,为什么

?(5分)

一.3、分析题。

本题(各5分)。假设下面代码中的变量都是合法变量,调用外部的函数都是正确的。回答

几个问题:

这些代码意图要干什么?

是否有问题?

如果有问题,该如何修改,或者如何避免类似错误发生?如果没有问题,如果代码有输出,输出是什么?

1、-----------------------------------------------------------

int isvowel (char c)

{

return c=='a'||c=='e'||c=='i'||c=='o'||c=='u';

}

2、-----------------------------------------------------------

while (c=='\t'||c=' '||c=='\n')

c=getc(f);

3、-----------------------------------------------------------

/* 当x=2, y=3, z=? */

if (x==0)

if (y==0)

z=-1;

else

z=x+y;

4、-----------------------------------------------------------

/* 处理网络事件*/

void process_network_code(int x, int y)

{

/* 选择modes_pointer资源*/

switch (line) {

case THING1:

/* 处理异常1#, 使用老的modes_pointer资源*/

doit1();

break;

case THING2:

/* 处理异常2#, 需要重新启动服务*/

if (x == STUFF) {

/* 重新申请modes_pointer资源,没有初始化*/

do_first_stuff();

/* 在这种条件下,有些资源不用重新申请*/

if (y == OTHER_STUFF)

break;

/* 申请剩下的资源,并初始化*/

do_later_stuff();

}

/* 初始化modes_pointer资源*/

initialize_modes_pointer();

break;

default:

/* 处理普通事件, 使用老的modes_pointer资源*/ processing();

}

/* 使用modes_pointer资源,处理事件*/

use_modes_pointer();

}

5、-----------------------------------------------------------

int is_gb2312_char(char c1, char c2)

{

if (c1 >= 0xa1 && c2 >= 0xa1)

return 1;

else

return 0;

}

6、-----------------------------------------------------------

下面x, y的值是多少,有什么问题?

int x = 10, y = 3;

x ^= y;

y ^= x;

x ^= y;

/* x=?, y = ? */

7、-----------------------------------------------------------

int days[]={31,28,31,30,31,30,31,31,30,31,30,31,};

int calendar[12][31];

int (*monthp)[31];

int *dayp;

int i;

memset(calendar, 0, sizeof(calendar));

i = 0;

for (monthp = calendar; monthp < &calendar[12]; monthp++) { for (dayp = *monthp; dayp < &(*monthp)[31]; dayp++) {

if (dayp - *monthp < days[calendar - monthp]) {

*dayp = i++ % 7 + 1;

}

}

}

8、----------------------------------------------------------- void printnum(long n)

{

if (n < 0) {

putchar('-');

n = -n;

}

if (n >= 10) {

printnum(n/10);

}

putchar ("0123456789"[n%10]);

}

9、----------------------------------------------------------- void * memchr(void *pv, unsigned char ch, size_t size) {

unsigned char *pch = (unsigned char *) pv; unsigned char *pchEnd = pch + size;

while (pch < pchEnd) {

if (*pch == ch)

return (pch);

pch++;

}

return NULL;

}

10、----------------------------------------------------------- void * memchr(void *pv, unsigned char ch, size_t size) {

unsigned char *pch = (unsigned char *) pv; unsigned char *pchPlant = pch + size;

unsigned char chSave = *pchPlant;

*pchPlant = ch;

while (pch != ch) {

pch++;

}

*pchPlant = chSave;

return ((pch == pchPlant) ? NULL : pch);

}

11、-----------------------------------------------------------

void UnsToStr(unsigned short int u, char *str)

{

char *pch;

assert(u <= 65535);

pch = &str[5];

*pch = '\0';

do {

*--pch = u % 10 + '0';

} while ((u / 10) > 0);

strcpy(str, pch);

}

12、-----------------------------------------------------------

void *memmove(void *pvTo, void pvFrom, size_t size)

{

char *pbTo = (char *)pvTo;

char *pbFrom = (char *)pvFrom;

((pbTo < pbFrom) ? tailmove : headmove) (pbTo, pbFrom, size); return (pvTo);

}

13、-----------------------------------------------------------

void *memcpy(void *pvTo, void pvFrom, size_t size)

{

char *pbTo = (char *)pvTo;

char *pbFrom = (char *)pvFrom;

while (size-- > 0);

*pbTo++ = *pbFrom++;

return (pvTo);

}

14、-----------------------------------------------------------

#include

int main(int argc, char *argv[])

{

char s[]="0123456789";

int i = 0;

do {

printf ("%c", i++[s]);

} while(s?1:printf("\n")-1);

return 0;

}

15、-----------------------------------------------------------

int fibonacci(int x)

{

if (x == 1 || x == 2)

return 1;

return fibonacci(x - 2) + fibonacci(x - 1);

}

16、-----------------------------------------------------------

这里有一个程序cdecl.c。写出它的工作流程。写出它的使用方法。给出一个典型输入用例,记录下它的输出。

一.4、综合编程题。

要求:

1、完成需求,程序运行正确。

2、工作原理文档,使用文档完整。

3、代码规整优美。注释得当。

4、运行速度足够快。

5、用工具分析出是哪些代码或函数造成速度瓶颈。

1、-----------------------------------------------------------

编写一个排序程序。被排序的文件有8MB大小,一行一个随机整数(ASCII格式)。要求对

这些整数进行

排序,并计算平均值,打印出排序所需的时间。(20分)

2、-----------------------------------------------------------

用dummy header技巧实现一个链表DEMO。要求具有create, insert, delete, search 功

能。

编写一个应用程序,使用上面的函数。使用dummy header技巧有什么优点。(20分)

3、-----------------------------------------------------------

用heapsort算法实现优先队列。要求具有create, insert, delete功能。

编写一个应用程序,使用上面的函数。使用heapsort算法有什么优点。(20分) 用trie(一种多叉树)实现一个字典。要求具有create, insert, delete, search功能。编写一个应用程序,使用上面的函数。使用trie树有什么优点。(20分)

二、POSIX方面的知识。

二.1、简答题。下面的题目必须全部答对才给分:(5分)

1、在UNIX环境中,编译流程是什么?

2、ABI,ELF的英文全称是什么

3、一般UNIX的程序有多少段,举一个实际的例子说明。

4、如何在kernel二进制代码中找一个字符串。

5、段地址F000:FFF0转换为线形地址的值是多少(16进制表达)。

6、在一个UNIX文件系统中,文件的唯一性标志是什么?

二.2、问答题。

1、-----------------------------------------------------------

写一些代码。如何用文件实现信号灯?要求如果程序崩溃了,这个文件也将自动被删除

为什么可以这样实现信号灯?(5分)

传统的signal函数信号处理为什么是不可靠的,信号和系统调用有何关系?(5分)

在图形库系统中往往提供timer的功能,除了使用ALARM信号外,你还可以使用什么系统

调用来实现timer?(5分)

写一些代码,演示如何正确使用write系统调用。注意看好手册再回答。(2分) 如果一个文件以rw模式打开,在进行read/write操作转换时,需要进行什么操作。(2分)

3、-----------------------------------------------------------

解释终端结构termios.c_cc的MIN/TIME数值变化的带来read/write的特性。(5分)

如何理解终端、控制终端、虚拟终端、控制台、tty等类同的概念?(5分)

4、-----------------------------------------------------------

解释计算机中Copy-On-Write的概念。(2分)

调用fork之后,子进程没有继承父进程的属性有哪些?(5分)

解释为什么每个程序在装入执行之后,总是已经预先打开了stdout、stdin、stderr?(2

分)

在fork之前,父进程打开了一个文件。在fork之后,如果子进程移动了文件指针,

父进程的文件指针有什么变化;如果子进程关闭了文件,父进程有什么变化?为什么会

这样?(5分)

标准输入、输出和错误输出分别是什么类型的缓冲,这些缓冲在用户空间还是在核心空

间?

怎样关闭他们的缓冲?如果父进程关闭了缓冲,在fork之后建立的子进程是否也关闭了

缓冲?(5分)

vfork和fork相比,有什么特色?(2分)

system函数是否等同于fork+exec?(2分)

wait系统调用有多少种条件可以退出?(2分)

5、-----------------------------------------------------------

系统调用和库函数调用有什么区别。(2分)

在linux2.4.x上的glibc和newlib(一种嵌入式C库)的系统调用有什么不同?(2分)

在linux2.4.x上,对系统调用execve如果调用成功,它返回的值是多少。(2分)

列出你所知道的2个内存跟踪库。(2分)

设计一个内存跟踪方案,为什么选择这个方案(5分)

二.3、综合编程题。

要求:

1、完成需求,程序运行正确。

2、工作原理文档,使用文档完整。

3、代码规整优美。注释得当。

4、运行速度足够快。

1、-----------------------------------------------------------

这里有一个8MB的文件,编写一个copy程序,拷贝这个文件,并计算所需时间。用工具分

出是哪些代码或函数造成速度瓶颈。

提示:如果只是使用read/write调用,不是一个好的实现。(20分)

2、-----------------------------------------------------------

Linux系统中,什么时候会出现类似Y2K的问题。写一个程序证明。(20分) 3、-----------------------------------------------------------

编写一个程序,测试系统最小的睡眠时间间隔。(20分)

4、-----------------------------------------------------------

编写一个pipe程序,测试有N个管道,size大小的buffer情况下,pipe的传输性能是多少

?(20分)

5、-----------------------------------------------------------

在ext2文件系统上,单个文件最大可以达到多少?

写一个程序获得这方面的限制。(20分)

三、Linux编程基本使用知识。

三.1、命令和shell

1)编写一个脚本,统计一个目录下面所有C代码的行数。(2分)

2)编写一个sed脚本,去除HTML文件中的HTML标记。(2分)

3)编写一个脚本获得当前系统eth0的IP地址。(2分)

4)编写一个脚本以交互的方式,进行DNS的设定。(2分)

5)使用ls命令编写一个脚本,实现ls -R,递归列出当前目录下的所有目录、文件。(2

分)

6)-----------------------------------------------------------

在一个目录下,找soft-link files,用下面的命令,原理是可行的,但无法操作,该如何解决?要2种方法。(2分)

ls -l | grep ->

7)-----------------------------------------------------------

如何把标准错误输出,重定向到标准输出上。(2分)

8)-----------------------------------------------------------

我们的系统中的软件包是使用RPM管理的。要求下面的问题写出shell命令和运行结果。(

5分)

如何知道系统中安装了几个软件包。

如何知道系统中安装了哪几类(group)软件包。

如何知道kernel软件包的简述。

如何知道kernel软件包的Changelog。

如何知道kernel软件包有几个文件。

如何知道kernel软件包安装后有多大。

三.2、编辑工具的使用。(各2分)

1)如何使用vi进行块拷贝、粘贴、删除的操作

2)如何设置Tab的长度,以及自动缩进的长度

3)如何使用tag进行代码阅读

4)如何在1~10行,有确认的进把所有的RedHat改为RedFlag

5)在SourceNavigator中,如何跳到一个变量的声明处?如何得知光标当前的位置在那

个函数体内?

三.3、编译器与调试器。(各2分)

1)如何使用gcc得到宏展开的中间代码

2)如何通过gcc在命令行中传入宏定义

3)在那一级优化的情况下,内联函数才真正的内联到代码中

4)gdb的watch命令如何使用,有何缺点

5)gdb中使用什么命令可以显式调用的栈帧,如何查看某个栈帧上的局部变量6)如何使用gdb调试多进程

7)如何使能/禁止core dump?

三.4、库。(各2分)

1)如何知道XSetIMValues这个符号在那个X的库文件中

2)如何读取C++的符号名,更具可读性

3)请解释动态库的soname概念

4)解释在链接时rpath选项的含义

三.5、Makefile。(10分)

如果有一个简单的Test项目目录如下:

# tree Test

Test

|-- common.h

|-- main.cpp

|-- test.cpp

`-- test.h

1)使用wildcard、patsubst函数编写一个C++项目的Makefile文件

2)使用automake、autoconfig编写一个支持configure选项的configure.in脚本三.6、CVS。(10分)

1)如果一个CVS项目中,甲添加了一个子目录模块,那么乙在update时是否会自动检

出这个新添加的子模块?如果不能,那么你有什么好的解决方案?

2)如何在一个CVS项目中添加一个二进制文件,这个二进制文件可以进行增量的版本管

理吗?

3)如何检出标记(tag)为milestone-1的版本,如何创建以milestone-1为基础的分支

milestone-1-b1,并如何把分支的修改合并到milestone-1的主分支上

三.7、Linux/GNU编程基本知识

1、-----------------------------------------------------------

Linux2.4.x有多少种类型的设备文件?分别写出来。(2分)

2、-----------------------------------------------------------

glibc动态库的搜寻次序是什么?(2分)

glibc 2.1.x 与2.2.x的动态库的搜寻次序有什么不同?为什么会采用现在的方案?(2

分)

三.3、综合编程题。

要求:

1、完成需求,程序运行正确。

2、工作原理文档,使用文档完整。

3、代码规整优美。注释得当。

4、运行速度足够快。

1、-----------------------------------------------------------

本题(20分)。写一个程序,有三个功能:

a)取得CMOS中的当前时间,按照

YY:MM D:HH:MM:SS格式输出。

b)取得物理内存的大小,格式化输出。

c)取得从物理段地址F000:FFF0起,16个字节的值,每字节按照16进制格式输出。

2、-----------------------------------------------------------

本题(20分)。对串口编程,编写一对类似ping的程序,作用在串口上,了解serial 的联

通情况。

定义协议

要求:

定义一个联通和响应协议。至少具有:发送、回复、超时三种状态。除超时状态外,所

状态的数据必须经过校验才可使用。

ping_serial_client

要求:

1,发送数据包;

2,等待回复数据包,直到超时;

3,如果有回复数据包,对数据包进行校验;

4,计算校验通过的数据包之间的时间差;

5,重复直到用户退出;

6,统计丢包率,时间。

界面:

bash# ping_serial_client /dev/ttyS0 baud_value

??bytes from ttyS0, time=??ms

......

^C

--- ttyS0 ping statistics ---

?? packets transmitted, ?? received, ??% loss

time ??ms, min/avg/max = ??/??/?? ms

ping_serial_server

要求:

1,等待对方的发送数据包;

2,对发送数据包进行校验;

3,校验通过则回复数据包;

4,重复直到用户退出;

界面:

bash# ping_serial_server /dev/ttyS0 baud_value

3、-----------------------------------------------------------

编写一对socket程序,要求类似于network echo procotol。

Client每隔1秒把自己的IP地址轮流循环发送给一个Server.

Server接到IP后,在屏幕上打印对方IP;然后把自己的IP发送回去。

Client收到回复后,在屏幕上打印对方IP。

程序一直运行,直到用户退出。各自分类统计接收到的各IP的数据包的个数。注意:Client可以向多个Server发送请求,Server也可以接收多个Client请求。注意:输出信息的美观,和对错误的处理。

-----------------------------------------------------------

四、C++题目。

-----------------------------------------------------------

1。给定下面的代码:

class Graph{

public:

Graph() { s_gCount++; }

virtual ~Graph() { s_gCount--;}

virtual int drawOut() = 0;

static int getTotalCount() { return s_gCount; } protected:

int m_x;

int m_y;

static int s_gCount;

};

嵌入式工程师经典面试题

上个星期, 去深圳一家搞 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 的一部分之前,宏是方便产生嵌入代码的唯一方法,对于嵌入式系统来说,为了能达到要求的性能,嵌入代码经常是必须的方法。

嵌入式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.层次太深的递归调用

嵌入式C语言经典笔试题目

嵌入式c语言经典笔试题目 1 .用预处理指令#define声明一个常数,用以表明1年中有多少秒(忽略闰年问题) #define SECONDS_PER_YEAR (60 * 60 * 24 * 365)UL 我在这想看到几件事情: 1) #define语法的基本知识(例如:不能以分号结束,括号的使用,等等) 2)懂得预处理器将为你计算常数表达式的值,因此,直接写出你是如何计算一年中有多少秒而不是计算出实际的值,是更清晰而没有代价的。 3)意识到这个表达式将使一个16位机的整型数溢出-因此要用到长整型符号L,告诉编译器这个常数是的长整型数。 4)如果你在你的表达式中用到UL(表示无符号长整型),那么你有了一个好的起点。记住,第一印象很重要。 2 .写一个"标准"宏MIN,这个宏输入两个参数并返回较小的一个。 #define MIN(A,B)((A)<= (B) ? (A) : (B)) 这个测试是为下面的目的而设的: 1)标识#define在宏中应用的基本知识。这是很重要的。因为在嵌入(inline)操作符变为标准C的一部分之前,宏是方便产生嵌入代码的唯一方法,对于嵌入式系统来说,为了能达到要求的性能,嵌入代码经常是必须的方法。 2)三重条件操作符的知识。这个操作符存在C语言中的原因是它使得编译器能产生比if-then-else更优化的代码,了解这个用法是很重要的。 3)懂得在宏中小心地把参数用括号括起来 4)我也用这个问题开始讨论宏的副作用,例如:当你写下面的代码时会发生什么事? least = MIN(*p++, b); 3.预处理器标识#error的目的是什么? 如果你不知道答案,请看参考文献1。这问题对区分一个正常的伙计和一个书呆子是很有用的。只有书呆子才会读C语言课本的附录去找出象这种问题的答案。当然如果你不是在找一个书呆子,那么应试者最好希望自己不要知道答案。 死循环(Infinite loops) 4.嵌入式系统中经常要用到无限循环,你怎么样用C编写死循环呢? 这个问题用几个解决方案。我首选的方案是: while(1) { } 一些程序员更喜欢如下方案: for(;;) { } 这个实现方式让我为难,因为这个语法没有确切表达到底怎么回事。如果一个应试者给出这个作为方案,

c语言经典面试题

C语言面试题大汇总之华为面试题 1、局部变量能否和全局变量重名? 答:能,局部会屏蔽全局。要用全局变量,需要使用"::" ;局部变量可以与全局变量同名,在函数内引用这个变量时,会用到同名的局部变量,而不会用到全局变量。对于有些编译器而言,在同一个函数内可以定义多个同名的局部变量,比如在两个循环体内都定义一个同名的局部变量,而那个局部变量的作用域就在那个循环体内。 2、如何引用一个已经定义过的全局变量? 答:extern 可以用引用头文件的方式,也可以用extern关键字,如果用引用头文件方式来引用某个在头文件中声明的全局变理,假定你将那个编写错了,那么在编译期间会报错,如果你用extern方式引用时,假定你犯了同样的错误,那么在编译期间不会报错,而在连接期间报错。 3、全局变量可不可以定义在可被多个.C文件包含的头文件中?为什么?答:可以,在不同的C文件中以static形式来声明同名全局变量。 可以在不同的C文件中声明同名的全局变量,前提是其中只能有一个C文件中对此变量赋初值,此时连接不会出错. 4、请写出下列代码的输出内容 #include int main(void) { int a,b,c,d; a=10;

c=++a; d=10*a++; printf("b,c,d:%d,%d,%d",b,c,d); return 0; } 答:10,12,120 5、static全局变量与普通的全局变量有什么区别?static局部变量和普通局部变量有什么区别?static函数与普通函数有什么区别? 答: 1) 全局变量(外部变量)的说明之前再冠以static 就构成了静态的全局变量。全局变量本身就是静态存储方式,静态全局变量当然也是静态存储方式。这两者在存储方式上并无不同。这两者的区别在于非静态全局变量的作用域是整个源程序,当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的。 而静态全局变量则限制了其作用域,即只在定义该变量的源文件内有效, 在同一源程序的其它源文件中不能使用它。由于静态全局变量的作用域局限于一个源文件内,只能为该源文件内的函数公用,因此可以避免在其它源文件中引起错误。 2) 从以上分析可以看出, 把局部变量改变为静态变量后是改变了它的存储方式即改变了它的生存期。把全局变量改变为静态变量后是改变了它的作用域,限制了它的使用范围。3) static函数与普通函数作用域不同,仅在本文件。只在当前源文件中使用的函数应该说明为内部函数(static),内部函数应该在当前源文件中说明和定义。对

C语言面试题(经典全)

1.static有什么用途?(请至少说明两种) 1)限制变量的作用域 2)设置变量的存储域(堆,主动分配内存也是堆) 1)在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变。 2) 在模块内(但在函数体外),一个被声明为静态的变量可以被模块内所用函数访问,但不能被模块外其它函数访问。它是一个本地的全局变量。 3) 在模块内,一个被声明为静态的函数只可被这一模块内的其它函数调用。那就是,这个函数被限制在声明它的模块的本地范围内使用。 4.全局变量和局部变量在内存中是否有区别?如果有,是什么区别? 全局变量储存在静态数据库,局部变量在栈 6.堆栈溢出一般是由什么原因导致的? 堆栈溢出一般是循环的递归调用导致的,如果使用的大数据结构的局部变量,也可能导致堆栈溢出。没有回收垃圾资源导致的是内存泄露最后内存耗尽。 20.不能做switch()的参数类型是: switch的参数不能为实型。(只能是int char) 9.写出float x 与“零值”比较的if语句。 if(x<0.000001&&x>-0.000001)

3.在c语言库函数中将一个字符转换成整型的函数是atol()吗,这个函数的原型是什么? 函数名: atol 功能: 把字符串转换成长整型数 函数的原型: long atol(const char *nptr); 程序例: #include #include int main(void) { long l; char *str = "98765432"; l = atol(lstr); printf("string = %s integer = %ld\n", str, l); return(0); } 1.对于一个频繁使用的短小函数,在C语言中应用什么实现,在C++中应用什么实现? c用宏定义,c++用inline

嵌入式软件工程师笔试题

笔试题 1: 设 float a=2, b=4, c=3; ,以下 C 语言表达式与代数式 (a+b)+c 计算结果不一致的是 A.(a+b)*c/2 B.(1/2)*(a+b)*c C.(a+b)*c*1/2 D.c/2*(a+b) 参考答案: B,因为 a,b,c 三个变量都是浮点数,所以在 B 答案中其结果是 0,因为在计算 1/2 是就是 0,如果改成 1/2.0 就正确了。 2: 为了向二进制文件尾部增加数据,打开文件的方式应采用 A.″ab″ B.″rb+″ C.″wb″ D.″wb+″ 参考答案: D 3: 下述程序执行后的输出结果是 #include main() { int x= 'f'; printf( “%c n”, 'a'+(x - ‘a'+1)); } A.g B.h C.i D.j 参考答案: A 4:C 语言中,下列运算符优先级高的是 A.! B.% C.>> D.= = 参考答案: A 5:数组定义为“ int a [ 4 ] ; ”,表达式 ( ) 是错误的。 A.*a B. a [ 0 ] C. a D.a++ 参考答案: D

6: 执行语句“ k=7>>1; ”后,变量 k 的当前值是 A.15 B.31 C. 3 D. 1 参考答案: C 7: 定义函数时,缺省函数的类型声明,则函数类型取缺省类型 A.void B.char C.float D.int 参考答案: D 8: 若 main() 函数带参数,参数个数多是 A.0 B. 1 C. 2 D. 3 参考答案: C 只知道有定义形式 main(int argc,char* argv[])) 9: 若有宏定义: #define MOD(x , y) x%y 则执行以下语句后的输出结果是 int a=13 ,b=94; printf( ″%d n″, MOD(b, a+4)); A. 5 B.7 C.9 D.11 参考答案: B 10: 下列各个错误中,哪一个不属于编译错误 A.改变 x 原值 3 为 5 ,写作“ x==5 ; ” B.花括号不配对 C.复合语句中的后一条语句后未加分号 D.变量有引用、无定义参考答案: A 11: 下列程序段运行后, x 的值是 ( ) a=1;b=2;x=0; if(!( — a))x — ; if(!b)x=7;else ++x; A.0 B. 3 C. 6 D.7 参考答案: A

C语言面试题大汇总,个人觉得还是比较全

4. static有什么用途?(请至少说明两种) 1.限制变量的作用域 2.设置变量的存储域 7. 引用与指针有什么区别? 1) 引用必须被初始化,指针不必。 2) 引用初始化以后不能被改变,指针可以改变所指的对象。 2) 不存在指向空值的引用,但是存在指向空值的指针。 8. 描述实时系统的基本特性 在特定时间内完成特定的任务,实时性与可靠性 9. 全局变量和局部变量在内存中是否有区别?如果有,是什么区别? 全局变量储存在静态数据库,局部变量在堆栈 10. 什么是平衡二叉树? 左右子树都是平衡二叉树且左右子树的深度差值的绝对值不大于1 11. 堆栈溢出一般是由什么原因导致的? 没有回收垃圾资源 12. 什么函数不能声明为虚函数? constructor 13. 冒泡排序算法的时间复杂度是什么? O(n^2) 14. 写出float x 与“零值”比较的if语句。 if(x>0.000001&&x<-0.000001) 16. Internet采用哪种网络协议?该协议的主要层次结构? tcp/ip 应用层/传输层/网络层/数据链路层/物理层 17. Internet物理地址和IP地址转换采用什么协议? ARP (Address Resolution Protocol)(地址解析協議) 18.IP地址的编码分为哪俩部分? IP地址由两部分组成,网络号和主机号。不过是要和“子网掩码”按位与上之后才能区分哪些是网络位哪些是主机位。 2.用户输入M,N值,从1至N开始顺序循环数数,每数到M输出该数值,直至全部输出。写出 C程序。 循环链表,用取余操作做 3.不能做switch()的参数类型是: switch的参数不能为实型。 華為 1、局部变量能否和全局变量重名? 答:能,局部会屏蔽全局。要用全局变量,需要使用"::" 局部变量可以与全局变量同名,在函数内引用这个变量时,会用到同名的局部变量,而不会用到全局变量。对于有些编译器而言,在同一个函数内可以定义多个同名的局部变量,比如在两个循环体内都定义一个同名的局部变量,而那个局部变量的作用域就在那个循环体内

嵌入式开发c语言经典笔试题-含答案

void e(int ); main(){ int a; a=3; e(a);}void e(int n){ if(n>0) { e(--n); printf("%d" , n); e(--n); }}这段程序的输出是: A.0 1 2 0 B.0 1 2 1 C.1 2 0 1 D.0 2 1 1 typedef int (*test) ( float * , float*)test tmp; tmp 的类型是【】 A.函数的指针,该函数以两个指向浮点数(float)的指针(pointer)作为参数(arguments) Pointer to function of having two arguments that is pointer to float B.整型 C.函数的指针,该函数以两个指向浮点数(float)的指针(pointer)作为参数(arguments),并且函数的返回值类型是整型Pointer to function having two argument that is pointer to float and return int D.以上都不是 第3 题 main(){ char p; char buf[10] ={ 1,2,3,4,5,6,9,8}; p = (buf+1)[5]; printf("%d" , p);}这段程序的输出是:【】 A.5 B.6 C.9 D.以上都不对 第4 题 Void f(char**);main(){ char * argv[] = { "ab" ,"cd" , "ef" ,"gh", "ij" ,"kl" }; f( argv );}void f( char **p ){ char* t; t= (p+= sizeof(int))[-1]; printf( "%s" , t);}这段程序的输出是:【】 A.ab B.cd C.ef D.gh 第5 题 #includeint ripple ( int , ...);main(){ int num; num = ripple ( 3, 5,7); printf( " %d" , num);}int ripple (int n, ...){ int i , j; int k; va_list p; k= 0; j = 1; va_start( p , n); for (; j

c语言面试题目100及最佳答案

c语言面试题目及最佳答案 1、描述?下gcc的编译过程? gcc编译过程分为4个阶段:预处理、编译、汇编、链接。 预处理:头?件包含、宏替换、条件编译、删除注释 编译:主要进?词法、语法、语义分析等,检查?误后将预处理好的?件编译成汇编?件。汇编:将汇编?件转换成?进制?标?件 链接:将项?中的各个?进制?件+所需的库+启动代码链接成可执??件 2、内存的最?存储单位以及内存的最?计量单位分别是? 内存的最?存储单位为?进制位,内存的最?计量单位字节 3、#include<> 与#include ""的区别? include<>到系统指定?录寻找头?件,#include ""先到项?所在?录寻找头?件,如果没有找再到系统指定的?录下寻找 4、描述?下变量的命名规则 变量名有字?、数值、下划线组成,但不能以数值开头 5、变量的声明与定义有啥区别?

声明变量不需要建?存储空间,变量的定义需要建?存储空间 6、谈谈c语?中有符号和?符号的区别? 有符号:数据的最?位为符号位,0表示正数,1表示负数 ?符号:数据的最?位不是符号位,?是数据的?部分 7、谈谈计算机中补码的意义 统?了零的编码 将符号位与其他位统?处理将减法运算转换成加法运算 8、谈谈数组的特点 同?个数组所有的成员都是相同的数据类型,同时所有的成员在内存中的地址是连续的9、数组的分类 数组的分类主要是:静态数组、动态数组两类。 静态数组:类似int arr[5];在程序运?就确定了数组的??,运?过程不能更改数组的??。动态数组:主要是在堆区申请的空间,数组的??是在程序运?过程中确定,可以更改数组的??。 10、描述?下?维数组的不初始化、部分初始化、完全初始化的不同点 不初始化:如果是局部数组数组元素的内容随机如果是全局数组,数组的元素内容为0

C语言面试题

C语言面试题: 1、问:在嵌入式开发中,为什么能通过C语言直接操作硬件? 答:因为C有指针,它是C语言的灵魂,它可以直接访问内存。 2、问:链表的作用?(这是上一个问题的延申,学员一般会举一堆例子来说明它的作 用,但这都不是重点,没有抓住主要矛盾)答:链表用于内存管理,链表节点中的指针域可以将不连续的内存彼此关联起来,实现内存的动态管理。 3、问:什么变量不能用指针指向? 答:寄存器变量(register 修饰),因为这个变量会优先选择存放到CPU寄存器中,而指针只能指向内存的任务区域,但不能指向寄存器。 4、问:有符号字符型和无符号字符型变量的最大值和最小值分别是多少(十六进制多 少),为什么? 答:有符号(-128 —127,-0X80—0X7F,无符号(0-255,0X00 —0XFF。 5、问:林锐面试题中四个有关内存操作的问题:第一题、运行会出现段错误(崩 溃): 答:因为参数是值传递,所以主调函数中的str指针已然指向空,不能向 里面拷数据,除非加上取地址,采用二维指针接收才能传递动态内存;第二题:乱码:答:实际上可能是乱码,也可能显示出一部分内容,显示乱码是因为刚才那段栈内存空间全部被覆盖,如果未完全覆盖则显示一部分内容;第三题:能够输出hello 答:但由于没有在同一层释放内存,容易导致内存泄露;第四题:对已经释放的内存进行操作答:会破坏其它有用数据,后果难以预料,通常提示出现段错误。 6问:哪些地方可以用到con st? const变量和函数输入参数用const修饰有哪些作用?答:1、定义常量 (1)const修饰变量,constTYPE ValueName=value value 是不可变的。 (2,将const 改为外部链接,作用于扩大至全局,编译时分配内存,并且可以不进行初始化,仅仅作为声明,编译器认为在在程序其他地方进行了定义; Extend constint ValueName= value; 2、指针使用CONST (1 ,指针本身是常量不可变 (char*,constpContent; Const (char*,pContent;(2,指针指向的内容是常量不可变 Constchar*pContent; Char const*pContent; (3,两者都不可变 Constchar*constpConten 3、函数中使用CONST (1)const 修饰函数的参数 a 传递过来的参数在函数内不可以改变;void function(const int var);b 参数指针所指内容为常量不可变;void function(const char *Var); c 参数本身为常量不可变; void function(char *const Var);

嵌入式C语言面试题(二)

1读程序段,回答问题 1.int main(int argc,char*argv[]) 2.{ 3.int c=9,d=0; 4.c=c++%5; 5.d=c; 6.printf("d=%d\n",d); 7.return0; 8.} 复制代码 a)写出程序输出 b)在一个可移植的系统中这种表达式是否存在风险?why? 1.#include"stdio.h" 2.int a=0; 3.int b; 4.static char c; 5.int main(int argc,char*argv[]) 6.{ 7.char d=4; 8.static short e; 9.a++; 10.b=100; 11.c=(char)++a; 12.e=(++d)++; 13.printf("a=%d,b=%d,c=%d,d=%d,e=%d",a,b,c,d,e); 14.return0; 15.} 复制代码 a)写出程序输出 b)编译器如果安排各个变量(a,b,c,d)在内存中的布局(eg.stack,heap,data section,bss section),最好用图形方式描述。 2中断是嵌入式系统中重要的组成部分,这导致了许多编译开发商提供一种扩展:让标准C 支持中断,产生了一个新的关键字__interrupt。下面的代码就使用了__interrupt关键字去定义了一个中断服务子程序(ISR),请评论以下这段代码。

1.__interrupt double compute_area(double radius) 2.{ 3.double area=PI*radius*radius; 4.printf("nArea=%f",area); 5.return area; 6.} 复制代码 3C/C++基础知识问题 a)关键字volatile在编译时有什么含义?并给出三个不同使用场景的例子(可以伪代码或者 文字描述)。 b)C语言中static关键字的具体作用有哪些? c)请问下面三种变量声明有何区别?请给出具体含义 1.int const*p; 2.int*const p; 3.int const*const p; 复制代码 4嵌入式系统相关问题 a)对于整形变量A=0x12345678,请画出在little endian及big endian的方式下在内存中是如何存储的。 b)在ARM系统中,函数调用的时候,参数是通过哪种方式传递的? c)中断(interrupt,如键盘中断)与异常(exception,如除零异常)有何区别? 5设周期性任务P1,P2,P3的周期为T1,T2,T3分别为100,150,400;执行时间分别为20,40,100。请设计一种调度算法进行任务调度,满足任务执行周期及任务周期。 6优先级反转问题在嵌入式系统中是一中严重的问题,必须给与足够重视。 a)首先请解释优先级反转问题 b)很多RTOS提供优先级继承策略(Priority inheritance)和优先级天花板策略(Priority ceilings)用来解决优先级反转问题,请讨论这两种策略。 参考答案: 15 存在风险,因为c=c++%5;这个表达式对c有两次修改,行为未定义,c的值不确定 int a=0;//data section int b;//data section static char c;//BSS int main(int argc,char*argv[]) {

嵌入式C语言运用(笔试面试前必看)

语言测试是招聘嵌入式系统程序员过程中必须而且有效的方法。这些年,我既参加也组织了许多这种测试,在这过程中我意识到这些测试能为面试者和被面试者提供许多有用信息,此外,撇开面试的压力不谈,这种测试也是相当有趣的。 从被面试者的角度来讲,你能了解许多关于出题者或监考者的情况。这个测试只是出题者为显示其对ANSI标准细节的知识而不是技术技巧而设计吗?这是个愚蠢的问题吗?如要你答出某个字符的ASCII值。这些问题着重考察你的系统调用和内存分配策略方面的能力吗?这标志着出题者也许花时间在微机上而不是在嵌入式系统上。如果上述任何问题的答案是"是"的话,那么我知道我得认真考虑我是否应该去做这份工作。 从面试者的角度来讲,一个测试也许能从多方面揭示应试者的素质:最基本的,你能了解应试者C 语言的水平。不管怎么样,看一下这人如何回答他不会的问题也是满有趣。应试者是以好的直觉做出明智的选择,还是只是瞎蒙呢?当应试者在某个问题上卡住时是找借口呢,还是表现出对问题的真正的好奇心,把这看成学习的机会呢?我发现这些信息与他们的测试成绩一样有用。 有了这些想法,我决定出一些真正针对嵌入式系统的考题,希望这些令人头痛的考题能给正在找工作的人一点帮助。这些问题都是我这些年实际碰到的。其中有些题很难,但它们应该都能给你一点启迪。 这个测试适于不同水平的应试者,大多数初级水平的应试者的成绩会很差,经验丰富的程序员应该有很好的成绩。为了让你能自己决定某些问题的偏好,每个问题没有分配分数,如果选择这些考题为你所用,请自行按你的意思分配分数。 预处理器(Preprocessor) 1 . 用预处理指令#define 声明一个常数,用以表明1年中有多少秒(忽略闰年问题) #define SECONDS_PER_YEAR (60 * 60 * 24 * 365)UL 我在这想看到几件事情: 1) #define 语法的基本知识(例如:不能以分号结束,括号的使用,等等) 2)懂得预处理器将为你计算常数表达式的值,因此,直接写出你是如何计算一年中有多少秒而不是计算出实际的值,是更清晰而没有代价的。 3) 意识到这个表达式将使一个16位机的整型数溢出-因此要用到长整型符号L,告诉编译器这个常数是的长整型数。 4) 如果你在你的表达式中用到UL(表示无符号长整型),那么你有了一个好的起点。记住,第一印象很重要。 2 . 写一个"标准"宏MIN ,这个宏输入两个参数并返回较小的一个。 #define MIN(A,B) ((A) <= (B) ? (A) : (B)) 这个测试是为下面的目的而设的: 1) 标识#define在宏中应用的基本知识。这是很重要的。因为在嵌入(inline)操作符变为标准C的一部分之前,宏是方便产生嵌入代码的唯一方法,对于嵌入式系统来说,为了能达到要求的性能,嵌入代码经常是必须的方法。 2)三重条件操作符的知识。这个操作符存在C语言中的原因是它使得编译器能产生比if-then-else 更优化的代码,了解这个用法是很重要的。 3) 懂得在宏中小心地把参数用括号括起来 4) 我也用这个问题开始讨论宏的副作用,例如:当你写下面的代码时会发生什么事?

试题题库-—嵌入式开发c语言面试题全套

嵌入式开发.C语言面试题 预处理器(Preprocessor) 1. 用预处理指令#define 声明一个常数,用以表明1年中有多少秒(忽略闰年问题) #define SECONDS_PER_YEAR (60 * 60 * 24 * 365)UL 我在这想看到几件事情: 1). #define 语法的基本知识(例如:不能以分号结束,括号的使用,等等) 2). 懂得预处理器将为你计算常数表达式的值,因此,直接写出你是如何计算一年中有多 少 秒而不是计算出实际的值,是更清晰而没有代价的。 3). 意识到这个表达式将使一个16位机的整型数溢出-因此要用到长整型符号L,告诉编译器 这个常数是的长整型数。 4). 如果你在你的表达式中用到UL(表示无符号长整型),那么你有了一个好的起点。记 住 ,第一印象很重要。 2. 写一个“标准”宏MIN,这个宏输入两个参数并返回较小的一个。 #define MIN(A,B) ((A) <= (B) (A) : )) C\C++试题集C\C++ Development这个测试是为下面的目的而设的: 1). 标识#define在宏中应用的基本知识。这是很重要的,因为直到嵌入(inline)操作符变 为标准C的一部分,宏是方便产生嵌入代码的唯一方法,对于嵌入式系统来说,为了能达到 要求的性能,嵌入代码经常是必须的方法。 2). 三重条件操作符的知识。这个操作符存在C语言中的原因是它使得编译器能产生比 if-then-else更优化的代码,了解这个用法是很重要的。 3). 懂得在宏中小心地把参数用括号括起来 4). 我也用这个问题开始讨论宏的副作用,例如:当你写下面的代码时会发生什么事?Least = MIN(*p++, b); 3. 预处理器标识#error的目的是什么? 如果你不知道答案,请看参考文献1。这问题对区分一个正常的伙计和一个书呆子是很有用 的。只有书呆子才会读C语言课本的附录去找出象这种 问题的答案。当然如果你不是在找一个书呆子,那么应试者最好希望自己不要知道答案。 死循环(Infinite loops) 4. 嵌入式系统中经常要用到无限循环,你怎么样用C编写死循环呢? 这个问题用几个解决方案。我首选的方案是:

c语言常见面试题

C/C++程序员面试重点以及应对方法: 非技术方面: 1. 仪表 2. 礼仪 3. 个人素养 技术部分: 基础: 一.C语言基础语法 1.进程中的内存布局 2.指针相关(野指针、数组越界)、数组与指针、二位指针3.数组与二维数组 4.动态内存分配(内存泄漏) 5.预编译与有参宏 6.Static与const 7.结构体、共用体以及结构体空洞 8.位运算 9.Sizeof与strlen 二.C++基础语法 见C/C++求职就业手册 重点: 1.Inline函数

2.指针与引用 3.Const 、static、sizeof 4.Class与struct的区别 5.构造函数与析构函数 6.继承与多态 三.数据结构(计算机专业需要全部掌握) 1.单链表(非计算机专业必须掌握) 2.循环链表 3.双向链表 4.队列 5.栈 6.二叉树 四.各种排序 非计算专业需掌握冒泡与选择排序 计算机专业需要掌握5种常见的排序方法 五.常见Linux命令 六.Linux系统编程 1.不带缓冲的文件操作(堵塞与非堵塞) 2. 带缓冲的文件操作(行缓冲、全缓冲、不缓冲) 3. 进程的概念(fork、进程的五种状态与状态切换) 4. IPC 5. 线程(线程与进程的区别)

6. 线程间同步(互斥锁与信号量) 7.网络编程(TCP/IP四层、三次握手、TCP与UDP) 8.Shell脚本编程 七.数据库编程 数据库的基本概念与SQL语句 SQLite的用法 八.QT编程与GUI的概念 九.智力测验题(一般公司不会考,比较大的公司及校园招聘会往往会考到) 项目经验: 1. 做过的项目 2. 如何与别人交流沟通与协助 3. 思考问题的方法 附:常见C语言笔试题 1.用预处理指令#define 声明一个常数,用以表明1年中有多少秒(忽略闰年问题) #define SECONDS_PER_YEAR (60 * 60 * 24 * 365)UL 2.写一个“标准”宏MIN ,这个宏输入两个参数并返回较小的一个。 #define MIN(A,B) ((A)<= (B) ? (A) : (B)) 3.用变量a给出下面的定义 a) 一个整型数(An integer)

经典嵌入式面试题

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

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

C语言笔试面试题附答案

C言面试笔试题(附答案) Question 1. (单选) 在顺序表(3,6,8,10,12,15,16,18,21,25,30)中,用二分法查找关键码值11,所需的关键码比 较次数为(3) 1. 2 2. 3 3. 4 4. 5 Question 2. (单选) 设散列表的存储空间大小为19,所用散列函数为h(key)=key mod 19,用开地址线性探查法解决碰撞。散列表的当前 状态如下:0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 190 194 768 559 582 39 3 208.现要将关键码 值75插入到该散列表中,其地址应为 (1) 1. 1 2. 11 3. 5 4. 15 Question 3. (单选) 作业管理的主要任务包括作业输入、作业处理和作业输出。其中作业处理的工作是Ⅰ.作业调度Ⅱ.作业控制Ⅲ. 作业后备 (3) 1. 只有Ⅰ 2. 只有Ⅱ 3. Ⅰ和Ⅱ 4. 都是 Question 4. (单选) 系统为了管理文件,设置了专门的数据结构----文件控制块(FC。FCB是在执行下列哪一个系统调用时建立的? (1) 1. create 2. open 3. read 4. write Question 5. (单选) 下面关于通道的叙述中,正确的是Ⅰ.通道相当于一个功能简单的处理机Ⅱ.通道完成数据输入输出工作Ⅲ.通道与 CPU共用一个内存 (4) 1. Ⅰ和Ⅱ

3. Ⅱ和Ⅲ 4. 都是 Question 6. (单选) 互操作性是指在不同环境下的应用程序可以相互操作,交换信息。要使采用不同数据格式的各种计算机之间能够相 互理解,这一功能是由下面哪一层来实现的? (2) 1. 应用层 2. 表示层 3. 会话层 4. 传输层 Question 7. (单选) 在UNIX的Shell程序中,可以使用位置变量。若要指明Shell引用的最近后台进程的号码,可 以使用位置变量 (2) 1. $$ 2. $! 3. $# 4. $- Question 8. (单选) 设二叉树根结点的层次为0,一棵深度(高度)为k的满二叉树和同样深度的完全二叉树各有f个结点和c个结点,下列 关系式不正确的是: (2) 1. f>=c 2. c>f 3. f=2k+1-1 4. C>2k-1 Question 9. (单选) 单链表的每个结点中包括一个指针link,它指向该结点的后继结点。现要将指针q指向的新 结点插入到指针p指向的 单链表结点之后,下面的操作序列中哪一个是正确的? (3) 1. q:=p^.link; p^.link:=q^.link 2. p^.link:=q^.link; q:=P^.link 3. q^.link:=p^.link; p^.link:=q; 4. p^.link:=q; q^.link:=p^,link Question 10. (单选) 某二叉树结点的对称序序列为A、B、C、D、E、F、G,后序序列为B、D、C、A、F、G、E。该二叉树结点的前序序

嵌入式Linux C语言面试试题

基础试题(C语言) 一、ANSI C/C++方面的知识 一.1、简答题。下面的题目必须全部答对才给分(20分): 1、如何在C中初始化一个字符数组。 2、如何在C中为一个数组分配空间。 3、如何初始化一个指针数组。 4、如何定义一个有10个元素的整数型指针数组。 5、s[10]的另外一种表达方式是什么。 6、GCC3.2.2版本中支持哪几种编程语言。 7、要使用CHAR_BIT需要包含哪个头文件。 8、对(-1.2345)取整是多少? 9、如何让局部变量具有全局生命期。 10、C中的常量字符串应在何时定义? 11、如何在两个.c文件中引用对方的变量。 12、使用malloc之前需要做什么准备工作。 13、realloc函数在使用上要注意什么问题。 14、strtok函数在使用上要注意什么问题。 15、gets函数在使用上要注意什么问题。 16、C语言的词法分析在长度规则方面采用的是什么策略? 17、a+++++b所表示的是什么意思?有什么问题? 18、如何定义Bool变量的TRUE和FALSE的值。 19、C语言的const的含义是什么。在定义常量时,为什么推荐使用const,而不是#defin e。 20、C语言的volatile的含义是什么。使用时会对编译器有什么暗示。 一.2、问答题。 1、----------------------------------------------------------- "匈牙利命名法"有什么优缺点?(2分) 2、----------------------------------------------------------- 下面x, y, *p的值是多少,有什么问题?(2分) int x, y, z = 2; int *p=&z; x=sizeof*p; y=x/*p; /* x=?, *p=?, y=?, 有什么问题?*/ 3、----------------------------------------------------------- 下面的语句是什么意思?如何声明或定义才使它们更易懂?(10分)

高通笔试题--嵌入式C开发人员的最好的0x10道笔试题(详细解析)

嵌入式C开发人员的最好的0x10道笔试题 约定: (1) 下面的测试题中,认为所有必须的头文件都已经正确的包含了 (2)数据类型 Char 一个字节1 byte Int 两个字节2 byte (16位系统,认为整型是2个字节) long int 四个字节4 byte float 四个字节4 byet double 八个字节8 byte long double 十个字节10 byte pointer 两个字节2 byte(注意,16位系统,地址总线只有16位) 第1题: 考查对volatile关键字的认识--- 高通笔试题 #include static jmp_buf buf; main() { volatile int b; b =3; if(setjmp(buf)!=0) { printf("%d ", b); exit(0); } b=5; longjmp(buf , 1); } 请问,这段程序的输出是 (a) 3 (b) 5(c) 0 (d) 以上均不是 第2题:考查类型转换--- 高通笔试题 main() { struct node { int a; int b; int c; }; struct node s= { 3, 5,6 }; struct node *pt = &s; printf("%d" , *(int*)pt);

} 这段程序的输出是: (a) 3 (b) 5 (c) 6 (d) 7 第3题:考查递归调用 int foo ( int x , int n) { int val; val =1; if (n>0) { if (n%2 == 1) val = val *x; val = val * foo(x*x , n/2); } return val; } 这段代码对x和n完成什么样的功能(操作)? (a) x^n (x的n次幂) (b) x*n(x与n的乘积) (c) n^x(n的x次幂) (d)以上均不是 第4题:考查指针,这道题只适合于那些特别细心且对指针和数组有深入理解的人--- 高通笔试题 main() { int a[5] = {1,2,3,4,5}; int *ptr = (int*)(&a+1); printf("%d %d" , *(a+1), *(ptr-1) ); } 这段程序的输出是: (a) 2 2 (b) 2 1 (c) 2 5 (d) 以上均不是 第5题:考查多维数组与指针 void foo(int [][3] ); main() { int a [3][3]= { { 1,2,3} , { 4,5,6},{7,8,9}}; foo(a); printf("%d" , a[2][1]); } void foo( int b[][3]) { ++ b; b[1][1] =9; }

相关主题
文本预览
相关文档 最新文档