C++八股学习心得.8

news2024/11/17 11:39:53

1.const知道吗?解释其作用

const 修饰类的成员变量,表示成员常量,不能被修改。

const修饰函数承诺在本函数内部不会修改类内的数据成员,不会调用其它非 const 成员函数。

如果 const 构成函数重载,const 对象只能调用 const 函数,非 const 对象优先调用非 const 函数。

const 函数只能调用 const 函数。非 const 函数可以调用 const 函数。

类体外定义的 const 成员函数,在定义和声明处都需要 const 修饰符。

2.类的static变量在什么时候初始化?函数的static变量在什么时候初始化?

类的静态成员变量在类实例化之前就已经存在了,并且分配了内存。函数的static变量在执行此函数时进行初始化。

 3.堆和栈的区别?堆和栈的生命周期?

一、堆栈空间分配区别:

1、栈(操作系统):由操作系统自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈

2、堆(操作系统): 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收,分配方式倒是类似于链表

二、堆栈缓存方式区别:

1、栈使用的是一级缓存, 他们通常都是被调用时处于存储空间中,调用完毕立即释放

2、堆是存放在二级缓存中,生命周期由虚拟机的垃圾回收算法来决定(并不是一旦成为孤儿对象就能被回收)。所以调用这些对象的速度要相对来得低一些

三、堆栈数据结构区别:

堆(数据结构):堆可以被看成是一棵树,如:堆排序;

栈(数据结构):一种先进后出的数据结构。

4.解释下封装、继承和多态

一、封装:

封装是实现面向对象程序设计的第一步封装就是将数据或函数等集合在一个个的单元中(我们称之为类)

封装的意义在于保护或者防止代码(数据)被我们无意中破坏。

二、继承:

继承主要实现重用代码,节省开发时间。

子类可以继承父类的一些东西

三、多态

多态:同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果。在运行时,可以通过指向基类的指针,来调用实现派生类中的方法

5.指针和引用的区别

指针是一个变量,只不过这个变量存储的是一个地址,指向内存的一个存储单元;而引用仅是个别名

引用使用时无需解引用(*),指针需要解引用

引用只能在定义时被初始化一次,之后不可变;指针可变

引用没有 const,指针有 const

引用不能为空,指针可以为空

“sizeof 引用”得到的是所指向的变量(对象)的大小,而“sizeof 指针”得到的是指针本身的大小

指针和引用的自增(++)运算意义不一样

指针可以有多级,但是引用只能是一级(int **p;合法 而 int &&a是不合法的)

从内存分配上看:程序为指针变量分配内存区域,而引用不需要分配内存区域。

6.什么是内存泄漏?面对内存泄漏和指针越界,你有哪些方法?你通常采用哪些方法来避免和减少这类错误?

用动态存储分配函数动态开辟的空间,在使用完毕后未释放,结果导致一直占据该内存单元即为内存泄露

使用的时候要记得指针的长度

malloc的时候得确定在那里free.

对指针赋值的时候应该注意被赋值指针需要不需要释放.

动态分配内存的指针最好不要再次赋值.

 7.常用的排序算法有哪些?简单描述几个排序算法的优缺点

答:选择、冒泡、快速、希尔、归并、堆排等。

1.快排:是冒泡排序的一种改进

优点:快,数据移动少

缺点:稳定性不足

2.归并:分治法排序,稳定的排序算法,一般用于对总体无序,但局部有序的数列。

优点:效率高O(n),稳定

缺点:比较占用内存

8.new和malloc的区别

1、malloc与free是C++/C语言的标准库函数,new/delete是C++的运算符。它们都可用于申请动态内存和释放内存

2、对于非内部数据类型的对象而言,光用malloc/free无法满足动态对象的要求。对象在创建的同时要自动执行构造函数,对象在消亡之前要自动执行析构函数

3、由于malloc/free是库函数而不是运算符,不在编译器控制权限之内,不能够把执行构造函数和析构函数的任务强加于malloc/free。因此C++语言需要一个能完成动态内存分配和初始化工作的运算符new以一个能完成清理与释放内存工作的运算符delete。注意new/delete不是库函数

4、C++程序经常要调用C函数,而C程序只能用malloc/free管理动态内存

5、new可以认为是malloc加构造函数的执行。new出来的指针是直接带类型信息的。而malloc返回的都是void指针。

9.TCP和UDP通信的差别?什么是IOCP

1.TCP面向连接, UDP面向无连接的

2.TCP有保障的,UDP传输无保障的

3.TCP是效率低的,UDP效率高的

4.TCP是基于流的,UDP基于数据报文

5.TCP传输重要数据,UDP传输不重要的数据

IOCP全称I/O Completion Port,中文译为I/O完成端口。

IOCP是一个异步I/O的API,它可以高效地将I/O事件通知给应用程序。

