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;
}
二 malloc 和 new 都是用于在 C++ 中进行内存分配的方法,它们有以下区别:
malloc是 C 语言中的函数,而new是 C++ 中的关键字。malloc分配的是一块原始的内存空间,而new分配的是一个对象,并会调用相应类型的构造函数来初始化对象。- 使用
malloc分配的内存需要手动释放,而使用new分配的内存会在对象生命周期结束时自动释放。 new在分配失败时会抛出std::bad_alloc异常,而malloc则会返回NULL。
三 TCP 三次握手是建立 TCP 连接时的过程,具体步骤如下:
- 第一次握手:客户端发送一个带有 SYN(同步序列号)标志的数据包给服务器,并进入
SYN_SENT状态。 - 第二次握手:服务器接收到 SYN 包后,会发送一个带有 SYN/ACK 标志的数据包作为响应,表示确认客户端的请求,同时自己也要求一个 TCP 连接,然后服务器进入
SYN_RECV状态。 - 第三次握手:客户端接收到服务器的 SYN/ACK 包后,再向服务器发送一个带有 ACK 标志的数据包,表示对服务器的连接请求的确认。当服务器收到这个 ACK 包之后,就完成了三次握手,双方进入
ESTABLISHED状态,可以开始通信。