嵌入式面试常见问题(九)—各大公司面试题

3、锐捷网络笔试题

笔试时间:2020.09.24
时长:90分钟
题目:25道题,全是C语言代码题,问输出结果。
总结:时间紧,任务重,硬核。

1、

#include<stdio.h>
char *getstr1()
{
char s[]="str1"; //static char s[]="str1";
return s;
}
char *getstr2()
{
char *s="str2";
return s;
}
void getstr3(char *s)
{
s="str3";
return;
}
int main()
{
char *s1,*s2,*s3;
s1=getstr1();
s2=getstr2();
getstr3(s3);
printf("str1:%s\r\n",s1);
printf("str2:%s\r\n",s2);
printf("str3:%s\r\n",s3);
}

第一个,函数内部定义的变量在函数结束时候释放掉了,所以返回会出错,
第二个是str2,
第三个定义是void,没有返回值,打印空,内存非法访问。

str1:
str2:str2
str3:null

2、

#include<stdio.h>
#include<string.h>
int main()
{
char *str="Ruijie";
printf("str1:%d\r\n",sizeof(str));
printf("str2:%d\r\n",strlen(str));
printf("str3:%d\r\n",sizeof(*str));
}

4 6 1

3、

#include<stdio.h>
int main()
{
int x=0,y=0;`
while(x<15){
y++;
x+=++y;
}
printf("%d %d",y,x);
}

8 20

4、

#include<stdio.h>
#define N 3
#define Y(n) ((N+1)*n)
int main()
{
int z;
z=2*(N+Y(5+1));
printf("%d",z);
}

48(考察宏定义的边界效应)

5、

#include<stdio.h>
#include<string.h>
static int arr[3][3]={0};
void init(int (*ptr)[3])
{
int i=0;
for(i=0;i<3;i++){
*(ptr[i])=i;
}
return;
}
int main(int argc,char **argv)
{
init(arr);
printf("%d,%d\n",arr[0][1],arr[1][0]);
return 0;
}

0 1
ptr[0]是等于&a[0][0],所以*ptr[0]=a[0][0]
所以最后这个二维数组是 000 100 200

6、

#include<stdio.h>
#include<string.h>
int main()
{
char str[]={'o','u','l','d'};
printf("%d",strlen(str));
return 0;
}
#include<stdio.h>
#include<string.h>
int main()
{
char str[]={'o','u','l','d','\0'};
printf("%d\n",strlen(str));
printf("%s\n",str);
return 0;
}

%s 遇到\0才会截止输出,遇到\0才会截止计算

7、

#include<stdio.h>
#include<string.h>
int main()
{
char a[]="ABC";
char b[]={'A','B','C'};
printf("%s\n",a);
printf("%s\n",b);
printf("%d\n",sizeof(a));
printf("%d\n",sizeof(b));
return 0;
}

如果用%s输出,需要注意打印字符串的时候,他认为’\0‘是结束符,所以你不加’\0‘的时候,他可能会
打印其他乱七八糟的东西
ABC
ABCABC
4
3

8、

#include<stdio.h>
#include<string.h>
int main()
{
char a=0xff;
printf("%d,%u\n",a>>8,a>>8); //这里的%d 让它变成了int
return 0;
}

-1,4294967295

看下面。右移八位全部移走了,然后补了符号位,1111 1111。另外,在内存中,因为是有符号的,所
以1111 1111是个负数,负数在内存中是补码的形式存在,所以11111111-1再取反就是真实的数,就
是-1。

9、

#include<stdio.h>
#include<string.h>
int main()
{
printf("%d\n",~3&(2&(3^4))); //按位取反 异或
return 0;
}

0

10、

#include<stdio.h>
int main()
{
int a[3][4]={{10,20,30,40},{50,60,70,80},{90,91,92,93}};
int (*p)[4];
p=a+1;
printf("%d\n",p[1][-1]);
return 0;
}

80

11、

#include<stdio.h>
int main()
{
int a[2][3]={{1,3,5},{2,4,6}};
int m,*ptr;
ptr=&a[0][0];
m=(*ptr)*(*(ptr+2))*(*(ptr+2));
printf("%d\n",m);
return 0;
}

25

12、

#include<stdio.h>
#include<string.h>
int test()
{
static int m=0;
int n=0;
m++;
n++;
printf("m=%d,n=%d\n",m,n);
return 0;
}
int main()
{
test();
test();
return 0;
}

13、

#include<stdio.h>
int main()
{
int a=0,b=0,c=0;
int i;
for(i=0;i<5;i+=2){
switch(i){
case 1:
a++;
b++;
break;
case 2:
c++;
a++;
case 3:
c++;
case 4:
b++;
default:
a++;
break;
}
}
printf("%d,%d,%d\n",a,b,c);
return 0;
}

4 2 2(没有break的话会一直向下执行)

14、

#include<stdio.h>
#include<string.h>
int main()
{
char a[7]="abcdef",b[4]="ABC";
strcpy(a,b);
printf("%c\n",a[4]);
return 0;
}

e

15、

#include<stdio.h>
int main()
{
int y=3,x=3,z=1;
printf("%d,%d\n",(++x,++y),z+2);
return 0;
}

4 3(逗号运算符)

#include<stdio.h>
#include<string.h>
int main()
{
int y=3,x=3,z=1;
//printf("%d,%d\n",(++x,++y),z+2);
printf("%d,%d\n",(++x,++y),z++);
return 0;
}

4 1

16

#include<stdio.h>
#include<string.h>
int main()
{
char b='v';
printf("%C\n",b-20);
return 0;
}

b(ASCII)

17

#include<stdio.h>
#include<string.h>
int main()
{
char str[]="abcde";
char *p;
p=&str[2];
printf("%d\n",*p);
return 0;
}

99(ASCII)

18、什么情况下会编译通过,运行出错

A、gcc用-Werror选项,程序组译失败。
B、gcc使用-Werror选项,编译正常,程序运行时崩溃。
C、gcc使用-Werror选项,编译正常),程序正常运行,备份数据输出的为随机数,
D、程序正常运行,备份数据输出的为1.

19、以下哪些任务不可以放到中断的上半部执行?

A、时间敏感的任务
B、硬件相关的任务
C、进程通信的任务
D、不可被中断的任务

20、线程

25、如下所示程序,LINE C 和LINE P将会输出什么?

LINE C: value=
LINE P: value=
#indlude <stdio.h>
#indlude <pthread.h>
#include <unistd.h>
#include <sys/wait.h>
int value=0
void *runner(void *param) /* the thread */
{
value=5;
pthread_exit(0);
}
int main(void)
{
pid_t pid;
pthread_t tid;
pthread_attr_t attr;
pid=fork();
if(pid==0)
{
pthread_attr_init(&attr);
pthread_create(&tid,&attr,runner,NULL);
pthread_join(tid,NULL);
printf("LINE c: value=%d\n",value); /*LINE C*/
}
else if(pid> 0)
{
wait(NUL);
printf("LINE P: value=%d\n",value); /*LINE P*/
}
return0;

4、360公司笔试题

投递的嵌入式Linux软件开发相关岗位,给的软件综合卷A卷(许多大公司笔试给的都是软件综合)。
因为是软件综合,所以各种知识都考查,java、C++、数据结构、算法、Linux等全部考察,所以要求你
基础扎实。
笔试时间:2020.09.11,20:00——22:00
选择题40个,一共80分。
编程题2个,一共40分。
选择题:
1、Java中GUI菜单的设置规则
2、一段C++代码的运行结果
3、例图
4、E-R图的规则有哪些?
5、C类IP地址192.168.2.0/24,16台主机时的子网掩码是多少?
6、socket编程中so_pcb 结构体的定义是哪个?
7、DNS定义是什么?
8、下列不是 NP 问题的是?
9、面向对象编程中:类,对象,实例的关系?
10、贪心算法适用于解决哪些问题?
11、LP问题是什么?
12、linux中查看路径变量的命令?
回答:echo $PATH
13、linux中kill -9 什么意思?
14、linux中grub的配置文件哪里?
回答:在/boot/grub/grub.conf目录下
15、linux中mysql数据库默认的端口是?
回答:3306
mysql的默认端口是3306,可以编辑用户目录下的 .my.cnf 文件进行修改。

sqlserver 默认端口号为:1433
oracle 默认端口号为:1521
DB2 默认端口号为:5000
PostgreSQL 默认端口号为:5432

16、序列图是什么意思?
17、原始数据类型自己可以更改吗?
18、类的继承方式中,基类共有成员,保护成员,派生类有哪些不同?
19、使用游标的5个步骤?
20、下列系统调用中,不会导致进程阻塞的是?
21、多进程中临界区的概念如何解释?
22、有三个并发进程共享变量S,则与变量S相关的临界区有几个?
23、C++中,一个函数的返回值类型由什么决定?
24、由二叉树变成树的规则?
25、链栈?
26、n个顶点的有向图,所有顶点的出度之和为S,则所有顶点的入度之和为?
27、考察Java的语法?
28、举证
29、一段C++代码运行结果
30、一段C++代码运行结果
31、关系的三种类型?
32、考察分治法
33、如何用DFS遍历一个无环有向图
34、一段C++代码运行结果
35、一段C++代码运行结果
36、char数组强制转换成 int 命令是哪一个?
37、
38、一段C++代码运行结果
39、设串长为n,模式串长为m,则KMP算法所需的附加空间为?
A、O(m)
B、O(n)
C、O(m*n)
D、O(nlog2m)
KMP算法时间复杂度为O(m+n),空间复杂度为O(m)。因为KMP算法涉及到next数组的存储,且next数
组是基于模式串长度计算的。
40、关于标准形线性规划表述正确的是?
编程题:
1、企业管理:根据打开记录推算工号(具体忘了)
2、编写密码复杂性验证程序:输入几组字符串,要求有大写字母,小写字母,数字,符号,长度大于
8,则输出pass,否则提示错误

5、百度笔试题

笔试时间:2020.09.03,19:00-21:00
题型:
单选15道×3=45
不定项选择题5道×3=15
编程题3道×20=60
单选:
1、反转链表的代码补全(嵌入式笔试链表类题目必考,比如双向链表的插入删除。字符串翻转考察的也
不少)
2、二叉平衡树(AVL)树,插入30,重新平衡后,某个数的左右孩子节点是多少。
3、数据查询指令是哪一个?
4、如果IP是212.212.77.55,子网掩码是255.255.252.0,那么它在自己组的子网广播可以达到的目的地
址是哪个?
5、一段php脚本运行结果是哪一个?
6、一段代码的时间复杂度和空间复杂度是多少?
7、给出一个二叉树的遍历方式(前、中、后)。
8、一段C++代码,判断一段程序是内存泄漏、编译出错还是运行出错?
9、用户线程和内核线程的区别和联系。
10、简单逻辑题。
11、linux中让磁盘大小从小到大排列的命令是?
12、某算法的时间复杂度是多少?
13、一段java代码,让你判断while循环的时间复杂度?
14、一段伪代码的同步和互斥,以及PV操作补全代码
15、排序算法会一个即可完成(冒泡,选择,快排,二分)
不定项选择题:
1、while循环的时间复杂度判断。
2、ping、tcpdump、strace、wireshark工具分别是用来干吗的?
3、C++语言中static变量的作用域是什么?
4、C++中:类重写、纯虚函数、虚析构函数的编译错误和内存泄漏问题该如何?
5、一段C++代码的运行结果。
编程题:
最后的编程题,三道都没有看懂,好像全是动态规划,没思路。
总结:
百度考察的范围比较广,数据结构考察的比较多,C++考察的也比较多,C语言反而少一些,所以大家要
好好准备。
以上题目没有列出选项,大家主要关注百度考察的知识点,自己总结一下,把知识点归类。不同企业的
嵌入式岗考察是有技术偏向性的,大家要针对性准备。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值