1620 1

[作业] C++大厂面试真题宝典 精选100道 [推广有奖]

  • 0关注
  • 1粉丝

硕士生

74%

还不是VIP/贵宾

-

威望
0
论坛币
3 个
通用积分
20.8886
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
1536 点
帖子
99
精华
0
在线时间
73 小时
注册时间
2021-5-4
最后登录
2024-6-29

楼主
小才子爱读书 发表于 2024-3-8 14:37:04 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
给大家整理了一些关于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。

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:Everything Volatile bilibili Template Private

沙发
kaixin202212 发表于 2024-3-8 14:47:34
提示: 作者被禁止或删除 内容自动屏蔽

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
jg-xs1
拉您进交流群
GMT+8, 2025-12-31 21:38