汇川技术 - 嵌入式软件工程师 - 面经(1)
-1、背景
岗位:
【25提前批-联合动力】嵌入式软件工程师
工作职责:
- 硕士及以上学历,自动化、计算机、电气工程及其自动化等专业等相关专业;
- 有嵌入式软件编程经验,熟练掌握C/C++,有simulink应用、芯片驱动设计等开发经验者优先。
- 工作严谨细致,有责任心,有良好沟通能力,具备团队合作精神。
任职资格:
- 负责新能源汽车相关产品软件开发,汽车电子嵌入式软件设计、开发与测试工作
- 负责基于ARM、DSP等单板控制器的软件开发
- 负责软件功能的需求分析、设计及代码开发
- 协助解决产品市场问题、技术难点等。
时间线:
0705(投递) -> 0705(测评) -> 0729(一面)-> ❌
0、笔试
提前批无笔试
1、面经汇总
一
- 介绍整体项目?
- XXX 是怎么运行的?
- 有没有做验证, 怎么知道 APP 有没有生效,损坏?
- 固件头包含什么信息?
- 介绍一下这几个 MCU 里用过的外设?
- 团队和个人工作的区别是什么?
- 更喜欢团队工作还是个人?
二
汇川联合动力一面,总时长不到 20min
- 自我介绍
- 聊了聊科研项目
- 本科基础课(数模电,自动控制现代控制)
- 简单的 C++ 基础提问
- TCP/IP 简单介绍
三
飞书视频会议 全程 25 分钟左右
- 自我介绍
- 手撕:兔子生兔子问题
- 实习相关内容
- 手撕汇编:十个数重新排列(写了 3 行面试官说可以了挺好的)
- 反问
- 公司作息时间?
- 西安岗位的情况?
- 几个城市的具体方向划分有没有区别?
四
总体难度不难,主要围绕项目,有少量八股,压力不大,全程半个小时
- 自我介绍
- 介绍项目
- 问了项目中的 C 语言高级用法,如函数指针、指针函数
- 闲聊
五
嵌入式软件工程师
- 自我介绍
- 项目相关问题
- 结构体字节对齐问题
- CAN 总线的仲裁机制,优先级问题
- 讲讲 FreeRTOS(任务调度,优先级机制)
- 队列和栈的区别
- 手撕代码:猴子吃桃
六
嵌入式软件工程师(西安)
0812(投递) -> 0824(一面)-> 0828(一面通过)-> 0910(线下二三面)
- 自我介绍
- 项目介绍
- 变换器控制环是不是自己写的,介绍下思路?
- 前馈解耦控制中包含电网电压项吗,如果不加电网电压项会有什么影响?
- 中断频率设置的是多少?怎么优化中断服务函数执行速度?
- F28335 中 int 类型占几个字节?
- 多进程操作需要注意哪些问题?临界资源有哪些?
- 局部变量与全局变量的存储位置分别是什么?
- 静态全局变量赋初值和不赋值有什么区别?
- 反问环节
- 嵌入式工作方向?(分为两个,DSP 控制算法或者偏底层车机系统)
- 面试一共会有几轮?(三轮)
七
- 自我介绍
- 项目介绍(只问了智能车比赛)
- 比赛难度?
- 获奖情况?
- 电感采集?
- 说说采样频率,单片机如何采集到信息的?
- 手撕字符串反转:“abcdefg -> gfedcba” ?
- 为什么用静态函数?什么地方用?
- 反问
- 入职有学习期吗?
八
30mins
- 自我介绍
- 实习项目拷打(相关度较高)
- 介绍 C++ 多态?
- C++ static 作用?
- 介绍 C++ 堆栈?
- 函数的行参为什么不放在寄存器,要放在栈里?
- 反问
九
0809(投递) -> 0809(测评) -> 0908(一面)
- 项目介绍
- Windows 操作系统和 SYS/BIOS 的区别?
- Linux 系统、计算机网络了解吗?
- 怎么看待将你临时借调到其他部门?
- 项目中遇到的困难?
十
- volatile 的作用?
- 选择题:数组指针
- 代码题:联合体
十一
- 讲一讲 UART/I2C/SPI/CAN的区别?
- 用过哪些 I2C 器件?
- 有硬件设计经验?你做过什么?
- 学过 PLC?用过哪些 PLC? 梯形图和 ST 都熟悉?
- 你知不知道汇川是做什么的?)
- 项目相关
- 反问
- 一面多久出结果?
2、一面(30min)- 20240729
- C 语言编译的过程
预处理 -> 编译 -> 汇编 -> 链接
*p++
和(*p)++
区别
*p++
返回指针p
指向的元素值,指针p
指向下一个元素,地址++
(*p)++
返回指针p
指向的元素值,并将该元素值加一,值++
- 编程题(三道题均为真题,但面试只会手撕一道)
有 1、2、3、4 四个数字,用 C 语言编程计算能组合出多少个不重复的三位数,并输出各个数
#include <stdio.h> int main() { int count = 0; for (int i = 1; i <= 4; i++) { for (int j = 1; j <= 4; j++) { if (j == i) continue; // 保证数字不重复 for (int k = 1; k <= 4; k++) { if (k == i || k == j) continue; // 保证数字不重复 printf("%d%d%d\n", i, j, k); count++; } } } printf("总共组合数量: %d\n", count); return 0; }
已知一个数列的前3个数为3,4,5,以后每个数为前3个数的和,编程序求此数列的第N项
int fibonacci_recursive(int n) { if (n <= 0) { return 3; } else if (n == 1) { return 4; } else if (n == 1) { return 5; } else { return fibonacci_recursive(n - 1) + fibonacci_recursive(n - 2) + fibonacci_recursive(n - 3); } }
给定一个整型数 a,清除 a 的 bit15 ~ bit23 ,保证其他位不变
#include <stdio.h> #include <stdlib.h> // 打印 32 位二进制数 void printBinary(int n) { char binary[33]; // 字符串结尾 binary[32] = '\0'; for (int i = 31; i >= 0; i--) { // 使用位操作来检查每一位 binary[i] = (n & 1) ? '1' : '0'; // 右移一位 n >>= 1; } printf("%s\n", binary); } int main() { int num=0xFFFFFFFF; printBinary(num); // 1.掩码方式 int method1 = num; int mask = 0xFF007FFF; method1 &= mask; printBinary(method1); // 2.移位方式 int method2 = num; method2 &=~(0x1FF << 15); printBinary(method2); return 0; }
- 你都使用过 MCU 的哪些外设,挑一个你最熟悉的讲一讲?
- 使用 I2C 获取的从机数据是怎么样的?
- Linux 启动过程是怎么样的?
- 堆栈溢出是什么?
- 内存对齐是什么?
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步