C++面试汇总

本文涵盖了C++面试中常见的知识点,包括RAII原理、设计模式(如单例和工厂模式)、HTTP请求的区别、TCP与UDP特性、C++中结构体与类的区别、进程与线程的不同、动态库与静态库的解析、CPU架构、C++标准模板库STL的使用、内存管理(如new与malloc的区别、深拷贝与浅拷贝)、智能指针、多态实现、内存模型(堆与栈的区别)、线程安全和并发处理(如Qt的信号槽机制)等。文章旨在帮助读者准备C++相关的面试,全面了解和掌握C++的基础及进阶知识。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

文章目录

是否了解RAII (Resource Acquisition is Initialization) ?请阐述。

是把资源和对象的生命周期绑定,对象创建获取资源,对象销毁释放资源

设计模式有哪些?特别是单例子模式,工厂模式

· 单例模式:这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。

这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。

注意:

1、单例类只能有一个实例。
2、单例类必须自己创建自己的唯一实例。
3、单例类必须给所有其他对象提供这一实例。
如日志系统,资源管理器,线程池,内存池等

· 工厂模式:对创建对象的封装,符合开闭原则。工厂模式在许多项目中大量使用,因为它将对象的构造过程封装,使创建对象的接口统一且简洁,另一方面符合开闭原则,易于扩展。开源项目NVDLA的compiler中各类node的建立,LLVM中的pass,都有工厂模式的用例。

· 适配器模式:STL中的容器适配器stack和queue,是对象适配器的绝佳用例。项目开发中也常常使用。

· 观察者模式:频繁使用,观察者模式建立了一种一对多的联动,一个对象改变时将自动通知其他对象,其他对象将作出反应。消息更新、广播机制、消息传递、链式触发(高级啊)……比如Qt的信号槽机制

· 职责链模式:将一个请求的发送者和接收者解耦,让多个对象都有机会处理请求。将接收请求的对象连接成一条链,并且沿着这条链传递请求,直到有一个对象能够处理它为止。采用职责链模式不仅可以方便扩展(当增加一个接受者时,只需要在链上的适当位置插入对应的处理方法即可),而且可以替换掉代码中可能存在的switch-case或者if-else。在工具的设计、具有层级关系或权限关系的任务处理场景中可以应用职责链模式。

· 策略模式:常常与工厂模式搭配,封装不同的算法(策略),再结合C++多态机制,策略模式在实际开发过程中应用十分广泛。
代理模式:C++智能指针、引用计数等

http get 和post请求区别

GET在浏览器回退时是无害的,而POST会再次提交请求。
GET产生的URL地址可以被Bookmark,而POST不可以。
GET请求会被浏览器主动cache,而POST不会,除非手动设置。
GET请求只能进行url编码,而POST支持多种编码方式。
GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留。
GET请求在URL中传送的参数是有长度限制的,而POST么有。
对参数的数据类型,GET只接受ASCII字符,而POST没有限制。
GET比POST更不安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息。
GET参数通过URL传递,POST放在Request body中。

GET和POST本质上就是TCP链接,并无差别。但是由于HTTP的规定和浏览器/服务器的限制,导致他们在应用过程中体现出一些不同。
对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据);

而对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)。

tcp udp

1.基于连接与无连接;
2.对系统资源的要求(TCP较多,UDP少);
3.UDP程序结构较简单;
4.流模式与数据报模式 ;
5.TCP保证数据正确性,UDP可能丢包,TCP保证数据顺序,UDP不保证。
tcp协议和udp协议的差别

TCP UDP
面向连接 面向非连接
传输可靠 传输不可靠
传输少量数据 传输大量数据
速度慢 速度快
保证数据正确性 可能丢包
保证数据顺序 不保证

c++结构体和类的区别和联系

最主要的不同点就是结构体的访问权限为public而且不能改变,而类的访问权限可以改变,public的类和结构体基本一样。

继承上同样表现出这样的特点,struct是public继承的,而class是private继承的,继承的子类的访问权限取决于子类。
其他的struct和class一样可以包含成员函数,可以继承,可以实现多态。

区别起见,我们将结构体中的变量叫做数据,函数叫做函数,类中的变量叫做成员,函数叫做方法。
表现出来的话,结构体更多表现出一种面向过程的数据结构的特点,而类更多表现出面向对象变成的特点,即更侧重对成员的访问权限的控制。

进程 和线程区别

进程:是并发执行的程序在执行过程中分配和管理资源的基本单位,是一个动态概念,竞争计算机系统资源的基本单位。

线程:是进程的一个执行单元,是进程内科调度实体。比进程更小的独立运行的基本单位。线程也被称为轻量级进程。

一个程序至少一个进程,一个进程至少一个线程。

线程执行开销小,但是不利于资源的管理和保护。线程适合在SMP机器(双CPU系统)上运行。
进程执行开销大,但是能够很好的进行资源管理和保护。进程可以跨机器前移。

地址空间:同一进程的线程共享本进程的地址空间,而进程之间则是独立的地址空间。
资源拥有:同一进程内的线程共享本进程的资源如内存、I/O、cpu等,但是进程之间的资源是独立的。
     一个进程崩溃后,在保护模式下不会对其他进程产生影响,但是一个线程崩溃整个进程都死掉。所以多进程要比多线程健壮。

进程切换时,消耗的资源大,效率高。所以涉及到频繁的切换时,使用线程要好于进程。同样如果要求同时进行并且又要共享某些变量的并发操作,只能用线程不能用进程

执行过程:每个独立的进程程有一个程序运行的入口、顺序执行序列和程序入口。但是线程不能独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。
线程是处理器调度的基本单位,但是进程不是。
两者均可并发执行。

dll动态库和lib静态库,

dll动态库和lib静态库详解
静态库的特点:
1、使

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值