网易互娱-游戏研发-C++ 一面

1. emplace_back 和 push_back 之间的区别是什么?

push_back 接受一个已经构造好的对象。如果传入的是构造函数的参数,它会先调用构造函数生成一个临时对象,然后再通过拷贝构造或移动构造将该对象放入容器,最后销毁临时对象。emplace_back 利用 C++11 的完美转发(Perfect Forwarding)和可变参数模板,直接在容器的底层内存空间中原地构造对象,省去了创建和销毁临时对象的步骤。

2. emplace_back 是否比 push_back 更高效?

不一定总是更高效。当传入的是构造函数的参数时,emplace_back 省去了临时对象的拷贝/移动,确实更高效。当传入的是已经存在的局部对象时,两者的底层行为完全一致,都会调用移动构造函数或拷贝构造函数,性能没有差异。此外,滥用 emplace_back 可能会因为隐式类型转换而绕过显式的构造函数声明。

3. make_shared 的底层原理是什么?

传统的 std::shared_ptr<T>(new T()) 需要进行两次内存分配:一次是为对象 T 分配堆内存,另一次是为智能指针的控制块(用于存放引用计数等信息)分配内存。std::make_shared<T>() 的底层原理是:只进行一次内存分配,分配一块足够大的连续内存,将对象 T 和控制块放在一起原地构造。这样提升了内存分配效率,避免了内存碎片,并在抛出异常时更加安全。

4. shared_ptr 有什么致命缺陷?如何解决?

致命缺陷是循环引用(Circular Reference),会导致两者的引用计数永远降不到 0,发生内存泄漏。解决办法是使用 std::weak_ptr。weak_ptr 不会增加控制块的强引用计数,如果需要访问对象,可以通过 lock() 提升为临时的 shared_ptr。

#include <memory>

struct Node {
    std::weak_ptr<Node> next; // 使用 weak_ptr 打破循环
    ~Node() {}
};

void test() {
    auto a = std::make_shared<Node>();
    auto b = std::make_shared<Node>();
    a->next = b;
    b->next = a;
} // 正常析构,不泄漏

5. 平时项目里的 C++ 主要是用到哪个版本?

主要使用 C++11 和 C++14。重点使用了 C++11 的智能指针(管理内存)、右值引用(优化移动语义)、并发库(多线程同步)以及 auto 类型推导;使用 C++14 的泛型 Lambda 与 std::make_unique 提升安全性与开发效率。

6. std::move 会真实地“移动”内存吗?它的底层做了什么?

不会。std::move 在运行时不产生任何汇编代码,不移动任何内存。它的底层逻辑仅仅是一个编译期的强制类型转换,将左值无条件转化为右值引用。真正的移动操作是由对象的移动构造函数或移动赋值运算符完成的。

// std::move 底层核心等价于:
template<typename T>
typename std::remove_reference<T>::type&& move(T&& arg) noexcept {
    return static_cast<typename std::remove_reference<T>::type&&>(arg);
}

7. 解释一段 C++20 的代码思想

面试题通常会给出如下代码段,要求解释:

#include <iostream>
#include <ranges>
#include <vector>

int main() {
    std::vector<int> nums = {1, 2, 3, 4, 5, 6};
    auto result = nums | std::views::filter([](int n){ return n % 2 == 0; })
                       | std::views::transform([](int n){ return n * n; });
    for (int n : result) std::cout << n << " ";
}

这段代码使用了 C++20 的 Ranges 库。它利用管道符 | 将多个操作串联起来,体现了函数式编程思想。核心机制是延迟计算(Lazy Evaluation):filter 和 transform 不会立即生成中间容器,而是在最终遍历 result 时才求值,极大减少了内存开销并提升了代码可读性。

8. TCP 三次握手为什么不

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

C++ 常考面试题总结 文章被收录于专栏

本专栏系统梳理C++方向, 大中厂高频高频面试考点 , 内容皆来自真实面试经历,从基础语法、内存管理、STL与设计模式,到操作系统与项目实战,结合真实面试题深度解析,帮助开发者高效查漏补缺,提升技术理解与面试通过率,打造扎实的C++工程能力.

全部评论

相关推荐

