【C++八股文】基础知识篇

一、内存与变量特性

1.1 volatile 关键字

核心作用

  • 强制编译器每次访问变量时从内存读取,禁止寄存器缓存优化
  • 适用场景:
    • 硬件寄存器交互(如状态寄存器)
    • 多线程共享变量(需配合互斥锁使用)
    • 信号处理函数与中断服务例程
      实现原理
cpp 复制代码
volatile int* hardware_reg = (volatile int*)0x4000; // 内存映射I/O
*hardware_reg = 0x01; // 每次操作直接访问物理内存

1.2 const 关键字

多维应用

修饰对象 行为特性 存储位置
全局变量 只读,存储于静态区 静态数据区
局部变量 块内只读,存储于栈区 栈区
成员函数 禁止修改对象状态(需mutable修饰可变成员) 代码段
指针组合 const int*(数据不可变) vs int* const(指针不可变) 指针存储区

#define对比

cpp 复制代码
// const版本(类型安全,作用域可控)
const int MAX_LEN = 100;

// #define版本(无类型检查,易产生宏污染)
#define MAX_LEN 100

>>>C/C++入门及练手项目<<<

二、函数与代码优化

2.1 内联函数 vs 宏定义

特性对比表

特性 内联函数 宏定义
展开阶段 编译期 预处理期
类型检查 支持 不支持
调试支持 可调试 不可调试
作用域 遵循C++作用域规则 全局污染
代码膨胀风险 编译器可控制 必然展开

最佳实践

cpp 复制代码
// 推荐内联实现
inline int square(int x) { return x*x; }

// 避免复杂宏
#define SQUARE(x) ((x)*(x)) // 易引发副作用

2.2 static 关键字

多场景应用

cpp 复制代码
// 静态局部变量(保持状态)
void counter() {
    static int count = 0; // 仅初始化一次
    ++count;
}

// 静态成员变量(类共享)
class Singleton {
public:
    static Singleton& getInstance() {
        static Singleton instance; // 线程安全(C++11)
        return instance;
    }
private:
    static int count; // 静态数据成员
};

三、内存管理机制

3.1 new/delete vs malloc/free

对比维度

特性 new/delete malloc/free
类型安全 类型检查,自动计算大小 需手动计算,类型转换
构造/析构 自动调用构造/析构函数 不执行
错误处理 抛出bad_alloc异常 返回NULL
重载支持 支持运算符重载 不支持

代码示例

cpp 复制代码
// 智能内存管理
int* arr = new int[10](); // 值初始化
delete[] arr;

// 传统C风格分配
int* raw = (int*)malloc(10*sizeof(int));
free(raw);

四、面向对象特性

4.1 多态实现机制

动态多态实现流程

虚函数表结构

虚函数索引 函数地址
0 Base::vfunc1()
1 Derived::vfunc2()

4.2 拷贝控制

三/五法则应用

cpp 复制代码
class ResourceHolder {
public:
    ResourceHolder() = default;
    ~ResourceHolder() = default;
    
    // 禁用拷贝构造和赋值
    ResourceHolder(const ResourceHolder&) = delete;
    ResourceHolder& operator=(const ResourceHolder&) = delete;
    
    // 移动语义
    ResourceHolder(ResourceHolder&&) noexcept = default;
    ResourceHolder& operator=(ResourceHolder&&) noexcept = default;
};

五、并发与系统编程

5.1 线程同步机制

同步原语对比

类型 实现方式 适用场景
互斥锁 临界区保护 共享资源访问
读写锁 读优先/写优先策略 读多写少场景
条件变量 线程间通信 生产者-消费者模型
信号量 计数器控制 资源池管理

5.2 进程间通信

IPC方式对比

方式 特点 适用场景
管道 流式传输,单工/半双工 进程间数据流传输
消息队列 消息结构化,异步通信 分布式系统组件交互
共享内存 零拷贝,高性能 大数据量实时交换
套接字 跨网络通信,协议支持 分布式服务通信

六、进阶特性解析

6.1 右值引用与移动语义

移动构造函数实现

cpp 复制代码
class Movable {
public:
    Movable(Movable&& other) noexcept 
        : data_(std::move(other.data_)) {
        other.data_ = nullptr;
    }
private:
    std::unique_ptr<int> data_;
};

6.2 模板元编程

编译期计算示例

cpp 复制代码
template<int N>
struct Factorial {
    static const int value = N * Factorial<N-1>::value;
};

template<>
struct Factorial<0> {
    static const int value = 1;
};

// 编译期计算5!
constexpr int result = Factorial<5>::value; 

七、网络与协议

7.1 TCP与UDP对比

特性 TCP UDP
连接类型 面向连接 无连接
可靠性 确认机制+重传 尽力而为
传输效率 较低(握手/确认)
应用场景 文件传输、Web 实时音视频、DNS查询

7.2 HTTP/HTTPS差异

安全增强机制

八、数据结构与算法

8.1 B树与B+树

结构对比

特性 B树 B+树
数据存储 内部节点存储数据 仅叶子节点存储数据
查询效率 稳定O(log n) 更优范围查询
磁盘I/O 每层节点访问 仅需叶子节点遍历

8.2 快速排序优化

三数取中法实现

cpp 复制代码
int partition(vector<int>& arr, int low, int high) {
    // 选取枢轴值
    int mid = low + (high - low)/2;
    if (arr[mid] < arr[low]) swap(arr[mid], arr[low]);
    if (arr[high] < arr[low]) swap(arr[high], arr[low]);
    if (arr[mid] < arr[high]) swap(arr[mid], arr[high]);
    
    int pivot = arr[high];
    // 分区操作...
}

完整C++后端八股文:>> C++八股文(完整版)<<

相关推荐
liulilittle6 小时前
IP校验和算法:从网络协议到SIMD深度优化
网络·c++·网络协议·tcp/ip·算法·ip·通信
眠りたいです6 小时前
基于脚手架微服务的视频点播系统-播放控制部分
c++·qt·ui·微服务·云原生·架构·播放器
7ACE6 小时前
Wireshark TS | 接收数据超出接收窗口
网络协议·tcp/ip·wireshark
Want5956 小时前
C/C++圣诞树①
c语言·开发语言·c++
老赵的博客6 小时前
c++ 杂记
开发语言·c++
jimmy.hua6 小时前
[C++刷怪笼]:set/map--优质且易操作的容器
开发语言·c++
tuokuac7 小时前
nginx配置前端请求转发到指定的后端ip
前端·tcp/ip·nginx
tan180°7 小时前
Boost搜索引擎 网络库与前端(4)
linux·网络·c++·搜索引擎
bkspiderx7 小时前
C++经典的数据结构与算法之经典算法思想:贪心算法(Greedy)
数据结构·c++·算法·贪心算法