C/C++面试面试真题加积累八股 第二期

这里我总结一下我的嵌入式的八股文积累,体量比较大,基本都是我秋招面试来遇到的面试真题,什么题都有
主要是偏C/C++嵌入式这一块,希望能帮到各位小伙伴和后来的人,希望大家送送花点点赞
这个系列大概分为好几期吧,尽快肝出来,大家只要面试前抽个一个小时每次背背,基本上八股部分不会有太大问题
我都放在我主页置顶希望小伙伴们捧捧场
千万别只点收藏哦
Linux的四种锁机制
互斥锁:mutex,用于保证在任何时刻,都只能有一个线程访问该对象。当获取锁操作失败时,**线程会进入睡眠**,等待锁释放时被唤醒。
读写锁:rwlock,分为读锁和写锁。处于读操作时,可以允许多个线程同时获得读操作。但是同一时刻只能有一个线程可以获得写锁。其它获取写锁失败的线程都会进入睡眠状态,直到写锁释放时被唤醒。 注意:写锁会阻塞其它读写锁。当有一个线程获得写锁在写时,读锁也不能被其它线程获取;写者优先于读者(一旦有写者,则后续读者必须等待,唤醒时优先考虑写者)。
适用于读取数据的频率远远大于写数据的频率的场合。
自旋锁:spinlock,在任何时刻同样只能有一个线程访问对象。但是当获取锁操作失败时,不会进入睡眠,而是会在原地自旋,直到锁被释放。这样节省了线程从睡眠状态到被唤醒期间的消耗,在加锁时间短暂的环境下会极大的提高效率。但如果加锁时间过长,则会非常浪费CPU资源。
RCU:即read-copy-update,在修改数据时,首先需要读取数据,然后生成一个副本,对副本进行修改。修改完成后,再将老数据update成新的数据。使用RCU时,读者几乎不需要同步开销,既不需要获得锁,也不使用原子指令,不会导致锁竞争,因此就不用考虑死锁问题了。而对于写者的同步开销较大,它需要复制被修改的数据,还必须使用锁机制同步并行其它写者的修改操作。在有大量读操作,少量写操作**的情况下效率非常高。
eg:
1.两个进程访问临界区资源,会不会出现都获得自旋锁的情况?
参考回答:
单核cpu,并且开了抢占可以造成这种情况。
2.请问就绪状态的进程在等待什么?
参考回答:
被调度使用cpu的运行权
3.怎么唤醒被阻塞的socket线程?
参考回答:
给阻塞时候缺少的资源。
4.如何设计server,使得能够接收多个客户端的请求
参考回答:
多线程,线程池,io复用。
5.死循环+来连接时新建线程的方法效率有点低,怎么改进?
参考回答:
提前创建好一个线程池,用生产者消费者模型,创建一个任务队列,队列作为临界资源,有了新连接,就挂在到任务队列上,队列为空所有线程睡眠。改进死循环:使用select epoll这样的技术。
6.请你说一说死锁产生的必要条件?
参考回答:
互斥条件:一个资源每次只能被一个进程使用。
请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。
不剥夺条件:进程已获得的资源,在末使用完之前,不能强行剥夺。
循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。
两个进程分别占据a、b资源,一个需要b资源释放,一个需要a资源释放,两个进程相互占据资源不放且不能被强行剥夺造成死锁。

