嵌入式软件开发面试题总结四
- 编译有几个阶段 每个阶段做什么事情
- 内核申请内存vmalloc和kmalloc的区别是什么
- 简单描述一下数组指针和指针数组
- 简单描述linux设备驱动中的总线,设备和驱动的关系。
- 简述一下什么是红黑树
- 指针和引用的区别
- 说说内联函数和宏函数的区别
- 在FreeRTOS中,二值信号量和互斥量的区别?
- 在FreeRTOS中,任务通知的运行机制是怎么样的?
- 什么情况下会栈溢出?如何避免?
- 深复制和浅复制的区别?
- 简述一下快速排序的步骤
- 头文件的两种包含方式的区别
- .CAN通信介绍;CAN通信报文的标识符有几位?
- C语言结构体怎么定义节省内存
- malloc和新的区别
- 为什么局部变量未赋值时,每次初始化的结果是不确定的?
- linux的锁机制?
- 介绍下常用的gdb命令
- C++ 什么情况下必须用初始化列表
- linux用户态怎么进入内核态
- 操作系统条件变量的惊群效应是什么
- 什么是预编译:
- IIC
编译有几个阶段 每个阶段做什么事情
解题思路
词法分析阶段:读入源程序,对构成源程序的字符流进行扫描和分解,识别出单词, 语法分析阶段:机器通过词法分析,将单词序列分解成不同的语法短语,确定整个输入串能够构成语法上正确的程序。语义分析阶段:检查源程序上有没有语义错误,在代码生成阶段收集类型信息 中间代码生成阶段:在进行了上述的语法分析和语义分析阶段的工作之后,有的编译程序将源程序变成一种内部表示形式 代码优化:这一阶段的任务是对前一阶段产生的中间代码进行变换或进行改造,目的是使生成的目标代码更为高效,即省时间和省空间 目标代码生成:这一阶段的任务是把中间代码变换成特定机器上的绝对指令代码或可重定位的指令代码或汇编指令代码
内核申请内存vmalloc和kmalloc的区别是什么
解题思路
1,vmalloc分配的一般为高端内存,只有当内存不够的时候才分配低端内存;kmallco从低端内存分配。
2,vmalloc分配的物理地址一般不连续,而kmalloc分配的地址连续,两者分配的虚拟地址都是连续的;
3,vmalloc分配的一般为大块内存,而kmaooc一般分配的为小块内存,(一般不超过128k);
简单描述一下数组指针和指针数组
解题思路
数组指针是一个指针,指向一个数组。指针数组由n个指针类型的数组元素组成。数组指针只是一个指针变量,似乎是C语言里专门用来指向二维数组的,它占有内存中一个指针的存储空间。指针数组是多个指针变量,以数组形式存在内存当中,占有多个指针的存储空间。、
简单描述linux设备驱动中的总线,设备和驱动的关系。
解题思路
总线将设备和驱动绑定。在系统每注册一个设备的时候,会寻找与之匹配的驱动;相反的,在系统每 注册一个驱动的时候,会寻找与之匹配的设备,而匹配由总线完成。一个现实的Linux设备和驱动通常都需要挂接在一种总线上。设备与驱动的关联通过总线的match()方法进行匹配,驱动挂载总线时与所有设备进行匹配,设备挂载总线时与所有的驱动进行匹配,所以驱动和设备的挂载无先后之分。匹配成功后会通过调用驱动的probo()方法来初始化设备。
简述一下什么是红黑树
解题思路
红黑树是一种近似平衡的二叉查找树,它能够确保任何一个节点的左右子树的高度差不会超过二者中较低那个的一倍。具体来说,红黑树是满足如下条件的二叉查找树 1.每个节点要么是红色,要么是黑色。
2.根节点必须是黑色
3.红色节点不能连续(也即是,红色节点的孩子和父亲都不能是红色)。
4.对于每个节点,从该点至null(树尾端)的任何路径,都含有相同个数的黑色节点。
5.最长的路径长度不会超过任意路径的两倍。
指针和引用的区别
解题思路
(1)指针是实体,占用内存空间;引用是别名,与变量共享内存空间。
(2)指针不用初始化或初始化为NULL;引用定义时必须初始化。
(3)指针中途可以修改指向;引用不可以。
(4)指针可以为NULL;引用不能为空。
(5)sizeof(指针)计算的是指针本身的大小;而sizeof(引用)计算的是它引用的对象的大小。
(6)如果返回的是动态分配的内存或对象,必须使用指针,使用引用会产生内存泄漏。
(7)指针使用时需要解引用;引用使用时不需要解引用

该博客围绕Linux及编程知识展开,涵盖编译阶段、内存分配、数据结构、算法、设备驱动等多方面问题。如编译各阶段工作、vmalloc和kmalloc区别、红黑树概念等,还介绍了CAN通信、IIC和SPI总线等内容,并给出详细解题思路。
最低0.47元/天 解锁文章
4万+

被折叠的 条评论
为什么被折叠?



