c++八股6

  1. C++内存释放: 在C++中,动态分配的内存通过new操作符分配,并通过delete操作符释放。当不再需要对象时,应当确保正确调用delete以防止内存泄漏。现代C++中,智能指针如std::unique_ptr、std::shared_ptr等可以自动管理内存,避免手动释放带来的问题。此外,内存管理还涉及到内存对齐、内存碎片等问题,以及STL容器如何在内部进行内存管理优化。
  2. 进程和线程的区别:
    ● 进程是操作系统资源分配的基本单位,每个进程都有独立的地址空间、全局变量、堆栈等资源,进程之间相互隔离,通信需通过IPC机制(如管道、共享内存、消息队列等)。
    ● 线程是CPU调度和执行的基本单位,同一进程内的多个线程共享相同的地址空间、全局变量等资源,线程间通信成本较低,可以通过读写共享数据或使用互斥锁、条件变量等同步原语实现。
  3. 熟悉的数据结构及其区别:
    ● 栈(Stack):后进先出(Last In First Out, LIFO)的数据结构,主要支持push(入栈)、pop(出栈)操作,常用于函数调用栈、表达式求值等场景。
    ● 队列(Queue):先进先出(First In First Out, FIFO)的数据结构,主要支持enqueue(入队)、dequeue(出队)操作,广泛应用于任务调度、消息传递等领域。
  4. 哈希表与哈希冲突解决: 哈希表是一种通过哈希函数将键映射到数组索引,从而快速查找和存储数据的数据结构。当两个不同的键经过哈希函数计算后得到相同的索引值时,就会发生哈希冲突。常见的解决方法有开放寻址法(比如线性探测、二次探测等)和链地址法(即每个数组元素指向一个链表,相同哈希值的键放入同一个链表中)。
  5. 多线程编程及线程通信、线程互斥:
    ● 多线程编程:在单个进程中创建并运行多个并发执行路径,提高程序执行效率。
    ● 线程通信:可通过共享内存、信号量、互斥量、条件变量等方式实现线程间的协同工作和数据交换。
    ● 线程互斥:为了避免多个线程同时访问和修改同一资源导致数据不一致,通常采用互斥锁(mutex)来保护临界区代码,保证任何时刻只有一个线程能够访问受保护的资源。
  6. 查找、排序算法:
    ○ 查找算法包括:线性查找、二分查找(适用于有序数组)、哈希查找(通过哈希表实现近乎常数时间复杂度的查找,但需处理哈希冲突)、二叉搜索树查找等。
    ○ 排序算法包括:冒泡排序、选择排序、插入排序、快速排序、归并排序、堆排序等。其中,C++ STL提供的sort函数实现了高效稳定的排序算法,默认采用的是introsort(快速排序、堆排序和插入排序的混合),而stable_sort则保证排序稳定性。
  7. 常用的数据结构(STL标准库):
    ○ 栈(stack):后进先出(LIFO)容器,提供了push, pop, top等操作。
    ○ 队列(queue):先进先出(FIFO)容器,支持push(enqueue), pop(dequeue)操作。
    ○ 哈希表(unordered_map/unordered_set):基于哈希函数实现键值对的快速存储与查找,内部使用链地址法或开放寻址法解决冲突。
    ○ 有序关联容器(map/set):基于红黑树实现,键自动排序,提供log(n)时间复杂度的插入、查找、删除操作。
  8. STL中map与unordered_map的区别:
    ○ std::map:键值对按照键的升序排列,内部使用红黑树实现,查找、插入、删除的时间复杂度均为O(log n)。
    ○ std::unordered_map:不保证元素顺序,使用哈希表实现,理想情况下查找、插入、删除操作的时间复杂度接近O(1),但实际取决于哈希函数的质量及负载因子等因素。
  9. C++11新特性:
    ○ 自动类型推导(auto关键字)
    ○ 列表初始化
    ○ 右值引用(rvalue reference)与移动语义
    ○ 引入智能指针(unique_ptr, shared_ptr, weak_ptr)
    ○ 函数式编程支持(lambda表达式、std::bind)
    ○ 变量声明与定义合并(extern template)
    ○ 多线程支持(库)
    ○ 并发容器(如mutex, atomic, condition_variable等)
  10. C++面向对象三大特性及其功能:
    ○ 封装(Encapsulation):隐藏对象的内部细节,只暴露必要的接口,提高代码重用性和安全性。
    ○ 继承(Inheritance):子类继承父类的属性和行为,实现代码复用和层次化分类。
    ○ 多态(Polymorphism):同一消息可以根据接收者的不同产生不同的行为效果,分为静态多态(函数重载、运算符重载、模板)和动态多态(虚函数机制,基类指针指向派生类对象调用方法时体现)。
  11. 多态的实现:
    ○ C++中多态主要通过虚函数(virtual function)机制实现。当基类定义虚函数时,派生类可以覆盖该函数,此时通过基类指针或引用调用虚函数时会根据指针实际指向的对象类型确定调用哪个版本的函数。
  12. 继承的理解与实现:
    ○ 继承体现了“is-a”关系,允许派生类继承基类的非私有成员(属性和方法)。在C++中,通过关键字class DerivedClass : access_specifier BaseClass来实现继承,access_specifier可以是public、protected或private,分别决定了基类成员在派生类中的可见性。
  13. C++内存管理:
    ○ C++内存管理涉及动态内存分配(new/delete)、栈内存分配(局部变量)、堆内存管理、构造函数与析构函数的作用、智能指针的使用以减少内存泄漏和悬挂指针等问题。现代C++更推荐使用RAII(Resource Acquisition Is Initialization)原则,通过构造函数获取资源并在析构函数释放资源,以及使用STL容器和智能指针来简化内存管理。

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

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

