这不只是一场单人首演,是我离梦想又近了一步。
任凭潮起潮落,我还是我。 任何不尊重你的人,都是在赌你没有前途

分为:测试理论、C 语言、C++、STL 容器、项目相关,全部简答,面试口述版


二、C 语言

  1. C 语言数据类型? 基本:整型int,short,long,longlong、浮点、char、_Bool;构造:数组[ ]、结构体struct、共用体union、枚举enum;指针*;void 空类型 无返回值、无具体数据。sizeof 求变量/类型所占内存字节大小。
  2. #define 宏定义? #define PI 3.14159  预处理文本替换,无类型检查;末尾不要加分号;可以宏常量、宏函数。和 const 区别:define 属于文本替换,无类型,不占内存,作用全局;const 是带类型常量,占内存,作用域{ }。
  3. 动态内存申请 malloc/calloc/realloc/free
  • malloc:分配内存,不初始化 int *p = (int*)malloc(sizeof(int)*10);
  • calloc:分配并初始化为 0  int *p = (int*)calloc(10,sizeof(int));
  • realloc:重新调整内存大小
  • free 释放;堆上内存;申请失败返回 NULL;用完必须 free,防止内存泄漏;free 后指针置 NULL,避免野指针。void free(int *p);
  • int *p = (int*)malloc(10*sizeof(int));
    if(p == NULL){
        //内存申请失败处理
    }
    
  1. 栈和堆区别? 栈:局部变量,自动分配释放,空间小;堆:malloc/new 手动申请释放,空间大。
  2. 流程控制语句 分支:if‑else、switch‑case;循环:for、while、do‑while;跳转:break、continue、goto。 do‑while 至少执行一次;break 跳出整个循环;continue 跳过本次循环。switch 只能整型,缺少 break 会穿透。
  3. 指针注意事项 存储内存地址。防止野指针、空指针解引用、数组越界。指针 ++ 按类型字节偏移。 const 区分常量指针、指针常量。void * 不能直接解引用。不要返回局部变量地址。
  4. 结构体 struct 封装不同类型数据;访问成员.;结构体指针->;存在内存对齐;传参建议传指针减少拷贝。 union 共用体成员共用一块内存。
  5. C 语言编译四步? 预处理→编译→汇编→链接。 gcc 编译 C,g++ 编译 C++;‑c只编译生成.o 目标文件;‑o指定输出文件名。

三、C++

  1. C 和 C++ 区别? C 面向过程;C++ 面向对象兼容 C。C++ 新增:类、继承、多态、引用、重载、模板、STL。 C 用 malloc/free;C++ new/delete 会调用构造析构。
  2. 构造函数类型? 默认无参构造、有参构造、拷贝构造、C++11 移动构造。 拷贝构造参数必须是 const 本类引用;编译器默认拷贝构造是浅拷贝。
  3. 析构函数? ~ 类名,无返回值无参数,不能重载;对象销毁自动调用;建议 virtual 虚析构,防止子类析构不执行。
  4. 浅拷贝、深拷贝 浅拷贝:只复制成员值,指针复制地址,多个对象共用堆内存,析构重复释放崩溃。 深拷贝:开辟新独立堆内存。类有堆指针,需要手写拷贝构造、赋值运算符重载,赋值运算符要判断自赋值。
  5. 访问权限 public private protected public:任意地方访问;private:仅本类内部;protected:本类 + 子类可访问,外部不行。 父类 private 子类永远访问不到。继承方式会改变子类中父类成员权限。
  6. Lambda 表达式(C++11) 匿名函数;[捕获](参数)->返回值{}[=]值捕获;[&]引用捕获;值捕获拷贝副本;引用捕获注意变量销毁野引用。
  7. 三目运算符条件?表达式1:表达式2;运算符有返回值;右结合,嵌套建议加括号,适合简单二选一。
  8. string std::string;size/length 获取字符数;find 查找,失败返回 string::npos;substr 截取;c_str () 转为 char*;底层动态数组,小对象优化;传参建议const string&
  9. STL 容器
  • 序列容器:vector (连续数组随机访问,中间插入慢)、deque、list (双向链表,插入快不支持随机访问)
  • 关联容器 map/set 红黑树,有序 O (logn)
  • 无序 unordered_map/unordered_set 哈希表,平均 O (1) 无序
  • 适配器 stack、queue、priority_queue

vector 扩容:重新分配内存拷贝数据,迭代器失效。 list 插入删除不会使迭代器失效。

  1. malloc/free vs new/delete malloc/free 库函数,只分配释放内存,不调用构造析构; new/delete 运算符,分配内存调用构造,释放调用析构。
  2. 虚函数、纯虚函数 virtual 虚函数实现多态;纯虚函数virtual func()=0,抽象类不能实例化。
posted on 2026-09-03 16:54  香草奶油  阅读(6)  评论(0)    收藏  举报