百面嵌入式专栏(笔试题)北京联发科嵌入式软件工程师笔试题目
逻辑题
1. 参加断型冠状病毒疫苗开发研讨会的70名学者中,亚商学者39人,博士33人,非亚裔学者中无博士学位的4人,根据以上陈述,参加此次研讨会的亚裔博士有几人?
A 1
B 2
C 6
D 7
E 8
C
亚裔学者39人,博士33人,非亚裔学者中无博士学位4人,这三者加起来是76人,但实际总人数只有70人。亚裔学者和博士两个概念之间为交叉关系,这两个概念和非亚裔学者中无博士学位者之间都是全异关系。这说明,既是亚裔学者又是博士即亚裔博士有6人。
也可以通过运用计算法来求解。设亚裔博士有x人,则可列方程:31+33-x+4=70,解这个方程,可得:x=6。
2. 某省妇女儿童占全省总人口的2/3。如果妇女是指所有女性人口,儿童是指所有非成年人口,并且对任一年龄段,该省男女人口的数量持平,则上述断定能推出以下哪项结论?
A 该省男性成年人口和儿童人口持平。
B 该省男性成年人口大于儿童人口。
C 该省男性成年人口小于儿童人口。
D 该省女性成年人口和男性儿童人口持平
E 该省男性成年人口和女性儿童人口持平。
A
由题干,可以给出以下表
女性 男性 成年 1/3 1/3 2/3 儿童 1/6 1/6 1/3 1/2 1/2 由任一年龄段,该省男女人口的数量持平,可得总人口男女持平。
由妇女儿童占全省总人口的三分之二,可得成年男性占三分之一。
由成年男性占三分之一,得男童占六分之一(因为男性占二分之一)。
由男童占六分之一,得女童占六分之一。因此,该省男性成年人口和儿童人口持平。
3. 某次讨论会共有25名与会者,已知(1)至少有7名青年教师是男性,(2)至少有8名男教师已过中年(3)至少有10名男青年是教师;如上述3句话两真一假,则关于与会人员可以得出以下哪项
A 青年教师至少有10名
B 男教师至多有15名
C 男青年都是教师
D 男青年至少有7名
D
[1]:大于等于7名青男 [2]:大于等于8名中男[3]:大于等于10名青男。
[1]与[3]数量上有重叠部分,如果[3]为真,则[1]一定为真;
如果[1]为假,则[3]一定为假。此时就会两个为假,与题干条件的两真一假相矛盾,故[1]必真。而如果[1]为真,既青年男教师大于等于7人,那么男青年至少有7名。
4. 某中药配方有如下要求(1)如果有甲药材,那么没有乙药材(2)如果没有丙药材,那么必须有丁药材(3)人参和天麻不能都有(4)如果没有甲药材而有丙药材,则需要有人参。如果还有天麻,则关于该配方的断定哪项为真?D
A 含有甲药材
B 含有丙药材
C 没有丙药材
D 含有乙药材或不含丁药材
无正确答案
由“含有天麻”和(3)可以推出,不含有人参;进而由(4),否定后件就能否定前件,可以推出,有甲药材或者没有丙药材。
如果有甲药材,由(1)可以推出,无乙药材;如果没有丙药材,由(2)可以推出,有丁药材;故无乙药材或有丁药材。
因此,选项中没有正确答案。
5. 某国拟在甲、乙、丙、丁、戊己6种农作物中进口几种,用于该国庞大的动物饲料产业,考虑到些农作物可能有违禁成分,以及它们之间存在的互补或可替代因素,该国对进口这些农作物有如下要求(1)它们当中不含违禁成分的都进口。2)如果甲或乙含有违禁成分,就进口丙和丁。3)如果戊含有违禁成分,那么己就不进口了;如果进口丙,就进口乙和己。(4)如果不进口己,就进口戊;如果进口戊,就不进口己。根据上述要求,以下哪项所列的农作物是该国可以进囗的;
A 甲、乙、丙
B 乙、丙、丁
C 甲、乙、戊
D 甲、乙、己
E 丙、戊、己
C
A选项与(2)矛盾
B选项与(2)矛盾
D选项与(3)矛盾
E选项与(4)矛盾
不定向选择
1. int i =1;const int j =2;以下说法不正确的是
A const int *p1 = &i;
B const int *p2 = &j;
C int *const p3 = &i;
D int *const p4 = &j;
D
int *const p4 ,p4为指针常量,p4指向的内存位置不能改变,但是,p4所指内存存放的值是可以改变的。j表示常量,其数值不能被改变。
将j的地址赋给p4后,p4可以执行其他操作( 如*p4=4;),将j的值改变,因此,int *const p4 = &j;是错误的。
2. 以下关于内存的说法正确的是
A RAM是随机存储器,在断电时将丢失其存储内容,ROM是只读存储器,断电时不会丢失存储内容
B 内存的数据带宽与内存的数据传输频率、内存数据总线位数以及内存大小有关
C 用户进程通常情况只能访问用户空间的虚拟地址,不能访问内核空间虚拟地址
D Linux中使用 buddy system算法可以管理页外内存碎片,使用slub算法可以管理页内内存碎片
ACD
B:内存的数据带宽的计算公式是:数据带宽=内存的数据传输频率×内存数据总线位数/8
3. 以下哪些事件会导致进程的创建
A 系统初始化
B fork系统调用
C pthread_ create函数调用
D 一个批处理作业的初始化
ABD
创建进程的多种方式但凡是硬件,都需要有操作系统去管理,只要有操作系统,就有进程的概念,就需要有创建进程的方式,一些操作系统只为一个应用程序设计,比如扫地机器人,一旦启动,所有的进程都已经存在。
而对于通用系统(跑很多应用程序),需要有系统运行过程中创建或撤销进程的能力,主要分为4中形式创建新的进程
1.系统初始化(查看进程 linux中用ps命令, windows中用任务管理器,前台进程负责与用户交互,后台运行的进程与用户无关,运行在后台并且只在需要时才唤醒的进程,称为守护进程,如电子邮件、web页面、新闻、打印)
2.一个进程在运行过程中开启了子进程(如 nginx开启多进程,os.fork等)
3.用户的交互式请求,而创建一个新进程(如用户用鼠标双击任意一款软件,qq,微信等)
4.—个批处理作业的初始化(只在大型机的批处理系统中应用)
无论哪一种,新进程的创建都是由—个已经存在的进程执行了—个用于创建进程的系统调用而创建的。
4. 下列说法正确的有
A 计算机体系结构是一门研究计算机系统软件结构的学科。
B 现代计算机处理器结构按照存储方式划分,可分为复杂指令集计算机和精简指令集计算机
C RISC技术对比CISC最大的区别就是对CPI的精简
D 单指令流单数据流计算机的每个机器周期最多执行一条指令
CD
A.计算机体系结构主要研究软件、硬件功能分配和对软件、硬件界面的确定
B.现代计算机处理器结构按照指令系统方式划分,可分为复杂指令集计算机和精简指令集计算机
5. 32位系统中,该程序的输出为
//参数传递 退化为指针
void Func(char str_arg[100])
{
printf("%d\n",sizeof(str_arg));
}
int main()
{
char str[] = "Hello";
printf("%d\n",sizeof(str));
printf("%d\n",strlen(str));
char *p = str;
printf("%d\n",sizeof(p));
Func(str);
return 0;
}
A 5 5 4 4
B 6 5 4 4
C 6 5 6 4
D 5 5 5 100
B 6 5 4 4
使用函数**strlen()求某个字符串的长度时是不包括结尾标志符'\0'的,但当你用sizeof()**求某个字符串占用的内存空间时,结尾字符'\0'是被包括在里面的。
strlen用来计算字符串的长度(在C/C++中,字符串是以"\0"作为结束符的),它从内存的某个位置(可以是字符串开头,中间某个位置,甚至是某个不确定的内存区域)开始扫描直到碰到第一个字符串结束符\0为止,然后返回计数器值。
sizeof是C语言的关键字,它以字节的形式给出了其操作数的存储大小,操作数可以是一个表达式或括在括号内的类型名,操作数的存储大小由操作数的类型决定。
6. 有以下程序,求输出结果
#include<stdio.h>
int fun(int i)
{
int cnt = 0;
while(i)
{
cnt++;
i=i&(i-1);
}
return cnt;
}
int main()
{
printf("%d\n\r",fun(2021));
return 0;
}
8
&是按位与,对应位都为1时该位得1,否则得0。所以 i&(i-1) 的作用:将i的二进制表示中的最右边的1置为0。
在本题中即数出2021转换成二进制有几个1就会走几次循环(不断除2)。2021对应的二进制是:10100111111,一共8个1,故走8次。
扩展:(n > 0 && ((n & (n - 1)) == 0)是判断n是不是2的次幂
7. 若 int x = 5&6,那么x的值为()
A 3
B 4
C 5
D 6
B
5: 0101
6: 0110
x: 0100
8. 以下错误的表达式为
struct {
inr a;
char b;
}Q,*p=&Q;
A Q.a
B (*p).b
C p->a
D *p.b
D
*p=&Q ,把Q的地址赋值给了指针p,对p解引用其实就是Q。
A 选项肯定是对的,结构体的正常访问方法。
B 选项 (*p).b 等价于 Q.b
C p->a p为指针访问结构体用->没问题。
D *p.b 优先级问题,.的优先级高于 *,所以 *p.b == *(p.b),p为指针,访问结构体成员要用->。
扩展:结构体中.和->两种访问区别
定义结构体指针,访问成员时就用->
定义结构体变量,访问成员时就用.
struct A { int a; char b; }; struct A q; //访问成员就用:q.a; struct A *p; //访问成员就用:p->a;
9. 关于对象的this指针,以下叙述不正确的有
A 必须显示地在类中定义声明this数据成员才能使用this指针
B 一且生成一个对
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
首先我们都知道,操作系统是所有软件的基础,所有上层软件都要依赖于操作系统提供的各种机制,才能运行。 而我在工作中也认识了很多技术大牛,根据我的观察,他们的基本功往往十分扎实,这对他们的架构视野、技术成长都十分有帮助。 可以说,操作系统作为计算机的灵魂,眼前的工作、日常的生活,甚至这个行业未来的“诗与远方”都离不开它。