当前位置: 首页 > news >正文

全网最全最新100道C++面试题:40-60

前述:本文初衷是为了总结本人在各大平台看到的C++面经,我会在本文持续更新我所遇到的一些C++面试问题,如有错误请一定指正我。新建立了一个收集问答的仓库,欢迎各位小伙伴来更新鸭interview_experience: 本仓库初衷是想为大家提供一个便利,全面,准确的面试题学习场地,大家都可以对仓库进行更新,谢谢大家。

41.野指针和内存泄漏是什么?如何避免?

内存泄漏:是指程序中以动态分配的堆内存由于某种原因程序未释放或无法释放,造成系统内存的浪费,导致程序运行速度减慢甚至系统崩溃等严重后果

避免:使用智能指针管理资源,在释放对象数组时使用delete[],尽量避免在堆上分配内存

野指针:指向一个已删除的对象或未申请访问受限内存区域的指针。

避免:对指针进行初始化,用已合法的可访问内存地址对指针初始化,指针用完释放内存,将指针赋值nullptr。

42.malloc和new的区别是什么?

Malloc/free是标准库函数,new/delete是C++运算符

Malloc分配内存失败返回空,new失败抛异常

New/delete会调用构造析构函数,malloc/free不会,所以他们无法满足动态对象的要求。

New返回有类型的指针,malloc返回无类型的指针

分配内存的位置:malloc从堆上动态分配内存,new是从自由存储区为对象动态分配内存(取决于operator new的实现,可以为堆还可以是静态存储区)

New申请内存的步骤:调用operator new函数,分配一块足够大,且原始的,未命名的内存空间来存储特定类型的对象。运行相应的构造函数来构造对象,并为其传入初值,返回一个指向该对象的指针。

Delete:先调用对象的析构函数,再调用operator delete函数释放内存空间

43.多线程会发生什么问题?线程同步有哪些手段?

会引发资源竞争的问题,频繁上锁会导致程序运行效率低下,甚至会导致发生死锁。

线程同步手段:使用atomic原子变量,使用互斥量也就是上锁,使用条件变量或信号量制约对共享资源的并发访问。

44.什么是STL?

它是C++标准库的重要组成部分,不仅是一个可复用的组件库也是一个包含了数据结构与算法的软件架构,它拥有六大组件分别是:仿函数,算法,迭代器,空间配置器,容器,配接器

45.对比迭代器和指针的区别

迭代器不是指针,是一个模板类,通过重载了指针的一些操作符模拟了指针的一些功能,迭代器返回的是对象引用而不是对象的值。

指针能够指向函数而迭代器不行迭代器只能指向容器

46.线程有哪些状态,线程锁有哪些?

五种状态:创建,就绪,运行,阻塞,死亡

线程锁的种类:互斥锁,条件锁,自旋锁,读写锁,递归锁

47.解释说明一下map和unordered_map

Map内部实现是一个红黑树,内部所有的元素都是有序的,而hashmap则是内部实现了一个哈希表,内部存储元素是无序的

Map优点:有序性,其次是内部实现的是一个红黑树,使得很多操作都可以在logn的复杂度下可以实现效率较高。

Map缺点:空间占用率高

Unorderedmap优点:查找效率非常高。缺点:哈希表的建立比较费时间

48.vector中的push_back()和emplace_back()的区别、以及使用场景

当使用Push_back时会先调用类的有参构造函数创建一个临时变量,再将这个元素拷贝或者移动到容器之中,而emplace_back则是直接在容器尾部进行构造比push_back少进行一次构造函数调用。在大部分场景中emplace_back可以替换push_back,但是push_back会比emplace_back更加安全,emplace_back只能用于直接在容器中构造新元素的情况,如果要将现有的对象添加到容器中则需要使用push_back

49.如何实现线程安全,除了加锁还有没有其他的方式?

除了锁之外还可以使用互斥量(防止多个线程来同时访问共享资源,从而避免数据竞争的问题),原子操作(原子操作是不可分割的,使用原子操作可以确保在多线程环境中操作是安全的),条件变量(协调线程之间的协作,用来在线程之间传递信号,从而控制线程的执行流程)等方式

50.vector扩容,resize和reserve的区别

使用resize改变的是vector的大小(size),可能会添加或删除元素。
使用reserve改变的是vector的容量(capacity),不会改变当前元素的数量,仅仅是为了优化内存使用和性能。

