与嵌入式软件开发工程师(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