通过对网上公开的C++面试题进行处理和分析,统计出了常见的面试真题出现的年份、公司、出现概率等信息。帮助大家求职复习的时候,更有针对性。
1. 什么是智能指针?它们如何帮助管理内存?
出现年份:2025,2024,2023,2022 | 出现概率:15.78% | 公司:字节跳动, 华为, CVTE视源股份 等
答案
智能指针(Smart Pointers)是C++中一种用于管理动态分配内存的对象的指针,它们通过封装原始指针来自动处理资源的分配和释放,从而减少内存泄漏和悬挂指针等常见问题。智能指针通过RAII(资源获取即初始化)原则,可以确保在合适的时机释放内存。
C++标准库提供了几种类型的智能指针,主要包括:
...[完整答案]2. 什么是C++中的指针和引用?它们有什么区别?
出现年份:2025,2024,2023,2022 | 出现概率:9.25% | 公司:超图骏科, 华为, 华为OD 等
答案
在C++中,指针和引用都是用于间接访问变量的机制,但它们有一些关键的区别。以下是对它们的详细介绍和比较:
指针
-
定义:指针是一个变量,其值是另一个变量的地址。它可以指向任何类型的对象。
-
声明:指针的声明使用
*
符号。例如:int a = 10; int* ...[完整答案]
3. 请说明堆区和栈区的区别
出现年份:2025,2024,2023,2022 | 出现概率:8.57% | 公司:字节跳动, 柠檬微趣, 卓望 等
答案
在C++中,堆区和栈区是程序运行时内存的两个重要区域,它们有着不同的特点和用途。下面详细说明它们之间的区别:
1. 内存分配方式
- 栈区:由操作系统自动分配和释放。当函数被调用时,函数的局部变量、参数等会被自动分配到栈上;当函数执行完毕返回时,这些变量所占用的内存会被自动释放。
- 堆区:需要程...[完整答案]
4. new 和 malloc 有什么区别?
出现年份:2025,2024,2023,2022 | 出现概率:7.53% | 公司:广立微, 快手, 武汉虎牙 等
答案
在 C++ 中,new
和 malloc
都用于动态内存分配,但它们的工作方式和功能有几个关键的区别:
-
类型安全:
new
是类型安全的,返回所分配内存的正确类型指针。例如:int* p = new int(5); // 正确
- ...[完整答案]
5. 请阐述C++中多态的概念,包括静态多态(模板、重载)和动态多态(虚继承、虚函数)
出现年份:2025,2024,2023,2022 | 出现概率:6.94% | 公司:禾赛科技, 柠檬微趣, CVTE视源股份 等
答案
多态概述
多态是面向对象编程的核心特性之一,指同一接口(如函数名)在不同场景下表现出不同行为,即不同类的对象对同一消息(函数调用)做出不同响应。多态分为静态多态(编译时确定行为)和动态多态(运行时确定行为)。
静态多态(编译时多态)
-
实现方式:函数重载、运算符重载、模板(函数模板、类...[完整答案]
6. 介绍下C++11的新特性
出现年份:2025,2024,2023,2022 | 出现概率:5.82% | 公司:腾讯互娱, 华为, 作业帮 等
答案
C++11 是 C++ 编程语言的一个重要版本,引入了许多新特性,极大地提升了 C++ 的表达能力、性能和开发效率。以下是一些 C++11 重要的新特性介绍:
1. 自动类型推导(auto
和 decltype
)
auto
:让编译器根据初始化表达式自动推导变量的类型,减少代码冗余。
#inc...[完整答案]
7. 简述C++面向对象的三大特性
出现年份:2024,2023,2022 | 出现概率:4.30% | 公司:华为OD, 腾讯, 哈啰出行 等
答案
C++ 面向对象编程具有三大特性,分别是封装、继承和多态,以下是详细介绍:
封装
- 定义 封装是将数据(属性)和操作数据的函数(方法)捆绑在一起,形成一个独立的单元,同时对外部隐藏对象的内部实现细节,只提供一些公共的接口来与对象进行交互。这样可以保护数据不被外部随意访问和修改,...[完整答案]
8. 什么是内存泄漏?如何避免它?
出现年份:2025,2024,2023,2022 | 出现概率:3.91% | 公司:绿盟科技, 作业帮, 虎牙 等
答案
内存泄漏是指一个程序在运行过程中动态分配了一块内存(通常通过 new
或 malloc
方式分配),但在不再需要时没有释放它(通过 delete
或 free
),造成这块内存无法被再次使用或访问。长时间的内存泄漏会导致系统的可用内存减少,严重时可能导致程序崩溃或系统不稳定。
避免内存泄漏的方法
9. 多态的实现有哪几种?
出现年份:2025,2024,2023,2022 | 出现概率:3.63% | 公司:华为, 金山, 迈诚科技 等
答案
在C++中,多态性是面向对象编程的重要特性之一,它允许不同的对象对同一消息做出不同的响应。C++的多态性可以分为编译时多态和运行时多态,以下是详细介绍:
编译时多态(静态多态)
编译时多态是在编译阶段就确定要调用的函数,主要通过函数重载和运算符重载来实现。
1. 函数重载
函数重载是指在同一个作用域...[完整答案]
10. 请介绍如何使用gdb进行调试,并列举你所知道的gdb命令
出现年份:2025,2024,2023,2022 | 出现概率:3.59% | 公司:Momenta, 金山, 特斯拉 等
答案
使用gdb进行调试的步骤
1. 编译程序时添加调试信息
在使用gdb调试程序之前,需要在编译时使用-g
选项,这样编译器会在生成的可执行文件中包含调试信息。例如,使用g++编译一个C++程序:
g++ -g -o program program.cpp
这里-g
选项用于添加调试信息,-o progr...[完整答案]
11. C和C++有什么区别?
出现年份:2024,2023,2022 | 出现概率:3.55% | 公司:华为, 绿盟科技, 万兴科技 等
答案
C和C++是两种不同的编程语言,尽管它们有许多相似之处。以下是它们的主要区别:
-
编程范式:
- C:是一种过程式编程语言,主要关注功能和过程。
- C++:支持面向对象编程(OOP),允许定义类和对象,提供封装、继承和多态等特性。
- ...[完整答案]
12. 简述右值引用的作用及原理
出现年份:2025,2024,2023,2022 | 出现概率:3.51% | 公司:虎牙, 作业帮, 未岚大陆 等
答案
右值引用的作用
1. 实现移动语义
在 C++ 中,当进行对象的拷贝操作时,通常需要分配新的内存并复制对象的内容,这在处理大型对象(如包含大量数据的容器)时会带来较大的性能开销。移动语义允许我们将资源(如动态分配的内存)从一个对象“移动”到另一个对象,而不是进行昂贵的拷贝操作。右值引用是实现移动语义...[完整答案]
13. 请简述C++中多态的概念和实现方式
出现年份:2025,2024,2023,2022 | 出现概率:3.43% | 公司:华为, CVTE视源股份, 虎牙 等
答案
多态的概念
多态是面向对象编程的一个重要特性,它允许不同的对象对同一消息做出不同的响应。简单来说,就是用一个公共的接口来处理多种不同类型的对象。通过多态,我们可以编写更具通用性和可扩展性的代码,提高代码的复用性。在程序运行时,根据实际对象的类型来决定调用哪个具体的函数,而不是在编译时就确定。
多态的...[完整答案]
14. static 的作用和原理是什么
出现年份:2024,2023,2022 | 出现概率:3.35% | 公司:摩尔线程, 腾讯, B站 等
答案
在C++中,static
关键字具有多种用途,其作用和原理在不同的使用场景下有所不同。下面将分别介绍 static
在全局变量、局部变量、函数、类成员变量和类成员函数中的作用和原理。
1. 全局静态变量
作用
- 限制变量的作用域:全局静态变量的作用域被限制在定义它的文件内,其他文件无法通过
ex...[完整答案]
15. STL有哪些容器
出现年份:2025,2024,2023,2022 | 出现概率:2.91% | 公司:禾赛科技, 足下科技, 华为 等
答案
在C++中,标准模板库(STL)提供了一系列容器,用于存储和管理数据。这些容器可以分为三大类:序列容器、关联容器和容器适配器。下面分别介绍每一类中的常见容器。
序列容器
序列容器是一种按顺序存储元素的容器,每个元素都有一个固定的位置。
1. std::vector
- 特点:动态数组,支持随机访问...[完整答案]
由于篇幅所限,这里仅列出前15题,完整内容见:C++面试题库