C++八股学习心得.8

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.mfbz.cn/a/304001.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

聊聊 Java 集合框架中的 ArrayList

其实 Java 集合框架也叫做容器,主要由两大接口派生而来,一个是 collection,主要存放对象的集合。另外一个是Map, 存储着键值对(两个对象)的映射表。 下面就来说说 List接口,List存储的元素是有序、可重复的。其下有三个…

配置git服务器

第一步: jdk环境配置 (1)搜索【高级系统设置】,选择【高级】选项卡,点【环境变量】 (2)在【系统变量】里面,点击【新建】 (3)添加JAVA_HOME环境变量JAVA_HO…

展台搭建的基本要求

一、选址及总平面布置 展厅人流量大,对选址和总平面布置的要求如下:展厅选址应位于市内或郊区交通便利的区域。大型展览馆应有足够的群众活动广场和停车面积 ,并应有室外陈列场地。室外场地要考虑环境的绿化和美化。各功能分区之间联系方便又互不干扰。建…

实现LCM在docker之间的通信

目录 1.docker容器互联 新建网络 连接容器 2.设置环境变量 3.在两个docker之间实现通信 1.docker容器互联 新建网络 $ docker network create -d bridge test-net 连接容器 运行一个容器并连接到新建的 test-net 网络: $ docker run -itd --name lcm_1 --network tes…

极智项目 | 实战Paddle戴口罩检测

欢迎关注我的公众号 [极智视界],获取我的更多项目分享 大家好,我是极智视界,本文来介绍 实战 Paddle 戴口罩检测项目。 本文介绍的 实战 Paddle 戴口罩检测项目,提供完整的可以一键执行的项目工程源码,获取方式有两个…

AI红娘开启约会新时代;网易云音乐Agent实践探索;微软生成式AI课程要点笔记;ComfyUI新手教程;图解RAG进阶技术 | ShowMeAI日报

👀日报&周刊合集 | 🎡生产力工具与行业应用大全 | 🧡 点赞关注评论拜托啦! 👀 Perplexity 官宣 7360 万美元B轮融资,打造世界上最快最准确的答案平台 https://blog.perplexity.ai/blog/perplexity-rais…

yyds,4 个 Pandas 必备神器!

Pandas是我们日常处理表格数据最常用的包,但是对于数据分析来说,Pandas的DataFrame还不够直观。 今天我们将介绍4个和Pandas相关的Python包,可以将Pandas的DataFrame转换交互式表格,让我们可以直接在上面进行数据分析的操作。 P…

天洑软件与常州大学成立电子信息专业学位硕士研究生联合培养基地

2023年12月27日,天洑软件与常州大学微电子与控制工程学院成立电子信息专业学位硕士研究生联合培养基地,授牌及企业导师聘任仪式于常州大学西太湖校区隆重举办。天洑软件前瞻技术研究院院长张儒受邀与会。 开幕式上,微电子与控制工程学院党委书…

NUXT3学习笔记

1.邂逅SPA、SSR 1.1 单页面应用程序 单页应用程序 (SPA) 全称是:Single-page application,SPA应用是在客户端呈现的(术语称:CSR(Client Side Render)) SPA的优点 只需加载一次 SPA应用程序只需…

Docker实战08|Docker管道及环境变量识别

上一篇文章中,讲解了如何通过Go语言实现对Docker Cgroup的资源限制 具体文章可见《Docker就应该这么学-07》 有需要的小伙伴可以回顾一下。 接下来本文会详细介绍一下Docker 管道及环境变量识别 管道及环境变量识别 获取代码 git clone https://gitee.com/mjr…

SEO全自动发布外链工具源码系统:自动增加权重 附带完整的搭建安装教程

SEO全自动发布外链工具是一款基于PHP和MySQL开发的外链发布工具。它通过自动化流程,帮助站长快速、有效地发布外链,提高网站的权重和排名。该工具支持多种外链发布平台,如论坛、博客、分类信息等,可自定义发布内容和格式&#xff…

Plotly.js 热力图与折线结合

上次记录了Echarts热力图与折线图的结合,但其效果不是很自然。后又找到了Plotly.js库,发现其效果不错。在此整理下实现过程。这里面涉及到自定义工具栏、自定义工具图标等等 配置工具栏显示的工具图标 let config {locale: zh-cn, // 设置本地语…

代码随想录刷题第四十三天| 1049. 最后一块石头的重量 II ● 494. 目标和 ● 474.一和零

代码随想录刷题第四十三天 今天为三道0-1背包问题的变种, 分别有三个小问题 给定一个容量为j的背包,尽可能装下物品,找到能装下物品的最大价值 dp[i][j] max(dp[i-1][j], dp[i-1][j-nums[i]]nums[i]) 给定一个容量为j的背包,找…

在docker中搭建部署clickhouse

因需要给网关日志拉取并存储供数据分析师分析,由于几十个项目的网关请求数量很大,放在mysql不合适,MongoDB不适合分析,于是准备存放在clickhouse,clickhouse对于读写支持也比较友好,说干就干 1、在服务器中…

Docker查看镜像的Dockerfile

前言 在使用Docker构建应用程序时,我们可以通过Dockerfile定义应用程序的环境,并将其打包成一个镜像。有时,我们可能需要查看一个已经构建好的镜像的Dockerfile,以了解镜像是如何构建的,或者进行后续的修改和调整。本…

C++中的虚函数

前言 本篇文章讲述C的虚函数 定义 在C语言中,基类将类型相关的函数和派生类不做改变直接继承的函数区分开来。对于有些函数,基类希望派生类各自定义适合自身的版本。那么基类就会将这些函数标记为virtual,这些被标记的函数就是虚函数。 下…

[计算机提升] 创建和管理一般共享文件夹

4.6 创建和管理一般共享文件夹 4.6.1 创建一般共享文件夹 通过创建共享文件夹,可以让多台计算机在同一网络上共享文件和文件夹。这对于团队协作、家庭用户共享文件和资源非常方便。方式如下: 1、选中要共享的文件夹,然后右键属性&#xff0…

软件测试大作业||测试计划+测试用例+性能用例+自动化用例+测试报告

xxx学院 2023—2024 学年度第二学期期末考试 《软件测试》(A)试题(开卷) 题目:以某一 web 系统为测试对象,完成以下文档的编写: (满分 100 分) (1&am…

接雨水(Leetcode42)

例题: 题目说了,给定n个宽度为1的柱子,height数组中的每个元素表示每个柱子的高度。 只要柱子之间存在凹槽,就能接住雨水。 在解决这道题目之前,我们先了解一下单调递减栈。(由栈底到栈顶逐渐递减&#xff…

项目知识—SSM及之后02

1、resultMap写的Base内容必须保证select都使用上 2、VALUE单个 ,VALUES多个 3、一对多,两张表,多的表加外键 比如班级和学生就是一对多,查就是按照学生表去查询 多对多,三张表,关系表加外键 4、数据库…
最新文章