与嵌入式软件开发工程师(BSP)的题目类型来说,多媒体&智能应用的笔试题在前面的选择题上类型差不多,主要是两条简答题。前者是偏向于Linux驱动方面,后者是偏向于视频/音频的采集或者编码方面。总体来说,大差不差。

 

选择题

1、下面的C程序在Linux下使用gcc编译成功后变量k处于()中。

int j = 100;

int main(int argc, char **argv)
{
	static k = 0;
	int i = 0;
	for (i = 0; i<j; i++) {
		k += i;
	}

	return 0;
}

text段

data段

bss段

KEY:B

2、下列表达式中a的值为多少?

int a=(3!=2);

1

0

3

2

KEY:A

3、下列表达式中a的值是多少?

char test[8] = { 0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08 };
int *test_p = (int *)test;
int a = test_p[1];

0x08070605

0x04030201

0x05060708

0x01020304

KEY:A

4、以下对字符串数组test赋值方式错误的是()。

char test[]={'t','e','s','t'};

char test[10]="test";

char test[10]; strcpy(test,"test");

char test[10]; test="test";

KEY:D

5、设有下列语句,下列选项中对数组元素正确的引用是()。

char a[9] = { 'H','I','K','V','S','I','O','N' };
char *ptr = a;

*(ptr+5)

ptr+5

ptr[a]

a[ptr]

KEY:A

6、下面程序的输出值,正确的是()。

#include <stdio.h>
#include <stdlib.h>

int main()
{
	int m;
	unsigned int a[20];
	unsigned int *p;

	m = 10;
	p = a;
	*(p++) = m++;
	*p = m;
	printf("%d %d\n", a[0], a[1]);

	return 0;
}

11 11

10 10

10 11

11 10

KEY:C

7、下列运算的结果是多少?

int a = 30 + 20 % 3 * 2;

4

42

34

64

KEY:C

8、在C语言程序中,下列运算后n的值是多少?

int n = 0;
int f = 17;
n = 4 * f % 3 + 1;

9

0

2

3

KEY:D

9、设有如下的宏定义,则执行语句后的输出是()。

#define f(x) (x*4)
printf("%d\n", 2 * f(5 + 3));

52

22

34

64

KEY:C

10、设有如下的宏定义,则执行语句后a的值是()。

#define TEST(a,b) a*b
int a = TEST(1 + 2, 3);

3

7

2

9

KEY:B

11、如下哪种存储空间数据访问效率最高()。

Flash

片内RAM

不可Cache内存

可Cache内存

KEY:D

12、以下关于信号量描述错误的为()。

信号量只能在线程之间共享

不允许销毁一个正在等待的信号量

用户态使用的信号量分为POSIX信号量和SYSTEM V信号量

信号量有两种基本操作:V操作,信号量加1;P操作,信号量减1(如果信号量为0,则阻塞)

KEY:A

解答:在 Linux 上,在相同进程的不同线程之间,则只使用 POSIX 信号量;在进程之间,可以使用 System V 信号量。

13、操作系统在运行过程中,不断地选择新进程运行来实现CPU的共享,但其中()不是引起操作系统选择新进程的直接原因。

有新进程进入就绪队列

运行进程的时间片用完

运行进程出错

运行进程要等待某一事件发生

KEY:A

14、Linux进程间通信方试中,如下哪一种最常用且最高效?

FIFO

消息队列

共享内存

管道

KEY:C

解答:为什么共享内存最高效?

消息队列和管道基本上都是4次拷贝,而共享内存(mmap, shmget)只有两次。

  • 4次:1,由用户空间的buf中将数据拷贝到内核中。2,内核将数据拷贝到内存中。3,内存到内核。4,内核到用户空间的buf;
  • 2次: 1,用户空间到内存。 2,内存到用户空间。

15、什么是临界区?

程序中访问共享资源的片段

其他都不对

程序结束运行即将退出的地方

程序开始运行的地方

KEY:A

16、冒泡排序时间复杂度和空间复杂度分别是()。

2*n、2

n*n、2

n*n、1

2*n、1

KEY:C

17、层序遍历的基本思路是:从二叉树的根节点开始,层数依次从1到n层,每层都从左儿子到右儿子遍历,依次按照层顺序遍历。下列序列都是经过层序遍历完全二叉树的结果,其中是堆的序列是()。

94、21、36、28、57、73

21、28、57、36、94、73

21、36、73、28、57、94

94、57、36、28、73、21

KEY:B

18、以下关于队列和栈的说法不正确的是()。

队列操作中,仅有入队和出队

设计队列和栈,均可以采用数组和链表的方式

可以使用队列模拟栈的操作

函数调用参数环境的保存,应用的是栈的操作

KEY:A

19、下列数据结构可以通过任意元素找到目标元素的结构是()。

顺序链表

双链表

单链表

静态链表

KEY:B

20、下面不属于cache的映射方式的是()。

full-associative(全关联)

direct-mapping(直接映射)

indirect-mapping(间接映射)

set-associative(组相关)

KEY:C

解答:cache是一种高速缓冲寄存器,是为解决CPU和主存之间速度不匹配而采用的一项重要技术。主存与cache的地址映射方式有全相联方式、直接方式和组相联方式三种:

  • 直接映射(direct-mapping):将一个主存块存储到唯一的一个Cache行;
  • 全相联映射(full-associative):可以将一个主存块存储到任意一个Cache行;
  • 组相联映射(set-associative):可以将一个主存块存储到唯一的一个Cache组中任意一个行。

参考链接:Cache 三种的映射方法

21、能在Linux内核态执行的是?

进程调度

缺页异常

时钟中断

命令解释

KEY:ABC

22、在程序执行过程中,该程序的某一个函数func()中申请的static型变量V有以下哪些特性()。

V仅能被func()使用

V存在于整个程序执行过程

V存在于func()被调用期间

V能被整个程序使用

KEY:AB

23、下面关于Heap和Stack内存空间描述正确的是()。

程序运行过程中函数调用时参数的传递在Stack上进行

Stack的空间由操作系统自动分配/释放

C中的malloc函数分配的内存空间在Stack上

Heap上的空间手动分配/释放

KEY:ABD

24、有函数fun()定义如下,在main函数调用fun函数执行过程中,使用了哪些函数参数传递方式?

int fun(int a[], short *ptr, int &c){
        ...
}

数组传递

指针传递

引用传递

值传递

KEY:BC

25、以下关于进程和线程的描述正确的有()。

进程切换比线程切换的开销更小

每个线程拥有自己的堆栈和局部变量

线程是程序执行的最小单位

进程有独立的地址空间,而线程没有

KEY:BCD

 

简答题

1、录像存储是DVR/NVR产品中一个非常重要的功能,客户对产品的存储能力非常看重。假设存储需求总量=通道数*录像码率*录像时间:已知通道数=16,各个通道的录像码率都是4Mb/s,预期录像时间为一个月(按照30天计算),请问客户至少需要多大的硬盘?

解答:30*24*3600*4*16=165888000Mb=162000Gb

 

2、假定我们采用32k的采样率,对音频进行采样,采样精度为16bit,双声道。请问每秒的数据量是多少字节?如果将上面采样的数据,按照20ms作为一帧,则每帧数据量是多少字节?如果采用I2S总线传输,请问I2S中串行时钟(SCLK)的频率至少应为多少?

解答:1秒钟的数据量:32000*16*2=1024000bit=128000字节;1帧的数据量:128000/(1000/20)=2560字节;SCLK频率:2*32000*16=1024000Hz