一、面试总体概述
1.1案例背景
本篇整理自广州视源电子科技股份有限公司(CVTE)软件与嵌入式开发方向(C++ / 嵌入式 / Linux)的面试参考资料。一面是专业面,时长约 40-75 分钟,以 C++ 语言特性、Linux 网络编程与操作系统基础为主,并配有手撕代码环节;二面为 HR / 综合面,约 20 分钟,重点看求职动机、技术成长诉求与职业规划。视源面试整体推进很快,有时上午面完下午就出结果,需要提前做好心理准备。
1.2基本信息
| 公司 | 广州视源电子科技股份有限公司 |
| 岗位 | 软件与嵌入式开发 |
| 招聘类型 | 校招 |
| 用工形式 / 部门 | 直招 |
| 面试形式 | 线上或线下(视岗位而定) |
| 面试轮次 | 2 轮 |
| 题目数量 | 共 13 题,均附参考答案 |
| 整体难度 | ★★★★☆ 偏难 |
1.3面试轮次与结构
| # | 轮次 | 类型 | 时间 | 时长 |
|---|---|---|---|---|
| 1 | 技术一面 | 专业面 | 未注明 | 未注明 |
| 2 | HR 面 | HR / 综合面 | 未注明 | 未注明 |
1.4高频考点
| 考点 | 分类 | 出现轮次 | 次数 |
|---|---|---|---|
| 网络编程:socket 流程与 I/O 多路复用 | 网络编程 | 技术一面 | 2 |
| C++ 语言特性:虚函数、智能指针、关键字 | C++ 基础 | 技术一面 | 3 |
| 操作系统:进程与线程、堆与栈、内存管理 | 操作系统 | 技术一面 | 3 |
| 手撕代码(状态机、报文解析、链表、堆与队列) | 编程能力 | 技术一面 | 1 |
| 求职动机、公司文化认同与职业规划 | 综合素养 | HR 面 | 5 |
1.5备考建议
| 优先级 | 易失分点 | 准备动作 |
|---|---|---|
| P0 | C++ 特性只会背结论,讲不出底层实现 | 把虚函数表、shared_ptr 控制块、拷贝语义画一遍内存图,能顺着追问讲到对象布局 |
| P1 | 网络编程只记得 API 名字 | 把 socket 建立连接的全流程和 epoll 的触发模式讲成一条时间线,并说明各自适用场景 |
| P1 | 手撕代码题临场紧张写不出完整逻辑 | 按「状态机、报文解析、链表、两个堆实现队列」四类各手写一遍,标注边界条件 |
| P2 | HR 面答得像背模板 | 每个回答带一个具体细节(项目、课程、实习),用真实经历替代形容词 |
二、第 1 轮:技术一面
2.1面试形式与时长
| 轮次名称 | 技术一面 |
| 面试类型 | 专业面 |
| 本轮题量 | 8 题 |
2.2重点考查维度
- C++ 基础 —— 本组 3 道题
- 网络编程 —— 本组 2 道题
- 操作系统 —— 本组 2 道题
- 编程能力 —— 本组 1 道题
一面为专业面,约 40-75 分钟,面试官会顺着你的回答不断追问底层实现。
2.3面试真题与参考答案
服务端:创建 socket → bind 绑定 IP 和端口 → listen 监听 → accept 阻塞等待连接。
客户端:创建 socket → connect 发起连接。
连接建立后双方通过 send/recv 收发数据,通信结束后 close 关闭连接。
底层是 TCP 三次握手建立连接、四次挥手断开连接。
select 使用轮询方式,有文件描述符数量限制(通常 1024),每次调用都需要把 fd 集合从用户态拷贝到内核态。
poll 用链表存储 fd,解决了数量限制,但仍有拷贝开销。
epoll 通过内核事件表管理 fd,使用回调机制,无需轮询和重复拷贝,适合高并发场景,并且支持水平触发和边缘触发两种模式。
虚函数用于实现运行时多态,通过虚函数表(vtable)在运行时确定调用哪个函数;纯虚函数(=0)用于定义抽象基类接口,派生类必须实现。
虚函数表通过对象的虚表指针访问,同一个类的所有对象共用一张虚函数表。
构造函数不能是虚函数;涉及继承时析构函数通常应声明为虚函数,以保证正确释放资源。
C++11 提供三种:unique_ptr(独占所有权,不可拷贝)、shared_ptr(共享所有权,引用计数)、weak_ptr(不增加引用计数,用于解决循环引用)。
shared_ptr 底层维护一个控制块,包含引用计数和弱引用计数:引用计数归零时释放被管理对象,弱引用计数归零时释放控制块。
进程是资源分配的基本单位,线程是 CPU 调度的基本单位。同一进程的线程共享内存空间,进程之间内存隔离。
进程间通信方式包括管道、消息队列、共享内存、信号量、socket 等。
线程同步方法有互斥锁、条件变量、读写锁、信号量等。
修饰局部变量时,变量存储在静态区,生命周期延长至程序结束;
修饰全局变量或函数时,把作用域限制为当前文件,避免命名冲突。
栈由系统自动分配和释放,空间小但速度快,存放局部变量和函数参数;堆由程序员手动分配释放(malloc/free),空间大但速度较慢,容易产生内存碎片。
栈的效率更高,因为只需要移动栈指针。
高频题与入手思路:
- 处理 UART 串口数据接收:用状态机思路,把接收过程拆成「空闲 → 起始 → 数据 → 校验 → 结束」几个状态,每个状态只处理一类字节,边界值(半包、粘包、超时)单独处理。
- 触摸报文解析(64 字节格式,完成触点信息解析):先按协议定义划分字节区间(帧头、触点 ID、坐标、压力、校验),再做位运算拆分,最后用 CRC 校验丢弃异常帧。
- 反转字符串、链表操作(添加 / 删除节点):反转字符串用双指针原地交换;链表注意哨兵节点、断链顺序和空链表 / 单节点边界。
- 两个堆实现一个队列:用一个大顶堆当队头、一个小顶堆当辅助,入队时按规则搬移元素;实现时要明确复杂度摊销与堆的更新时机。
面试时先口述思路和复杂度,再写代码,写完主动检查边界条件。
三、第 2 轮:HR 面
3.1面试形式与时长
| 轮次名称 | HR 面 |
| 面试类型 | HR / 综合面 |
| 本轮题量 | 5 题 |
3.2重点考查维度
- 综合素养 —— 本组 5 道题
二面约 20 分钟,多为行为面试题,重点看态度和稳定性。
3.3面试真题与参考答案
如实说明当前的面试进度,同时表达对视源的强烈兴趣。若有其他 offer,可以说明视源在产品线和发展平台上更契合自己的职业规划。
建议围绕「技术成长空间、团队氛围、产品行业前景」来回答,体现对长期发展的思考,而不是只谈薪资。
从学习和项目两个维度里选一个细节充分的案例,突出解决问题的过程和事后反思,避免泛泛而谈「很难但我坚持下来了」。
可以提到务实、高效、重视技术创新的文化氛围,与视源「以科技为先导」的理念相契合,并结合自己的实习或项目经历举例说明。
短期(1-3 年)深耕技术,成为独当一面的工程师;中期(3-5 年)向技术专家或技术管理方向发展;长期(5-10 年)成为领域内有影响力的技术人才。
备考阶段,我发现很多同学容易陷入「不知道从哪准备」的困境。后来我向学员推荐了一款叫求职精灵的 AI 工具,上面收录了大量真实面经,还能直接搜到目标岗位的面试官常问什么、评分标准是什么。用它做 AI 模拟面试也特别方便,输入公司和岗位,系统自动生成仿真题目并给出反馈,练完之后心里更有底。感兴趣的同学可以直接访问 https://finsight.work/ 体验。
总结收尾
最后真心建议大家在备考阶段用一下求职精灵,网址是 https://finsight.work/ 。它能查岗位JD、一键修改简历、刷15万+道真题题库,还有AI模拟面试功能,整个备考流程基本都能覆盖,已经有超过6万学员用过,效果有口皆碑。别等到面试前一天才开始准备,现在就去用起来。机会永远留给有准备的人,希望读到这篇文章的每一位同学都能拿到心仪的offer。