- 0901~0916
设计模式了解吗?说一下单例模式;饿汉模式的具体实现。
项目
- 项目中用到了 GPIO 模拟 SCCB,展开说一下
- CPU的缓存有多少级?
- LCD buffer 怎么管理的
- 项目中 TIMER 的作用
- 项目中测量数据部分代码量多大,多少行
- EC200U 模块整个初始化流程
- 为什么还要做一个显示端,不直接用web
- 用过那些芯片和板子;
- STM32 有哪些时钟源?
- 项目中用到了什么通信接口
- BL0910 芯片与 STM32 通信过程
- 项目中遇到的难点
- 遇到问题如何与人沟通
- 项目比较急会怎么去完成
- 项目相关—设备异构问题
- 数据发生波动或者干扰的时候,如何去做数据处理?
- 如何去评估温度准不准?
- 用的芯片是什么芯片?用的什么库?
- 介绍下AMP这个项目中的具体实现以及中间遇到的难题?
- 说一下这个整体的AMP流程
- 为什么要采用这样的一个启动方法,有什么优势?
-
画一下spi转can? - 芯片选型的时候考虑的因素是什么
- 问项目中相应的功能是如何实现的
- 项目的背景是什么?
这个项目主要是cpu设计的实验平台,传统的CPU设计实验主要是学生从0开始完成所有的CPU设计。本项目采用模块化思想,降低学生的学习曲线。
- 整机配置文件是什么文件类型,怎么实现整机配置
- 项目用开发板的配置信息
- 标准库和HAL库在开发过程中的区别
- 摄像头怎么加载的,具体是什么信号,驱动怎么搞的
- 支持向量机原理
- 项目有没有优化的空间
- 项目中的环形缓冲区的机制
- 使用轮询还是中断获取传感器状态的?中断处理函数中做什么?怎么配置中断触发的?
- RS485传感器和串口的区别?为什么考虑到要使用RS485?
- 处理后的帧率和丢帧情况?画面出现了什么情况? 对YUV和RGB有哪些了解?
- 如何保证每次传输过去的都是最新的?采集频率?
- 项目采样原始图像格式
- 项目中TIMER用了哪些功能
- 对数据分析的处理效率有没有要求,有没有量化的数据,怎么知道数据处理没有问题
- OTA升级拷打,APP,BOOTLOADER,数据正确性。
- 读取E2,在传输过程中,数据波形错误导致数据改变怎么办?
嵌入式
- bootloader 程序要更新怎么办
更新bootloader的程序必须非常简单
- 看门狗喂狗时间
默认5秒
- 交叉编译
- 什么是嵌入式
- 定义
- 嵌入式设备开发与电脑上软件开发的区别
- 单片机包含哪些部分,作用等
- 嵌入式系统中内存管理策略有哪些
- flash接口是什么?
- 可编程大小是指什么?
- 外部flash有多大?Cpu的flash有多大,ram有多大?
- flash的操作流程?
调试
- STM32的芯片电压
- 会不会在示波器上面做什么设置或者操作吗
- 如何使用 keil 查找变量地址
- keil 使用 stlink 如何进行硬件调试,设置断点什么的
- 怎么解决程序崩溃?(core dump)什么时候出现程序崩溃?
- 摄像头驱动底层,如何检测驱动错误
- 如果打印日志,如何根据日志排查I2C驱动
- Union 有哪些风险
- 说一下堆栈泄露,什么方法可以检测这个堆栈泄露
- panic了怎么调试
计算机体系结构
主要问对架构的理解,从虚拟内存到物理内存,从页表项到dirty位,从缺页到meltdown,然后再到指令流水线。 计算机系统有哪些部件构成
- cmake写一个动态库,怎么写
- 动态库和静态库
- BIOS的源码看过么 用汇编写的么 还是 C
- 说一个熟悉的操作系统启动的过程
启动流程
- 操作系统在跳入到main()之前,要做什么预处理才能保证main()函数能正确执行?
- stm32的启动过程
- stm32单片机的启动文件.s看过没有
- 为什么要设置bootloader吗?
- 从上电到执行程序发生了什么?
- 嵌入式的地址分布
- 为什么flash的起始地址是0x08000000
- ST芯片,用的什么开发环境,是否自己写链接脚本(启动代码)
- stm32有MMU吗?
外设
- 设计双机通讯协议怎么设计
- 熟悉哪些通讯技术?哪些是异步哪些是同步?
- 使用外设发现功能不对,那你首先会检测什么东西呢
- i2c,spi,can,uart从速率,稳定性,传输距离排序
- 设计一个私有协议,从压缩,加密,分包角度来思考
GPIO
- 一个设备输出高电平一个设备输出低电平,会怎么样?
可能会损坏器件,所以选择开漏输出
- 为什么选择开漏输出?开漏输出
- GPIO的八种工作模式,推挽和开漏输出有什么区别他们输出的值是多少(0和1还是电平)
- stm32 的GPIO口的输入输出分别有哪些模式。
- 输出模式中,开漏输出和推挽输出有什么区别。
- 什么时候使用开漏输出。
DMA
定时器
- 定时器优先级不高会发生什么
- 定时器中断是用啥触发的
- STM32有哪些时钟源?
- STM32实现1s的定时器
- TIM有哪些用处
- 怎么去调PWM,介绍一下PWM和它的各个参数
- PWM除了占空比之外还有什么要素?频率,周期,占空比
- PWM遇到毛刺信号如何处理?这块没答好,说了电容滤波
ADC
- ADC片内还是片外,采样精度,采样范围多大
- ADC采样原理
- ADC 用的位数,速率多少
- ADC的几种工作模式是什么?
- ADC 数据对齐是什么?
- ADC精度
- ADC怎么实现的
CAN
- 用过can总线吗,介绍一下
- can总线的底层线与机制
- CAN总线多主多从如何实现仲裁
- can总线,缺点是什么,仲裁为什么能解决竞争问题
I2C
- I2C最多可以挂多少个从机
- IIC总线,发送数据(
7位地址+1位读写+ACK+DATA
) - IIC总线时序
- NACK 和 ACK的区别
- i2c速率选择多少
- 如果两个设备的IIC地址完全一样怎么操作
- IIC怎么取地址的
- IIC的数据线一般用开漏还是推挽
- iic的空闲电平
SPI
- spi 的信号接收时工作的过程
- 有没有测过SPI的波形,怎么测的
- 用SPI接受过哪些数据,这些数据有显示吗
- 软件SPI和硬件SPI
- SPI/I2C相关(基本时序,调试,以及中断的通讯方式,从机往主机通讯方法,SGI、PPI和SPI)
- SPI的时序?
UART
- 串口有哪些参数需要配置
波特率
帧格式
- 波特率9600,无奇偶校验位,8位数据位,1位停止位,1秒能接收多少个字节
- 如果串口接收的数据量很大,你应该怎么处理?代码指针应该怎么写呢?(回答了环形缓冲区)
- 如果只有5个串口但是实际需要6个串口,有什么方法解决?
时间片复用
- 串口通信过程,将数据赋值给DR寄存器为什么就可以实现发送
- 串口通讯,如何保证串口发送的10个字节全部发出和收到
- 串口DMA和串口中断
中断
- 中断是如何进行的,为什么高优先级的任务一定能先执行
- 为什么要保存上下文?
- 中断为什么要保存通用寄存器
- STM32终端流程
- main函数和中断函数都要对一个变量进行修改,怎么办
- 中断的执行流程
- 中断向量表第一个元素是什么
- 中断向量表是一个什么概念
- NVIC中断起什么作用
- 中断具体处理,如何找到服务函数
- 中断后单片机如何恢复到原来程序位置
- 什么是中断
- 中断发生时,内核怎么找到中断服务函数的入口地址
- 哪些地方有对中断的应用?
- 怎么调用中断的?
- DMA中的中断有了解过吗?
- 中断占用率知不知道,中断会带来什么好处与坏处;
- 如果我所有任务都在中断里跑会有啥问题;
- 中断的定义。使用中断的注意事项。
- 如何出中断中传递数据给任务。
同步原语
- 中断和异常
中断完成会往下执行,异常会回到原先出错的地址执行
C
- 如果只想让一个函数被调用一次,后续可以直接返回结果,该如何做?
- C语言如何实现多态
- 浮点数如何判断相等,为什么会出现精度问题
- ARM RISCV区别
- 平时编程用c11还是c98
- C语言的基本数据类型有几个,ARM中INT型16位有几个字节
- 结构体和联合体的区别
- 位运算,将第4~6位改为101
- 什么是字节对齐
- 全局变量和局部变量区别、作用域、生命周期、内存存储位置
- 大小端,字节序
- 为什么需要头文件
- 头文件分尖括号和双引号,应该如何写引入的顺序
- float可以移位吗
- 就是要float移位怎么办
可以用指针强转
- const和define区别。
- 位域的概念?
- 位域是什么,有什么作用
内存管理
- 堆栈指针是怎么初始化堆栈的即sp怎么被初始化的
- realloc和malloc的区别
- 代码里,如何防止内存泄漏或者内存越界的问题?
- 变量分配在内存什么区上,内存的几个段,为什么不能把变量全分配在栈上
- 内存包含哪些分区?代码区、堆区分别用来存放什么?
- malloc 和 free的原理 free为什么不用传入参数就可以把内存释放掉
- malloc与new
- malloc内存分配算法是什么
- Malloc 底层实现
- 内存碎片
- 内存对齐
- 内存管理的算法
- 内存映射,频繁访问内存,需要使用什么关键字
- 栈的作用
函数调用管理,局部变量存储,控制流,递归调用,空间高效,调试支持
- 栈溢出的原因
- 怎么设计线程池更合理?
编译流程
- C语言传递参数的方式有哪几种?
- 汇编的常用参数是什么
- 形参和实参区别。
- 字节对齐是什么意思
- 宏定义和inline函数区别
- inline内联函数的作用
- 函数调用 传递参数 16个 和 3 个有什么区别
- define怎么编译进去的
没有编译--预处理文本替换
- C编译过程,编译后有多少个内存段(就是操作系统里面学的内存空间分布)
- 用什么命令把c文件生成可执行文件
- 程序编译阶段都有哪些,具体步骤,每一步用到了哪些指令
- gcc编译过程
- 预处理之后还会做什么工作啊?每部分都有什么作用呢?
- 如果A函数调用了B函数,中间发生了什么?(回答压栈和出栈),这个对应汇编里面的什么指令?
- 如何A函数中有个变量叫abc,B函数中有个变量也叫abc,A中调用B,会出现问题吗?
- 你了解栈针吗?讲解一下工作原理?
- i++和++i哪个效率更高?为什么?
- 局部变量和全局变量可以重名吗?为什么?
- 局部变量存放的区域在哪个位置?(栈or堆)
- C函数的调用过程
- 静态变量、局部变量、全局变量
- GCC编译一般分为那几部分?
关键字
- define是什么意思啊?(说了预处理)
-
#define
和enum 区别 - inline的作用和起到的效果
- volatile关键字的作用
- 为什么用静态函数,什么时候用
- static关键字具体讲讲,如何实现在文件外访问static修饰的函数
- typedef和define有什么差别
- sizeof和strlen,那如果对一个字符串用sizeof和strlen有差异吗
- sizeof 是对什么进行操作的
- static修饰的全局变量的作用域,如果想在其他文件访问static修饰的全局变量,应该使用什么方式
指针
- 一级指针,二级指针
- 结构体的指针+1,指针加多少;
- 数组名与指针的区别
-
int*a
;int*a[10]
;int(*a)[10]
;int (*a[10])(int)
的区别 - C语言怎么求变量所占字节大小
- 访问空指针发生什么?发生后如何解决?用什么解决?
- 指针与数组
- 野指针是什么,产生原因。
访问野指针会导致运行中出错
。一般会产生什么错误信息。如何排查。 - 回调需要注意什么
- 指针函数和函数指针的区别
- 野指针和悬空指针的区别
- 一个指针p指向数组b,sizeof(p)的大小
- 结构体和联合体的区别,改变他们成员的值,其他成员会不会改变
- 函数指针一般用在什么场合
- 函数指针在结构体起什么作用
- 函数指针还有什么别的使用场景
- 回调是不是用函数指针去实现的
C++
- 深拷贝浅拷贝
- C和C++中struct的区别
- c++里的try catch throw
- C++ 指针和引用的区别
- C/C++哪个更熟悉,他们之间有什么区别
- 什么时候用c++更好
- C++多线程
- 一个空类的大小,为什么
- nullptr
- 硬链接和软链接的区别
面向对象
- 多态在编译器角度的底层实现原理。
- 函数重载的话,传入参数个数不同,会发生重载吗?return值不同,会发生重载吗?
- c++的基类和派生类的构造析构顺序
- 多态解释举例,这样做的目的
- 析构函数为什么需要是虚函数
- 面向对象三大特性
- 虚函数、虚函数表
- C++的一个类里可以有几个析构函数?
- 拷贝构造、引用可以去掉吗,去掉会导致什么问题
- 引用与指针的区别
- override关键字
显式地指定成员函数意图覆盖基类中的虚函数
- 什么是纯虚函数,使用场景
- 函数模板和类模板的区别
- sizeof 一个类(两个int私有变量) 是多少 8
c++11
- 右值引用了解吗
- 智能指针
- C++的语法新特性
- 智能指针底层原理?
- 为什么需要弱指针
- sharePtr是线程安全的吗
- 右值引用?
- auto和decltpye的区别
- move和forward的区别
- 左值和右值的区别
STL
- vector扩容原理?
- array和vector
- vector和list区别
QT
- QLayout,QT基于指针的集合继承,QT线程相关的类,QT定位焦点,QT embedded,元对象,
- QT实现了哪些功能,登录是怎么实现的,用户名和密码有加密吗
- QT显示部分代码量多大,多少行
- QT编译后文件大小多大
- QT版本号是多少
- QT是用的Creator 还是QML ?(有个项目是用的QT)
- 对里面的控件以及信号与槽了解不?
ARM
- ARM芯片之间的差别是什么吗
- 汇编、机器指令,还有指令,以这三者之间的有什么关系吗
- 讲讲指令集什么概念
- ARM系列本质有什么区别(ARM-M3/M4)
- PC寄存器的作用
- 说一下你最熟悉的寄存器?使用方法(我一开始说的是OTA中的VTOR寄存器,但是面试官后面指出我想让你说类似PC,也就是ARM架构中的那些寄存器)
- ARM的启动流程
- arm的工作模式有哪些
FreeRTOS
概念
- RTOS 的作用,主要组成成分。
- 介绍一下freertos的任务管理、内存管理、中断管理
- 操作系统创建的时候会给那些参数,操作系统源码看过吗
- 介绍下AMP和SMP的区别
- AMP主要是做什么的?
- FreeRTOS的和linux操作系统的区别?
- 为什么FreeRTOS相比于Linux的实时性更好?
- FreeRTOS的实时性怎么体现的
- 裸机和RTOS,如何挑选,包括Linux驱动
任务调度
- RTOS上下文切换
- FreeRTOS的主任务逻辑
- 调度和抢占的区别
- 中断是否会触发抢占
- 抢占式调度和非抢占式调度
- FreeRTOS任务有哪几个状态
- FreeRTOS 如何放弃CPU
- FreeRTOS任务怎么分的,优先级FreeRTOS怎么识别的?
- 抢占时的操作系统处理
- FreeRTOS任务切换
- PendSV和SVC
内存管理
- 系统调用时栈的变化
- 栈大小不够,如何扩充
- FreeRTOS内存分配
- Freertos的调度策略,配置文件,heap3和heap4区别
数据结构
通信原语
- 原子变量会引起死锁吗
- 在FreeRTOS中如何保证原子性操作
- 抢占过程中,资源如何保证(并没过多考虑,使用双缓存)
- 信号量是怎么传递的
- 消息队列通讯的原理
- 消息队列开辟了多少空间?
- 计数信号量是存在哪里的? 开辟了多少空间?
- 多线程安全
- Task之间资源竞争了该怎么处理?
- 线程间通信是什么样子的啊?(我只用了事件标志组)
- 多核间有哪些通信方式?具体是怎么通信的?
- 锁机制有哪些,其内部怎么做到的
- 互斥信号量实现原理
计网
- epoll连接断开时返回的故障码是什么
- socket连接断掉了怎么办
- TCP的SYN攻击是什么,有没有办法解决和避免(还有一些TCP有关场景题)
- IP地址子网掩码的作用
- DNS作用
- 服务端如何监听客户端
- 服务端如何接收客户端请求
- 服务端accept多个请求采用什么模型处理
- 粘包问题
- tcp滑动窗口的过程
- TCP发送数据过程中丢包怎么处理
- select、epoll区别
- ARP
- 通信实时性是通过什么手段去保证的
- 无线网卡和有线网卡通讯,两者从通讯协议出发的区别
- 查看网络设备是否在线用什么?ping属于什么协议
- http端口号?
- 计网的应用做的多吗,Socket有没有用过?
- tcp稳定性
- TCP的拥塞算法
- 物联网常用通信协议(Zigbee、LoRa和NB-IoT)几种的优缺点对比
- WiFi模组通信的校验、应答、重发机制怎么实现的
- OSI七层网络
- HTTP的三次握手和四次挥手
- NACK 和 ACK的区别
- IP地址如何转化成Mac地址
MQTT
- MQTT 的优缺点
- 介绍一下MQTT协议,需要配置哪些参数
- mqtt的通信过程
无线通信
- 蓝牙的底层协议?
- BLE和经典蓝牙的区别
电路
数电
模电
- 电阻电容电感在电路中的作用
- 有功功率、无功功率概念、区别?
- 项目中用到了哪些电能参数,检测原理是什么?
- 运放知道么,说一说,三极管的作用;
- 上拉下拉推挽的外围电路是怎么实现的
- GPIO引脚配置
- 高阻态的理解
规划
- 讲一下你工作这些天有什么体会?或者学习上有什么收获?
- 问我对公司评分,我直接说8~9分,然后问原因为什么不是10分?
- 组织能力怎么体现
- 如果领导给你了任务,你感觉压力大,该怎么办?
- 举个列子说明一下自己的个性特点
- 说一个项目的难点。怎么解决的?解决后提升了多少?有考虑过为什么能解决?
- 领导和同事在组会提出批评(甩锅)如何应对?
- 公共场合倾向于表露自己的情绪还是喜怒不形于色
- offer情况,薪资期望
- 介绍了工作内容和强度(强度是真不低)
- 嵌入式开发最困难的问题是什么?
- 投递的考虑因素
- 如何看待加班
- 职业规划与城市,就业所选择的行业
- 有没有npy,定居意向之类的
- 毕业后的工作地点是怎么想的?
- 你比较看中的就业方向是什么?
- 类似于那种互联网厂你考虑吗?
- 你选择的工作地点,最后强调工作以时间要求、质量要求为准,完成不了自己或者组内想办法解决
- 期望薪资
- 学习途径
- 为什么转专业
- 问个人意愿。想要从事什么方向?
- 为什么选择我们公司
- 应聘这个岗位的核心竞争力
- 对于加班的看法
- 家里情况
- 技术方向
- 学习能力
- 问题解决思路
- 个人兴趣爱好
- 除了简历外还有没有项目
- 问接不接受10 10 5加班强度
- 英文介绍+英文介绍自己的一个项目,问遇到没有了解的问题如何解决,同事之间产生分歧如何解决之类的这种问题,主要考察英文水平和解决能力问题
- 实习期间主要的工作内容,对研发类和应用类的看法
- 举一个自己感到自豪的经历,
- 遇到没有了解的问题怎么解决,
- 工作意向如何,父母对工作地的看法;
- 用英语讲讲上周末干了什么,英语讲讲未来几年打算做什么
- 最难忘的事情
- 最难处理的事情
- 遇到难处理的事情怎么办
- 薪资得不到满足怎么办
- 能否接受加班
- 期望工作地址+期望薪资+简历提到的比赛+英语怎么样
- 自我评价优缺点
- 是否有当领导或者负责人的经历,展开讲讲
- 是否有和同学同事发生冲突过,怎么解决
- 找工作比较看重的三个点
- 最有成就感的事情
- 是否做过比较冲动的事情
- 平常课余生活喜欢做什么
- 兴趣爱好
- 抗压能力咋样,举个例子
- 你学习能力怎样,体现在哪里,分享一些学习方法。
- 选城市的一些思考,就业方向的思考。
- 分工情况、项目加班情况
- 有没有为项目失眠过
- 项目合作中如果别人都质疑你该怎么解决
- 项目合作中意见不统一怎么解决
- 遇到压力怎么办,自己会有什么体现
- 从小到大印象特别深刻的事情
- 什么东西驱动你好好学习的
- 花时间最多的项目,最难的问题。
- 问看过什么计算机软件的书
- 优秀的嵌入式软件工程师应该具备的东西?
- 外企和国资背景单位你怎么看待
- 项目内容、负责的工作、遇到的难点和解决方法、成员意见出现分歧怎么解决等等
- 了不了解华为文化以及怎么理解
- 压力大的时候怎么排解
- 遇到压力最大的事情
- 介绍对嵌入式软件工程师的认知
- 问家庭背景,来深意愿,是否想去体制内,对工作选择看法,个人性格特征。最讨厌的哪类人,如果他是领导怎么办,秋招准备了多久,是否在乎工资高低。
英语
- 英语介绍 自己的优点和缺点
反问
- 晋升路线(技术&管理)
- 公司部门主要业务
- 培养机制
- 面试流程是怎么安排的?如果能进入下一次面试,大概什么时候会给个确定的消息?
- 光伏逆变器中的嵌入式主要做什么工作?单片机,数据交互,ad采样,数据逻辑的控制
- 公司在哪些地方有岗位?岗位充足吗?西安上海杭州..,总部宁波,没说岗位是不是充足
- 如何分配工作地点?根据需求分配
- 面试流程:技术面 - 总监技术面 - hr谈薪
- 一年出差多久
- 做Linux还是mcu
- 之前提问都是硬件相关的多、你们部门开发啥的;
- 既然是嵌入式软件岗,做软件多一点还是硬件多一点;
- 人员规模
- 业务方向
建议
可以买一块通用的板子,自己来移植内核再到自己来编写相应的驱动程序,最好是对整个硬件的交互有一个深刻的认识,面试官说我目前大概是停留在一个中间层及以上的一个开发应用,可以再从寄存器、内核、设备树的底层来出发考虑