海康威视嵌入式软件工程师笔试题分享(含解答) | 您所在的位置:网站首页 › 嵌入式软件百科 › 海康威视嵌入式软件工程师笔试题分享(含解答) |
说明:本篇文章题库来源于网络,目的在于共同学习,共同进步,知识分享可以通过网络平台不断提高自己 海康威视嵌入式驱动工程师的题目只包含选择题和简答题,没有编程题。毫无疑问,C语言基础题依然是最多的(c可是嵌入式的笔尖),又因为是驱动方向,所以关于linux操作系统和底层方面的题会比较多一点,但是就题目的总体难度而言,其实并不是特别难。但如果对Linux和驱动方面不是很了解的话,会比较吃亏。 选择题1、若有8个待排序元素,采用冒泡排序和插入排序最大时间复杂度分别是() A.64、24 B.64、64 C.16、64 D.16、16 答案:B 解答:9大内部排序的时间复杂度和空间复杂度如下表所示: ![]()
2、下面程序中b的值是() int a[15] = { 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 }; int *p = &a[5]; int b = p[7]; A.14 B.13 C.11 D.12 答案:B 3、下面哪个命令用来卸载一个内核模块? A.modprobe B.delmod C.unmod D.rmmod 答案:D 4、使用快速排序对n个数进行排序,其在最佳情况、平均情况、最差情况下的时间复杂度分别是() A.n、nlogn、nlogn B.nlogn、nlogn、n^2 C.nlogn、nlogn、nlogn D.n、nlogn、n^2 答案:B 5、关于互斥锁的如下表述错误的是()。 A.互斥锁的加锁和解锁必须由同一线程分别对应使用 B.互斥锁只能为0/1 C.互斥锁的解锁过程不需要关心顺序,只需要成对使用即可 D.互斥锁用于线程的互斥 答案:C 解答:互斥量和信号量的区别: 互斥量用于线程的互斥,信号量用于线程的同步。这是互斥量和信号量的根本区别,也就是互斥和同步之间的区别;互斥量值只能为0/1,信号量值可以为非负整数。也就是说,一个互斥量只能用于一个资源的互斥访问,它不能实现多个资源的多线程互斥问题。信号量可以实现多个同类资源的多线程互斥和同步。当信号量为单值信号量是,也可以完成一个资源的互斥访问;互斥量的加锁和解锁必须由同一线程分别对应使用,信号量可以由一个线程释放,另一个线程得到。 6、Linux在某目录下查找某字符串通常如下哪个指令() A.find B.grep C.cat D.其他都不对 答案:A 解答:Linux的find命令用来在指定目录下查找文件 7、多个进程按照顺序逐一来访问某个资源,这种制约关系称之为() A.调度 B.协同 C.互斥 D.同步 答案:D 8、支持多道程序的操作系统在运行过程中,不断地选择新进程运行来实现CPU的共享,但其中不是引起操作系统选择新进程的直接原因的是() A.运行进程要等待某一事件发生 B.运行进程的时间片用完 C.有新进程进入就绪状态 D.运行进程出错 答案:C 解答:运行进程时间片用完,进程运行出错,进程进入阻塞状态(也就是等待某一事件发生)都会使操作系统发生调度,但有新进程进入就绪状态不会影响其他进程状态变化 9、操作系统分配资源的基本单位是() A.进程 B.程序 C.线程 D.指令 答案:A 10、执行下述的main函数后,输出结果是() int main() { int i = 10; switch(i) { case 9:i++; case 10:i++; case 11:i++; default:i++; } printf("result= %dn", i); return 0; } A.12 B.13 C.11 D.14 答案:B 11、以下能对二维数组a进行完整初始化的语句是() A.int a[2][3]=((0,1,2),(3,4,5)); B.int a[2][3]={{0,1,2},{3,4,5}}; C.int a[2][3]={{0,1},{2,3},{4,5}}; D.int a[2][3]={0,1,2,3,4}; 答案:B 12、下面程序的输出值,正确的是() #define CALC(x,y) x*y+x int main() { int a = CALC(2 * 3, 3 + 2); printf("result= %dn", a); return 0; } A.26 B.30 C.24 D.36 答案:A 13、下面程序的输出值,正确的是() void swap(int *a, int *b) { int *t; t = a; a = b; b = t; } int main() { int x = 1, y = 2; int *p = &x, *q = &y; swap(p, q); printf("%d %dn", *p, *q); return 0; } A.1 1 B.2 2 C.1 2 D.2 1 答案:C 解答:本题的swap函数是将形参中的a、b两个指针指向的地址交换了,实参p、q并没有变化。可以比对一下: swap(&x, &y); //有效果 void swap(int *a, int *b) { int t; t = *a; *a = *b; *b = t; } 14、假如test指针的值为0x12345678,则表达式test_p[1]的指针地址值是() char test[8] = { 0x01,0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08 }; int *test_p = (int*)test; A.0x12345678 B.0x1234567C C.0x12345679 D.0x1234567A 答案:B 15、下面的C语言程序运行后,n的值是() int n = 0; int f = 17; n = 4 * f % 3 + 1; A.3 B.9 C.2 D.0 答案:A 16、下面那个操作可以将flag的bit[2](假定bit[31...0]对应flag的32位)置0() A.flag|=4 B.flag^=4 C.flag&=~4 D.flag|=~4 答案:C 17、下面程序的运行结果为() #define TEST(a,b) a*b int main() { int a = TEST(1 + 2, 3); printf("result= %dn", a); return 0; } A.2 B.3 C.7 D.9 答案:C 18、对于堆、栈、队列描述错误的是() A.队列空间缓冲由进程申请,栈的空间缓冲由OS分配 B.堆总是一棵完全二叉树 C.堆的数据类型和队列相似 D.队列先进先出,栈后进先出 答案:B 19、以下对字符数组test赋值方式错误的是() A.char test[10]; strcpy(test,"test"); B.char test[10]; test="test"; C.char test[]={'t','e','s','t'}; D.char test[10]={'t','e','s','t'}; 答案:B 20、可用于中断下半段处理的处理机制有() A.tasklet B.工作队列 C.软中断 D.双向链表 答案:ABC 解答:上半部是不能中断的,仅仅是响应中断;下半部是可以中断的。对于适时要求高的,必须放在上半部。下半部的实现主要是通过软中断、tasklet、工作队列来实现的。上半部的功能是响应中断。当中断发生时,它就把设备驱动程序中中断处理例程的下半部挂到设备的下半部执行队列中去,然后继续等待新的中断到来。这样一来,上半部的执行速度就会很快,它就可以接受更多它负责的设备所产生的中断了。上半部之所以快,是因为它是完全屏蔽中断的,如果它没有执行完,其他中断就不能及时地处理,只能等到这个中断处理程序执行完毕以后。所以要尽可能多的对设备产生的中断进行服务和处理,中断处理程序就一定要快;下半部的功能是处理比较复杂的过程。下半部和上半部最大的区别是可中断,而上半部却不可中断。下半部几乎完成了中断处理程序所有的事情,因为上半部只是将下半部排到了它们所负责的设备中断的处理队列中去,然后就不做其它的处理了。下半部所负责的工作一般是查看设备以获得产生中断的事件信息,并根据这些信息(一般通过读设备上的寄存器得来)进行相应的处理。下半部是可中断的,所以在运行期间,如果其它设备产生了中断,这个下半部可以暂时的中断掉,等到那个设备的上半部运行完了,再回头运行这个下半部。 21、有函数fun()定义如下,在main函数调用fun函数执行过程中,使用了哪些函数参数传递方式() int fun(int a[], short *ptr, int &c){ ... } A.数组传递 B.指针传递 C.引用传递 D.值传递 答案-:BC 22、关于链表,描述正确的选项有() A.在运行时可以动态添加 B.物理空间不连续,空间开销更大 C.查找元素不需要顺序查找 D.可在任意节点位置插入元素 答案:ABD 23、对运算符优先级的判断,正确的是() A.取余运算符%高于加运算符+ B.逻辑与运算符&&高于赋值运算符= C.数组下标[]高于自增运算符++ D.左移运算符 |
CopyRight 2018-2019 实验室设备网 版权所有 |