C++大厂面试真题宝典 精选100道[完结7章]

双寿
• 阅读 105

参考资料1:https://pan.baidu.com/s/1FoFcRadpRsEPmnSysrEIlA 提取码: mqmu 参考资料2:https://share.weiyun.com/mzwzUqJU 密码:4r3u73

给大家整理了一些关于C++大厂面试2024最新真题,希望能够帮助到大家的面试: 1、synchronized 关键字和 volatile 关键字的区别 synchronized 关键字和 volatile 关键字是两个互补的存在,而不是对立的存在! volatile 关键字是线程同步的轻量级实现,所以volatile 性能肯定比synchronized关键字要好。但是volatile 关键字只能用于变量而 synchronized 关键字可以修饰方法以及代码块 volatile 关键字能保证数据的可见性,但不能保证数据的原子性。synchronized 关键字两者都能保证。 volatile关键字主要用于解决变量在多个线程之间的可见性,而 synchronized 关键字解决的是多个线程之间访问资源的同步性。

2、C语言中struct和union的区别 在存储多个成员信息时,编译器会自动给struct第一个成员分配存储空间,struct 可以存储多个成员信息,而union每个成员会用同一个存储空间,只能存储最后一个成员的信息。 都是由多个不同的数据类型成员组成,但在任何同一时刻,union只存放了一个被先选中的成员,而struct的所有成员都存在。 对于union的不同成员赋值,将会对其他成员重写,原来成员的值就不存在了,而对于struct 的不同成员赋值是互不影响的。

3、c++中struct和class的区别 struct 一般用于描述一个数据结构集合,而 class 是对一个对象数据的封装。 struct 中默认的访问控制权限是 public 的,而 class 中默认的访问控制权限是 private 的,例如: struct Base1 { int base1; // 默认访问控制权限是 public }; class Base2 { int base2; // 默认访问控制权限是 private }; 在继承关系中,struct 默认是公有继承,而 class 是私有继承。 class 关键字可以用于定义模板参数,就像 typename,而 struct 不能用于定义模板参数,例如: template<typename T, typename Y> // 可以把typename 换成 class
int Fun(const T& t, const Y& y) {
//todo everything }

3、C/C++内存有哪几种类型? C中,内存分为5个区:堆(malloc)、栈(如局部变量、函数参数)、程序代码区(存放二进制代码)、全局/静态存储区(全局变量、static变量)和常量存储区(常量)。此外,C++中有自由存储区(new)一说。 全局变量、static变量会初始化为缺省值,而堆和栈上的变量是随机的,不确定的。 作者:白菜9876 https://www.bilibili.com/read/cv13575247/ 出处:bilibili

4、堆和自由存储区的区别? 总的来说,堆是C语言和操作系统的术语,是操作系统维护的一块动态分配内存;自由存储是C++中通过new与delete动态分配和释放对象的抽象概念。他们并不是完全一样。 从技术上来说,堆(heap)是C语言和操作系统的术语。堆是操作系统所维护的一块特殊内存,它提供了动态分配的功能,当运行程序调用malloc()时就会从中分配,稍后调用free可把内存交还。而自由存储是C++中通过new和delete动态分配和释放对象的抽象概念,通过new来申请的内存区域可称为自由存储区。基本上,所有的C++编译器默认使用堆来实现自由存储,也即是缺省的全局运算符new和delete也许会按照malloc和free的方式来被实现,这时藉由new运算符分配的对象,说它在堆上也对,说它在自由存储区上也正确。

5、计算机内部如何存储负数和浮点数? 负数比较容易,就是通过一个标志位和补码来表示。 对于浮点类型的数据采用单精度类型(float)和双精度类型(double)来存储,float数据占用32bit,double数据占用64bit,我们在声明一个变量float f= 2.25f的时候,是如何分配内存的呢?如果胡乱分配,那世界岂不是乱套了么,其实不论是float还是double在存储方式上都是遵从IEEE的规范的,float遵从的是IEEE R32.24 ,而double 遵从的是R64.53。更多可以参考浮点数表示。 无论是单精度还是双精度在存储中都分为三个部分:

1). 符号位(Sign) : 0代表正,1代表为负 2). 指数位(Exponent):用于存储科学计数法中的指数数据,并且采用移位存储 3). 尾数部分(Mantissa):尾数部分