用过哪些STM32芯片,他们的区别是什么?
1. STM32F103系列:这个系列是STM32F系列中最受欢迎的型号之一。它基于[ARM](https://so.csdn.net/so/search?q=ARM&spm=1001.2101.3001.7020) **Cortex-M3**内核,提供了不同的封装和内存选项,适用于各种应用。
2. STM32F407系列:这个系列基于**ARM Cortex-M4**内核,具有较高的性能和丰富的外设。它广泛应用于嵌入式系统、工业自动化、通信和消费电子等领域。
GD32F1   ARM Cortex-M3
GD32F4   ARM Cortex-M4
STM32F1和F4的区别?
内核不同:F1是Cortex-M3内核,不带FPU和DSP指令集,F4是Cortex-M4内核,不带FPU和DSP指令集
主频不同:F1主频72MHz,F4主频168MHz;
浮点运算:F1无浮点运算单位,F4有;
功能性能:F4外设比F1丰富且功能更强大,比如GPIO翻转速率、上下拉电阻配置、ADC精度等;
F4的flash和RAM的范围更大(128k-2048k,64k-256k)
F1的flash和RAM的范围更大(16k-1024k,4k-80k)
STM32F4拥有多达192KB的片内SRAM
STM32F4更低的功耗

STM32的启动过程:
单片机上电后一直到准备好C语言运行环境并跳转到main函数执行总共经历了5个步骤:
1.内核初始化,上电取址;
cotexm3会去0地址取出栈指针,然后偏移四个字节取出跳转地址
内核复位和NVIC寄存器部分清零;  
内核设置堆栈:内核从向量表0地址读出堆栈地址,并设置主堆栈指针;
2.PC指针指向中断向量表的复位中断向量执行复位中断函数;
3.在复位中断函数中调用 SystemInit 函数,进行初始化(初始化时钟,配置中断向量表等)
4.调用 __main (在**IAR**中是 __iar_program_start )函数完成全局/静态变量的初始化和重定位工作,初始化堆栈和库函数
5.跳转到main函数中执行

STM32外设:
ADC模数转换器
DMA转运寄存器
UART串口
I2C
SPI

中断和异常的区别:
中断和异常
相同点:都是CPU对系统发生的某个事情做出的一种反应。
区别:中断由外因引起,异常由CPU本身原因引起。

大小端判断和转换:
大端模式,就是高位字节排放在内存的低地址端,低位字节排放在内存的高地址端。
小端模式,就是低位字节排放在内存的低地址端,高位字节排放在内存的高地址端。
小端模式 :强制转换数据不需要调整字节内容,1、2、4字节的存储方式一样。  
大端模式 :符号位的判定固定为第一个字节,容易判断正负。
(这里结合项目,可以说在学校项目中,数据传输就是这样,数据接收的小端模式,数据解码先要将每位数据单独转换位十进制,在按位拼接转成有效数字

底层驱动了解吗?还是用STM32提供的库?
做实际项目开发基本上是走库开发,开发比较快,然后配置简单点
底层驱动我理解就是直接通过软件代码去开启时钟,配置外设寄存器,设置中断优先级。具体的配置需要看系统结构图,比如一个外设通过哪一个时钟线获取时钟,该时钟线是通过晶振几分频得到的,这个外设的时钟寄存器开关位,再看外设的寄存器配置,然后再设置中断优先级;这里可以类似理解位EB配置Mcal,也是先做mcu时钟配置,做时钟分频,然后配置Port然后配置Can、spi、以太网。

STM32底层接口的实现关注过吗?
外设寄存器的配置通常通过结构体来实现,结构体内部的各个元素会将设置值解码映射到对应的寄存器上来实现寄存器的配置要求,完成外设的驱动。

传感器的传输是否可靠?
一个是取决于通信协议本身,二是硬件设备通信的时间能否同步,传输数据是否丢帧
添加校验CRC校验,应答机制,这里在汽车MCU中有bootloader刷写固件程序实现升级,这里刷写文件会有一个checksum校验和,在实际进入刷写服务中通过校验checksum来实现扩展功能。
全部评论
锁操作不是原子性的吗?怎么可能会出现都获得锁的情况?
点赞 回复 分享
发布于 2024-11-16 12:04 德国

相关推荐

2025届 文远知行 系统研发工程师 一面 70min1. 操作系统项目是怎么样的一个项目,是 demo 吗,代码量有多少2. ext4 排查过程详细讨论,在排查的处理逻辑方面讨论了很久3. Linux 系统中,有关于读写的调用有哪些,pread 和 pwrite 了解吗4. 如果一个硬盘 IO 时阻塞了,会发生什么情况5. 一个 read 请求的全流程,从用户态接口到落到物理磁盘6. netstat?7. 查看 CPU 占用的情况,里面有个 wait 字段是什么意思8. 如何查看硬盘的占用?du df -h9. 做题:给定一个不含有重复值的数组 arr,找到每一个 i 位置左边和右边离 i 位置最近且值比 arr[i] 小的位置。返回所有位置相应的信息。(25届校招已开放,26届实习生同步招聘)💼 公司岗位:全球领先的L4级自动驾驶技术公司,目前在招岗位涵盖算法,开发,测试,硬件相关岗位,base北上广深/美国圣何塞/新加坡;🫶️ 团队氛围:工作不用打卡,环境开放,氛围良好,大牛多多,公司每月开一次全员会议,更新最新公司进展与解答员工关心的问题;👨🏻‍💻 工作环境:总部在广州海珠国际生物岛,窗外风景很好,办公区还有台球桌和乒乓球桌,楼下也适合散步跑步打球等各种户外活动;💰 薪资待遇:岗位不同待遇不同,研发人员全员持股,六险一金齐全,公积金最高档缴纳;公司全年包三餐,每周可以自选工作日每天的餐品,每天有免费零食,夏天有备冰淇淋雪糕等;❤️ 职场感受:个人感觉是很适合历练成长的地方,在这里只要有付出,不愁得不到回报,能力突出者很快能有独当一面的机会;【内推链接】https://app.mokahr.com/m/campus_apply/jingchi/2137?recommendCode=DSaUuUtT#/jobs【内推码】DSaUuUtT                                                                               【备注】使用内推码的同学可以留下【姓名缩写+岗位】帮你跟进进度哦                                               #文远知行#                                                                                             #内推#                                                                                           #内推码#                                                                                           #秋招#             #实习#                                                            
点赞 评论 收藏
分享
一共一个小时多一点点,两个面试官轮流进来,面试体验一般。中间问了很久的英语**面试官1:**1.上来就说我们公司做蓝牙,wifi的,不做Linux也不用高性能板子方向可能不是很匹配(我直接懵了,什么意思?)2.讲一下第一个项目3.讲一下第二个项目4.讲完了他说都是linux,有没用过简单一点的51 32板子,然后我说第三个项目是32的5.怎么移植的freertos,步骤是什么6.了解wifi 蓝牙吗(我说蓝牙之前有使用过,比较久了)7.然后就问了一下编程能力怎么样,我说还可以C/C++比较熟练8.然后问对他们公司有什么了解(我提前查过了,就说了啥,他也跟着说了说)9.然后问英语怎么样?(我说口语一般,读写看没问题,之前的一段工作经历,就是纯英文办公的)10.Please introduce you self? (自我介绍)11.What is your favorite sport (喜欢的运动)12.What are your strengths and weaknesses (优点和缺点)13.我优点英文说的,缺点我就说的中文,比较较真,比较执着,有时候可能就钻了牛角尖。然后追问我那你怎么就不执着了 (我????)14.反问**面试官2:**1.自我介绍2.讲一下实习干了啥3.BMS这个项目介绍一下4.你使用了哪些硬件外设5.你说你用gpio模拟了i2c,怎么做的,为什么要这样做6.STM32的采样率和采样深度是多少7.rtos都做了哪些工作8.怎么配置rtos9.你说你做了保护功能,怎么保护的(解释看电压啥的)10.监测功能主要是监测什么东西11.gpio灯是咋控制的12.rtos都做什么工作了13.充电放电是怎么处理的,什么时候就认为满了14.充放电的曲线你知道是什么样子吗15.音视频同步怎么实现的16.时间基 时间戳能不能详细说说17.怎么进行推流的,网络呢还是别的啥的18.说了rtmp,这个协议有啥特点呢19.最大的困难,怎么解决的,怎么排查的20.让用英文解释一个最熟悉的项目22.还有没有使用过别的开发板,我说有用过esp32啥的23.讲一下蓝牙协议24.反问
点赞 评论 收藏
分享
评论
9
24
分享

创作者周榜

更多
牛客网
牛客企业服务