嵌入式八股文
无聊随便写写,都是高频考点,自己去理解吧。一般来说校招就喜欢问八股,因为绝大多数校招生都没啥项目拿得出手,大厂都要求基础好的学生,如果光会写算法题,不懂基础知识,是不符合要求的。
第一部分C/C++基础
1.static关键字的作用(函数,变量的效果)
2.宏定义和函数区别,本质(文本替换,函数需要调用,需要入栈)
3.const关键字的作用(只读)
4.volatile关键字的作用(告诉编译器不要优化优化这个变量,不要把变量值缓存到寄存器或者cache,每次都直接去内存读取)
5.char const *p和char * const p (变量前面是什么就是它的关键属性,例如const *p,首先*p表示一个指针,然后*p表示指向的内容,所以是指向的内容不变,即指向常量的指针。
而*const p,首先是const p,表示p是一个常量,然后*const p表示p这个常量是一个指针,所以p的值不变且因为p是指针,那么就是p指向的地址不能变,但是这个地址的内容可以变)。
同样的逻辑可以去理解指针数组和数组指针,指针函数和函数指针的关系。
6.C程序的内存空间分布:代码段,数据段+bss段(也叫静态区),堆区,栈区
7.未初始化的全局变量保存在哪里,已初始化的全局变量保存在哪里(bss段,数据段,或者说静态区)
8.字符串常量保存在哪里(静态区)
9.什么是bss段(未初始化的全局变量和静态变量都保存在bss段,其值为0)
10.静态局部变量保存在哪里(初始化的在数据段,未初始化bss段)
11.堆和栈的区别(内存空间的堆区和栈区,无关数据结构,超高频考点,自己理解)
12.什么是内存泄漏(程序员主动申请的内存(调用malloc或者new)使用完毕后没有主动释放(free或者delete),这一块内存在这个进程存活期间就无法再次访问,造成资源浪费,如果刚好在循环中或者频繁调用,内存资源就会枯竭,无法正常运行程序,例如某些路由器,长时间使用,如果有内存泄漏就可能程序崩溃,但断电重启就恢复)
13.什么是野指针(不知道指针具体指向内容的指针,鱿鱼不清楚具体指向,操作有风险,应当对指针赋初值,例如指向NULL)
14.什么是空指针解引用(对某些指向结构体的指针取成员变量时鱿鱼不知道此前该指针已为NULL,导致对空指针解引用,引发程序崩溃,应当先判空再解引用)
第一部分C/C++基础
1.static关键字的作用(函数,变量的效果)
2.宏定义和函数区别,本质(文本替换,函数需要调用,需要入栈)
3.const关键字的作用(只读)
4.volatile关键字的作用(告诉编译器不要优化优化这个变量,不要把变量值缓存到寄存器或者cache,每次都直接去内存读取)
5.char const *p和char * const p (变量前面是什么就是它的关键属性,例如const *p,首先*p表示一个指针,然后*p表示指向的内容,所以是指向的内容不变,即指向常量的指针。
而*const p,首先是const p,表示p是一个常量,然后*const p表示p这个常量是一个指针,所以p的值不变且因为p是指针,那么就是p指向的地址不能变,但是这个地址的内容可以变)。
同样的逻辑可以去理解指针数组和数组指针,指针函数和函数指针的关系。
6.C程序的内存空间分布:代码段,数据段+bss段(也叫静态区),堆区,栈区
7.未初始化的全局变量保存在哪里,已初始化的全局变量保存在哪里(bss段,数据段,或者说静态区)
8.字符串常量保存在哪里(静态区)
9.什么是bss段(未初始化的全局变量和静态变量都保存在bss段,其值为0)
10.静态局部变量保存在哪里(初始化的在数据段,未初始化bss段)
11.堆和栈的区别(内存空间的堆区和栈区,无关数据结构,超高频考点,自己理解)
12.什么是内存泄漏(程序员主动申请的内存(调用malloc或者new)使用完毕后没有主动释放(free或者delete),这一块内存在这个进程存活期间就无法再次访问,造成资源浪费,如果刚好在循环中或者频繁调用,内存资源就会枯竭,无法正常运行程序,例如某些路由器,长时间使用,如果有内存泄漏就可能程序崩溃,但断电重启就恢复)
13.什么是野指针(不知道指针具体指向内容的指针,鱿鱼不清楚具体指向,操作有风险,应当对指针赋初值,例如指向NULL)
14.什么是空指针解引用(对某些指向结构体的指针取成员变量时鱿鱼不知道此前该指针已为NULL,导致对空指针解引用,引发程序崩溃,应当先判空再解引用)
全部评论
相关推荐