【C++开发面经】全过程面试问题详解

目录

[1. 智能指针讲解](#1. 智能指针讲解)

[2. 智能指针管理对象的方式](#2. 智能指针管理对象的方式)

[3. 大量使用智能指针的代价](#3. 大量使用智能指针的代价)

[4. 结构体中使用智能指针(用 make_shared/make_unique)](#4. 结构体中使用智能指针(用 make_shared/make_unique))

[5. C++ 头文件和源文件分开写的原因](#5. C++ 头文件和源文件分开写的原因)

[6. 是否只使用过 C++?](#6. 是否只使用过 C++?)

[7. 预处理、编译、链接流程](#7. 预处理、编译、链接流程)

[8. map 和 unordered_map 的区别](#8. map 和 unordered_map 的区别)

[9. vector 扩容机制](#9. vector 扩容机制)

[10. 模板讲解](#10. 模板讲解)

[11. 专业是否学这些语言?](#11. 专业是否学这些语言?)

[12. 愿意转语言吗?](#12. 愿意转语言吗?)

[13. 发展规划 / 方向](#13. 发展规划 / 方向)


1. 智能指针讲解

  • 核心:C++ 基于 RAII 机制的动态内存管理工具,自动释放对象,避免内存泄漏;
  • 种类:unique_ptr(独占所有权)、shared_ptr(引用计数共享)、weak_ptr(解决循环引用,不占计数)。

2. 智能指针管理对象的方式

  • 构造时:获取动态内存(或接管裸指针所有权);
  • 生命周期:unique_ptr 独占,析构直接释放;shared_ptr 维护引用计数,计数为 0 时释放;
  • 析构时:自动调用对象析构函数,释放绑定的内存 / 资源。

3. 大量使用智能指针的代价

  • 内存开销:shared_ptr 需存储引用计数(额外 4/8 字节),weak_ptr 依赖控制块;
  • 性能开销:shared_ptr 计数增减需原子操作(线程安全但有开销);
  • 复杂度:shared_ptr 可能引发循环引用,需配合 weak_ptr 解决;调试成本略高。

4. 结构体中使用智能指针(用 make_shared/make_unique

  • 直接作为成员变量,通过 make_xxx 初始化,避免裸 new,更安全高效:

    struct MyStruct {
    std::unique_ptr<int> up; // 独占所有权
    std::shared_ptrstd::string sp; // 共享所有权
    // 初始化
    MyStruct() : up(std::make_unique<int>(10)), sp(std::make_sharedstd::string("test")) {}
    };

5. C++ 头文件和源文件分开写的原因

  • 分离接口与实现:头文件暴露类 / 函数声明(接口),源文件实现逻辑;
  • 避免重复编译:头文件加防护(#pragma once/ifndef),减少编译开销;
  • 便于模块化:多人协作时,仅需依赖头文件,无需关心实现细节。

6. 是否只使用过 C++?

  • 主用 C++,同时了解 Go/Python(根据自身情况调整),能应对跨语言协作场景。

7. 预处理、编译、链接流程

  • 预处理:处理 #include/#define,删除注释,生成预处理文件(.i);
  • 编译:将预处理文件编译为汇编代码(.s),做语法 / 语义检查、优化;
  • 链接:将多个目标文件(.o)+ 库文件合并,解析符号引用,生成可执行文件。

8. map 和 unordered_map 的区别

  • 底层:map 红黑树(有序,O (logn) 操作),unordered_map 哈希表(无序,平均 O (1));
  • 特性:map 自动排序、支持范围查询,unordered_map 查询更快但无序、有哈希冲突;
  • 适用:map 需有序场景,unordered_map 追求查询效率。

9. vector 扩容机制

  • 扩容时:分配新内存(通常是原容量的 1.5/2 倍),拷贝原数据到新内存,释放旧内存;
  • 影响:扩容有拷贝开销,可提前用 reserve(n) 预留空间,避免频繁扩容。

10. 模板讲解

  • 核心:C++ 泛型编程工具,允许定义 "类型无关" 的类 / 函数,编译期实例化;
  • 分类:函数模板(如 std::sort)、类模板(如 std::vector);
  • 优势:代码复用,支持多种类型,无类型转换开销。

11. 专业是否学这些语言?

  • 专业课程覆盖 C++ 核心,后续通过项目 / 自学深化,同时拓展相关技术栈(根据自身情况调整)。

12. 愿意转语言吗?

  • 愿意!核心能力是编程思维和问题解决,语言是工具,能快速学习 Go/Java 等语言适配工作需求。

13. 发展规划 / 方向

  • 短期:深耕 C++ 后端 / 客户端开发,夯实底层基础(内存、并发、网络);
  • 长期:向技术专家方向发展,聚焦高性能系统 / 中间件开发,积累复杂项目落地经验。
相关推荐
whatever who cares1 小时前
Java/Android中BigDecimal的相关操作
android·java·开发语言
普通网友2 小时前
嵌入式C++安全编码
开发语言·c++·算法
烤麻辣烫2 小时前
黑马程序员苍穹外卖(新手) DAY3
java·开发语言·spring boot·学习·intellij-idea
妮妮喔妮2 小时前
JAVA反射的介绍(优缺点)
java·开发语言
云知谷2 小时前
【软件测试】《集成测试全攻略:Mock/Stub 原理 + Postman/JUnit/TestNG 实战》
c语言·开发语言·c++·软件工程·团队开发
i***48612 小时前
Redis重大版本整理(Redis2.6-Redis7.0)
java·数据库·redis
YQ_ZJH2 小时前
Redisson 看门狗机制详解
java·redis
ssshooter2 小时前
传参优于外部变量
前端·后端·面试
那我掉的头发算什么2 小时前
【javaEE】多线程——线程安全进阶☆☆☆
java·jvm·安全·java-ee·intellij-idea