20230921研发面经总结

2023-09-21 14:10:14

1.cpp中引用和指针的区别

引用是在概念上定义一个变量的别名,而指针是存储一个变量的地址。
引用必须从一而终,不能再指向其他数据;指针可以随意改变指向。
引用在定义时必须初始化,而指针是最好初始化,不初始化也不会报错。
指针可以有多级,引用不可以。
存在空指针,但是不存在空引用。

2.介绍const,各种使用情况的效果

1.const修饰变量位常量不可修改
在这里插入图片描述
2.const修饰指针,看右侧
在这里插入图片描述
3.const修饰形参,防止修改,常量引用修饰;也可以修饰结构体形参
在这里插入图片描述
4.成员函数后加const,不可以修改成员属性
5.常对象const不可以改成愿变量值,但是mutable可以修改

3.右值引用和move的底层实现

左值:表示一个占据内存中某个可识别的位置(也就是一个地址)的对象。
右值:即非左值,也就一个不表示内存中某个可识别位置的对象的表达式,右值的本质就是常量值或临时值
对表达式取地址,如果编译器不报错就为左值,否则为右值
语法:右值引用就是给右值取别名,通过&&声明,使用右值引用来优化程序性能,通过创建右值引用变量x、c和d,可以避免在每次调用函数func时创建临时变量。
在这里插入图片描述
右值引用优化性能,避免深拷贝
移动构造函数使用一个右值引用类型参数只有浅拷贝,提高性能

所谓移动语义,指的就是以移动而非深拷贝的方式初始化含有指针成员的类对象:之前的拷贝是对于别人的资源,自己重新分配一块内存存储复制过来的资源,而对于移动语义,类似于转让或者资源窃取的意思,对于那块资源,转为自己所拥有,别人不再拥有也不会再使用,通过 c++11 新增的移动语义可以省去很多拷贝负担,怎么利用移动语义呢,是通过移动构造函数。
移动语义可以将资源(堆、系统对象等)通过浅拷贝方式从一个对象转移到另一个对象,这样能够减少不必要的临时对象的创建、拷贝以及销毁,可以大幅度提高 c++ 应用程序的性能,消除临时对象的维护(创建和销毁)对性能的影响。

4.move什么时候用好,why

std::move并不能移动任何东西,它唯一的功能是将一个左值强制转化为右值引用,继而可以通过右值引用使用该值,以用于移动语义

std::move是将对象的状态或者所有权从一个对象转移到另一个对象,只是转移,没有内存的搬迁或者内存拷贝所以可以提高利用效率,改善性能.

1.移动语义适用于需要转移对象资源所有权的情况,避免进行不必要的数据拷贝
2.容器操作示例
3.返回右值
4.资源管理中转移对象的所有权,确保资源的正确释放和避免资源泄漏

5.拷贝构造器和移动构造器

拷贝构造函数用于从一个已存在的对象创建一个新的对象,即复制构造函数。它通常有一个类对象作为参数,返回一个新的对象,该对象与原始对象具有相同的值。如果一个类没有定义拷贝构造函数,则编译器会生成一个默认的拷贝构造函数,它将逐个复制所有非静态成员

移动构造函数和移动赋值运算符是 C++11 中引入的新特性,用于从一个临时对象创建一个新对象,以提高效率和减少内存使用。它们采用右值引用的语法,并将临时对象的资源移动到新对象中,而不是复制它们。

1.功能不同:拷贝构造函数用于从一个已存在的对象创建一个新的对象,即复制构造函数。它会复制原始对象的所有成员变量的值,从而创建一个新的、与原始对象相同的对象。移动构造函数用于从一个右值引用的临时对象创建一个新的对象。它会“窃取”原始对象的资源

2.形参不同:
在这里插入图片描述
3.调用时机不同:
在这里插入图片描述

4.适用范围不同:
在这里插入图片描述

6.set和vector的底层

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
unordered_xxx都是哈希表做底层

7.cpp多态的理念和底层实现

在这里插入图片描述

8.智能指针介绍

一句话带过:智能指针就是帮我们C++程序员管理动态分配的内存的,它会帮助我们自动释放new出来的内存,从而避免内存泄漏!

9.shared_ptr中计数器的实现

只要将 new 运算符返回的指针 p 交给一个 shared_ptr 对象“托管”,就不必担心在哪里写delete p语句——实际上根本不需要编写这条语句,托管 p 的 shared_ptr 对象在消亡时会自动执行delete p。而且,该 shared_ptr 对象能像指针 p —样使用,即假设托管 p 的 shared_ptr 对象叫作 ptr,那么 *ptr 就是 p 指向的对象

在这里插入图片描述

10.TCP的标识位字段有啥

在这里插入图片描述

更多推荐

linux进程间信号量通信IPC(sem)

