C++大厂面试真题宝典 精选100道「Wan结」

166 阅读2分钟

C++大厂面试真题宝典 精选100道

核心代码,注释必读

// download:3w ukoou com

一 c++链表反转 在C++中,你可以使用指针来实现链表的反转。下面是一个简单的链表反转示例:

#include <iostream>

struct Node {
    int data;
    Node* next;
    Node(int val) : data(val), next(nullptr) {}
};

Node* reverseLinkedList(Node* head) {
    Node* prev = nullptr;
    Node* curr = head;
    Node* next = nullptr;

    while (curr != nullptr) {
        next = curr->next;
        curr->next = prev;
        prev = curr;
        curr = next;
    }

    return prev;
}

void printLinkedList(Node* head) {
    Node* temp = head;
    while (temp != nullptr) {
        std::cout << temp->data << " -> ";
        temp = temp->next;
    }
    std::cout << "nullptr" << std::endl;
}

int main() {
    Node* head = new Node(1);
    head->next = new Node(2);
    head->next->next = new Node(3);

    std::cout << "Original Linked List: ";
    printLinkedList(head);

    head = reverseLinkedList(head);

    std::cout << "Reversed Linked List: ";
    printLinkedList(head);

    return 0;
}

mallocnew 都是用于在 C++ 中进行内存分配的方法,它们有以下区别:

  1. malloc 是 C 语言中的函数,而 new 是 C++ 中的关键字。
  2. malloc 分配的是一块原始的内存空间,而 new 分配的是一个对象,并会调用相应类型的构造函数来初始化对象。
  3. 使用 malloc 分配的内存需要手动释放,而使用 new 分配的内存会在对象生命周期结束时自动释放。
  4. new 在分配失败时会抛出 std::bad_alloc 异常,而 malloc 则会返回 NULL

三 TCP 三次握手是建立 TCP 连接时的过程,具体步骤如下:

  1. 第一次握手:客户端发送一个带有 SYN(同步序列号)标志的数据包给服务器,并进入 SYN_SENT 状态。
  2. 第二次握手:服务器接收到 SYN 包后,会发送一个带有 SYN/ACK 标志的数据包作为响应,表示确认客户端的请求,同时自己也要求一个 TCP 连接,然后服务器进入 SYN_RECV 状态。
  3. 第三次握手:客户端接收到服务器的 SYN/ACK 包后,再向服务器发送一个带有 ACK 标志的数据包,表示对服务器的连接请求的确认。当服务器收到这个 ACK 包之后,就完成了三次握手,双方进入 ESTABLISHED 状态,可以开始通信。