51.vector扩容为了避免重复扩容做了哪些机制?

当vector内存不够时本身内存会以1.5或者2倍的增长,以减少扩容次数

引入了reserve,自定义vector最大容量

52.C++中空类的大小是多少?

1字节

53.weak_ptr是怎么实现的?

实现依赖于计数器和寄存器实现的,计数器用来记录弱引用的数量,寄存器用来存储shared_ptr

54.虚函数的底层原理是什么?

虚函数表和虚表指针,详细看本文第四问。

55.一个函数f(int a,int b),其中a和b的地址关系是什么?

a和b的地址是相邻的。

56.移动构造和拷贝构造的区别是什么?

移动构造函数本质上是基于指针的拷贝,实现对堆区内存所有权的移交,在一些特定场景下,可以减少不必要的拷贝。比如用一个临时对象或者右值对象初始化类实例时。我们可以使用move()函数,将一个左值对象转变为右值对象。而拷贝构造则是将传入的对象复制一份然后放进新的内存中

57.lamda表达式捕获列表捕获的方式有哪些?如果是引用捕获要注意什么?

按值捕获和引用捕获,默认的引用捕获可能会导致悬挂引用,引用捕获会导致闭包包含一个局部变量的引用或者形参的引用,如果一个由lambda创建的闭包的生命周期超过了局部变量或者形参的生命期,那么闭包的引用将会空悬。解决方法是对个别参数使用值捕获

58.哈希碰撞的处理方法

开放定址法:当遇到哈希冲突时,去寻找一个新的空闲的哈希地址。

再哈希法:同时构造多个哈希函数,等发生哈希冲突时就使用其他哈希函数知道不发生冲突为止,虽然不易发生聚集,但是增加了计算时间

链地址法:将所有的哈希地址相同的记录都链接在同一链表中

建立公共溢出区:将哈希表分为基本表和溢出表,将发生冲突的都存放在溢出表中

59.unordered_map的扩容过程

当unordered_map中的元素数量达到桶的负载因子(0.75)时,会重新分配桶的数量(通常会按照原有桶的数量*2的方式进行扩容,但是具体的增长策略也可以通过修改容器中的max_load_factor成员变量来进行调整),并将所有的元素重新哈希到新的桶中。

60.vector如何判断应该扩容?(size和capacity)

由当前容器内元素数量的大小和容器最大大小进行比较如果二者相等就会进行扩容,一般是1.5倍,部分的有两倍

相关文章:

全网最全最新100道C++面试题:40-60

前述:本文初衷是为了总结本人在各大平台看到的C面经,我会在本文持续更新我所遇到的一些C面试问题,如有错误请一定指正我。新建立了一个收集问答的仓库,欢迎各位小伙伴来更新鸭interview_experience: 本仓库初衷是想为大家提供一个…...

RAG+内容推荐,应该如何实践?

最近业务有需求:结合RAG内容推荐,针对实践部分,做一点探究。 话不多说,直接开冲! 背景 首先回顾一下 RAG 技术定义,它可以结合信息检索和生成模型的混合。简单来说,RAG 预训练的语言模型 信…...

SFTTrainer loss多少合适

在机器学习和深度学习中,“loss”(损失函数)的合理值并没有一个固定的标准,因为它依赖于多种因素,包括模型的类型、任务的性质、数据的规模和特性等。然而,我们可以从一些通用的原则和经验值来讨论损失函数…...

HTTP协议详解(一)

协议 为了使数据在网络上从源头到达目的,网络通信的参与方必须遵循相同的规则,这套规则称为协议,它最终体现为在网络上传输的数据包的格式。 一、HTTP 协议介绍 HTTP(Hyper Text Transfer Protocol): 全…...

RK3568平台(触摸篇)串口触摸屏

一.什么是串口屏 串口屏,可组态方式二次开发的智能串口控制显示屏,是指带有串口通信的TFT彩色液晶屏显示控制模组。利用显示屏显示相关数据,通过触摸屏、按键、鼠标等输入单元写入参数或者输入操作指令,进而实现用户与机器进行信…...

MySQL数据库-事务

一、什么是事务 1.概念 事务(Transaction):一个最小的不可再分的工作单元,一个事务对应一个完整的业务,一个完整的业务需要批量的DML(insert、update、delete)语句共同联合完成,事务只针对DML语句。 数据…...

qt事件类型列表

