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


#神策数据校招后端面经##面经##神策数据#
全部评论
感觉是同一个面试官…
点赞 回复
分享
发布于 2021-09-24 14:40

相关推荐

点赞 9 评论
分享
牛客网
牛客企业服务