面灵AI→

卓驭科技 C++ 面试:NPU 架构、线程池与内存池

轮次
一二面
时间
2026-10
来源
牛客网

《面试题目》

一面(技术面,2 位面试官)

  1. 讲一下 NPU 的内部架构由哪些部分组成?
  2. NPU 和 GPU 有什么区别?各自适合什么场景?
  3. 结合你做过的项目,讲讲里面的线程是怎么设计的?
  4. 多线程常见的同步机制有哪些?你的项目里实际用到了哪几种,怎么用的?
  5. 开发里有没有用过线程池?说说你的使用体会。
  6. 有没有接触或使用过内存池?讲一讲内存池大概怎么实现?

HR 面(约半小时)

  1. 目前有没有其他 offer?面试进度如何?
  2. 简单说下个人优缺点。
  3. 期望薪资范围?
  4. 上下班时间意向与接受情况?

《参考解析》

NPU 与 GPU 的差异在「专用 vs 通用」。NPU 为神经网络算子定制,通常由大量 MAC 阵列、片上缓存、数据搬运单元和指令调度组成,擅长矩阵乘、卷积、激活等固定模式,能效比高;GPU 通用性强、可编程性好,适合训练和大规模并行计算。端侧用 NPU 是因为功耗和成本,云端训练仍以 GPU 为主。

线程设计要讲清「为什么这么分」:IO 线程负责收发和解析、计算线程池负责推理、定时线程负责心跳和超时;线程间用队列传递任务,共享数据用互斥锁保护、状态通信用条件变量,读多写少的配置用读写锁或无锁结构。

线程池的体会:核心线程数按任务类型定,队列要有界,拒绝策略要明确(丢弃、调用方执行、抛异常),并监控队列长度和拒绝次数;避免在池里做阻塞等待,防止线程被占满。

内存池的实现:预先向系统申请大块内存,按固定大小切分成块,用空闲链表管理;分配时从链表取、释放时还回去,减少 malloc/free 的次数和碎片。进阶做法是按大小分级(slab)、加线程本地缓存减少锁竞争。

HR 面如实回答:offer 进度说清楚,优缺点各一个并配改进动作,薪资给区间和依据,作息按实际情况答。