1.内存映射的原理
将一块内存空间映射到不同的进程空间中
2.define和const的区别
1.define是预处理指令,用于创建符号常量。const是C和C++的关键字,用于创建具有常量值的变量,本质是只读变量。
2.define在预处理阶段执行。const在编译阶段执行。
3.define没有类型检查,仅进行文本替换。const有类型检查,可以与变量类型关联。
3.数组和链表的区别
1.数组内存连续,链表内存不连续。
2.数组访问速度比链表快
3.链表增加删除操作比数组快
4.指针和引用的区别
1.指针:指针是一个变量,保存着内存地址。引用:引用是已存在变量的别名,没有自己的内存地址。
2.指针可以具有空值(NULL),引用不能为空,必须在初始化时指向一个有效的对象。
3.可以修改指针的指向,可以将指针重新赋值为另一个地址。一旦引用被初始化,它始终指向同一个对象,不可更改。
4.指针需要额外的内存空间来存储地址值。引用不需要额外的内存空间,因为它是对已存在变量的别名。
5.解释一下QT的信号与槽
信号与槽是一种用于实现对象之间通信和事件处理的机制。
6.IIC为什么要加上拉电阻,为什么使用开漏输出
上拉电阻
1.当IIC总线在空闲状态,SDA和SCL需要处于高电平状态。
2.开漏输出无法输出高电平,使用上拉电阻可以完成高低电平之间的转换。
开漏输出
1.假如使用推挽输出可能导致器件的烧毁
2.实现线与功能
7.MQTT的通信过程
1.创建客户端
2.指定IP地址和端口号
3.进行连接
4.发布主题或者订阅主题
5.数据传输
6.断开连接
8.在Linux中怎么实现同步
1.互斥锁
2.信号量
3.条件变量
9.TCP和UDP的应用场景
1.TCP:文件传输、电子邮件、网页浏览。
2.UDP:实时音视频传输、在线游戏、实时监控。
10.什么是野指针,什么情况会产生野指针
什么是野指针
1.指向已被释放或无效的内存地址的指针是野指针。
什么情况下产生野指针
1.内存释放后未置空指针
int*ptr=(int*)malloc(sizeof(int));free(ptr);*ptr=10;//这里ptr成为了野指针
2.返回局部变量的指针
int*getIntPointer(){
intnum=5;
return#//返回局部变量的指针
}
int*ptr=getIntPointer();
*ptr=10;//getIntPointer返回一个野指针
3.未初始化指针
char*p;
11.什么是互斥锁
互斥锁是一种用于线程同步的机制,用于确保同一时间只有一个线程访问共享资源。
12.数组和指针的区别
数组是一块连续的内存空间,其大小在编译时确定,访问元素使用下标操作;而指针是一个变量,存储地址值,大小固定,可以指向不同类型的数据,通过解引用操作访问内存中的数据。