精智达 Linux 应用开发二面:智能指针、崩溃排查与 DDS
- 轮次
- 二面
- 时间
- 2026-10
- 来源
- 牛客网
《面试题目》
- 自我介绍。
- 项目和实习讲解,以及难点询问。
- 智能指针的原理和用法?共享智能指针内部构造是什么?独占智能指针能拷贝吗?
- 一般程序崩溃怎么排查?
- 进程间有哪些通信方式?
- C++ 的四种数据类型转换是什么?
- 聊聊 DDS。
- Linux 一般用哪些指令?
- 通信协议用过哪些?它们的特点是什么?
- 手撕:最长连续字符串。
- 反问。
- 反问完又问对加班的看法。
《参考解析》
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)。