t提供了一系列丰富的事件类型,这些事件允许应用程序响应各种用户输入、系统通知以及其他类型的交互。以下是一些常见的Qt事件类型及其用途概述: QEvent::None (0): 无事件,用于初始化或作为默认值。 QEvent::Timer (1): 定时器事件&#xff…...

ElasticSearch父子索引实战

关于父子索引 ES底层是Lucene,由于Lucene实际上是不支持嵌套类型的,所有文档都是以扁平的结构存储在Lucene中,ES对父子文档的支持,实际上也是采取了一种投机取巧的方式实现的. 父子文档均以独立的文档存入,然后添加关联关系,且父子文档必须在同一分片,由于父子类型文档并没有…...

二百四十九、Linux——在Linux中创建新用户、赋予新用户root权限并对文件夹赋予新用户的权限

一、目的 安装国产化数据库OceanBase的时候,需要创建新用户、赋予新用户root权限并对文件夹赋予新用户的权限 二、创建新用户 #创建账户 oceanadmin [roothurys22 ~]#useradd -U oceanadmin -d /home/oceanadmin -s /bin/bash [roothurys22 ~]#mkdir -p /home/oc…...

com.mysql.cj.jdbc.Driver 爆红

出现这样的问题就是pom.xml文件中没有添加数据库依赖坐标 添加上这个依赖即可,添加完后重新加载一下Maven即可。 如果感觉对你有用就点个赞!!!...

传神论文中心|第19期人工智能领域论文推荐

在人工智能领域的快速发展中,我们不断看到令人振奋的技术进步和创新。近期,开放传神(OpenCSG)社区发现了一些值得关注的成就。传神社区本周也为对AI和大模型感兴趣的读者们提供了一些值得一读的研究工作的简要概述以及它们各自的论…...

案例分享-国外轻松感UI设计赏析

国外UI设计倾向于采用简洁的布局、清晰的排版和直观的交互方式,减少用户的认知负担,从而营造出轻松的使用体验。这种设计风格让用户能够快速找到所需信息,降低操作难度,提升整体满意度。 在注重美观的同时,更加重视用户…...

操作系统(4)——文件系统

目录 小程一言文件系统管理基础概念&功能基本概念文件的结构和属性文件的操作文件的安全性和权限控制文件系统的实现和分配方式 问题&解答1、文件系统在操作系统中起到什么作用?2、文件的逻辑结构和物理结构有何区别?3、如何理解文件权限控制在操…...

C# 调用Webservice接口接受数据测试

1.http://t.csdnimg.cn/96m2g 此链接提供测试代码; 2.http://t.csdnimg.cn/64iCC 此链接提供测试接口; 关于Webservice的基础部分不做赘述,下面贴上我的测试代码(属于动态调用Webservice): 1&#xff…...

工作流流程引擎框架推荐来了

近期有不少粉丝客户朋友都在询问工作流流程引擎框架推荐。随着行业竞争激烈化,实现流程化办公已经成为当务之急。低代码技术平台及工作流流程引擎拥有够灵活、更可靠、可视化界面等诸多个优势特点,在推动企业实现数字化转型的过程中深受行业信赖与喜爱。…...

从技术博客到个人 IP 矩阵:全面攻略与实战示例

文章目录 摘要引言创建博客选择平台设计和布局 内容规划明确目标受众设定内容方向制定发布计划 SEO 优化关键词研究内链和外链元标签优化 社交媒体推广选择社交平台制定推广策略 可运行的 Demo 代码模块QA 环节问:如何增加博客的曝光度?问:如…...

SOFAJRaft 简介

SOFAJRaft 简介 SOFAJRaft是一个基于Raft一致性算法的生产级高性能Java实现,由蚂蚁金服自主研发。以下是关于SOFAJRaft的详细介绍: 来源与背景: SOFAJRaft是从百度的braft移植而来,并在其基础上进行了一系列的优化和改进。它作为…...

c#中Oracle.DataAccess.dll连接数据库的报错处理

通过DataAccess.dll连接Oracle数据库时,报如下错误 The provider is not compatible with the version of Oracle client 最终原因: dll 文件复制不全(4个文件必须) oracle.dataaccess.dll oci.dll oraociei11.dll oraops11w.dll...

PyCharm2024 专业版激活设置中文

PyCharm2024 专业版激活设置中文 官网下载最新版:https://www.jetbrains.com/zh-cn/pycharm/download 「hack-jet激活idea家族.zip」链接:https://pan.quark.cn/s/4929a884d8fe 激活步骤: 官网下载安装PyCharm ;测试使用的202…...

