c++八股3

  1. 多态:在C++中,如果类B继承自A,并且定义了虚函数f(), 类C又继承自B但没有重写f(),那么当你执行如下代码:

    Cpp
    C *c = new C();
    c->f();

调用的将是B类中实现的f()方法,因为C没有提供自己的覆盖版本。若要调用A类(基类)的方法,可以使用显式调用父类的成员函数语法,例如在C类中:

复制代码
Cpp
class C : public B {
public:
    void f() override {
        B::f(); // 显式调用B类中的f()方法
        // 或者执行C类自己的逻辑
    }
};
  1. 二叉树、平衡二叉树(如AVL树或红黑树)、B+树和红黑树访问一个元素的时间复杂度分析:
    ● 二叉树:最坏情况下(即树退化为链表时),时间复杂度为O(n)。
    ● 平衡二叉树:如AVL树或红黑树,其高度保持在logN级别,所以访问一个元素的时间复杂度为O(logN)。
    ● B+树:在数据库索引等场景常见,通常用于磁盘存储,内部节点不存储数据,所有叶子节点在同一层,因此查找任意键值的时间复杂度也是O(logN)。
    ● 红黑树:一种自平衡二叉查找树,同样保证了查找、插入、删除操作的时间复杂度为O(logN)。
  2. 堆和栈的区别:
    ○ 栈(Stack):由编译器自动分配和释放;空间较小但快速,常用于存储局部变量、函数参数和返回地址等。栈内存分配是连续的、后进先出(LIFO)原则。
    ○ 堆(Heap):由程序员手动申请和释放(通过new和delete关键字);空间较大但分配和回收相对慢,用于动态创建对象和数组等,大小可变。
  3. 注意:在C++中,new关键字是在堆上实例化对象的,而不是栈上。栈上的对象通常是直接声明和初始化的,生命周期与所在作用域相关联。
  4. 四次挥手:这是TCP连接断开的过程,包括FIN(结束)、ACK(确认)、FIN+ACK、ACK四个阶段,确保双方都已知晓连接关闭并释放资源。半连接:通常指的是TCP的"半开连接",即三次握手过程中服务器收到SYN报文并发送了SYN+ACK回应,但客户端没有回复ACK,此时服务器端会维持一个半连接状态。TCP与UDP区别:
    ○ TCP提供面向连接、可靠传输的服务,有流量控制、拥塞控制和错误校验机制,无消息长度限制,但存在一定的延迟和额外开销。
    ○ UDP则是无连接的,不保证消息的顺序和可靠性,但是传输效率高,适用于实时应用如音视频流传输。UDP的数据包有一个最大长度限制,由MTU(最大传输单元)决定,通常在IP层会有大约65535字节的限制,但实际上由于头部开销,有效负载会更小。
  5. 进程和线程的区别:
    ○ 进程是操作系统资源分配的基本单位,每个进程拥有独立的内存空间、文件描述符集和其他系统资源,互不影响;
    ○ 线程是CPU调度和执行的基本单位,同一进程内的多个线程共享进程的内存空间和全局变量,切换代价小,通信便捷。
  6. 程序从硬盘到CPU执行过程:
    ○ 首先,操作系统加载器将硬盘上的可执行文件读入内存,这个过程包括读取程序的代码段、数据段以及必要的资源;
    ○ 操作系统为该程序创建一个新的进程,并为其分配相应的内存空间;
    ○ 控制权转移到新进程,CPU开始执行程序的第一条指令;
    ○ 程序运行过程中,根据需要创建线程,线程在进程中并发执行,共享进程资源;
    ○ CPU通过分时复用的方式在不同线程间切换,使得多任务能够同时进行。
相关推荐
Peter·Pan爱编程4 分钟前
10. new_delete 不是 malloc_free 的包装
c++·人工智能·算法
故事和你912 小时前
洛谷-【动态规划1】动态规划的引入2
开发语言·数据结构·c++·算法·动态规划·图论
fpcc2 小时前
c++编程实践——历史记录的管理
c++
玖笙&3 小时前
✨WPF编程基础【3.3】:容器控件(附源码)
c++·wpf·visual studio
汉克老师3 小时前
GESP5级C++考试语法知识(十七、二分算法提高篇(二))
c++·算法·二分算法·gesp5级·gesp五级·二分算法易错点
我材不敲代码4 小时前
Python 正则表达式进阶实战:从文本清洗到复杂信息提取
c++·python·正则表达式
我命由我123454 小时前
Android Framework P3 - MediaServer 进程、认识 ServiceManager 进程
android·c语言·开发语言·c++·visualstudio·visual studio·android runtime
计算机安禾4 小时前
【c++面向对象编程】第48篇:Lambda表达式与std::function:OOP中的函数式编程
java·c++·算法
chxin140164 小时前
CMake 笔记
c++
C+-C资深大佬6 小时前
在C++中,const和#define有什么区别?
开发语言·c++