嵌入式面试试题附答案

时间:2024-10-23 08:56:33 嵌入式培训 我要投稿

2024年嵌入式面试试题(附答案)

  嵌入式分为操作系统和硬件两个方面,就业的方向更广、更深,就业机会和入职待遇比普通软件工程师好。下面小编为大家整理了关于嵌入式面试的试题,希望对你有所帮助。

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

2016年嵌入式工程师面试题及答案「精选」03-07

关于导游业务试题(附答案)02-26

最新ps考证试题附答案03-19