华为od 面试八股文_C++_08_含答案

目录

1:什么是“伪共享”(False Sharing)?在多线程高性能编程中如何避免?

2:请解释内存屏障(Memory Barrier)是什么?它解决了什么问题?

3:std::vector 为什么被广为诟病?它的底层实现有何特殊之处?

4:什么是“切片问题”(Object Slicing)?如何避免它?

5:unique_ptr 为什么不能拷贝?它的底层是如何禁止拷贝的?

6:请解释 std::tie 的作用,以及它在比较运算符重载中的妙用。

7:为什么 C++ 建议优先使用 nullptr 而不是 NULL?

8:std::condition_variable 为什么要配合 std::unique_lock 和 while 循环使用?


1:什么是“伪共享”(False Sharing)?在多线程高性能编程中如何避免?

现象:多个线程同时修改位于同一个缓存行(Cache Line,通常 64 字节)上的不同变量。虽然变量逻辑上互不干扰,但由于 CPU 的缓存一致性协议(如 MESI),一个线程的修改会导致其他线程的缓存行失效,被迫从内存重新读取。

后果:这会显著降低多核处理器的并发性能,产生巨大的总线流量。

解决方案:

内存填充(Padding):在变量之间增加一些无意义的字节,确保它们分属不同的缓存行。

C++17 方案:使用头文件 <new> 中的 alignas(std::hardware_destructive_interference_size) 来修饰变量,让编译器自动处理对齐。

2:请解释内存屏障(Memory Barrier)是什么?它解决了什么问题?

背景:现代 CPU 为了优化性能会进行“乱序执行”,编译器也会进行“指令重排”。在单线程下没问题,但在多线程同步(如实现自旋锁)时,会导致逻辑错误。

作用:内存屏障是一类同步指令,它告诉编译器 and CPU:屏障前后的内存访问指令不能跨越屏障进行重排。

分类:

Load Barrier(读屏障):强制刷新缓存,读取最新数据。

Store Barrier(写屏障):强制将缓冲区数据写入内存。

Full Barrier:同时包含读写屏障。C++11 的 std::atomic 默认就是最强的 memory_order_seq_cst(顺序一致性),内部就隐含了内存屏障。

3:std::vector<bool> 为什么被广为诟病?它的底层实现有何特殊之处?

特殊实现:它是 std::vector 的一个特化版本,为了节省内存,内部并不是存储布尔数组,而是按位(bit)存储。

问题所在:

1. 无法取地址:因为它按位存储,operator[] 返回的是一个代理对象(Proxy Object),你无法对 v[0] 取地址(&v[0] 会报错),这违背了容器的通用行为。

2. 线程不安全:由于底层是位操作,多个线程修改同一个字节里的不同位(bit)时会产生竞争,而普通 vector<char> 则不会。

替代方案:如果需要存储布尔值且要求常规行为,建议使用 std::vector<char> 或 std::deque<bool>。

4:什么是“切片问题”(Object Slicing)?如何避免它?

现象:当你将派生类对象以“按值传递”的方式赋值给基类对象时,派生类特有的成员变量和虚函数表指针会被“切掉”,只保留基类部分。

Derived d; Base b = d; // 发生切片,b 只具有 Base 的行为

后果:多态性失效。即使基类有虚函数,通过 b 调用也只会执行基类的实现。

避免方法:永远通过引用(Reference)或指针(Pointer)来传递多态对象。

5:unique_ptr 为什么不能拷贝?它的底层是如何禁止拷贝的?

语义要求:unique_ptr 代表对资源的独占权。如果允许拷贝,就会有两个指针管理同一块内存,导致析构时“二次释放(Double Free)”。

底层实现:在 C++11 中,通过将拷贝构造函数和拷贝赋值运算符标记为 = delete 来禁用。

unique_ptr(const unique_ptr&) = delete; unique_ptr& operator=(const unique_ptr&) = delete;

移动支持:虽然不能拷贝,但它可以移动(Move)。移动操作会将资源所有权彻底转移,原指针变为空,这符合独占的逻辑。

6:请解释 std::tie 的作用,以及它在比较运算符重载中的妙用。

基本用法:std::tie 可以创建一个包含引用的 tuple,常用于解包 std::pair 或 std::tuple。

重载妙用:在写结构体的 operator< 时,如果成员很多,手动写嵌套的 if...else 非常痛苦且易错。利用 std::tie 可以极简实现:

bool operator<(const Person& rhs) const { return std::tie(age, height, name) < std::tie(rhs.age, rhs.height, rhs.name); }