一、信号量信号量是一种用于提供不同进程间或一个从给定进程的不同线程间同步手段的原语。1.1、Posix信号量的选择1)单个进程的各个线程共享,可以使用基于内存的信号量。2)彼此无亲缘关系的不同进程需使用信号量时,通常使用有名信号量。1.2、基于内存的信号量的持续性1)如果某个基于内存的信号量是由单个进程的各个线程共享的

【新书推荐】大模型赛道如何实现华丽的弯道超车 —— 《分布式统一大数据虚拟文件系统 Alluxio原理、技术与实践》

文章目录大模型赛道如何实现华丽的弯道超车——AI/ML训练赋能解决方案01具备对海量小文件的频繁数据访问的I/O效率02提高GPU利用率,降低成本并提高投资回报率03支持各种存储系统的原生接口04支持单云、混合云和多云部署01通过数据抽象化统一数据孤岛02通过分布式缓存实现数据本地性03优化整个工作流的数据共享直播预告

贵阳RapidSSL的ssl证书适合个人网站吗

现在很多开发者不论是为了记录还是宣传,很多人都会创建一个属于自己的网站,而有了自己的网站,为了保护网站信息安全以及防止网站数据被篡改与劫持,就需要为网站安装SSL证书。那么RapidSSL的SSL证书个人开发者可以使用吗?今天就随SSL盾小编了解RapidSSL旗下的SSL证书。1.RapidSSL是SSL证书颁发机构

JavaSE、JavaEE与Spring的概念和异同点剖析以及规范13 个分析

JavaSE、JavaEE与Spring的概念和异同点剖析以及规范13个分析目录概述需求:设计思路实现思路分析1.什么是JavaSE2.是JavaEE3.什么是Spring参考资料和推荐阅读Survivebydayanddevelopbynight.talkforimportbiz,showyourperfectcod

想要精通算法和SQL的成长之路 - 最长回文子串

想要精通算法和SQL的成长之路-最长回文子串前言一.最长回文子串1.1中心扩散法的运用前言想要精通算法和SQL的成长之路-系列导航一.最长回文子串原题链接1.1中心扩散法的运用这类具有回文性质的题目,我们如果用常规的从左往右或者从右往左的遍历方式,在编码上往往比较麻烦。那不妨,我们以字符串中的每一个字符为起点,同时向左

typedef function<int (int,int)> func_t;

这段代码是C++中用于创建函数类型别名(functiontypealias)的语法。让我们来逐步解释它:typedef:typedef是C++中的关键字,用于创建类型别名。它允许你为一个已存在的类型创建一个新的、易于使用的名称。function:这部分指定了要创建的类型别名的名称。在这里,我们将创建一个名为fun_t的

电脑如何查看代理服务器IP?

许多人在使用互联网时可能会遇到需要使用代理服务器的情况。但是,你知道如何在电脑上查看代理服务器IP吗?本文将为您分享简单易懂的方法,帮助您轻松了解代理设置的秘密!代理服务器在网络世界中担任着重要的角色,它可以充当中间人,转发用户和目标服务器之间的请求和响应。使用代理服务器可以带来许多好处。那么,要如何查看代理服务器IP

flutter开发实战-自定义长按TextField输入框剪切、复制、选择全部菜单AdaptiveTextSelectionToolba样式UI效果

flutter开发实战-自定义长按TextField输入框剪切、复制、选择全部菜单样式UI效果在开发过程中,需要长按TextField输入框cut、copy设置为中文“复制、粘贴”,我首先查看了TextField中的源码,看到了ToolbarOptions、AdaptiveTextSelectionToolbar,这时

java面试题-并发编程相关面试题

java面试题-并发编程相关面试题1线程的基础知识面试官:聊一下并行和并发有什么区别?候选人:是这样的~~现在都是多核CPU,在多核CPU下并发是同一时间应对多件事情的能力,多个线程轮流使用一个或多个CPU并行是同一时间动手做多件事情的能力,4核CPU同时执行4个线程面试官:说一下线程和进程的区别?候选人:嗯,好~进程

<Altium Designer> 将.DSN文件导入并转换成SchDoc文件

目录01使用向导方式导入.DSN02消除UniqueIdentifiersErrors03文章总结大家好,这里是程序员杰克。一名平平无奇的嵌入式软件工程师。本文主要是总结和分享将OrCADCapture画的原理图文件(.DSN)导入到AltiumDesigner,转换成对应的原理图文件(SchDoc)的方法。本文所使用

MySQL正则表达式:模式匹配、中文匹配、替换、提取字符串

在MySQL中,使用REGEXP或RLIKE操作符进行正则表达式匹配,而使用NOTREGEXP或NOTRLIKE操作符进行不匹配。一些常用的MySQL正则表达式语法:匹配字符:.:匹配任意字符(除了换行符)。[]:匹配方括号中的任意字符。[^]:匹配不在方括号中的任意字符。匹配重复:*:匹配零个或多个前面的字符。+:匹

热文推荐