首页 > 神策数据正式批二面C++后端开发工程师
头像
Fool_one
发布于 2021-09-24 00:45
+ 关注

神策数据正式批二面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) 回帖
加载中...
话题 回帖

近期热帖

历年真题 真题热练榜 24小时
技术(软件)/信息技术类
查看全部

热门推荐