Momenta中间件C++一面-面经总结

1、C++智能指针?

1.auto_ptr 垃圾已被废弃 c++98 使用困惑
2.shared_ptr 多个指针指向同一个对象 引用计数为0才释放对象
3.weak_ptr 搭配shared出现的 不增加计数 避免循环引用 不直接访问对象
4.unique_ptr 独占所有权 一个对象有一个所有者

2、unique_ptr有什么特性,底层实现是怎样的?

1.独占所有权 不能赋值给另一个
2.但是支持移动语义 可以把所有权让给另一个 用move
3.自动释放资源 RAII (这个是智能指针都要说的)
4.效率高 只有一个指针 也没有引用计数 轻量

底层实现:
就是个模板类,可以管理动态分配的对象,template的typename指定管理的资源的类型。
构造函数时默认构造函数,析构函数来确保他离开作用域就删除器。
禁止拷贝构造 禁止拷贝赋值运算符

unique_ptr(const unique_ptr&) = delete;  // 禁止拷贝构造
unique_ptr& operator=(const unique_ptr&) = delete;  // 禁止拷贝赋值

但是支持移动语义,可以移动构造 可以移动赋值 move(从另一个 unique_ptr 中“偷走”指针,将原来的指针置为空。)

3、unique_ptr是怎么保证无法赋值构造的?

这是通过”删除的函数“:(=delete)禁止操作
工作原理:
1.删除拷贝构造函数 编译器就“use of deleted function”
2.删除拷贝赋值运算符
虽然不能拷贝 但是可以移动语义 可以转移 而不违反独占所有权

4、shared_ptr怎么实现的,引用计数是什么数据格式?

本质都是模板类 和刚才的unique_ptr是一样的。但是shared这个模板类中有引用计数和控制块
shared_ptr 主要通过引用计数来管理资源的生命周期。每当一个新的 shared_ptr 被创建并指向某个资源时,引用计数会增加;每当一个 shared_ptr 被销毁或不再指向资源时,引用计数会减少。当引用计数变为 0 时,资源会自动释放。

控制块:shared_ptr 通常管理一个单独的控制块,该块包含了:
1.资源的指针(即被 shared_ptr 管理的对象)。
2.引用计数(用于记录有多少 shared_ptr 指向同一资源)。
3.弱引用计数(用于 std::weak_ptr)。
4.删除器(自定义删除方式)。

引用计数就是整型的变量 atomic保证线程安全性(原子操作保障)
原子操作能够确保在多个线程同时修改引用计数时不会产生竞争条件,防止引用计数错误。

引用计数如何管理资源的?
在这个模板类的析构函数中,如果创建新的shared指向同一个资源的时候,引用计数+1,但是离开作用域或者销毁,就会-1.当等于0的时候,就释放资源,销毁控制块。

5、引用计数的线程安全怎么保证的,底层怎么实现?

1 原子操作 atomic来保证不会出现竞争的情况。
2 内存模型:C++ 的原子操作提供了几种内存序模型,例如 memory_order_relaxed、memory_order_acquire 和 memory_order_release,以控制操作的内存可见性顺序。shared_ptr 通常使用 memory_order_acquire 和 memory_order_release 来确保引用计数的线程安全,同时减少内存屏障的开销。

6、静态链接和动态链接具体有什么区别,各有什么优势?

静态链接是在编译或链接阶段,将所需的库文件直接整合到可执行文件中。在最终生成的可执行文件中,库的代码已经成为其中的一部分不需要额外的库文件来运行。
动态链接是在运行时,将所需的库文件动态加载到内存中,并链接到程序的执行过程中。库文件不包含在可执行文件中,而是存储在外部,程序在运行时通过操作系统加载所需的共享库(如 .dll、.so 文件)。

速记口诀:时间、地点、大小、难易、启动速度

7、动态链接库被加载到什么位置,这个位置是怎么寻址的?

加载到虚拟内存 寻址得看操作系统和库文件的格式。

8、虚拟内存里文件映射区在什么位置,位置信息是怎么维护的?

望文生义,就是文件的内容映射到进程的虚拟地址空间,使得文件的内容也能像访问RAM一样被读取或者修改。肯定没有固定的地址,因为受操作系统和内存管理单元的决定。还有地址空间布局随机化防止内存攻击。