它会自动按照成员顺序进行字典序比较,代码既简洁又安全。

7:为什么 C++ 建议优先使用 nullptr 而不是 NULL?

本质区别:NULL 在 C 中通常是 (void*)0,但在 C++ 中为了兼容被定义为整数 0。而 nullptr 是 std::nullptr_t 类型的字面量,它是一个指针类型。

重载冲突:如果有一个函数重载了 void func(int) 和 void func(char*),传入 NULL 会匹配到 int 版本,这往往不是程序员的本意。传入 nullptr 则会正确匹配到 char* 版本。

类型安全:nullptr 无法被隐式转换为整数(除了布尔值),这增强了代码的类型安全性。

8:std::condition_variable 为什么要配合 std::unique_lock 和 while 循环使用?

配合 unique_lock:条件变量在阻塞(wait)时需要释放锁,被唤醒时又需要重新获取锁。unique_lock 提供了这种灵活的锁管理能力(lock/unlock 接口)。

配合 while 循环:主要是为了防止“虚假唤醒”(Spurious Wakeup)。即线程有时会在没有被显式唤醒的情况下醒来,或者醒来后条件其实已被其他线程改变。使用 while 检查条件可以确保线程只有在条件真正满足时才继续执行。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1165435.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Windows最强”播放器?PotPlayer播放器|友友们都在用的视频播放器

打开电脑看片&#xff0c;你还在用系统自带播放器&#xff1f; 醒醒吧。一款堪称视频播放器天花板的神器——PotPlayer播放器。你有没有经历过这样的瞬间——好不容易找到期待已久的高清影片&#xff0c;满心欢喜地点开&#xff0c;画面却卡得像翻页动画&#xff0c;字幕像乱码…

高性能32位MCU微控制器数字电源参考方案

在电源管理领域&#xff0c;数字电源凭借其智能化、可编程与高集成度优势&#xff0c;正逐步取代传统开关电源。数字电源不仅具备基本的电压转换功能&#xff0c;还集成了实时通信、数控调节及环境参数监测等能力&#xff0c;大幅提升了系统的可靠性与灵活性。英尚微电子基于MM…

gru 记忆是记当前episode的内容吗

在你的描述中&#xff0c;GRU 的作用本质是利用当前 episode 内的时间序列数据捕获信息&#xff0c;但它不会直接记住训练过程中门在哪个方向或有多少个障碍物。以下是更具体的解释&#xff1a; 1. GRU 的记忆范围&#xff1a;仅限当前 episode GRU 的工作原理是通过时间序列建…

✅ Spring/SpringBoot 定时任务 完整版超详细教程(零基础必会,直接能用)@Scheduled 与 SchedulingConfigurer

✨ 包含「两种实现方式」&#xff1a;注解版&#xff08;99% 场景用&#xff0c;推荐&#xff09; 接口版&#xff08;灵活配置&#xff09;适配&#xff1a;Spring Boot 2.x/3.x 主流版本、Spring MVC&#xff0c;教程所有代码可直接复制运行&#xff0c;结合上线场景&#x…

django基于python的农村医疗健康管理系统的设计与实现

目录农村医疗健康管理系统的设计与实现摘要关于博主开发技术路线相关技术介绍核心代码参考示例结论源码lw获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01;农村医疗健康管理系统的设计与实现摘要 随着信息技术的快速发展&#xff0c;农村地区的医…

字节跳动 Coze(扣子)万字长文:从“会聊天”到“能交付”的 AI 智能体平台全景解析

目录 第1章 先把话说清楚&#xff1a;你以为你在“做机器人”&#xff0c;其实你在“做产品” 第2章 Coze 到底是什么&#xff1a;官方一句话背后的含义 第3章 为什么 Coze 会火&#xff1a;因为“纯聊天”越来越不够用了 第4章 Coze 的核心对象&#xff1a;智能体&#xff…

同轴投影机和偏轴投影机的区别

投影机同轴和偏轴区别 1. 同轴投影 • 核心定义&#xff1a;投影机镜头的光轴&#xff08;即投射光线的中心线&#xff09;与画面的水平中心线完全重合。 • 工作方式&#xff1a;光线笔直地从镜头中心射出&#xff0c;打在屏幕上。为了获得一个方正的、位置合适的画面&#xf…

BMP280气压传感器原理图设计,已量产(压力传感器)

目录 1、电源系统:低噪声是精准感知的基础 2、BMP280 核心电路:不拖传感器性能的后腿 3、电平转换:5V/3.3V 主控的兼容关键 4、硬件兼容性:不用跳线的 “傻瓜式” 适配 做嵌入式项目时,“小而精” 的传感器模块永远是刚需 —— 尤其是需要同时测气压和温度的场景,比如…