6、为什么拷贝构造函数必需是引用传递,不能是值传递? 为了防止递归调⽤。当⼀个对象需要以值⽅式进⾏传递时,编译器会生成代码调⽤它的拷贝构造函数生成⼀个副本,如果类A的拷贝构造函数的参数不是引⽤传递,⽽是采⽤值传递,那么就又需要为了创建传递给拷⻉构造函数的参数的临时对象,而又⼀次调⽤类A的拷贝构造函数,这就是⼀个无限递归。

7、析构函数⼀般写成虚函数的原因? 为了降低内存泄漏的可能性。例如,⼀个基类的指针指向⼀个派⽣类的对象,在使⽤完毕准备销毁时,如果基类的析构函数没有定义成虚函数,那么编译器根据指针类型就会认为当前对象的类型是基类,调⽤基类的析构函数(该对象的析构函数的函数地址早就被绑定为基类的析构函数),仅执⾏基类的析构,派⽣类的⾃身内容将⽆法被析构,造成内存泄漏;如果基类的析构函数定义成虚函数,那么编译器就可以根据实际对象,执⾏派⽣类的析构函数,再执⾏基类的析构函数,成功释放内存。

8、说说public、protected、private区别。 A 访问权限: public: 可以被该类中的函数、子类的函数、其友元函数访问,也可以由该类的对象访问 protected: 可以被该类中的函数、子类的函数、以及其友元函数访问,但不能被该类的对象访问 private: 只能由该类中的函数、其友元函数访问,不能以任何其他方法访问,该类的对象也不能访问 B 继承方式: public: 父类中的方法属性不发生改变; protected: 父类的public方法在子类中变为protected,其他方法不变; private: 父类的所有方法在子类中变为private。

9、const的作用 定义变量为只读变量,不可修改 修饰函数的参数和返回值(后者应用比较少,一般为值传递) 修饰函数的定义体,这里的函数为类的成员函数,被const修饰的成员函数代表不修改成员变量的值 const成员函数(只需要在成员函数参数列表后加上关键字const,如char get() const;)可以访问const成员变量和非const成员变量,但不能修改任何变量。在声明一个成员函数时,若该成员函数并不对数据成员进行修改操作,应尽可能将该成员函数声明为const成员函数。 const对象只能访问const成员函数,而非const对象可以访问任意的成员函数,包括const成员函数.即对于class A,有const A a;那么a只能访问A的const成员函数。而对于:A b;b可以访问任何成员函数。 使用const关键字修饰的变量,一定要对变量进行初始化

10、C++中有了malloc / free , 为什么还需要 new / delete malloc与free是C++/C语言的标准库函数,new/delete是C++的运算符。它们都可用于申请动态内存和释放内存。 对于非内部数据类型的对象而言,光用maloc/free无法满足动态对象的要求。对象在创建的同时要自动执行构造函数,对象在消亡之前要自动执行析构函数。 由于malloc/free是库函数而不是运算符,不在编译器控制权限之内,不能够把执行构造函数和析构函数的任务强加于malloc/free。 因此C++语言需要一个能完成动态内存分配和初始化工作的运算符new,以一个能完成清理与释放内存工作的运算符delete。注意new/delete不是库函数。

11、结构体和类的区别 C++结构体内部成员变量及成员函数默认的访问级别是public,而c++类的内部成员变量及成员函数的默认访问级别是private。 C++结构体的继承默认是public,而c++类的继承默认是private。 到底默认是public继承还是private继承,取决于子类而不是基类。 struct可以继承class,同样class也可以继承struct,那么默认的继承访问权限是看子类到底是用的struct还是class。如下: struct A{};class B : A{}; //private继承 struct C : B{}; //public继承 注意: struct能包含成员函数吗? 能!struct能继承吗? 能!!struct能实现多态吗? 能!!!

