CVTE - 嵌入式软件开发工程师(Linux方向)- 面经(12)


-1、背景

职位:

嵌入式软件开发工程师(Linux方向)

项目:

2025 届校园招聘提前批

岗位职责:

嵌入式开发工程师会参与全球市场显示类产品的开发,工作包括了系统底层驱动的调试、相关功能模块的代码实现、用户交互设计和上层应用开发等内容。

  1. 负责全球市场显示类产品的系统设计、实现、优化与调试
  2. 负责产品需求分析,功能设计与代码编写
  3. 负责在嵌入式平台上的应用以及用户交互设计开发
  4. 负责客户反馈问题的处理

岗位要求:

  1. 有良好的编程基础,熟练掌握 C/C++ 语言
  2. 掌握操作系统、数据结构等软件开发必备知识
  3. 具有良好的团队协作、亲和力、乐意与人交往
  4. 有 Linux/Android 系统平台的开发经验者优先

时间线:

0701(投递) -> 0719(笔试) -> 0728(一面)-> 0801(二面)-> ✅


0、笔试

20240719 - CVTE - 笔试

1、面经汇总

1.1、综合面试(HR面)

基本情况面试,不涉及技术知识,具体可看 [[#2、综合面试(10min)- 20240728]]

  1. 为什么选择这个岗位
  2. 最满意的项目,怎么实现
  3. 10-15 年职业规划
  4. 理想的工作和家庭状态
  5. 接受的工作时长

1.2、专业面试(技术面)

  1. static 关键字有什么作用
  2. final 关键字的作用
  3. 虚函数和程序函数的区别
  4. 内存划分
  5. mmap 的原理,映射到哪块区域
  6. 堆存的什么,如何扩展堆的内存大小
  7. 宏定义和函数
  8. C 和 C++ 的区别
  9. C 语言的文件操作,fopen 和 open 的区别
  10. C++ 的三大特性
  11. 重写和重载的区别
  12. 模板
  13. STL 容器,list 对应的数据结构
  14. C++ 中怎么使用 C 语言的库
  15. 大端存储小端存储
  16. 交叉编译原理,makefile
  17. 中断流程,区分硬中断和软中断
  18. I2C 原理,如何保证数据的准确性
  19. 串口通信,如何保证通信成功。波特率修改
  20. 进程和线程的区别
  21. 进程的创建和销毁
  22. 判断父进程与子进程
  23. 父进程比子进程先死,子进程会变成什么(没爸爸了,孤儿)
  24. 线程的创建和销毁
  25. Linux 操作系统常用指令
  26. 查看物理内存
  27. TCP 传输协议,客户端与服务端的编写流程
  28. listen 是阻塞的还是非阻塞的
  29. select
  30. 怎么保证客户端能够正确连接到服务端
  31. UDP 编程
  32. TCP 和 UDP 的区别
  33. 三次握手和四次挥手是什么流程
  34. 数组和链表的区别
  35. 判断环形链表
  36. 栈和队列的区别
  37. 判断循环队列是空的还是满的
  38. 排序算法例举
  39. 快速排序
  40. 介绍项目
    1. .ko 文件的加载与卸载
    2. 音频部分的开发做了什么工作
    3. 开发流程
    4. 音频编解码
    5. 项目开发完成后,是否存在一些遗留问题
  41. 本科生与研究生的生活是怎么过的
  42. 如何平衡研究工作与私下生活
  43. 未来发展
  44. 从事算法类的岗位和工作
  45. 工作地点和工作时间
  46. 是否忍受的长期加班的时间生活,怎么看加班10点以后常态化
  47. 工作内容和学到的内容以及期望的工作内容不匹配
  48. 手撕:给定一个字符串,将字符串中的每个单词逐个翻转

比如输入:blue is sky the
输出:the sky is blue
输入:a good example!
输出:example! good a (如果两个单词间有多余的空格,将反转后单词间的空格减少到只含一个)。

  1. 遇到的新的技术难点怎么解决
  2. 反问

  1. 进程和线程的区别
  2. 共享内存的原理
  3. 谈一谈进程通信
  4. 哪些通信方式是单向的(管道和信号),哪些需要借助内核
  5. 中断的概念
  6. 中断有传参和返回值吗,为什么
  7. 串口数据帧格式
  8. Linux 的设备:字符设备、块设备、网络设备
  9. 手撕代码:求素数
  10. volatile
  11. 对待加班看法,职业规划等等
  12. Linux 的一些基本命令(ifconfig、touch、vim等)

  1. 自我介绍
  2. 三极管和 MOS 管如何识别
  3. 链表和数组的区别
  4. 常用的数据结构有哪些
  5. 一个物品开 3 个线程,100 个物品开多少个线程
  6. 什么是线程池、select 和 epoll 的区别
  7. GPIO 口配置分为那几种
  8. 如何处理按键误触
  9. 如何开一个新线程
  10. C 语言分配内存有几种方式
  11. C++ 分配内存
  12. new 和 malloc 区别
  13. 如何判断堆栈内存大小
  14. 如何证明函数栈大小
  15. 进程间通信的方式
  16. 用户态的函数向内核态调用主要有几种方式
  17. 什么是系统调用
  18. 排序算法的时间复杂度
  19. 内存比较吃紧用那种排序算法
  20. 什么是 shell 脚本
  21. Linux 中软连接和硬连接
  22. 在 Linux 中如何查找指定后缀的进程名称
  23. 解释一下 I2C 协议中止信号
  24. Socket 滑动窗口
  25. 一个服务端对应多个客户端机制
  26. 断点传输
  27. 手撕:C 语言实现链表的逆序排序不能用递归(可以用二分法实现)

  1. 自我介绍
  2. 你怎么理解嵌入式,嵌入式对你来说意味着什么
  3. 项目介绍
  4. 电容屏的驱动是自己写的吗,怎么写的
  5. 我看你第一个项目是偏应用层一点,为什么想要做底层
  6. 说一下 SPI 和 I2C 的时序以及特点、选用场景、区别
  7. 自电容和互电容
  8. 你在做项目的过程中有考虑过抗电磁干扰(抗静电干扰)
  9. 技术栈有哪些
  10. Linux 你常用什么命令,用的都熟吗
  11. 如果要你在 Linux 中使用命令找出 “xxx” 前缀的文件,该怎么找呢?
  12. 怎么查看当前所有进程、内存占用量怎么查看
  13. 我看你写过驱动,详细描述下驱动是咋写的呢
  14. 手写几个指针数组、数组指针、引用
  15. 常量指针和指针常量
  16. 共享屏幕,看 IDE 环境,看项目触摸驱动代码部分,询问是否使用联合体
  17. 反问:
    1. 什么时候出结果?(大概3、4天)
    2. 后续流程?(本轮面试通过要去公司实习一周再决定是否录用)
    3. 培养制度?

  1. 自我介绍
  2. 问做驱动还是应用
  3. LCD 驱动的编写过程(简历上的)
  4. 驱动的匹配机制
  5. Linux的启动过程
  6. 设备树
  7. 设备树是为了解决什么问题
  8. 输入子系统

2023.10

  1. 自我介绍
  2. 什么时候开始学 Linux 的
  3. 最近在看什么书
  4. 你是怎么学习 Linux 的
  5. 学了什么开发板
  6. 更倾向于驱动还是应用
  7. Uboot 之前是什么
  8. 开发板的启动流程是什么
  9. Uboot 中的步骤
  10. 你编写代码的流程是怎么样的
  11. C++ 移动构造函数和复制构造函数的区别
  12. 常用的 Linux 命令
  13. Linux find 命令所需要的参数,如果在 find 之后执行删除操作呢?
  14. 你有用过锁吗,用的最多的是什么锁,读写锁有了解过吗
  15. C++ 浅拷贝和深拷贝
  16. C++ 如何避免浅拷贝
  17. C++ 多态
  18. C++ vector/list/map 介绍一下异同
  19. C++ 创建一个类的时候,默认生成的函数是什么
  20. 如何创建一个线程?需要什么参数?
  21. 如何创建一个进程?
  22. 进程和线程的区别
  23. 进程在什么时候会崩溃
  24. 如何调试进程的崩溃
  25. 手撕:字符串转换为数字

  1. 自我介绍
  2. 项目介绍
  3. 编译运行过程中常用的调试手段
  4. 嵌入式开发有哪些特点,限制,有哪些需要注意的地方
  5. 传输 float 数据,怎么设计
  6. float 数据可以移位吗?
  7. 中断的概念和优缺点、什么是时候使用软中断
  8. 一个函数,在 main 和中断中都要同时调用,这个函数要做什么设计?
  9. 一个全局变量 a,在 main 和中断中要传递数据,这个变量要注意什么问题?
  10. volatile 的本质以及作用有哪些?
  11. 串口波特率有用过更大的传输速度吗? 串口传的数据包的格式?
  12. GPIO的工作模式有哪些?实际使用的例子举例说明

  1. Linux 和 Windows 的换行符有什么不同
  2. I2C 设备的地址多少位 (7/10)
  3. I2C 读时序
  4. 宏函数定义写一个交换数据 不能用 temp
  5. 宏定义写循环
  6. UART 怎么确定数据正确性
  7. TCP 中大端小端的问题
  8. 了解 Shell 脚本吗?写过什么?
  9. ABC 类网络分类
  10. 了解多线程多进程吗?怎么写多进程编程?
  11. 假如中断函数要返回一个值,怎么写?
  12. 用过 fgets 等读取文件的函数吗?
  13. open 函数传入什么参数?什么模式?参数怎么写?
  14. 有没有试过用 USB 等给 IO 设备等写数据?
  15. 给你一个不联网的电脑 怎么找关于 grep 的用法?
  16. TCP、UDP 异同?函数?
  17. I2C 的特点?速度?硬件软件 I2C 有什么异同?
  18. 中断要传入什么参数?中断可以有返回值吗?
  19. 堆栈的区别?内存不 free 会怎样?
  20. 若栈的长度较小有什么注意事项
  21. 程序还可以存放在哪里
  22. 链表和顺序表的区别?
  23. 怎么确定该用链表还是数组
  24. 反问

25分钟

  1. TCP/IP 协议讲一下
  2. 用过哪些基于 TCP/IP 协议的,例如抓包啥的?
  3. 项目介绍
  4. 了解哪些设计模式?
  5. Linux 内核空间与用户空间的区别?通信方式?
  6. Linux 中堆栈的区别?
  7. 回调函数了解吗?
  8. 了解哪些 Linux 驱动模型,讲一下?
  9. 讲一下外设总线,I2C、SPI、UART ?
  10. 内核同步机制有哪些?

  1. 怎么理解嵌入式,嵌入式的概念
  2. 写自己的驱动,做修改和功能怎么确保在目标板正常运行
  3. 编译运行过程中常用的调试手段
  4. 开发功能时,嵌入式开发有哪些特点,有哪些限制,有哪些需要注意的地方
  5. 除了串口,还了解哪些?
  6. 传输 float 数据,怎么设计,四个字节?
  7. 两边大小端不一致怎么办?
  8. float 数据可以移位吗?
  9. 中断的概念?
  10. 中断的优缺点是什么?
  11. 软中断的概念?写代码什么时候用软中断?
  12. 软中断和函数调用的区别?
  13. 一个函数,在 main 和中断中都要同时调用,这个函数要做什么设计?
  14. 一个全局变量 a,在 main 和中断中要传递数据,这个变量要注意什么问题?
  15. volatile 的本质以及作用有哪些?
  16. 串口波特率有用过更大的传输速度吗?
  17. 串口传的数据包的格式?是自己定义的吗?
  18. 串口发送数据量比较大的时候或者传输比较频繁的时候,怎么保证每个包的数据完整?
  19. GPIO 的工作模式有哪些?用过哪几种?
  20. I2C 需要几根线?分别是什么线?
  21. I2C 优势有哪些?
  22. I2C 总线可以挂多少个从设备?

十一

50 分钟左右

  1. 自我介绍
  2. 职业规划,以前在那家公司为什么不继续做
  3. 手撕:字符串分割,程序检错
  4. pritnf() 底层实现原理,是如何打印到控制台上的
  5. newmalloc 的区别(内存分配,分配位置,返回值类型等)
  6. 数组和指针的区别
  7. Linux 下创建子进程的方式,创建进程的 API 函数
  8. 介绍下 Linux 下创建线程的方式,以及创建线程的 API 函数
  9. Linux 下的内核空间和用户空间有什么区别,内核空间为什么要和用户空间隔离
  10. ARM+Linux 的嵌入式开发板是如何启动的,Linux 是如何跑在 ARM 开发板上的
  11. Linux 中文件系统是如何启动的?挂载文件系统时步骤?如何挂载?
  12. U-boo t如何引导启动?
  13. 什么是多态?如何实现多态?
  14. 项目演示(问项目技术实现,算法原理)
  15. 反问

2、综合面试(10min)- 20240728

基本情况面试,无任何技术知识

  1. 还在学校?最近找工作进展如何?
  2. 都是投的嵌入式方向的工作吗?
  3. 为啥会选择嵌入式这个方向?
  4. 过往你经历过的一个最有技术难度或者挑战性的项目是什么?
  5. 当时遇到的具体难点是什么?
  6. 项目中你还有哪些遗憾吗?觉得还有能做的更好地方?
  7. 你最近一次意见或者观点跟身边的人有不一致是什么时候?
  8. 做项目的时候会出现大家观点不一致的时候吗?
  9. 遇到过什么不太公平的事情吗?
  10. 过往压力最大的时间是什么时候?
  11. 这段时间状态会和现在有什么不一样吗?
  12. 你性子比较着急还是比较慢?
  13. 对未来求职的工作地点,时间长度,薪资有什么要求?
  14. 未来十年之后你自己理想的生活和工作状态是什么样子的?
  15. 为什么会想做领导?

3、专业面试(40min)- 20240801

  1. 自我介绍
  2. 项目介绍
  3. 画图板和音乐播放器怎么实现的?
  4. 音乐播放器如何实现拖动进度条改变音乐进度?
  5. UBoot 启动流程
  6. Linux Kernel 和设备树如何加载到 CPU RAM 中的?
  7. bootargs 参数里面一般都有什么内容?
  8. 进程和线程的区别?
  9. GPIO 有哪几种模式?
  10. I2C 能挂载多少个设备?
  11. 手撕:用 C 实现自己的 memcpy() 函数?(写出来后让再换一种高级写法)
  12. 项目里面最难忘的一个问题是什么?怎么解决的?
  13. 中断能不能传递参数
posted @ 2024-11-05 14:15  OSnotes  阅读(85)  评论(0编辑  收藏  举报