3-18 小红书C++一面
交叉面
面试官真的对我好炸了,面试官全程在跟我说没事没事,我全程在感谢面试官hhh
感觉真的像是那种长辈对晚辈的指点。 虽然我没表现好,但体验真的太好了,我一回答不上来他就帮我说了,还让我不要紧张没事,没关系啥的
80min
讲讲b树和B+树吧
数据库为什么以它作为索引,有什么好处吗,为什么B+树比b树更适合所以
说一下mysql的聚合索引和非聚合索引? 我说不会
说一下哈希表底层吧
说一下c++的智能指针, 如果让你实现一个智能指针你要实现哪些东西,我只知道构造函数。。。我说还需要支持原子操作啥的吗
然后面试官给我补充需要一个指向引用计数的指针,拷贝构造函数,初始化构造啥的...
说一下互斥锁和自选锁吧,然后他们各有什么优缺点,使用于什么场景 面试官帮我答了因为互斥锁会导致线程从睡眠到就绪态,会有上下文切换耗费时间,所以用自选锁就没这个问题
了解用户态和内核态吗
如果让你实现一个线程池,你会用哪些实现, 我随便说了说 面试官说你不怎么了解java ,这个不知道也很正常
说一下TCP的三次握手四次挥手,为什么三次和四次,针对三次握手的CD啥攻击,我说我只了解syn攻击,然后我说的也不太对。。。 我还背错了个东西
C++的. rall. 压根没听说过 不会
C++的lock_groud 压根没听说过 不会
然后面试官说你更多的是移动端的经验,我也不太知道问什么了~
那我们写个题吧
连标排序,反正我归并是写叉撇了,整死循环了,面试官简单训了我一下。。。 他说你平时刷LeetCode应该肯定刷到过啊(可我真没写过这种连标题呀),对你来说应该非常简单的题,我一直在嗯嗯
我说能自己写个堆吗,面试官说最好还是全用连标。 然后就写死循环了
#include <iostream> using namespace std; // To execute C++, please define "int main()" // The TestCase is shown below // Input : 1 2 // Output : 3 struct ListNode { int val; ListNode *next; ListNode() : val(0), next(nullptr) {} ListNode(int x) : val(x), next(nullptr) {} ListNode(int x, ListNode *next) : val(x), next(next) {} }; ListNode* merge(ListNode *head, ListNode *leftNode, ListNode *rightNode, ListNode *midNode){ ListNode *newHead = new ListNode(-1); ListNode *realHead = newHead; ListNode *p = midNode->next; while(leftNode != midNode && p != rightNode){ if(leftNode->val <= p->val){ newHead->next = leftNode; leftNode = leftNode->next; } else { newHead->next = p; p = p->next; } } while(leftNode != midNode){ newHead->next = leftNode; leftNode = leftNode->next; } while(p != rightNode){ newHead->next = p; p = p->next; } return realHead->next; } ListNode* mergeSort(ListNode *head, ListNode *leftNode, ListNode *rightNode){ ListNode *newHead = head; if(leftNode == rightNode) return leftNode; ListNode *midNode = head; ListNode *right; while(newHead){ midNode = midNode->next; newHead = newHead->next; if(newHead->next == nullptr){ right = newHead; } if(newHead) newHead = newHead->next; if(newHead->next == nullptr){ right = newHead; } } mergeSort(head, leftNode, right); mergeSort(head, midNode->next, rightNode); return merge(head, leftNode, midNode, rightNode); } int main() { printf("dqwwqddwq"); ListNode *p[10]; for(int i = 0; i < 10; i++){ p[i] = new ListNode(rand()%18); } for(int i = 0; i < 9; i++){ p[i]->next = p[i + 1]; } printf("dqwwqddwq"); ListNode *head = mergeSort(p[0], p[0], p[9]); while(head){ printf("%d---", head->val); head = head->next; } return 0; }
反问 我直接来了一句 为今天的表现向您说一句抱歉,他还说你还是比较优秀的,他一直在帮我找借口
面试官然后说了很多让我去了解底层的一下话,太感动了,还说他看到我有点感同身受的样子,他还说他以前也打过ACM,成绩应该是比我好,我差点就叫爹了
后面给我过的话我一定好好准备 这简直就是亲爹啊!