温馨提示×

linux c++面试题有哪些

小樊
48
2026-09-11 02:00:44
栏目: 编程语言

下面按常见考察维度给你梳理一份Linux C++ 面试常考题目清单,涵盖基础、系统、网络、多线程、调试与实战,适合社招 / 校招准备。


一、C++ 语言基础(必问)

  1. new / deletemalloc / free 的区别
  2. 指针和引用的区别
  3. const 的用法(变量、指针、成员函数)
  4. static 的作用(局部、全局、类成员)
  5. 虚函数机制、虚表(vtable)原理
  6. 纯虚函数与抽象类
  7. 构造函数 / 析构函数能否为虚函数?
  8. 拷贝构造、移动构造、拷贝赋值、移动赋值
  9. std::move / std::forward 原理
  10. 智能指针(unique_ptr / shared_ptr / weak_ptr
  11. 模板特化、偏特化
  12. extern "C" 的作用
  13. 什么是 RAII?
  14. std::vector 扩容机制
  15. 左值、右值、万能引用

二、Linux 系统基础(高频)

  1. 进程和线程的区别
  2. 用户态和内核态的区别
  3. 进程间通信方式(IPC)
    • 管道、消息队列、共享内存、信号、socket
  4. 死锁产生条件及预防
  5. 什么是上下文切换?
  6. 文件描述符(fd)是什么?
  7. fork() 的行为和写时复制(COW)
  8. 守护进程如何实现?
  9. stderrstdout 区别
  10. 静态库和动态库区别(.a / .so

三、Linux 系统调用 & 文件

  1. open / read / write / close
  2. mmap 的使用场景和优缺点
  3. select / poll / epoll 区别
  4. 阻塞 IO 与非阻塞 IO
  5. 同步 IO 与异步 IO
  6. 文件锁(fcntl / flock
  7. dup / dup2 的作用

四、网络编程(重点)

  1. TCP 三次握手 / 四次挥手
  2. TIME_WAIT 状态的原因和危害
  3. TCP 粘包、拆包如何处理?
  4. UDP 和 TCP 区别
  5. socket() / bind() / listen() / accept()
  6. 心跳机制如何实现?
  7. 半连接队列和全连接队列
  8. epoll 的 LT 和 ET 模式区别
  9. 如何实现高并发服务器?
  10. recv 返回 0 代表什么?

五、多线程 & 并发(必考)

  1. 线程同步方式
    • 互斥锁、条件变量、信号量
  2. 死锁如何排查?
  3. 原子操作(std::atomic
  4. 虚假唤醒是什么?
  5. 读写锁使用场景
  6. pthread_cond_wait 为什么要加锁?
  7. 线程池设计思路
  8. volatile 在多线程中的作用(C++11 后)
  9. std::call_once / std::once_flag
  10. 无锁队列原理

六、内存 & 性能

  1. 内存布局(栈、堆、BSS、数据段、代码段)
  2. 内存泄漏如何排查?
  3. 栈溢出原因
  4. 内存对齐原理
  5. valgrind / gdb 使用
  6. CPU 占用高如何定位?
  7. 缓存命中率优化

七、编译 & 调试

  1. gcc / g++ 编译流程
  2. 动态链接和静态链接
  3. Makefile 基本写法
  4. gdb 常用命令
  5. Core Dump 如何分析?
  6. nm / objdump / ldd 作用
  7. 如何查看内存泄漏?

八、实战 / 设计题(加分)

  1. 用 C++ 实现一个线程池
  2. 用 epoll 写一个简单 HTTP 服务器
  3. 实现一个单例模式(线程安全)
  4. 生产者消费者模型
  5. 实现一个日志系统
  6. shared_ptr 循环引用问题
  7. 实现一个定时器

九、常见“连环问”示例

  • epoll 为什么快?→ 对比 select → ET 下如何处理?
  • shared_ptr 引用计数在哪?→ 线程安全吗?→ 循环引用?
  • fork 后父子进程共享什么?→ 写时复制?

如果你愿意,我可以:

  • ✅ 按初级 / 中级 / 高级分类
  • ✅ 给你真实面试题 + 标准答案
  • ✅ 出一套 Linux C++ 模拟面试题

你是准备校招还是社招

0