面试错题补齐

4 阅读2分钟

海康威视

1. Windows 程序移植 Linux 无法运行原因

  1. 操作系统 API、底层系统调用存在差异;
  2. 文件系统差异:路径分隔符、大小写敏感、换行符规则不同;
  3. 编译环境、专属语法、第三方库跨平台兼容性问题;
  4. 字符编码不一致,Windows 多为 GBK,Linux 默认 UTF-8,引发乱码解析异常。

2. C++ optional 和 variant 区别

  1. std::optional<T> 单一类型存储,核心标识值是否存在
  2. std::variant<T1,T2...> 固定多类型选一,必定有有效值
  3. 作用不同:前者解决空值问题,后者实现轻量类型多态。

3. Debug 正常、Release 崩溃常见原因

Debug 模式自带内存初始化、调试保护、无优化;Release 开启高阶优化、移除安全校验。

  1. 未初始化变量:Debug 自动补零,Release 为随机脏数据;
  2. 编译器指令重排、冗余代码裁剪,引发多线程时序错乱、未定义行为;
  3. 运行速率差异放大多线程锁竞争、死锁问题;
  4. 依赖 DEBUG 宏的分支代码,切换模式后逻辑失效。

4. 常用内存泄漏检测工具

  1. GDB:Linux 原生调试工具,解析 core 日志、查看崩溃调用栈,定位野指针、程序宕机问题;
  2. ASan:编译器内置内存检测工具,编译添加 -fsanitize=address,leak,undefined;可检测内存泄漏、UAF、重复释放、数组越界、未初始化内存访问,开发环境常用,线上需关闭。

腾讯云智

5. Wireshark 抓取本机 DNS 包

  1. 管理员启动软件,选择本机上网网卡或回环网卡;
  2. 访问无缓存域名触发 DNS 请求;
  3. 过滤规则:dns and ip.src == 本机IP and dns.flags.response == 0,精准筛选请求包。

6. 容器无法访问宿主机数据库排查思路

容器为 bridge 网络模式,分步排查:

  1. 宿主机本地测试 3306 端口,确认数据库服务正常运行;
  2. 进入容器,检查网卡、网桥、路由配置,确认网络模式无误;
  3. 测试容器与宿主机 IP 连通性,排查防火墙、端口拦截策略;
  4. 检查数据库监听地址是否限制本地回环、远程账号访问授权、项目连接配置。

7. WebSocket 与 HTTP 区别 & 协议升级流程

核心区别

  • HTTP:短连接、单向问答、服务端无法主动推送;
  • WebSocket:TCP 长连接、全双工通信、开销低,适配实时交互场景。

升级流程

客户端携带 UpgradeSec-WebSocket-Key 等请求头发起 HTTP 握手;服务端校验后返回 101 状态码切换协议,复用原有 TCP 连接,后续以 WebSocket 帧双向通信。