与使用select()或是其它异步方法不同的是,一个套接字[socket]与一个完成端口关联了起来,然后就可继续进行正常的Winsock操作了。然而,当一个事件发生的时候,此完成端口就将被操作系统加入一个队列中。然后应用程序可以对核心层进行查询以得到此完成端口。

10.同步IO和异步IO的区别

A. 同步

所谓同步,就是在发出一个功能调用时,在没有得到结果之前,该调用就不返回。

按照这个定义,其实绝大多数函数都是同步调用(例如sin isdigit等)。

但是一般而言,我们在说同步、异步的时候,特指那些需要其他部件协作或者需要一定时间完成的任务。

最常见的例子就是 SendMessage。

该函数发送一个消息给某个窗口,在对方处理完消息之前,这个函数不返回。

当对方处理完毕以后,该函数才把消息处理函数所返回的值返回给调用者。

B. 异步

异步的概念和同步相对。

当一个异步过程调用发出后,调用者不会立刻得到结果。

实际处理这个调用的部件是在调用发出后,通过状态、通知来通知调用者,或通过回调函数处理这个调用。

 总结:

Const修饰成员变量,不可以修改,Const修饰函数不修改类内数据,Const函数重载,const对象只调用const函数,非const对象可以调用const函数,函数也是如此,类外定义的const函数,定义声明都需要加const

类的static变量实例化之前存在,分配了内存,执行函数时候初始化,静态成员变量先初始化,类外定义,所有类对象共享,静态成员函数不能调用非静态,反过来可以,没this指针,静态成员函数可以访问静态成员变量,类成员函数可以访问静态数据成员

栈操作系统可以自动释放,存放局部变量,形参,一级缓存,是一个先进后出的数据结构。堆程序员释放,二级缓存(调用速度较慢),可以看做一个树。

封装是面向对象程序设计第一步,将数据和函数封装起来一个类,防止代码被破坏,继承重用代码,子类继承父类的方法,多态同一操作不同对象不同解释不同结果。

指针是一个变量存储一个变量的地址,定义可以随时改变,有sizeof,可使用const,可为空,使用的时候需要解引用,有多级指针,++意义不同,需要内存空间。引用是一个别名,定义时候初始化一次,无sizeof,不可使用const,不为空,无需解引用,一级引用,不需内存空间。

内存泄漏是动态开辟内存没有释放导致占用内存,要记录指针长度,注意malloc-free,new-delete,赋值指针是否需要释放,动态分配内存的指针不赋值

选择、冒泡、快速、希尔、归并、堆排快排是冒泡改进,归并分治法排序总体无序,局部有序

New(delete)和malloc(free)动态申请内存和释放内存,new(不是库函数)可以创建对象,有构造和析构函数,适用于c++,malloc使用c(库函数),new像是malloc+构造函数

Tcp面向连接,有保障,效率低,基于字节流数据,重要数据,udp无连接,无保障效率高,数据报文

同步:功能调用之后,无结果就等待,结果来了返回,异步与这个相反

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

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

相关文章

你好,2024!再见,2023!

大家好,我是南城余! 今天是2023年最后一天,看到各位大佬都在分享今年的总结,我也来做个年度总结,是第一次做年度总结,希望以后可以每年都做一个好好的回顾。 说来可笑,标题,2023怎么…

高光谱分类论文解读分享之基于生成对抗性少数过采样的高光谱图像分类

IEEE TGRS 2022:基于生成对抗性少数过采样的高光谱图像分类 题目 Generative Adversarial Minority Oversampling for Spectral–Spatial Hyperspectral Image Classification 作者 Swalpa Kumar Roy , Student Member, IEEE, Juan M. Haut , Senior Member, IE…

DC-DC升压/降压 隔离电源解决方案PCB和原理图

DC-DC隔离电源模块是一种基于变换原理而设计的模块,可以将一种电压转变为另一种电压,同时实现电气信号的隔离和滤波作用。其工作原理基于电感和电容的原理,一般由输入电路、输出电路、开关电路和控制电路四部分组成。 DC-DC电源模块的众多优点是大家众所周知的,DC-…

Hyperledger Fabric 权限策略和访问控制

