百度三面面经(C/C++工程师)

本文是一份详实的C++面试指南,涵盖了new/delete与malloc/free的区别、vector内部结构及拷贝过程、特殊数据查找算法、IP地址编码、概率论应用、进程与线程的区别、C++内存布局、重载与重写概念、Linux文件操作、项目介绍技巧等关键知识点,同时深入探讨了平衡二叉树、红黑树特性、智能指针实现、多线程与多进程优劣对比,以及面对项目延期的应对策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

作者:thereisnoend
链接:https://www.nowcoder.com/discuss/136247
来源:牛客网

从牛客网获得过很多帮助,因此回馈一波~
以下题目尽可能回忆,顺序不一定对。

一面

new/delete和malloc/free的区别
vector的结构?vector拷贝时发生什么
一个数组,只有一个数字出现奇数次,其余数字出现偶数次,如何得到这个数字?如果出现奇数次的数字有2个呢?
给定一个ip地址,编码使得ip和32位整数呈双射关系
50个红球50个蓝球,放到2个袋子里,从两个袋子各取1个球,让2个都是红球的概率最大,怎么放
进程和线程的区别
学过操作系统吗?学过网络吗?没有
时间复杂度为O(nlogn)的排序算法有哪些?简述快速排序的过程
C++内存分布
重载和重写的区别
Linux下删除同一文件夹下所有满足条件的文件
介绍项目

二面

1个32位无符号整数,计算二进制格式下有多少个1,不通过循环怎么做
cmake和makefile的区别
简述cmake到可执行文件的过程
进程和线程的区别
git pull和git fetch的区别
学过操作系统吗?学过网络吗?没有
用数据结构模拟浏览器前进后退的操作

三面

2g物理内存,new一个3g的数组时发生什么?
平衡二叉树的特性,红黑树的特性,判断是否为平衡二叉树
虚函数和纯虚函数
智能指针如何实现
学过操作系统吗?学过网络吗?没有
进程和线程的区别,多线程和多进程的优缺点
介绍项目亮点
A-H中选3个字母,可以重复,求组合数
如果你正在做一个项目,因为不可控因素延期了,你会怎么做
想做哪方面的工作

总结

非科班出身,操作系统和网络是硬伤,算法偏简单,C++也都是常考题,数学题都是高中题……

### 关于C/C++试常见问题及其解决方案 #### 1. **关于`sizeof`操作符** 在C/C++编程中,`sizeof`是一个常见的操作符,但它常被误解为函数。实际上,它是一种编译时常量表达式,用于计算对象或类型的大小[^1]。当处理复杂的数据结构(如数组)作为参数传递时,开发者需要注意其行为差异。例如,在函数调用中,数组会退化为指针,因此直接使用`sizeof(array)`可能不会返回预期的结果。 ```cpp #include <iostream> void test(int array[]) { std::cout << sizeof(array); // 输出的是指针的大小,而非数组的实际大小 } int main() { int arr[10]; std::cout << sizeof(arr) << "\n"; // 正确输出数组大小 test(arr); } ``` #### 2. **关键字`static`的区别** 在C语言中,`static`主要用于控制变量的作用域和生命周期。它可以修饰全局变量、局部变量以及函数,使其仅限于当前源文件可见。而在C++中,`static`的功能得到了扩展,可以用来定义类中的静态成员变量和静态成员函数。这些静态成员属于整个类而不是单个实例,因此可以通过类名直接访问它们。 ```cpp class MyClass { public: static int count; // 静态成员变量声明 }; // 定义并初始化静态成员变量 int MyClass::count = 0; void incrementCount() { ++MyClass::count; } ``` #### 3. **指针的安全性和效率** 尽管C++提供了强大的指针机制来实现高效内存管理,但这同时也带来了潜在的风险。如果程序员不小心修改了错误的内存位置或者释放了已经销毁的对象,则可能导致不可预测的行为甚至程序崩溃[^2]。为了避免这些问题,现代C++推荐使用智能指针(如`std::unique_ptr`, `std::shared_ptr`)代替原始指针。 ```cpp #include <memory> #include <vector> struct Data {}; auto createData() -> std::unique_ptr<Data> { return std::make_unique<Data>(); } void processData(const std::vector<std::shared_ptr<Data>>& dataVec) {} ``` --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值