12、C++中vector和list的区别 vector和数组类似,拥有一段连续的内存空间。vector申请的是一段连续的内存,当插入新的元素内存不够时,通常以2倍重新申请更大的一块内存,将原来的元素拷贝过去,释放旧空间。因为内存空间是连续的,所以在进行插入和删除操作时,会造成内存块的拷贝,时间复杂度为o(n)。 list是由双向链表实现的,因此内存空间是不连续的。只能通过指针访问数据,所以list的随机存取非常没有效率,时间复杂度为o(n); 但由于链表的特点,能高效地进行插入和删除。 vector拥有一段连续的内存空间,能很好的支持随机存取,因此vector::iterator支持“+”,“+=”,“<”等操作符。 list的内存空间可以是不连续,它不支持随机访问,因此list::iterator则不支持“+”、“+=”、“<”等 vector::iterator和list::iterator都重载了“++”运算符。 总之,如果需要高效的随机存取,而不在乎插入和删除的效率,使用vector; 如果需要大量的插入和删除,而不关心随机存取,则应使用list。

点赞
收藏
评论区
推荐文章
荀勗 荀勗
5个月前
首个基于Transformer的分割检测+视觉大模型视频课程(附源码+课件)
参考资料地址1:https://pan.baidu.com/s/14g2VTg8JeeZ0pDey7xwGg提取码:2bmp参考资料地址2:https://share.weiyun.com/tnVNHGMD密码:3fj7iy众所周知,视觉系统对于理解和推理
荀勗 荀勗
5个月前
高性能多级网关与多级缓存架构落地实战(完结+附电子书)
参考资料地址1:https://pan.baidu.com/s/12w0TT26aywnoIcogPg8Uw提取码:uzf4参考资料地址2:https://share.weiyun.com/SNltUNLW密码:zi3dc7什么是网关?网关(Gateway
吉太 吉太
4个月前
[2023新版16章]SpringBoot+Vue3 项目实战,打造企业级在线办公系统
参考资料地址1:https://pan.baidu.com/s/1ZJGS0SA9pIUr76VUXioNSg提取码:95bd参考资料地址2:https://share.weiyun.com/jVSDdcBU密码:cruqf9SpringBootVue3
荀勗 荀勗
4个月前
Django+Vue:Python Web全栈开发(基于Django4.1)
参考资料1:https://pan.baidu.com/s/1V06RwdZtg16ugAV0qORBGw提取码:g8um参考资料2:https://share.weiyun.com/j5Xtgnuu密码:brp7w6Django是一个由Python编写的
赵嬷嬷 赵嬷嬷
4个月前
[完结10章]Vue3+Pinia+Vite+TS 还原高性能外卖APP项目
参考资料地址1:https://pan.baidu.com/s/1u0uNBMkOA2NRk3N6myb4Zg提取码:tnlt参考资料地址2:https://share.weiyun.com/Wjw3QpeQ密码:gxrfcwVue3带来的改变,除了其自身
双寿 双寿
2个月前
Prometheus入门与进阶实践教程2024
参考资料1:https://pan.baidu.com/s/1FLteIxtDx3hEiokPn2A0vw提取码:v1nn参考资料2:https://share.weiyun.com/7hok43wM密码:qkrm48一、Prometheus的概念和发展史
双寿 双寿
2个月前
实战Flink+Doris实时数仓教程
参考资料1:https://pan.baidu.com/s/1KoaLsoYaB4JMFAI0aDyXg提取码:pr5c参考资料2:https://share.weiyun.com/OL2DSs1X密码:srevyt一、什么是实时数仓实时数据仓库(Real
笑面虎 笑面虎
2个月前
C++大厂面试真题宝典 精选100道
C大厂面试真题宝典精选100道好课大家一起分享——C大厂面试真题宝典精选100道,附课程源码下载。C和C的区别C是面向过程的语言,而C是面向对象的语言。C和C动态管理内存的方法不一样,C是使用malloc/free函数,而C除此之外
鲍二家的 鲍二家的
2个月前
[完结7章]C++大厂面试真题宝典 精选100道
学习地址1:https://pan.baidu.com/s/1I0qkwahl1lTPYhYAB8I4gw提取码:8rqi学习地址2:https://share.weiyun.com/mzwzUqJU密码:4r3u73C大厂面试汇总,希望对大家的面试有
双寿 双寿
1个月前
慕课甄选-2024年Flutter零基础极速入门到进阶实战【完结17章】
参考资料1:https://pan.baidu.com/s/1pD7WhaO5FbbGsu0t3sAw提取码:wv6m参考资料2:https://share.weiyun.com/mDuF95rR密码:c7r3ec一、Flutter基础概念Flutter框