位置信息由操作系统和内存管理单元共同决定。操作系统通过内核的数据结构页面表(Page Table)来维护虚拟内存区域的位置信息。

9、进程间有哪些通信方式?

无名管道:父子进程数据流传输
命名管道:任意进程数据流传输
消息队列:多个进程有序、异步通信 支持同步
信号量:进程同步和共享资源的访问控制
套接字:网络通信和本地进程间通信
共享内存:高速的数据共享

10、共享内存怎么创建映射的,怎么知道映射内存的地址?

特点:共享内存是进程间通信中最快的一种方式,它允许多个进程直接访问相同的内存区域。
实现:操作系统分配一个共享内存段,多个进程通过映射到相同的内存区域实现通信。

创建映射是靠mmap函数
调用 mmap 函数后,它会返回映射区域的起始地址。

11、共享内存的互斥访问具体怎么实现,锁和信号量怎么在两个进程间共享?

使用互斥锁(Mutex)和信号量(Semaphore)进行同步。

互斥锁(mutex)是一种同步机制,用于保证同一时刻只有一个线程(或进程)能够访问共享资源。使用互斥锁可以防止多个进程同时对共享内存进行修改,从而保证数据一致性。

信号量是一种同步机制,用于控制访问共享资源的数量。信号量可以用于同步多个进程对共享内存的访问。

talk is cheap show me the code
岛屿数量

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

2024年9月最新web3开发人员薪资情况(包括不同语言、各个国家)

2024年9月最新web3非开发人员薪资情况(包括不同语言、各个国家) 开发人员的薪水是多少? Web3 开发人员的平均年薪为 14 万至 20 万美元。 量化开发人员每年可赚 20 万至 30 万美元 高级开发人员年薪 16 万至 25.7 万美元 北美开发商年薪 …

了解云计算工作负载保护的重要性,确保数据和应用程序安全

云计算de小白 云计算技术的快速发展使数据和应用程序安全成为一种关键需求,而不仅仅是一种偏好。随着越来越多的客户公司将业务迁移到云端,保护他们的云工作负载(指所有部署的应用程序和服务)变得越来越重要。云工作负载保护&…

可视掏耳勺鸡肋吗?高清可视掏耳勺牌子推荐!

很多人习惯在洗漱完顺手拿一根棉签掏耳朵,但是棉签的表面直径大且粗糙,不易将耳朵深处的耳垢挖出,耳垢堆积在耳道深处长时间不清理会导致堵塞耳道,引起耳鸣甚至感染。而可视掏耳勺作为一种新型的挖耳工具,它的安全性也…

【java常见面试题】

IO 按照流的流向分类:输入流和输出流 按照操作单元分类:可以分为字节流和字符流 按照流的角色划分:节点流和处理流 所有输入流的基类:InputStream/Reader 字节流/字符流 所有输出流的基类:OutputStream/Reader 字…

用友或畅捷通设置外网访问,使用的是神卓互联内网穿透

本文将详细介绍如何使用神卓互联内网穿透技术搭建单位用友软件的访问环境,以实现远程办公和管理的高效便捷。 目录 一、神卓互联内网穿透技术 二、准备工作 1. 注册神卓互联账号 2. 配置用友软件服务器 三、配置神卓互联内网穿透 1. 安装并启动神卓互联客户端…

吉客云与金蝶云星空对接集成分页查询货品信息连通[标准]

吉客云与金蝶云星空对接集成分页查询货品信息连通[标准][付款单新增]-v1(付款单) 对接系统:吉客云 “吉客云”是一站式企业数字化解决方案系统,可实现业务、财务、办公、人事等一体化管理。相对于传统多套软件系统的集成方案,“吉客云”具有业…

【程序员提效】AI助力程序员提效:如何让AI编写代码+调试复杂代码教程

在编程的旅途中,程序员们常常面临各种挑战,尤其是在编写和维护代码时,难题层出不穷。🤔 尽管传统搜索引擎提供了海量信息,但往往让我们在无尽的例子和复杂分析中迷失,难以找到真正适合自己的解决方案。正因…

韦唯出席平遥国际电影展开幕式 中英文歌曲连唱尽显国际范

9月24日,第八届平遥国际电影展在在山西省晋中市平遥古城正式开幕。韦唯作为特邀演出嘉宾,参加开幕式晚会并演唱《黄土地》主题曲《女儿歌》及自己的英文单曲《All there is》两首歌曲。 韦唯刚结束“湾区升明月”2024大湾区电影音乐晚会,就马…

