- 嵌入式C语言面试题(附答案) 推荐度:
- 相关推荐
2024年嵌入式面试试题(附答案)
嵌入式分为操作系统和硬件两个方面,就业的方向更广、更深,就业机会和入职待遇比普通软件工程师好。下面小编为大家整理了关于嵌入式面试的试题,希望对你有所帮助。
嵌入式面试试题附答案 1
一、嵌入式系统中,动态分配内存可能发生的问题是什么
尽管不像非嵌入式计算机那么常见,嵌入式系统还是有从堆(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”。我用这个来开始讨论这样的一问题,看看被面试者是否想到库例程这样做是正确。得到正确的答案固然重要,但解决问题的方法和你做决定的基本原理更重要些。
二、关键字volatile有什么含意并给出三个不同的例子
一个定义为volatile的变量是说这变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值了。精确地说就是,优化器在用到这个变量时必须每次都小心地重新读取这个变量的值,而不是使用保存在寄存器里的备份。下面是volatile变量的几个例子:
1). 并行设备的硬件寄存器(如:状态寄存器)
2). 一个中断服务子程序中会访问到的非自动变量(Non-automatic variables)
3). 多线程应用中被几个任务共享的变量
三、嵌入式系统中经常要用到无限循环,你怎么样用C编写死循环呢?
这个问题用几个解决方案。我首选的方案是:
while(1) { }
一些程序员更喜欢如下方案:
for(;;) { }
这个实现方式让我为难,因为这个语法没有确切表达到底怎么回事。如果一个应试者给出这个作为方案,我将用这个作为一个机会去探究他们这样做的基本原理。如果他们的基本答案是:“我被教着这样做,但从没有想到过为什么。”这会给我留下一个坏印象。
第三个方案是用 goto
Loop:
…
goto Loop;
应试者如给出上面的方案,这说明或者他是一个汇编语言程序员(这也许是好事)或者他是一个想进入新领域的BASIC/FORTRAN程序员。
四、嵌入式系统中关于中断的问题
中断是嵌入式系统中重要的组成部分,这导致了很多编译开发商提供一种扩展—让标准C支持中断。具代表事实是,产生了一个新的关键字 __interrupt。下面的代码就使用了__interrupt关键字去定义了一个中断服务子程序(ISR),请评论一下这段代码的`。
__interrupt double compute_area (double radius)
{ double area = PI * radius * radius;
printf(” Area = %f”, area);
return area;
}
这个函数有太多的错误了,以至让人不知从何说起了:
1). ISR 不能返回一个值。如果你不懂这个,那么你不会被雇用的。
2). ISR 不能传递参数。如果你没有看到这一点,你被雇用的机会等同第一项。
3). 在许多的处理器/编译器中,浮点一般都是不可重入的。有些处理器/编译器需要让额处的寄存器入栈,有些处理器/编译器就是不允许在ISR中做浮点运算。此外,ISR应该是短而有效率的,在ISR中做浮点运算是不明智的。
4). 与第三点一脉相承,printf()经常有重入和性能上的问题。如果你丢掉了第三和第四点,我不会太为难你的。不用说,如果你能得到后两点,那么你的被雇用前景越来越光明了。
嵌入式面试试题附答案 2
1、下面有关servlet中init,service,destroy方法描述错误的是?
A.init()方法是servlet生命的起点。一旦加载了某个servlet,服务器将立即调用它的init()方法
B.Service()方法处理客户机发出的所有请求
C.destroy()方法标志servlet生命周期的结束
D.servlet在多线程下使用了同步机制,因此,在并发编程下servlet是线程安全的.
参考答案:D
2、下面有关java和c++的描述,错误的是?
A.java是一次编写多处运行,c++是一次编写多处编译
B.c++和java支持多重承
C.Java不支持操作符重载,操作符重载被认为是c++的突出特征
D.java没有函数指针机制,c++支持函数指针
参考答案:B
3、()设计模式将抽象部分与它的实现部分相分离。
A.Singleton(单例)
B.Bridge(桥接)
C.Composite(组合)
D.Facade(外观)
参考答案:B
4、哪些设计模式是降低资源使用率:
A.prototype
B.singleton
C.flyweight
D.abstract factory
参考答案:BC
5、运行在多核处理器上的Linux环境中,若临界区非常短,且不允许线程上下文切换的情况下,使用下列哪种机制满足上述需求并且性能最好?
A.SpinLock
B.Mutex
C.Semaphore
D.Condition variable
参考答案:C
6、Unix系统中,哪些可以用于进程间的通信?()
A.Socket
B.共享内存
C.消息队列
D.信号量
参考答案:ABCD
7、对一些资源以及状态的操作保存,最好是保存在生命周期的哪个函数中进行?
A.onPause()
B.onCreate()
C.onResume()
D.onStart()
参考答案:A
8、在android中使用Menu时可能需要重写的方法有?
A.onCreateOptionsMenu()
B.onCreateMenu()
C.onOptionsItemSelected()
D.onItemSelected()
参考答案:AC
二、解答题
1、编写一个函数,作用是把一个char组成的字符串循环右移n个。比如原来是“abcdefghi”如果n=2,移位后应该是“hiabcdefgh” 函数头是这样的:
//pStr是指向以结尾的字符串的指针
//steps是要求移动的n
void LoopMove ( char*pStr, int steps )
{
//请填充...
}
参考答案
正确解答1:
void LoopMove ( char*pStr, int steps )
{
int n = strlen( pStr ) - steps;
char tmp[MAX_LEN];
strcpy ( tmp, pStr + n );
strcpy ( tmp + steps, pStr);
*( tmp + strlen ( pStr ) ) = ;
strcpy( pStr, tmp );
}
正确解答2:
void LoopMove ( char*pStr, int steps )
{
int n = strlen( pStr ) - steps;
char tmp[MAX_LEN];
memcpy( tmp, pStr + n, steps );
memcpy(pStr + steps, pStr, n );
memcpy(pStr, tmp, steps );
}
【剖析】
这个试题主要考查面试者对标准库函数的熟练程度,在需要的时候引用库函数可以很大程度上简化程序编写的工作量。
最频繁被使用的库函数包括:
(1) strcpy
(2) memcpy
(3) memset
2、软件测试应该划分几个阶段?简述各个阶段应重点测试的点?各个阶段的含义?
参考答案:
大体上来说可分为单元测试,集成测试,系统测试,验收测试,每个阶段又分为以下五个步骤: 测试计划,测试设计,用例设计,执行结果,测试报告
初始测试集中在每个模块上,保证源代码的正确性,该阶段成为单元测试,主要用白盒测试方法。 接下来是模块集成和集成以便组成完整的软件包。集成测试集中在证实和程序构成问题上。主要采用黑盒测试方法,辅之以白盒测试方法。
软件集成后,需要完成确认和系统测试。确认测试提供软件满足所有功能、性能需求的最后保证。确认测试仅仅应用黑盒测试方法。
嵌入式面试试题附答案 3
1、一根金条长31厘米,如果把它切成数段,使其中的一段或几段能够接成长为1到31中任何整数的金条,请问要切几次?
A.4
B.5
C.6
D.7
参考答案:A
2、运行在多核处理器上的Linux环境中,若临界区非常短,且不允许线程上下文切换的情况下,使用下列哪种机制满足上述需求并且性能最好?
A.SpinLock
B.Mutex
C.Semaphore
D.Condition variable
参考答案:A
3、以下程序输出的结果是()
#include
int main(){
int x=10,y=10;
printf("%d %d",x--,--y);
}
A.10 10
B.9 9
C.9 10
D.10 9
参考答案:D
4、下面所述步骤中,不是创建进程所必须的步骤是?
A.由调度程序为进程分配CPU
B.建立一个进程控制块
C.为进程分配内存
D.将进程控制块链入就绪队列
参考答案:A
5、下面描述中,表达正确的有()
A.公有继承是基类中的public成员在派生类中仍是public的
B.公有继承是基类中的'private成员在派生类中仍是private的
C.公有继承是基类中的protected成员在派生类中仍是protected的
D.私有继承是基类中的public成员在派生类中仍是private的
参考答案:ACD
6、int listen(SOCKET s, int backlog);该函数中第二个参数的含义是?
A.是否打开log信息
B.是否打开后台log信息
C.后台等待连接队列的最大限制值
D.后台等待连接队列的最小限制值
参考答案:C
7、Java程序中的类名称必须与存放该类的文件名相同。
A.对
B.错
参考答案:B
8、造成软件危机的主要原因是以下里的哪几个?
①用户使用不当 ②硬件不可靠 ③对软件的错误认识 ④缺乏好的开发方法和手段 ⑤软件本身特点 ⑥开发效率低
A.(①②③)
B.(②③④)
C.(③⑤⑥)
D.(④⑤⑥)
参考答案:D
9、下面有个hibernate延迟加载,说法错误的是?
A.Hibernate2延迟加载实现:a)实体对象 b)集合(Collection)
B.Hibernate3 提供了属性的延迟加载功能
C.get支持延迟加载,load不支持延迟加
D.hibernate使用Java反射机制,而不是字节码增强程序来实现透明性
参考答案:C
10、确定模块的功能和模块的接口是在软件设计的那个阶段完成的?
A.需求分析
B.概要设计
C.详细设计
D.编码
参考答案:B
【嵌入式面试试题附答案】相关文章:
嵌入式C语言面试题(附答案)03-17
photoshop试题附答案07-15
CAD基础试题「附答案」06-23
excel单选试题「附答案」03-09
最新photoshop试题附答案10-10
ps理论试题「附答案」05-11
关于导游业务试题(附答案)02-26
最新ps考证试题附答案03-19