神策数据正式批二面C++后端开发工程师
1.C++中的new和C中malloc有什么区别呢?
2.在底层malloc又是如何是实现new的呢,能详细说说吗?
3.C++中的new具体的底层创建过程是怎么样的呢?
4.介绍一下map?
5.map如何实现快速的插入同时保证线程安全呢,这是一个场景题,把你能够想到的都说出来?(这里花了很长时间,而且还是面试官给我解答的...)
6.介绍一下虚函数以及纯虚函数?
7.IO多路复用中的Epoll能说一说吗,最好能涉及底层?
手撕代码:
LC92 反转链表II,要求自己定义数据结构(又没调出来,好烦,数据结构与算法还是不够熟悉和扎实)
#include <iostream>
using namespace std;
struct Node {
int val;
Node* next;
Node() : val(0), next(NULL) {}
Node(int val_) : val(val_), next(NULL) {}
};
Node* ReverseListNode(Node* head, int m, int n) {
Node* dummy = new Node(-1);
dummy->next = head;
Node* l, *r, *a, *b;
a = head, b = head;
for (int i = 0; i < m - 1; ++i) a = a->next;
l = a->next;
for (int j = 0; j < n + 1; ++j) b = b->next;
r = b;
// 翻转 [l, r)
Node* tmp = l;
Node* cur = l;
l = l->next; // 之后的一个节点
while (cur->next != r) {
Node* c = l->next;
l->next = cur;
cur = l;
l = c;
}
cur->next = a;
tmp->next = r;
return dummy->next;
}
int main() {
Node* dummy = new Node(-1);
Node* head = dummy;
for (int i = 1; i <= 5; ++i) { // 尾插法
Node* t = new Node(i);
head->next = t;
head = t;
}
head->next = NULL;
head = dummy->next;
Node* p = ReverseListNode(head, 1, 3);
while (p) {
cout << p->val << ' ';
p = p->next;
}
cout << endl;
return 0;
}
/*
1->2->3->4->5
1->4->3->2->5
*/ 无反问,感觉这次表现不好,能把new和malloc讲清楚并能将代码调出来就好了,对于map得深入了解,这次算是学习了,后期还是得好好补补~~。

查看1道真题和解析