卓驭科技 C++ 面试:NPU 架构、线程池与内存池
- 轮次
- 一二面
- 时间
- 2026-10
- 来源
- 牛客网
《面试题目》
一面(技术面,2 位面试官)
- 讲一下 NPU 的内部架构由哪些部分组成?
- NPU 和 GPU 有什么区别?各自适合什么场景?
- 结合你做过的项目,讲讲里面的线程是怎么设计的?
- 多线程常见的同步机制有哪些?你的项目里实际用到了哪几种,怎么用的?
- 开发里有没有用过线程池?说说你的使用体会。
- 有没有接触或使用过内存池?讲一讲内存池大概怎么实现?
HR 面(约半小时)
- 目前有没有其他 offer?面试进度如何?
- 简单说下个人优缺点。
- 期望薪资范围?
- 上下班时间意向与接受情况?
《参考解析》
NPU 与 GPU 的差异在「专用 vs 通用」。NPU 为神经网络算子定制,通常由大量 MAC 阵列、片上缓存、数据搬运单元和指令调度组成,擅长矩阵乘、卷积、激活等固定模式,能效比高;GPU 通用性强、可编程性好,适合训练和大规模并行计算。端侧用 NPU 是因为功耗和成本,云端训练仍以 GPU 为主。
线程设计要讲清「为什么这么分」:IO 线程负责收发和解析、计算线程池负责推理、定时线程负责心跳和超时;线程间用队列传递任务,共享数据用互斥锁保护、状态通信用条件变量,读多写少的配置用读写锁或无锁结构。
线程池的体会:核心线程数按任务类型定,队列要有界,拒绝策略要明确(丢弃、调用方执行、抛异常),并监控队列长度和拒绝次数;避免在池里做阻塞等待,防止线程被占满。
内存池的实现:预先向系统申请大块内存,按固定大小切分成块,用空闲链表管理;分配时从链表取、释放时还回去,减少 malloc/free 的次数和碎片。进阶做法是按大小分级(slab)、加线程本地缓存减少锁竞争。
HR 面如实回答:offer 进度说清楚,优缺点各一个并配改进动作,薪资给区间和依据,作息按实际情况答。