没有合适的资源?快使用搜索试试~ 我知道了~
嵌入式软件工程师面试宝典
需积分: 0 18 浏览量
2023-04-01
16:50:00
上传
评论
收藏 2.99MB DOCX 举报
嵌入式软件工程师面试宝典
资源推荐
资源详情
资源评论













嵌入式软件开发工程师面经指南
目录
序言错误!未定义书签。
第一部分:c 语言基础考题 2
一.预处理 2
二. 关键字 3
三. 结构体 5
注:面试官常问的 C 语言基本概念 7
第二部分:数据结构常考知识 10
一. 链表 10
1. 单向链表 10
2.双向链表 11
二. 排序 11
第三部分:linux 常考基础知识 13
一. linux 系统面试常考指令 13
二. linux 进程间通信 14
三. linux 进程(线程同步与互斥)20
四.Linux 进程和线程的区别 31
五.buffer 和 cache 的区别 36
第四部分. 网络通信应用 40
1.TCP、UDP 协议的区别:41
第五部分.ARM 体系架构 42
附录(一些公司的笔试题)44

第一部分:c 语言基础考题
一.预处理
1.预编译,编译过程最先做的工作是啥?
答:编译#字开头的指令,如
拷贝#include 包含的头文件代码,#define 宏定义的替换,条件编译 ifndef
何时需要预编译 ?
答:
①总是经常使用但是不经常改动的大型代码。
②程序由多个模块组成,所有模块都使用一组标准的包含文件和相同的编译选
项,将所有包含文件预编译为一个 “预编译头”。
2. c 语言中 # 与 ##的区别以及作用
答:# :把宏参数变成一个字符串; ## :把两个宏参数连接到一起(只能两个)
例:
#define hehe(x,y) x##y
int main()
{
char string[]="hello world!";
printf("%s\n",hehe(str,ing));
system("pause");
return 0;
}
3. 如何避免头文件被重复包含?
答:解决方法:
应用#ifndef #define #endif

二.关键字
1. static 关键字的作用?
答:static 最主要功能是隐藏,其次因为 static 变量存放在静态存储区,具备持
久性和默认值为 0
①隐藏作用,可以在不同的文件中定义同名变量和同名函数。
②对于变量来说,保持变量持久,静态数据区的变量会在程序刚刚运行时就完
成初始化,也是唯一一次初始化;储存在静态数据区,静态存储区只有两种变
量(全局变量和 static 静态变量)。
③默认初始化为 0x00,和全局变量一样的属性,减少程序员的工作量。
2. const 关键字的作用
答:
①对变量加以限定不能被修改,常量必须在定义的时候同时被初始化。
②const 和指针一起使用,
const int *p1;
int const *p2;
int *const p3;
在三种情况中,第三种指针是只读的,p3 本身的值不能被修改;
第一二种情况,指针所指向的数据是只读的,p1,p2 的值可以修改,但指向的数
据不能被修改。
③const 和函数形参一起使用
使用 const 单独定义变量可以用#define 命令替换,const 通常放在函数形参中。
如果形参是一个指针,为了防止在函数内部修改指针指向的数据就可以用 const
来限制。
3. volatile 关键字的作用?
编译器优化的介绍: 内存访问速度远远比不上 cou 处理的速度,为了提高性能,
从硬件上引入高速缓存 cache,加速对内存的访问。
编译优化的方法有:将内存变量缓存到寄存器;调整指令顺序充分利用 CPU 指

令流水线。
答:因为访问寄存器要比访问内存单元要快的多,编辑器会作减少存取的优化。
当使用 volatile 声明函数变量的时候,系统总是重新从它所在的内存读取数据。
遇到这个关键字声明的变量,编译器对访问该变量的代码不再进行优化,从而
提供对特殊地址的稳定访问; 如果不使用 valatile,编译器将对所声明的语句进
行优化,以免出错。
4. extern 关键字的作用?
答:
①函数内的局部变量,函数外定义的变量为全局变量,为静态存储方式,生存
周期为整个程序,有效范围为定义变量的位置开始到本源文件结束。
如果在定义前想要引用该全局变量,则应该加上 extern 作为 “外部变量声明”。
多个源文件的工程想要引用一个源文件的外部变量也只许引用变量的文件中加
入 extern 关键字加以声明,但是可以在引用的模块内修改其变量的值,慎用。
②extern “C”: C++代码调用 C 语言代码。在 C++的头文件中使用。
5. sizeof 关键字的作用?
答:sizeof 在 编译阶段处理,作用为取得一个对象(数据类型或数据对象)的
长度(即占用内存的大小,以 1 字节为单位)。
①指针可以看做变量的一种,32 位操作系统 sizeof 指针都为 4,例子:
int *p;
sizeof(p) =4;
sizeof(*p) = sizeof(int )=4;
②对于静态数组,sizeof 可以直接计算数组大小,例:
int a[10];
char b[ ]= “hello”;
Sizeof (a) = 4 * 10 =40;
Sizeof (b) = 6; (求字符串长度时要加上字符串结束符/0)
③数组作为函数形参时候,数组名当做指针 使用,例:
Void fun (char p[ ])
{
Sizeof (p) ; //结果为 4
}

④ sizeof 与 stelrn 的区别:
*sizeof 是操作符, strlen 为函数;
*sizeof 可以使用类型作为参数,如 int char;
strlen 只能使用 char*做参数且以\0 为结尾
*sizeof 为数组时候,不退化, 传递给 strlen 时数组会被退化橙指针;
三.结构体
1. 结构体的赋值方式:
①初始化:如:
Struct st{
Char a;
Int b;
}x={ ‘A’, 1 };
②定义变量后按字段赋值,如:
Struct st{
Char a;
Int b;
};
Struct st x;
X.a = ‘A’;
X.b = 1;
③结构体变量的赋值,如:
Struct st {
Char a;
Int b;
} ; Struct st x,y;
X.a= ‘A’;
X.b=1;
Y=x;
2. 结构体位域
位域类型: char, short,int 可带上(signed 或者 unsigned)
位域的定义:
struct st{
Unsigned char a:7; //字段 a 占用一个字节的 7bit(位)
Unsigned char b:2; //字段 b 占用一个字节的 2ibt(位)
Unsigned char c:7;
}s1;
位域的好处:
①并不需要完整的字节,节省存储空间,处理简单;
剩余54页未读,继续阅读
资源评论


胡椒鸡块
- 粉丝: 0
- 资源: 1
上传资源 快速赚钱
我的内容管理 收起
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


会员权益专享
安全验证
文档复制为VIP权益,开通VIP直接复制