相关文章

WAF攻防相关知识点总结2-代码免杀绕过

WAF的检测除了有对于非正常的流量检测外还对于非正常的数据包特征进行检测 以宝塔为例 在宝塔的后台可以放置一句话木马的文件 宝塔不会对于这个文件进行拦截,但是一旦我们使用菜刀蚁剑等webshell工具去进行连接的时候,数据报中有流量特征就会被拦截 …

JRT和springboot比较测试

想要战胜他,必先理解他。这两天系统的学习Maven和跑springboot工程,从以前只是看着复杂,现在到亲手体验一下,亲自实践的才是更可靠的了解。 第一就是首先Maven侵入代码结构,代码一般要按约定搞src/main/java。如果是能…

C#判断输入的数字是否符合货币格式

目录 一、用正则表达式判断输入是否符合货币格式 二、用double.TryParse()判断输入是否符合货币格式 一、用正则表达式判断输入是否符合货币格式 // 判断输入是否货币合格 using System.Text.RegularExpressions; namespace IsCurrency_Format {partial class Program{stati…

虚幻UE 特效-Niagara特效实战-雨天

回顾Niagara特效基础知识:虚幻UE 特效-Niagara特效初识 其他两篇实战:虚幻UE 特效-Niagara特效实战-火焰、烛火、虚幻UE 特效-Niagara特效实战-烟雾、喷泉 本篇笔记我们再来实战雨天,雨天主要用到了特效中的事件。 文章目录 一、雨天1、创建雨…

九、K8S-label和label Selector

label和label selector 标签和标签选择器 1、label 标签: 一个label就是一个key/value对 label 特性: label可以被附加到各种资源对象上一个资源对象可以定义任意数量的label同一个label可以被添加到任意数量的资源上 2、label selector 标签选择器 L…

k8s的对外服务ingress

1、service的作用体现在两个方面 (1)集群内部:不断跟踪pod的变化,更新deployment中的pod对象,基于pod的ip地址不断变化的一种服务发现机制 (2)集群外部:类似于负载均衡器&#xff…

【计算机组成与体系结构Ⅱ】Tomasulo 算法模拟和分析(实验)

实验5:Tomasulo 算法模拟和分析 一、实验目的 1:加深对指令级并行性及开发的理解。 2:加深对 Tomasulo 算法的理解。 3:掌握 Tomasulo 算法在指令流出、执行、写结果各阶段对浮点操作指令以及 load 和 store 指令进行了什么处…

MATLAB R2023a安装教程

