面灵AI→

精智达 Linux 应用开发二面:智能指针、崩溃排查与 DDS

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

《面试题目》

  1. 自我介绍。
  2. 项目和实习讲解,以及难点询问。
  3. 智能指针的原理和用法?共享智能指针内部构造是什么?独占智能指针能拷贝吗?
  4. 一般程序崩溃怎么排查?
  5. 进程间有哪些通信方式?
  6. C++ 的四种数据类型转换是什么?
  7. 聊聊 DDS。
  8. Linux 一般用哪些指令?
  9. 通信协议用过哪些?它们的特点是什么?
  10. 手撕:最长连续字符串。
  11. 反问。
  12. 反问完又问对加班的看法。

《参考解析》

shared_ptr 的内部是「对象指针 + 控制块」,控制块里放强引用计数、弱引用计数、删除器和分配器;拷贝时强引用计数原子加一,析构时减一,减到零销毁对象,弱引用也归零才释放控制块。unique_ptr 独占所有权,不能拷贝只能移动。

程序崩溃排查:先看 core dump 或崩溃日志的调用栈,用 gdb 定位到具体行;常见原因是空指针、越界、use-after-free、栈溢出、未捕获异常。开了 ASan/Valgrind 能提前发现内存问题,线上则靠日志和监控。

进程间通信:管道、命名管道、消息队列、共享内存、信号量、信号、套接字。共享内存最快但要自己做同步,套接字最通用可跨机器。

C++ 四种转换:static_cast(编译期、相关类型)、dynamic_cast(运行时检查、多态类型)、const_cast(去 const)、reinterpret_cast(重新解释位模式,最危险)。

DDS 是分布式实时通信中间件,以数据为中心的发布订阅模型,支持 QoS(可靠性、时限、历史深度),常用于自动驾驶和机器人。和 MQTT 比,它更适合高实时、多对多的局域网场景。

最长连续字符串(通常指无重复字符的最长子串)用滑动窗口 + 哈希表记录字符最后位置,右指针扩张、遇到重复就移动左指针,时间 O(n)。