首页 >> 知识 >> 八股文嵌入式软件工程师

八股文嵌入式软件工程师

0 写在前面

       后续会不断更新,大家可以先关注我,点收藏!

       开头先分享一下自己的一些笔记,欢迎至下图的水印.....嵌入式求职之路

        我本科是普通双非院校毕业,硕士就读于某个中游211院校,本科和硕士专业都是机械工程。

        然后在2024届秋招中,从8.15号开始准备秋招投递简历,到9.20号成功拿到5个嵌入式软件工程师的offer,最低的offer是在二线省会城市一个做工业机器人的企业,总包22万,最高的offer是做新能源存储设备,总包36万,其他三个offer薪资总包在25万-30万之间。最后选择新能源行业做嵌入式电力设备开发。

        从机械-->嵌入式,相当于是跨半个专业,整个过程全靠自学,然后自己独立完成几个项目,从stm32到RTOS操作系统,再到Linux应用开发,中间也涉及到了驱动、QT上位机等等,中间遇到了很多困难,然后摸索出很多学习思路和解决办法。

        这一篇八股文文章,是我自己结合网络上他人的经验,自己详细整理出来的,我秋招过程中也是使用了自己这篇八股文文章,把它写出来,分享给大家。

        这篇文章包含的内容很多(会不断更新):

        第一部分(纯八股):C语言、C++、数据结构与算法、操作系统(RTOS)、ARM基础与架构、通讯协议、Linux应用知识点、Linux驱动知识点

        第二部分(个人简历):简历模板、做一份好的嵌入式简历、如何突出重点

        第三部分(经验分享):面试经历、面试经验、面试技巧

第二部分(个人简历) 1、个人简历中项目之一 1.1项目在简历中的描述(图片中水印处获取)

1.2项目资料简介

第一部分(纯八股) 1 C语言/C++ 1.1 面试常问关键字

        面试不是死记硬背,你死记硬背,技术面试官能一下就瞧出来,所以要从本质上去理解一些内容。所以,八股有些地方我写的很详细,不要嫌我啰嗦,因为这些地方的八股必须要真的去理解,而不单单是背诵,相信大家看完后,就能理解相应的知识点了,而不仅仅是死记硬背。

1.1.1 volatile关键字

        volatile的意思是”易变的”,这个关键字主要是防止编译器对变量进行优化。即告诉编译器每次存取该变量的时候都要从内存去存取而不是使用它之前在寄存器中的备份。详细分析一下什么是编译器优化,以及为什么使用这个关键字。

(a)关于编译器优化

        首先理解CPU(寄存器)读取规则:

        如下面程序段:

int a, b; // 为a,b申请内存a = 1; // 1 -> CPU // CPU -> 内存(&a)b = a; // 内存(&a) -> CPU // CPU -> 内存(&b)

        如上图代码所示,a = 1这个程序,先将1写入CPU,再从CPU中将1写入a所在的内存地址中; b = a是先从内存中将a的值取出到CPU,再从CPU将值存入b的内存地址中。

int a = 1, b, c; // 为a,b,c申请内存并初始化b = a; // 内存(&a) -> CPU // CPU -> 内存(&b)c = a; // * 内存(&a) -> CPU * // CPU -> 内存(&c)

        如上图代码所示,上边的程序如果按第一段代码所说的顺序执行,则c = a语句在编译时是可以被编译器优化的,即注释部分(* 内存(&a) -> CPU *)的内容不被执行,因为在b = a这个语句中,a已经被移入过寄存器(CPU),那么在执行c = a时,就直接将a在寄存器(CPU)中传递给c。这样就减少了一次指令的执行,就完成了优化。         上面就是编译器优化的原理过程,但是这个过程,有时会出现问题,而这个问题也就volatile存在的意义! 

(b)volatile的引入

        上边程序中,如果在执行完b = a后,a此时的值存放在CPU中。但是a在内存中又发生了变化(比如中断改变了a的值),但是存在CPU中的a是原来未变的a,按理应该是已经变化后的a赋值给c,但是此时却导致未变化的a赋值给了c。

        这种问题,就是编译器自身优化而导致的。为了防止编译器优化变量a,引入了volatile关键字,使用该关键字后,程序在执行时c = a时,就会先去a的地址读出a到CPU,再从CPU将a的值赋予给c。这样就防止了被优化。

volatile int a = 1, b, c; // 为a,b,c申请内存并初始化b = a; // 内存(&a) -> CPU // CPU -> 内存(&b)c = a; // 内存(&a) -> CPU // CPU -> 内存(&c) (c)哪些情况下使用volatile

        (1)并行设备的硬件寄存器。存储器映射的硬件寄存器通常加volatile,因为寄存器随时可以被外设硬件修改。当

网站地图