访问控制是区块链网络十分重要的功能,负责控制某个身份在某个场景下是否允许采取某个操作(如读写某个资源)。 常见的访问控制模型包括强制访问控制(Mandatory Access Control)、自主访问控制(Discretionar…

学生用台灯多少瓦比较合适?适合学生用的护眼台灯推荐

近年来,随着电子产品的普及和使用时间的增长,人们对眼部健康的关注度也越来越高为了解决这一问题,护眼台灯便是在这样的背景下诞生的。护眼台灯是一种集成了先进技术的台灯,旨在减轻眼部疲劳和保护视力。学生是使用台灯的一大群体…

抖店新手如何申请开店?

我是电商珠珠 抖店大家都知道,热度高门槛低,所以有很多人都想去入驻。但是对于开店流程,还不太了解。 今天,我就来给大家详细的讲一下。 一、入驻前准备 在入驻之前,需要准备好一张营业执照,新手的话个…

JavaWeb——后端AOP面向特定方法编程

七、AOP 1. 概述 AOP(Aspect Oriented Programming):面向切面编程、面向方法编程,其实就是面向特定方法编程 场景: 案例部分功能运行较慢,定位执行耗时较长的业务方法,此时需要统计每个业务…

linux安装node.js

先去官网下载对应的版本 官网:https://nodejs.org/en/download 选择对应的版本,点这个,直接去虚拟机上面安装 # apt的系统 apt install -y wget # yum的系统 yum install -y wget下载包 wget https://nodejs.org/dist/v20.10.0/node-v20.…

后端程序员开发win小工具(未完待续)

github:https://gitee.com/forgot940629/win-tool-demo 本地启动,查看http://127.0.0.1:8080/form 场景 在日常工作中可能需要后端开发者开发一些辅助工具。这些辅助工具通常希望能想其他软件一样在桌面系统运行,并且有一些桌面应用的基本…

股票开户须知!北京股票开户佣金最低是多少?找那家证券公司开户手续费低?

股票交易是一种投资活动,需要一些基本的须知来帮助投资者进行决策和进行交易。以下是一些股票交易的基本须知: 了解股票市场:了解股票市场的基本原理、运作机制和相关法规是非常重要的。投资者应学习股票交易的基本概念和术语,了解…

BERT 模型是什么

科学突破很少发生在真空中。相反,它们往往是建立在积累的人类知识之上的阶梯的倒数第二步。要了解 ChatGPT 和 Google Bart 等大型语言模型 (LLM) 的成功,我们需要回到过去并谈论 BERT。 BERT 由 Google 研究人员于 2018 年开发&…

【算法练习】leetcode算法题合集之二叉树篇

递归遍历基础篇 前序遍历,中序遍历,后序遍历是根据处理根节点的位置来命名的。 树的处理大多用到了递归,递归需要知道终止条件。 前序遍历(中左右) 144.二叉树的前序遍历 中左右,先处理根节点,…

简单易懂的PyTorch激活函数大全详解

目录 torch.nn子模块Non-linear Activations nn.ELU 主要特点与注意事项 使用方法与技巧 示例代码 图示 nn.Hardshrink Hardshrink函数定义 参数 形状 示例代码 图示 nn.Hardsigmoid Hardsigmoid函数定义 参数 形状 示例代码 图示 nn.Hardtanh HardTanh函数…

湖南大学-数据库系统-2018期末考试解析

【写在前面】 这是2018年的卷子,复习备考的时候做了并与同学校对了答案。答案仅供参考。这张难度不大,同样的,跟前几张差不了太多。但是从这一年开始,选择题变成了15道,越来越贴切近几年的考试了。 一、单选题&#xf…

基于SpringBoot摄影跟拍预定管理系统(系统+数据库+文档)

🍅点赞收藏关注 → 私信领取本源代码、数据库🍅 本人在Java毕业设计领域有多年的经验,陆续会更新更多优质的Java实战项目 希望你能有所收获,少走一些弯路。🍅关注我不迷路🍅摘 要 首先,一开始便是清楚的论…

揭秘证券公司网站部署的SSL证书品牌

近日,有多家证券公司因网络安全问题被点名,由此,建立完善的网络安全管理制度、采用适当的安全策略和工具,以营造安全的网络环境,更好的保护用户隐私和业务安全就显得尤为重要。SSL证书作为保护传输数据安全的重要工具&…

pve多台物理机虚拟化 pve虚拟机优势

Proxmox VE是一个运行虚拟机和容器的平台。基于Debian Linux,完全开源。为了获得最大的灵活性,实现了两种虚拟化技术——基于内核的虚拟机(KVM)和基于容器的虚拟化(LXC)。一个主要的设计目标是使管理尽可能容易。运行在单个节点上使用Proxmox VE&#xf…

acwing 并查集

目录 并查集的路径压缩两种方法法一法二 AcWing 240. 食物链AcWing 837. 连通块中点的数量示例并查集自写并查集 并查集的路径压缩两种方法 法一 沿着路径查询过程中,将非根节点的值都更新为最后查到的根节点 int find(int x) {if (p[x] ! x) p[x] find(p[x]);r…

LitJson-Json字符串转对像时:整型与字符串或字符串转:整型进的类型不一致的处理

目录 问题描述上代码测试代码各位看官,打赏个1元吧 Json数据格式是大家在游戏开中常量用的一种数据格式,某种程度上可以说是必备的。对unity开发来说,LitJson这个json库应该是被使用最多的json库了。 问题描述 今天说要的其中的这个api: Jso…