槽型光电开关传感器原理图设计,已量产(光电传感器)

目录 1、光电检测前端:信号的 “源” 电路 2、信号缓冲:小器件解决电平与驱动问题 3、电路工作流程:从遮挡到信号输出 4、设计细节:避免踩坑的几个小技巧 在嵌入式设备的位置限位、物料计数等场景中,槽型光电开关是性价比极高的传感器方案 —— 它通过遮挡发射器与接收…

用SQL实现三次指数平滑预测:递归与非递归两种解法详解

目录 一、三次指数平滑法基础 1.1 核心原理 1.2 数据源说明 二、解法一&#xff1a;递归CTE实现 2.1 完整代码 2.2 关键解析 三、解法二&#xff1a;非递归&#xff08;LAG窗口函数&#xff09;实现 3.1 完整代码 3.2 关键解析 四、两种解法对比 五、实战注意事项 …

全网最全本科生必用TOP10 AI论文网站测评

全网最全本科生必用TOP10 AI论文网站测评 2026年本科生学术写作工具测评&#xff1a;为何需要一份权威榜单&#xff1f; 随着人工智能技术在教育领域的深入应用&#xff0c;越来越多的本科生开始依赖AI论文网站提升写作效率和质量。然而&#xff0c;面对市场上五花八门的工具&a…

django基于python的旅游个性化定制平台的设计与实现

目录摘要关于博主开发技术路线相关技术介绍核心代码参考示例结论源码lw获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01;摘要 随着旅游业的快速发展&#xff0c;个性化旅游定制需求日益增长。传统的旅游平台往往提供标准化产品&#xff0c;难以满…

隐私计算新范式:基于联邦学习的大数据解决方案

隐私计算新范式:基于联邦学习的大数据解决方案 关键词:隐私计算、联邦学习、数据安全、分布式训练、大数据协同 摘要:在数据成为“新型石油”的今天,如何在不泄露隐私的前提下实现数据价值的协同挖掘,是全球企业和科研机构面临的核心挑战。本文将以“联邦学习”这一隐私计…

一文读懂集群与分布式:两种核心服务器架构的本质差异

在互联网技术飞速发展的今天&#xff0c;我们日常使用的购物 App、短视频平台、在线办公工具等&#xff0c;背后都离不开庞大的服务器体系作为支撑。当业务规模不断扩大&#xff0c;单一服务器的性能、并发能力和稳定性逐渐达到瓶颈时&#xff0c;“集群”和“分布式”这两种架…

django基于python的旅游服务管理系统

目录 Django 基于 Python 的旅游服务管理系统摘要 关于博主开发技术路线相关技术介绍核心代码参考示例结论源码lw获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01; Django 基于 Python 的旅游服务管理系统摘要 旅游服务管理系统旨在通过信息化手…

主流深度学习框架全景对比:PyTorch、TensorFlow、JAX的发展、特性与工程落地

深度学习框架是AI研发的“基础设施”&#xff0c;不同框架的设计哲学、技术特性与生态适配性&#xff0c;直接决定了研发效率、工程落地难度和性能表现。本文系统梳理PyTorch、TensorFlow、JAX三大主流框架的发展脉络&#xff0c;拆解核心特性差异&#xff0c;并结合实际工程场…

django基于python的流浪宠物领养管理系统

目录Django 基于 Python 的流浪宠物领养管理系统摘要关于博主开发技术路线相关技术介绍核心代码参考示例结论源码lw获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01;Django 基于 Python 的流浪宠物领养管理系统摘要 随着城市化进程加快&#xff…

学霸同款8个AI论文平台,本科生轻松搞定毕业论文!

学霸同款8个AI论文平台&#xff0c;本科生轻松搞定毕业论文&#xff01; AI 工具如何助力论文写作&#xff1f; 在当今学术研究日益复杂的背景下&#xff0c;越来越多的本科生开始借助 AI 工具来提升论文写作效率。这些工具不仅能帮助学生快速生成内容&#xff0c;还能有效降…

开发基于大模型的金融专业教材章节总结生成器

开发基于大模型的金融专业教材章节总结生成器 关键词:大模型、金融专业教材、章节总结生成器、自然语言处理、文本生成 摘要:本文旨在详细阐述开发基于大模型的金融专业教材章节总结生成器的全过程。从背景介绍入手,深入探讨核心概念、算法原理、数学模型等内容,通过项目实…