嵌入式知识整理

1.const,static,volatile,inline,extern的含义

const:只读修饰,不允许被修改
static:修饰局部变量时,有默认值为0,是一个值不变的变量,为其开辟内存,函数结束后不被释放,直到程序结束才释放
修饰全局变量时,允许本源文件内所有函数访问,不能被其他源文件访问,即一个本地的变量
static修饰的函数仅允许本文件内其他函数调用。
volatile:表示每次使用volatile修饰的变量时,不是从加载到程序的存储单元读取,而是从实际地址读取,不采取优化方式。
inline:表示inline修饰的函数在使用时是直接在调用函数内展开,而不是新建堆栈内存调用,减少了开销

2.linux下如何定位内存泄漏

内存泄漏的概念:当申请的内存空间没有被及时释放时,之后的程序都将无法使用该内存空间
定位内存泄漏的方式:
a.ps和kill对程序占用的内存进行监测和释放
b.利用valgrind对程序进行调试

3.UART,IIC,SPI区别

UART:异步收发接口(全双工,异步,串行,速度最慢)三线(TX,RX,GND)
IIC:双线串行总线(半双工,同步,串行,速度第二)双线(时钟线,数据线)
SPI:同步外设接口(全双工,同步,串行,速度最快)三线(数据输出,数据输入,时钟线)

4.给指定地址赋值

int *p=(int *)0xff11f1;
*p=250;

5.iso七层模型有哪些,tcp/udp属于哪一层?

应用层,会话层,表示层,网络层,传输层,数据链路层,物理层
tcp/udp属于传输层

优缺点               优点                     缺点
TCP: 面向连接,传输稳定 连接的延时问题导致安全性不高
数据不容易丢失 连接耗时多

UDP: 无需连接,直接发送 UDP容易丢包,乱序
安全性高

6.linux下同步模式和异步模式

同步模式:由处理消息者等待消息是否被触发
异步模式:由触发机制来通知消息处理者

7.C++实现多态的方式有哪些?

首先理解多态的概念:“一个接口,多种方法”,程序运行时才决定调用的函数
分为编译时多态(静态多态):重载、泛型编程(不需要考虑数据类型的标准模板库)
运行时多态(动态多态):虚函数
实现多态的方式:
a.重载:不论是否有虚函数,在作用域相同、函数名同名的情况下,参数(个数、类型、数目)不同即为重载
b.覆盖:在不同作用域下,同名同参数的不同函数构成覆盖
c.隐藏:在不同作用域下,同名不同参数的,基类有无虚函数都是隐藏,同名相同参数的,基类无虚函数为隐藏。

8.计算结构体大小的规则

以占内存最大成员变量为宽度,其余的变量所占大小要能被最大的成员变量整除
最后加和大小要是最大成员变量的宽度倍数

9.由两种遍历二叉树的方式推出二叉树

规则,按照遍历方式的规则将二叉树逐步分解

10.堆和栈的区别、联系

在操作系统中:
堆(heap):由使用者申请,可申请的大小由操作系统的虚拟内存决定,申请效率慢
栈(stack):由系统直接分配,有系统栈空间限制,申请效率快
静态存储区域:在程序编译的时候分配,程序运行过程中一直存在,用于存放静态数据,全局数据和常量。
在数据结构中:
堆栈即指代栈这种先入后出的数据结构,由push、pop操作来操控
与堆栈相对的数据结构常指队列,队列内按照先入先出的规则(应用于二叉树层次遍历)

11.如何利用c语言直接跳转到指定的地址

首先理解一个类似于int *的数据类型 void (*)(void), 前者是指向整型数据类型的指针,后者是指向函数的指针(无参数无返回值)
(void (*)(void))0x10000000相当于把0x10000000强制转化为了函数类型指针,则最后只需要((void (*)(void))0x1000000)()执行

12.数据库的四大特性

原子性:数据库操作事务要么全部成功要么全部失败回滚
一致性:指的是数据库内事务从一个一致的形态到另一个一致的形态
隔离性:当多个用户访问数据库时,不能互相干扰,即多个并发事物之间需要隔离
持久性:一旦操作成功提交,对于数据库的改变是永久的,遇到故障也不会丢失操作。

13.单例模式的实现方式

单例模式概念:确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例
实现方式:
a.一般的单例模式:声明一个静态私有的类变量,实现一个静态方法去判断该变量是否为NULL,若不是则实例化它
b.在多线程的情况下,在静态的类方法加上synchronized修饰,实现线程同步(懒汉单例)

14.用户态和系统态的区别:

进程指向用户的代码时处于用户态(此时级别最低),当调用内核时处于内核态(此时权限最高)

15.申请大片内存的方式:

vmalloc、kmalloc、get_free_pages(直接申请页)

16.C++内强制转换:

static_cast:用于自然的低风险的转换,不能用于指针之类的转换
reinterpret_cast:用于不同类型之间的指针或者引用的转换
const_cast:去掉const属性的转换
dynamic_cast:功能与reinterpret_cast类似,但是有转换后检查的功能(检查安全性)

17.do{}while(0)的作用:

a.用于封装宏(步骤)函数
b.完成空宏的定义

18.Bootloader的作用:

引导操作系统启动、初始化硬件设备、建立内存空间映射表

19.条件编译语句的作用:

避免重复定义数据(造成重名、造成内存浪费、typedef多次定义)
增强代码的可移植性,在跨平台编译过程中可以根据条件语句来执行
避免逻辑错误(死循环定义)

20.上拉、下拉、浮空、模拟:

上拉:IO内部上拉电阻输入
下拉:IO内部下拉电阻输入
浮空:读取的IO不确定,等待key内容
模拟:应用ADC模拟输入
#高频知识点汇总##学习路径#
全部评论
🎉恭喜牛友成功参与 【创作激励计划】高频知识点汇总专场! 前50位用户可直接获得牛可乐抱枕1个哦~ ------------------- 创作激励计划5大主题专场等你来写,最高可领取500元京东卡和500元实物奖品! 👉快来参加吧:https://www.nowcoder.com/discuss/804743
点赞 回复 分享
发布于 2021-12-21 16:07

相关推荐

点赞 评论 收藏
分享
秋招进入尾声了,还没拿到offer,大家是不是还在暗自哭泣,今年秋招难!!!但是!不要气馁,咱们还有补录机会!!!那要怎样才能抓住机会,成功上车呢?相信大家在前期的面试中应该积累了一定的面试经验了,对于面试官常问的问题心中应该也有数了吧,但是面试前的准备工作是很多同学容易忽视的,而这个准备工作有时候也能直接决定面试的成功率。所以今天小编就来给大家盘一盘面试前要做哪些准备工作,供大家查漏补缺!!!首先,要保证自己对过往的经历非常熟悉。ps:这里也提示我们在工作中,不能一味执行。不去思考背后的动机,会让自己的工作变得毫无意义不说,还会让我们的成长非常缓慢。其次,将自己的能力与岗位做好一一匹配。以上内容可以拿张纸列出来,然后和自己的情况做一一对应,并保证自己和岗位匹配之处,也能找到对应的事例证明,这样在面试中基本不会出现被问倒的情况。最后,想清楚自己的求职动机。大家都知道,为什么来应聘这个岗位之类的问题,几乎是面试的必问题,面试官要清楚候选人的动机,才能判断候选人的稳定性以及入职后在这个岗位上的主观能动性。围绕面试岗位,我们需要充分了解该岗位服务的对象是什么?是对外还是对内?对外的话是to b还是to c?产品特性是什么?行业内有什么经典案例?企业在行业的地位?该岗位一天下来的工作状态\体验如何?了解以上内容,一方面能保证我们能更好的回答面试官针对业务方向的问题,另一方面也能让面试官看到我们明确且坚定的求职动机。同时,自己也可以想清楚该岗位的工作内容是否和自己的职业规划一致。了解渠道:可以通过企业的招聘简章、企业官网、企业官方公众号、行业网站、行业公众号去了解,也可以上网看看同类型的工作状态是什么样的。同类型的部门,一般在企业里面会对接哪些部门?该部门在公司处于什么样的角色/定位?发展如何?尤其是大厂,同一个岗位,在不同的业务线上,工作体验可能是完全不一样的,有的是神仙工作,有的可能是深坑。提前了解,可以帮助我们进一步判断这个工作的内容、晋升和自己的职业规划是否一致,也可以帮我们避坑。了解渠道:可以通过网络平台,也可以通过询问该方向工作的师兄师姐或者老师。有的面试者会在面试中去问企业薪资,有的面试者会在面试官问到期望薪资时回答不上来,这两种情况显然在面试中都会减分。前者会让面试官觉得候选人眼高手低、好高骛远,尤其是应届生在初面中问薪酬,是非常减分的。后者会让面试官觉得候选人对自己不够自信,对岗位缺乏了解。而这两种情况其实是完全可以避免的,我们在面试前去了解目标岗位在同类型企业的薪酬范围,并不是一件难事。了解渠道:******* 官网 官网 官网!!!!嵌入式面经可以看这个大佬总结的就很详细  c++/嵌入式面经专栏-牛客网 https://www.nowcoder.com/creation/manager/columnDetail/MJNwoM
点赞 评论 收藏
分享
6 21 评论
分享
牛客网
牛客企业服务