视觉SLAM第一讲

第一讲-预备知识 SLAM是什么? SLAM(Simultaneous Localization and Mapping)是同时定位与地图构建。 它是指搭载特定传感器的主体,在没有环境先验信息的情况下,于运动过程中建立环境的模型,同时估计自己…...

中南大学无人机智能体的全面评估!BEDI:用于评估无人机上具身智能体的综合性基准测试

作者:Mingning Guo, Mengwei Wu, Jiarun He, Shaoxian Li, Haifeng Li, Chao Tao单位:中南大学地球科学与信息物理学院论文标题:BEDI: A Comprehensive Benchmark for Evaluating Embodied Agents on UAVs论文链接:https://arxiv.…...

【论文笔记】若干矿井粉尘检测算法概述

总的来说,传统机器学习、传统机器学习与深度学习的结合、LSTM等算法所需要的数据集来源于矿井传感器测量的粉尘浓度,通过建立回归模型来预测未来矿井的粉尘浓度。传统机器学习算法性能易受数据中极端值的影响。YOLO等计算机视觉算法所需要的数据集来源于…...

【Zephyr 系列 10】实战项目:打造一个蓝牙传感器终端 + 网关系统(完整架构与全栈实现)

🧠关键词:Zephyr、BLE、终端、网关、广播、连接、传感器、数据采集、低功耗、系统集成 📌目标读者:希望基于 Zephyr 构建 BLE 系统架构、实现终端与网关协作、具备产品交付能力的开发者 📊篇幅字数:约 5200 字 ✨ 项目总览 在物联网实际项目中,**“终端 + 网关”**是…...

CRMEB 中 PHP 短信扩展开发:涵盖一号通、阿里云、腾讯云、创蓝

目前已有一号通短信、阿里云短信、腾讯云短信扩展 扩展入口文件 文件目录 crmeb\services\sms\Sms.php 默认驱动类型为:一号通 namespace crmeb\services\sms;use crmeb\basic\BaseManager; use crmeb\services\AccessTokenServeService; use crmeb\services\sms\…...

MySQL 部分重点知识篇

一、数据库对象 1. 主键 定义 :主键是用于唯一标识表中每一行记录的字段或字段组合。它具有唯一性和非空性特点。 作用 :确保数据的完整性,便于数据的查询和管理。 示例 :在学生信息表中,学号可以作为主键&#xff…...

R 语言科研绘图第 55 期 --- 网络图-聚类

在发表科研论文的过程中,科研绘图是必不可少的,一张好看的图形会是文章很大的加分项。 为了便于使用,本系列文章介绍的所有绘图都已收录到了 sciRplot 项目中,获取方式: R 语言科研绘图模板 --- sciRplothttps://mp.…...

Chromium 136 编译指南 Windows篇:depot_tools 配置与源码获取(二)

引言 工欲善其事,必先利其器。在完成了 Visual Studio 2022 和 Windows SDK 的安装后,我们即将接触到 Chromium 开发生态中最核心的工具——depot_tools。这个由 Google 精心打造的工具集,就像是连接开发者与 Chromium 庞大代码库的智能桥梁…...

适应性Java用于现代 API:REST、GraphQL 和事件驱动

在快速发展的软件开发领域,REST、GraphQL 和事件驱动架构等新的 API 标准对于构建可扩展、高效的系统至关重要。Java 在现代 API 方面以其在企业应用中的稳定性而闻名,不断适应这些现代范式的需求。随着不断发展的生态系统,Java 在现代 API 方…...

密码学基础——SM4算法

博客主页:christine-rr-CSDN博客 ​​​​专栏主页:密码学 📌 【今日更新】📌 对称密码算法——SM4 目录 一、国密SM系列算法概述 二、SM4算法 2.1算法背景 2.2算法特点 2.3 基本部件 2.3.1 S盒 2.3.2 非线性变换 ​编辑…...

聚六亚甲基单胍盐酸盐市场深度解析:现状、挑战与机遇

根据 QYResearch 发布的市场报告显示,全球市场规模预计在 2031 年达到 9848 万美元,2025 - 2031 年期间年复合增长率(CAGR)为 3.7%。在竞争格局上,市场集中度较高,2024 年全球前十强厂商占据约 74.0% 的市场…...