神策数据正式批二面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得深入了解,这次算是学习了,后期还是得好好补补~~。