Cloudera 安装不再难:下载安装全流程指南

引言:之前文章《深度挖掘|Cloudera安装不再难!基础环境搭建全解析》中,我们深入探讨了如何在企业环境中精心准备系统环境,为大数据平台Cloudera 搭建奠定坚实基础。今天,我们将正式进行Cloudera Manager的下…

出国留学:如何选对专业,匹配你的职业目标?

在全球化日益加深的今天,出国留学已成为许多青年学子拓宽视野、提升竞争力的重要途径。然而,面对琳琅满目的专业选择,如何找到既符合个人兴趣又能助力未来职业发展的专业,成为了每位准留学生必须面对的挑战。本文将为您详细解析&a…

828华为云征文 | 云服务器Flexus X实例,Docker集成搭建 Jupyter Notebook

828华为云征文 | 云服务器Flexus X实例,Docker集成搭建 Jupyter Notebook Docker 部署 Jupyter Notebook 是一个方便且快速的方式,可以帮助你搭建一个用于数据分析、机器学习和科学计算的环境 华为云端口放行 服务器放行对应端口9955 Docker安装并配置镜…

unraid使用docker安装redis并创建密码

unraid使用docker安装redis并创建密码 一、redis简单介绍 redis基于K-V思路,数据存储在内存中,速度快,高效。 使用时会结合其他数据库如mysql。 二、redis安装 应用市场搜索redis,找下载量最高的一个即可,其中参数只…

大数据Hive组件安装

组件版本 组件版本Hadoop3.3.0JDK1.8.0_241Mysql5.7.25Hive3.1.2 Hadoop集群服务分布 Node1Node2Node3NameNode DataNode DataNodeDataNode NodeManager NodeManagerResourceManagerSecondaryNameNode 安装前请确定Hadoop集群服务全部启动,不然后续测试时会报…

2024年信息学奥赛CSP-J初赛真题详细分析

CSP-J 2024 入门组初赛第一轮初赛试题及答案解析 一、 单项选择题(共15题,每题2分,共计30分:每题有且仅有一个正确选项) 1 32 位 int 类型的存储范围是( ) A -2147483647 ~ 2147483647B -214…

2024源代码加密软件TOP10排行榜丨保护企业源代码安全不泄露

在当今数字化的时代,企业的核心竞争力往往取决于其知识产权,特别是源代码的安全性。源代码是开发人员花费大量时间和精力编写的程序框架和算法,它直接决定了软件的功能和性能。一旦源代码泄露,可能带来巨大的商业损失和竞争压力。…

全方位办公自动化(OA)解决方案

在数字化转型的浪潮中,高效的办公自动化(OA)系统已成为现代企业管理不可或缺的一部分。为了帮助您更好地适应这一变化,我们精心打造了一套全方位的OA解决方案,旨在通过优化工作流程来提升组织的整体运营效率。 主要功能…

【鸿蒙HarmonyOS NEXT】数据存储之分布式键值数据库

【鸿蒙HarmonyOS NEXT】数据存储之分布式键值数据库 一、环境说明二、分布式键值数据库介绍三、示例代码加以说明四、小结 一、环境说明 DevEco Studio 版本: API版本:以12为主 二、分布式键值数据库介绍 KVStore简介: 分布式键值数据库…

Jetpack02-LiveData 数据驱动UI更新(类似EventBus)

前提 LiveData使用了Lifecycle的生命周期,阅读本文前,请先了解Lifecycle源码。 简介 LiveData本质是数据类型,当改变数据的时候,会通知观察者,且只在界面可见的时候才会通知观察者。只能在主线程注册观察者&#xf…

图变换器的再思考:谱注意力网络

人工智能咨询培训老师叶梓 转载标明出处 图神经网络(GNNs)的传统策略是通过稀疏的消息传递过程直接编码图结构。然而,这种方法存在固有的局限性,例如过度平滑和过度压缩问题,这些限制了模型的性能和表达能力。为了克服…

现场扫码实时投票打分显示最新现场大屏微信现场投票实时显示

现场投票“神器”超级好玩儿||现场参与者通过手机扫码进入投票系统,大屏幕实时显示投票排名,增加紧张和刺激感。可以随时截止投票,方便便捷,可设置 单票,多票,自由票,结合现场互动,增…