鼠标右击软件压缩包,选择“解压到MATLAB.R2023a”。 打开解压后的文件夹,鼠标右击“R2023a_Windows_iso”选择“装载”。 鼠标右击“setup.exe”选择“以管理员身份运行”。 点击“高级选项”选择“我有文件安装密钥”。 点击“是”,然后点击…

【MCAL】ADC模块详解

目录 前言 正文 1.ADC模块介绍 2.关键概念及依赖的模块 2.1 ADC依赖的模块 3.ADC功能示例 3.1 ADC Buffer Access Mode示例 3.1.1配置(Configuration) 3.1.2 初始化(Initialization) 3.1.3 Adc_GetStreamLastPointer的使…

IP双栈技术

双栈技术产生 在IPv4 Internet向IPv6 Internet过渡的初期,IPv4网络已被大量部署,而IPv6网络只是散布在世界各地的一些孤岛。故而需要一些技术实现IPv6孤岛之间的互联以及IPv4节点和IPv6节点之间的互通。 双栈协议概念 双栈协议是指所有设备必须支持IP…

使用Python的pygame库实现下雪的效果

使用Python的pygame库实现下雪的效果 关于Python中pygame游戏模块的安装使用可见 https://blog.csdn.net/cnds123/article/details/119514520 先给出效果图: 源码如下: import pygame import random# 初始化pygame pygame.init()# 设置屏幕尺寸 width…

C/C++ 容易混淆的指针声明总结

指针数组 int *p[3]; 首先从p处开始,先于[ ] 结合,因为其优先级高(在C中,[]属于后缀运算符与( ) 同为最高优先级),所以p是一个数组。然后再与 * 结合,说明数组里的元素是指针类型。之后再与 i…

【重学C语言】四、常量、变量和基本数据类型转换

【重学C语言】四、常量、变量和基本数据类型转换 1. 常量和变量1.1 常量1.1.1 直接常量1.1.1.1 整数常量1.1.1.2 浮点常量1.1.1.3 字符常量1.1.1.4字符串常量 1.1.2符号常量 1.2 标识符1.3 变量1.3.1 变量的定义1.3.2 左值(Lvalues)和右值(Rv…

Spring中@Async的使用技巧

引言 在Java开发中,我们常常会遇到需要执行耗时操作的场景,例如文件上传、网络请求等。为了提高系统的响应速度和并发能力,我们可以使用异步方法来处理这些任务。本文将介绍如何在Java中使用异步方法,并探讨其中的一些注意事项。…

TDengine启动和连接问题

TDengine启动和连接问题 测试TDengine,使用docker安装运行,宿主机ip 192.168.0.100。下载windows客户端,配置如下: hosts配置:192.168.0.100 tdnode1taos.cfg配置:firstEp和fqdn均为tdnode1,端…

一款自动化提权工具

免责声明 请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,作者不为此承担任何责任。工具来自网络,安全性自测,如有侵权请联系删除。…

1. 安装Git

01. 安装Git 最早Git是在Linux上开发的,很长一段时间内,Git也只能在Linux和Unix系统上跑。不过,慢慢地有人把它移植到了Windows上。现在,Git可以在Linux、Unix、Mac和Windows这几大平台上正常运行了。 要使用Git,第一…

PBR材质背光面太暗优化

图形学中漫反射光照遵循兰伯特光照模型,它的公式如下 其中: :漫反射光颜色 :入射光颜色 :材质的漫反射系数 :法线方向 :光源方向 由于背光面的法线方向和光源方向的点积为负数,因此…

1.18寒假集训

A: 解题思路&#xff1a; 这题看似很复杂&#xff0c;其实很简单&#xff0c;找规律不难发现就是输出n 1 下面是c代码&#xff1a; #include<iostream> using namespace std; int main() {int n;cin >> n;cout << n 1;return 0; } B: 解题思路&#xf…

高效解决在本地计算机运行ubuntu服务器端的jupyter lab

文章目录 问题解决方案step1step2step3step4 问题 目前&#xff0c;网上没有什么详细的关于在本地计算机上运行服务器端jupyter lab的教程&#xff0c;由于个人计算机计算资源有限&#xff0c;我们需要利用服务器端的GPU实现高效训练 这篇文章将指导您如何使用 ssh 隧道在远…