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通过分时复用的方式在不同线程间切换,使得多任务能够同时进行。
相关推荐
朝朝又沐沐5 小时前
算法竞赛阶段二-数据结构(36)数据结构双向链表模拟实现
开发语言·数据结构·c++·算法·链表
逝雪Yuki5 小时前
Leetcode——287. 寻找重复数
c++·leetcode·二分查找·双指针·环形链表
李永奉7 小时前
C语言-流程控制语句:for循环语句、while和do…while循环语句;
c语言·开发语言·c++·算法
打码农的篮球7 小时前
STL——list
开发语言·c++·list
C++ 老炮儿的技术栈8 小时前
在 Scintilla 中为 Squirrel 语言设置语法解析器的方法
linux·运维·c++·git·ubuntu·github·visual studio
@蓝莓果粒茶9 小时前
LeetCode第350题_两个数组的交集II
c++·python·学习·算法·leetcode·职场和发展·c#
Jackilina_Stone11 小时前
【faiss】用于高效相似性搜索和聚类的C++库 | 源码详解与编译安装
android·linux·c++·编译·faiss
喜欢吃燃面11 小时前
C++:list(1)list的使用
开发语言·c++·学习
神仙别闹12 小时前
基于QT(C++)实现(图形界面)选课管理系统
java·c++·qt
NicolasCage12 小时前
C语言指针Pointers
c++·后端