本人双九(一般的985)现在🐻厂实习字节hr两次电联同一个职位的实习,问我考不考虑,第二次说的很恳切🐻厂给的测开,字节给的后端本人还没确定,秋招走大厂还是走央国企,目前暂时偏向稳定,更倾向于在江浙一带工作犹豫的点:1.目前组内氛围好,mt也好,组长也好2.如果再面试,我需要重跑我的项目,再准备+八股+手撕,会很累3.如果准备不充分,怕脏面评02-04&nbsp;22:16&nbsp;已编辑&nbsp;北京收到1人送花1朵33大家都在搜:央国企全部评论&nbsp;(41条)推荐最新学也学不动玩也玩不爽02-08&nbsp;21:53门头沟学院&nbsp;C++过来人告诉你&nbsp;字节hr&nbsp;就是这德行面试前对每个候选人特别舔&nbsp;面完找他问进度就查无此人了山东227我不爱上班啊&nbsp;:哈哈哈哈哈,这几天在xhs上略有了解海捞吧hhh小何和&nbsp;:前期很热情,突然很冷淡😁超级无敌霹雳小猪猪02-05&nbsp;09:53深圳职业技术学院&nbsp;护士双九这么不自信的吗?广东27我不爱上班啊&nbsp;:我这个实习的准备时间短,感觉在接其他面试被拷打了,项目和技术栈不熟,就没什么自信ZYLOM05&nbsp;:稳定也挺好呀走呀走02-06&nbsp;12:10门头沟学院&nbsp;C++在面字节前面几家其它的后端面试会好一些江苏12我不爱上班啊&nbsp;:哈哈哈哈我同门面字节,一面二面就没有低于1h的,哈人小凡h02-15&nbsp;17:34四川大学&nbsp;天线工程师🐻厂留用率?甘肃01kaori__02-14&nbsp;13:32香港大学&nbsp;Java哥们儿你不知道字节是一线大厂里面发面最多的吗,发面试又不是oc,hr再恳切有作用吗北京11楼主&nbsp;匿名牛油&nbsp;:现在知道了哈哈哈越今朝002-11&nbsp;13:10四川大学&nbsp;后端工程师为啥要犹豫,字节不还是正常面试吗,又不是已经拿到oc了北京11楼主&nbsp;匿名牛油&nbsp;:不想脏面评,不过现在也无所谓了,也不准备去大厂在改简历的大卫很认真今天&nbsp;19:17浙江工业大学&nbsp;深度学习现在这么卷,0实习能进的,都是有真本事的浙江00我就不理解了02-27&nbsp;12:03京东&nbsp;后端开发工程师测开转后端也不错吧,不过HR虽然舔,面试要求不会放松的北京00ScarletMoon_02-11&nbsp;20:42南京理工大学&nbsp;Java🐻厂留用率?江苏10楼主&nbsp;匿名牛油&nbsp;:听说转正会比较容易?不是特别了解_hengheng02-10&nbsp;14:28阿里巴巴&nbsp;ai&nbsp;infra还以为是到hr面了让你去呢,就约个面试能有多诚恳北京00嵌入式的小白02-08&nbsp;21:50西安理工大学&nbsp;嵌入式软件开发那就赶紧准备啊,看看别人面经,刷八股啥的陕西10我不爱上班啊&nbsp;:暂时没有特别想换的准备,大概率all&nbsp;in央国企了哈基米奶龙02-08&nbsp;15:35北京邮电大学&nbsp;后端工程师字节hr都很热情吧,最近27届暑期开了,也收到几个电话&nbsp;但是考虑不想脏面评就不面了北京10我不爱上班啊&nbsp;:已经略有了解了,感觉很海捞不进大厂不改名😡x02-06&nbsp;15:34百度&nbsp;后端开发(实习)建议不要脏面评,年后投随便约面北京30坚持无悔意无休&nbsp;:666又遇到兄弟了我不爱上班啊&nbsp;:hr是说约年后不进大厂不改名😡x&nbsp;回复&nbsp;坚持无悔意无休&nbsp;:Jasonnnnnnnn02-06&nbsp;07:35Columbia&nbsp;University&nbsp;Java试一下咯美国10我不爱上班啊&nbsp;:暂时不考虑了hhh站队站对牛02-05&nbsp;22:49门头沟学院&nbsp;机械设计/制造双***历都到顶了江苏10我不爱上班啊&nbsp;:不是很厉害的9,曾经被嘲过牛客548622592号02-05&nbsp;20:55Java要不等年后吧,不差这一次吧??字节那不是投了就能面吗?一定要面这个岗?北京10我不爱上班啊&nbsp;:打电话也是准备说年后了,年前肯定不行哈哈哈我投的少,我也不知道是不是投了就能面主要怕我面得不好,唉StephenZ_02-05&nbsp;20:31广东工业大学&nbsp;Java双9干什么测开广东10我不爱上班啊&nbsp;:哈哈哈哈哈,准备实习的时间很短很仓促,收到的后端面试不多,想着先有个实习就走了测开我们都在等雨停02-05&nbsp;19:54门头沟学院&nbsp;后端工程师熊是什么厂广西10我不爱上班啊&nbsp;:百度秋招失业人02-05&nbsp;10:48National&nbsp;University&nbsp;of&nbsp;Singapore&nbsp;测试开发大胆去面吧&nbsp;我就是不自信加上没后端实习&nbsp;秋招大厂只投了测开&nbsp;现在有点后悔福建30我不爱上班啊&nbsp;:,不自信加上项目不熟,我感觉会被拷打所以害怕秋招失业人&nbsp;回复&nbsp;我不爱上班啊&nbsp;:没事&nbsp;不会损失啥&nbsp;等你真的拿了测开就会像我一样从激动欣喜到焦虑前景我不爱上班啊&nbsp;回复&nbsp;秋招失业人&nbsp;:还有一个就是怕字节脏面评,所以如果接面试肯定也会努力准备一下的如果秋招不满意的话,还能搏一搏春招吧,我身边就有在春招找到不错的岗位的我不爱上班啊02-04&nbsp;22:20未填写教育信息&nbsp;测试开发还有就是,emmmm,周围也有面字节的,普遍表示有难度,我觉得我菜
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务